PHP構建監視服務的方法

PHP監視服務記錄程序應該能夠支持任意的服務檢查(例如,HTTP和FTP服務)並且能夠以任意方式(通過電子郵件,輸出到一個日誌文件,等等)記錄事件。你當然想讓它以一個守護程序方式運行;所以,你應該請求它輸出其完整的當前狀態。以下是小編爲大家搜索整理的PHP構建監視服務的方法,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

PHP構建監視服務的方法

一個服務需要實現下列抽象類:

abstract class ServiceCheck {

const FAILURE = 0;

const SUCCESS = 1;

protected $timeout = 30;

protected $next_attempt;

protected $current_status = ServiceCheck::SUCCESS;

protected $previous_status = ServiceCheck::SUCCESS;

protected $frequency = 30;

protected $description;

protected $consecutive_failures = 0;

protected $status_time;

protected $failure_time;

protected $loggers = array();

abstract public function __construct($params);

public function __call($name, $args)

{

if(isset($this->$name)) {

return $this->$name;

}

}

public function set_next_attempt()

{

$this->next_attempt = time() + $this->frequency;

}

public abstract function run();

public function post_run($status)

{

if($status !== $this->current_status) {

$this->previous_status = $this->current_status;

}

if($status === self::FAILURE) {

if( $this->current_status === self::FAILURE ) {

$this->consecutive_failures++;

}

else {

$this->failure_time = time();

}

}

else {

$this->consecutive_failures = 0;

}

$this->status_time = time();

$this->current_status = $status;

$this->log_service_event();

}

public function log_current_status()

{

foreach($this->loggers as $logger) {

$logger->log_current_status($this);

}

}

private function log_service_event()

{

foreach($this->loggers as $logger) {

$logger->log_service_event($this);

}

}

public function register_logger(ServiceLogger $logger)

{

$this->loggers[] = $logger;

}

}

上面的__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。