技术开发 频道

用PHP构建一个简易监视引擎

上面的__call()重载方法提供对一个ServiceCheck对象的参数的只读存取操作:

  · timeout-在引擎终止检查之前,这一检查能够挂起多长时间。

  · next_attempt-下次尝试连接到服务器的时间。

  · current_status-服务的当前状态:SUCCESS或FAILURE。

  · previous_status-当前状态之前的状态。

  · frequency-每隔多长时间检查一次服务。

  · description-服务描述。

  · consecutive_failures-自从上次成功以来,服务检查连续失败的次数。

  · status_time-服务被检查的最后时间。

  · failure_time-如果状态为FAILED,则它代表发生失败的时间。

 这个类还实现了观察者模式,允许ServiceLogger类型的对象注册自身,然后当调用log_current_status()或log_service_event()时调用它。

 这里实现的关键函数是run(),它负责定义应该怎样执行检查。如果检查成功,它应该返回SUCCESS;否则返回FAILURE。

 当定义在run()中的服务检查返回后,post_run()方法被调用。它负责设置对象的状态并实现记入日志。

 ServiceLogger接口:指定一个日志类仅需要实现两个方法:log_service_event()和log_current_status(),它们分别在当一个run()检查返回时和当实现一个普通状态请求时被调用。

 该接口如下所示:
interface ServiceLogger {  public function log_service_event(ServiceCheck$service);  public function log_current_status(ServiceCheck$service); }
    最后,你需要编写引擎本身。该想法类似于在前一节编写简单程序时使用的思想:服务器应该创建一个新的进程来处理每一次检查并使用一个SIGCHLD处理器来检测当检查完成时的返回值。可以同时检查的最大数目应该是可配置的,从而可以防止对系统资源的过渡使用。所有的服务和日志都将在一个XML文件中定义。
0
相关文章