Created
November 9, 2010 17:26
-
-
Save tstachl/669433 to your computer and use it in GitHub Desktop.
Stachl_Ping is a class to ping hosts and get min, avg, max and standard deviation of rountrips
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Stachl | |
* | |
* LICENSE | |
* | |
* This source file is subject to the CC-GNU GPL license that is bundled | |
* with this package in the file LICENSE.txt. | |
* It is also available through the world-wide-web at this URL: | |
* http://creativecommons.org/licenses/GPL/2.0/ | |
* If you did not receive a copy of the license and are unable to | |
* obtain it through the world-wide-web, please send an email | |
* to [email protected] so we can send you a copy immediately. | |
* | |
* @category Stachl | |
* @package Stachl_Ping | |
* @copyright Copyright (c) 2010 Stachl.me (http://www.stachl.me) | |
* @license http://creativecommons.org/licenses/GPL/2.0/ CC-GNU GPL License | |
*/ | |
/** | |
* @see Zend_Validate_Hostname | |
*/ | |
require_once 'Zend/Validate/Hostname.php'; | |
/** | |
* @category Stachl | |
* @package Stachl | |
* @author Thomas Stachl <[email protected]> | |
* @copyright Copyright (c) 2010 Stachl.me (http://www.stachl.me) | |
* @license http://creativecommons.org/licenses/GPL/2.0/ CC-GNU GPL License | |
*/ | |
class Stachl_Ping | |
{ | |
/** | |
* $_host - Host value | |
* | |
* @var string | |
*/ | |
protected $_host; | |
/** | |
* $_packets - Packets value | |
* | |
* @var int | |
*/ | |
protected $_packets; | |
/** | |
* $_min - Min value | |
* | |
* @var float | |
*/ | |
protected $_min; | |
/** | |
* $_avg - Avg value | |
* | |
* @var float | |
*/ | |
protected $_avg; | |
/** | |
* $_max - Max value | |
* | |
* @var float | |
*/ | |
protected $_max; | |
/** | |
* $_mdev - Mdev value | |
* | |
* @var float | |
*/ | |
protected $_mdev; | |
/** | |
* $_result - holds the results of the ping | |
* | |
* @var string | |
*/ | |
protected $_result; | |
/** | |
* __construct() - Sets the configuration options | |
* | |
* @param string $host hostname or IP address to ping | |
* @param integer $packets to be sent to the host, default is 5 | |
* @return void | |
*/ | |
public function __construct($host, $packets = 5) | |
{ | |
$hostnameValidator = new Zend_Validate_Hostname(); | |
if (!$hostnameValidator->isValid($host)) { | |
/** | |
* @see Stachl_Exception | |
*/ | |
require_once 'Stachl/Exception.php'; | |
throw new Stachl_Exception("'$host' is no valid hostname"); | |
} else { | |
$this->_host = $host; | |
} | |
$this->_packets = $packets; | |
} | |
/** | |
* Returns the shortest roundtrip time | |
* | |
* @return float | |
*/ | |
public function getMin() | |
{ | |
return $this->_min; | |
} | |
/** | |
* Returns the average roundtrip time | |
* | |
* @return float | |
*/ | |
public function getAvg() | |
{ | |
return $this->_avg; | |
} | |
/** | |
* Returns the maximum roundtrip time | |
* | |
* @return float | |
*/ | |
public function getMax() | |
{ | |
return $this->_max; | |
} | |
/** | |
* Returns the standard deviation of the round-trip time | |
* | |
* @return float | |
*/ | |
public function getMdev() | |
{ | |
return $this->_mdev; | |
} | |
/** | |
* ping() - trys to ping the host | |
* | |
* @return boolean | |
*/ | |
public function ping() | |
{ | |
if ($this->_ping()) { | |
$this->_parseResult(); | |
return $this; | |
} | |
return false; | |
} | |
/** | |
* _ping() - does the actual pinging and saves the results, returns false if the network is unreachable or the result is empty | |
* | |
* @return boolean | |
*/ | |
protected function _ping() | |
{ | |
$this->_result = exec('ping -c' . $this->_packets . ' ' . $this->_host); | |
if (empty($this->_result) || ($this->_result == 'connect: Network is unreachable')) { | |
return false; | |
} | |
return true; | |
} | |
/** | |
* _parseResult - parses the result and sets the properties | |
* | |
* @return void | |
*/ | |
protected function _parseResult() | |
{ | |
preg_match('/=[[:space:]](.*)\/(.*)\/(.*)\/(.*)[[:space:]]/i', $this->_result, $matches); | |
$this->_min = (float)$matches[1]; | |
$this->_avg = (float)$matches[2]; | |
$this->_max = (float)$matches[3]; | |
$this->_mdev = (float)$matches[4]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment