快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
程将被创建。在这个新的子进程内,发出一个警告以防止测试持续时间超出它的时限,然后执行由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;
 }
}

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号