技术开发 频道

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

    这是一个很复杂的类。其构造器读取并分析一个XML文件,创建所有的将被监视的服务,并创建记录它们的日志程序。

    oop()方法是该类中的主要方法。它设置请求的信号处理器并检查是否能够创建一个新的子进程。现在,如果下一个事件(以next_attempt时间CHUO排序)运行良好,那么一个新的进程将被创建。在这个新的子进程内,发出一个警告以防止测试持续时间超出它的时限,然后执行由run()定义的测试。

 还存在两个信号处理器:SIGCHLD处理器sig_child(),负责收集已终止的子进程并执行它们的服务的 post_run()方法;SIGUSR1处理器sig_usr1(),简单地调用所有已注册的日志程序的log_current_status()方法,这可以用于得到整个系统的当前状态。

    当然,这个监视架构并不没有做任何实际的事情。但是首先,你需要检查一个服务。下列这个类检查是否你从一个HTTP服务器取回一个"200 Server OK"响应

class HTTP_ServiceCheck extends ServiceCheck{  public $url;  public function _ _construct($params){   foreach($params as $k => $v) {    $k = "$k";    $this->$k = "$v";   }  }  public function run(){   if(is_resource(@fopen($this->url, "r"))) {    return ServiceCheck::SUCCESS;   }   else {    return ServiceCheck::FAILURE;   }  } }
与你以前构建的框架相比,这个服务极其简单,在此恕不多描述。

五. 示例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()}\r\n";    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;  } }
0
相关文章