当前位置:编程学习 > php >>

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

五. 示例ServiceLogger进程

  下面是一个示例ServiceLogger进程。当一个服务停用时,它负责把一个电子邮件发送给一个待命人员:

class EmailMe_ServiceLogger implements ServiceLogger {
 public function log_service_event(ServiceCheck$service)
 {
  if($service->current_status ==ServiceCheck::FAILURE) {
   $message = "Problem with{$service->description()}rn";
   mail('oncall@example.com', 'Service Event',$message);
   if($service->consecutive_failures() > 5) {
    mail('oncall_backup@example.com', 'Service Event', $message);
   }
  }
 }
 public function log_current_status(ServiceCheck$service){
  return;
 }
}

  假如连续失败五次,那么该进程还把一个消息发送到一个备份地址。注重,它并没有实现一个有意义的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>

补充:Php教程,Php常用代码
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,