技术开发 频道

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

    如果连续失败五次,那么该进程还把一个消息发送到一个备份地址。注意,它并没有实现一个有意义的log_current_status()方法。

 无论何时象如下这样改变一个服务的状态,你都应该实现一个写向PHP错误日志的ServiceLogger进程:
class ErrorLog_ServiceLogger implements ServiceLogger {  public function log_service_event(ServiceCheck$service)  {   if($service->current_status() !==$service->previous_status()) {    if($service->current_status() ===ServiceCheck::FAILURE) {     $status = 'DOWN';    }    else {     $status = 'UP';    }    error_log("{$service->description()} changed status to $status");   }  }  public function log_current_status(ServiceCheck$service)  {   error_log("{$service->description()}: $status");  } }
该log_current_status()方法意味着,如果进程发送一个SIGUSR1信号,它将把其完整的当前状态复制到你的PHP错误日志中。
  
  该引擎使用如下的一个配置文件:
<config>  <loggers>   <logger>    <id>errorlog</id>    <class>ErrorLog_ServiceLogger</class>   </logger>   <logger>    <id>emailme</id>    <class>EmailMe_ServiceLogger</class>   </logger>  </loggers>  <services>   <service>    <class>HTTP_ServiceCheck</class>    <params>     <description>OmniTI HTTP Check</description>     <url>http://www.omniti.com</url>     <timeout>30/timeout>     <frequency>900/frequency>    </params>    <loggers>     <logger>errorlog</logger>     <logger>emailme</logger>    </loggers>   </service>  <service>  <class>HTTP_ServiceCheck</class>  <params>   <description>Home Page HTTP Check</description>   <url>http://www.schlossnagle.org/~george</url>   <timeout>30/timeout>   <frequency>3600/frequency>  </params>  <loggers>   <logger>errorlog</logger>  </loggers> </service> </services> </config>
当传递这个XML文件时,ServiceCheckRunner的构造器对于每一个指定的日志实例化一个日志记录程序。然后,它相应于每一个指定的服务实例化一个ServiceCheck对象。
0
相关文章