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']); } ?>