errorCode() && $SQL->errorCode() !== '00000') { die($SQL->errorCode()); } $SQL->query('CREATE TABLE IF NOT EXISTS service_status(service TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, ping INTEGER, status INTEGER, PRIMARY KEY(service, timestamp))'); foreach($CONFIG['services'] as $id=>$data) { $services[$id] = array( 'name'=>$data['name'], 'message'=>$data['message'] ); if (isset($data['icon'])) $services[$id]['icon'] = $data['icon']; $timestamp = date('Y-m-d H:i:s'); // Ping is in ms. Status is 0 if okay, +1 for each unreachable, and -1 if offline completely. $ping = -1; $status = 0; // Check for ports (with ping) if (isset($data['ports'])) { $pings = array(); $i = 0; foreach ($data['ports'] as $port) { $starttime = microtime(true); if ($fp = fsockopen($data['hostname'],$port,$errno,$errstr,15)) { $stoptime = microtime(true); $newping = ($stoptime - $starttime) * 1000; $pings[$i++] = $newping; } else $status++; } if ($i == 1) $ping = round($pings[0], 2); else if ($i > 0 && ($ping_sum = array_sum($pings)) > 0) $ping = round($ping_sum / $i, 2); } // Check for PID (status) if (isset($data['pidfile'])) { if (!posix_getpgid(file_get_contents($data['pidfile']))) $status = -1; } // Check for process (status) if (isset($data['process']) && !isset($data['pidfile'])) { $otp; $rtn; exec('pgrep -fl "'.$data['process'].'"', $otp, $rtn); if ($rtn!=0) $status = -1; } if ($stmt = $SQL->prepare('INSERT INTO service_status(service, timestamp, ping, status) VALUES (?, ?, ?, ?)')) { $stmt->bindParam(1, $id); $stmt->bindParam(2, $timestamp); $stmt->bindParam(3, $ping); $stmt->bindParam(4, $status); $stmt->execute(); $stmt->closeCursor(); } if ($stmt = $SQL->prepare('SELECT timestamp,ping,status FROM service_status WHERE service = ? ORDER BY timestamp DESC LIMIT ?')) { $stmt->bindParam(1, $id); $stmt->bindParam(2, $CONFIG['max_slices']); if ($stmt->execute()) { $services[$id]['status'] = array(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { array_push($services[$id]['status'], $row); } } $stmt->closeCursor(); } $services[$id]['status'] = array_reverse($services[$id]['status']); } ?> <?=$CONFIG['page_name'];?> '> '> '>
$service) { echo ''; echo ''; echo ''; foreach ($service['status'] as $slice) { $cell_status; $bgclrstyle = ''; $_time = date($CONFIG['timestamp_format'], strtotime($slice['timestamp'])); $_ping = $slice['ping'].'ms'; if ($slice['status'] > 0 || ($slice['status'] == -1 && $slice['ping'] > 0)) { $cell_status = 'partial'; $bgclrstyle = sprintf("#%02x%02x%02x", 255, 128, 0); } else if ($slice['status'] == -1) { $cell_status = 'offline'; $bgclrstyle = sprintf("#%02x%02x%02x", 255, 0, 0); } else { $cell_status = 'ok'; $bgclrstyle = sprintf( "#%02x%02x%02x", $slice['ping']!=-1?max(0, min(255, round($slice['ping'])*2)):0, max(0, min(255, 128+(round($slice['ping'])/2))), 0 ); } echo ''; } echo '
'; if (!empty($service['message'])) { echo '
'; if (!empty($service['icon'])) echo ' '; echo $service['name'].''.$service['message'].'
'; } else { if (!empty($service['icon'])) echo ' '; echo ''.$service['name'].''; } echo '
'."\n"; } ?>