commit
5836e27659
|
@ -125,6 +125,7 @@ $sm_lang = array(
|
|||
'type' => 'Typ',
|
||||
'type_website' => 'Webseite',
|
||||
'type_service' => 'Service',
|
||||
'type_ping' => 'Ping',
|
||||
'pattern' => 'Suchstring/-muster',
|
||||
'pattern_description' => 'Wenn das gesuchte Muster nicht in der Webseite ist, wird die Seite als offline markiert. Reguläre Ausdrücke sind erlaubt.',
|
||||
'last_check' => 'Letzter Check',
|
||||
|
|
|
@ -286,6 +286,8 @@ class ServerController extends AbstractServerController {
|
|||
$clean["port"] = 443;
|
||||
} elseif ($tmp["scheme"] === "http") {
|
||||
$clean["port"] = 80;
|
||||
} elseif ($tmp["scheme"] === "rdp") {
|
||||
$clean["port"] = 3389;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -458,6 +460,7 @@ class ServerController extends AbstractServerController {
|
|||
'label_type' => psm_get_lang('servers', 'type'),
|
||||
'label_website' => psm_get_lang('servers', 'type_website'),
|
||||
'label_service' => psm_get_lang('servers', 'type_service'),
|
||||
'label_ping' => psm_get_lang('servers', 'type_ping'),
|
||||
'label_pattern' => psm_get_lang('servers', 'pattern'),
|
||||
'label_pattern_description' => psm_get_lang('servers', 'pattern_description'),
|
||||
'label_last_check' => psm_get_lang('servers', 'last_check'),
|
||||
|
|
|
@ -101,6 +101,11 @@ class ServerValidator {
|
|||
throw new \InvalidArgumentException('server_ip_bad_service');
|
||||
}
|
||||
break;
|
||||
case 'ping':
|
||||
if(!filter_var($value, FILTER_VALIDATE_IP)) {
|
||||
throw new \InvalidArgumentException('server_ip_bad_service');
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -113,7 +118,7 @@ class ServerValidator {
|
|||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function type($type) {
|
||||
if(!in_array($type, array('service', 'website'))) {
|
||||
if(!in_array($type, array('ping', 'service', 'website'))) {
|
||||
throw new \InvalidArgumentException('server_type_invalid');
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -90,6 +90,9 @@ class StatusUpdater {
|
|||
}
|
||||
|
||||
switch($this->server['type']) {
|
||||
case 'ping':
|
||||
$this->status_new = $this->updatePing($max_runs);
|
||||
break;
|
||||
case 'service':
|
||||
$this->status_new = $this->updateService($max_runs);
|
||||
break;
|
||||
|
@ -134,6 +137,41 @@ class StatusUpdater {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the current servers ping status - Code from http://stackoverflow.com/a/20467492
|
||||
* @param int $max_runs
|
||||
* @param int $run
|
||||
* @return boolean
|
||||
*/
|
||||
protected function updatePing($max_runs, $run = 1) {
|
||||
$errno = 0;
|
||||
// save response time
|
||||
$starttime = microtime(true);
|
||||
// set ping payload
|
||||
$package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
|
||||
|
||||
$fp = @fsockopen ($this->server['ip'], $this->server['port'], $errno, $this->error, 10);
|
||||
$socket = socket_create(AF_INET, SOCK_RAW, 1);
|
||||
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 10, 'usec' => 0));
|
||||
socket_connect($socket, $this->server['ip'], null);
|
||||
|
||||
socket_send($socket, $package, strLen($package), 0);
|
||||
if (socket_read($socket, 255)) {
|
||||
$this->rtime = microtime(true) - $starttime;
|
||||
$status = true;
|
||||
} else {
|
||||
$status = false;
|
||||
}
|
||||
socket_close($socket);
|
||||
|
||||
// check if server is available and rerun if asked.
|
||||
if(!$status && $run < $max_runs) {
|
||||
return $this->updatePing($max_runs, $run + 1);
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the current server as a service
|
||||
* @param int $max_runs
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
<div class="controls">
|
||||
<select id="type" name="type">
|
||||
<option value="">{{ label_please_select }}</option>
|
||||
<option value="ping" {{ edit_type_selected_ping|raw }}>{{ label_ping }}</option>
|
||||
<option value="service" {{ edit_type_selected_service|raw }}>{{ label_service }}</option>
|
||||
<option value="website" {{ edit_type_selected_website|raw }}>{{ label_website }}</option>
|
||||
</select>
|
||||
|
@ -47,6 +48,7 @@
|
|||
<option value="115">SFTP (115)</option>
|
||||
<option value="43">WHOIS (43)</option>
|
||||
<option value="53">BIND (53)</option>
|
||||
<option value="3389">RDP (3389)</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue