Hi zusammen,
wollte schon immer gewisse Meldungen im WebFront haben, speziell wenn man Module entwickelt wollte ich wissen ob alles rund läuft. Habe jetzt mal eine Lösung für mich gebastelt die ich Euch nicht vorenthalten möchte.
So sieht es dann im WebFront aus …
Und das dazugehörige Script …
<?
################################################################################
# Scriptbezeichnung: System.StatusLog.ips.php
# Version: 1.0.20180401
# Author: Heiko Wilknitz (@Pitti)
#
# Dieses Skript filtert aus dem IPS Logfile die gewünschten Einträge:
# 0:ALL = (ERROR, WARNING, CUSTOM, NOTIFY, SUCCESS)
# 1:ERROR
# 2:WARNING
# 3:CUSTOM
# 4:NOTIFY
# 5:SUCCESS
#
# Installation:
# -------------
#
# HINWEIS: NUR FÜR LINUX BASIIERTE SYSTEM!!!
#
# Dieses Skript richtet automatisch alle nötigen Objekte bei manueller
# Ausführung ein.
#
# - Neues Skript erstellen
# - Diesen PHP-Code hineinkopieren
# - Abschnitt 'Konfiguration' den eigenen Gegebenheiten anpassen
# - Skript Abspeichern
# - Skript Ausführen
#
# ------------------------------ Konfiguration ---------------------------------
#
# Logfile, sollte nichts geändert werden
$logDir = IPS_GetLogDir();
$logFile = 'logfile.log';
#
# A fast and powerful alternative to grep (https://github.com/svent/sift)
$useSift = false;
#
# Filter Profil
$filter = array(
array(0,'ALL', '', 8421631),
array(1,'ERROR', '', 16744576),
array(2,'WARNING','', 16777088),
array(3,'SUCCESS','', 8454016),
array(4,'NOTIFY', '', 16744703),
array(5,'CUSTOM', '', 12632256)
);
#
################################################################################
// INSTALLATION
if ($_IPS['SENDER']=='Execute') {
$pos = 0;
// Filter
$vpn = "IPS.Logging";
$vid = CreateVariableByName($_IPS['SELF'], "Filter", 1);
CreateProfileInteger($vpn, 'CloseAll', '', '', 0, 0, 0, 0, $filter);
IPS_SetVariableCustomProfile($vid, $vpn);
IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
IPS_SetPosition($vid, $pos++);
SetValue($vid, 0);
// Messages
$vid = CreateVariableByName($_IPS['SELF'], "LogMessages", 3);
IPS_SetVariableCustomProfile($vid, '~HTMLBox');
IPS_SetIcon($vid, "Database");
IPS_SetPosition($vid, $pos++);
}
// AKTION VIA WEBFRONT
else if ($_IPS['SENDER'] == "WebFront") {
// Speichern
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
// Build command line
$cmd = BuildExecute($useSift, $filter, $_IPS['VALUE'], $logDir.$logFile);
// Filtern
$html = GetLogMessages($cmd);
// Anzeigen
$vid = CreateVariableByName($_IPS['SELF'], "LogMessages", 3);
SetValue($vid, $html);
}
# -------------------------------- FUNKTIONEN ----------------------------------
// Kommandozeile zusammenbauen
function BuildExecute($fast, $filter, $index, $log)
{
$cmd = '';
$len = count($filter);
//SIFT => $cmd = 'sift -e " ERROR " -e " WARNING " -e " CUSTOM " -e " NOTIFY " -e " SUCCESS " '.$log;
if($fast == true) {
$cmd = 'sift ';
// ALL
if($index == 0) {
foreach($filter as $key => $arr) {
if ($key == 0) continue;
$cmd .= '-e " '.$arr[1].' "';
if ($key != $len - 1) $cmd .= ' ';
}
}
// SPECIFIC
else {
$cmd .= '-e " '.$filter[$index][1].' "';
}
$cmd .= ' ';
}
//GREP => $cmd = 'grep -E "( ERROR | WARNING | CUSTOM | NOTIFY | SUCCESS )" '.$log
else {
$cmd = 'grep -E "(';
// ALL
if($index == 0) {
foreach($filter as $key => $arr) {
if ($key == 0) continue;
$cmd .= ' '.$arr[1].' ';
if ($key != $len - 1) $cmd .= '|';
}
}
// SPECIFIC
else {
$cmd .= ' '.$filter[$index][1].' ';
}
$cmd .= ')" ';
}
$cmd .= $log;
return $cmd;
};
// Daten über alle RSSI_DEVICE(s) holen und rendern
function GetLogMessages($cmd)
{
// Anzeige aufbereiten
$style = "";
$style = $style.'<style type="text/css">';
$style = $style.'table {border-collapse: collapse; font-size: 14px; width: 100%; }';
$style = $style.'td.fst {vertical-align: middle; text-align: left; padding: 5px; border-left: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
$style = $style.'td.mid {vertical-align: middle; text-align: left; padding: 5px; border-top: 1px solid rgba(255, 255, 255, 0.1); }';
$style = $style.'td.lst {vertical-align: middle; text-align: left; padding: 5px; border-right: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
$style = $style.'tr:last-child {border-bottom: 1px solid rgba(255, 255, 255, 0.2); }';
$style = $style.'tr:nth-child(even) { background-color: rgba(0, 0, 0, 0.2); }';
$style = $style.'.th { color: rgb(255, 255, 255); background-color: rgb(160, 160, 0); font-weight:bold; background-image: linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); background-image: -o-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); background-image: -moz-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); background-image: -webkit-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); background-image: -ms-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); }';
$style = $style.'</style>';
// HTML zusammenbauen
$html = $style;
// Exceute Command
$ret = exec($cmd, $out, $rc);
$html .= '<table>';
$html .= '<tr><td class="fst th" style="width:30px;">Typ</td><td class="mid th" style="width:150px;">Uhrzeit</td><td class="mid th" style="width:120px;">Sender</td><td class="lst th">Meldung</td></tr>';
$out = array_reverse($out);
foreach ($out as $line) {
$array = explode("|", $line);
$html .= '<tr><td class="fst">'.'Typ'.'</td><td class="mid">'.$array[0].'</td><td class="mid">'.$array[3].'</td><td class="lst">'.$array[4].'</td></tr>';
}
$html.='</table>';
// Zurück
return $html;
}
// Erzeugt eine Variable unterhalb {id} mit dem Namen {name} vom Typ [type}
// Existiert die Variable schon wird diese zurückgeliefert.
// Types: 0 = Boolean, 1 = Integer, 2 = Float, 3 = String
function CreateVariableByName($id, $name, $type)
{
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid===false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
}
return $vid;
}
// Erzeugt ein Variablenprofil vom Typ {type} mit Name n{name}
function CreateProfile($name, $type)
{
if(!IPS_VariableProfileExists($name)) {
IPS_CreateVariableProfile($name, $type);
}
else {
$profile = IPS_GetVariableProfile($name);
if($profile['ProfileType'] != $type)
throw new Exception("Variable profile type does not match for profile ".$name);
}
}
// Erzeugt ein Integer-Variablenprofil
function CreateProfileInteger($name, $icon, $prefix, $suffix, $minvalue, $maxvalue, $step, $digits, $asso = NULL)
{
CreateProfile($name, 1);
IPS_SetVariableProfileIcon($name, $icon);
IPS_SetVariableProfileText($name, $prefix, $suffix);
IPS_SetVariableProfileDigits($name, $digits);
if(($asso !== NULL) && (sizeof($asso) !== 0)){
$minvalue = 0;
$maxvalue = 0;
}
IPS_SetVariableProfileValues($name, $minvalue, $maxvalue, $step);
if(($asso !== NULL) && (sizeof($asso) !== 0)){
foreach($asso as $ass) {
IPS_SetVariableProfileAssociation($name, $ass[0], $ass[1], $ass[2], $ass[3]);
}
}
}
################################################################################
?>
ACHTUNG … nur für LINUX! Wahrscheinlich auch einfach auf Windows umbaubar!
Schönen Sonntag noch
Pitti