//= Monitoring val logName = "monitoring_checkers" // Legt fest, dass ein Ping von // > 500 -> Warn-State erzeugt // > 1000 -> CRIT-state erzeugt rule "check intern-network_ping" when Member of GR_Monitor_Ping_intern changed then val value = triggeringItem.state val target_name = triggeringItem.name + "_State" if (value > 1000 ) { postUpdate(target_name, "CRIT") } else if (value > 500) { postUpdate(target_name, "WARN") } else { postUpdate(target_name, "OK") } end // Legt fest, dass ein Ping von // > 1000 -> INFO-state erzeugt // Undef (Nicht erreichbar) -> INFO-state erzeugt rule "check extern-network_ping" when Member of GR_Monitor_Ping_extern changed then val value = triggeringItem.state val target_name = triggeringItem.name + "_State" if (value == UNDEF || value > 1000 ) { postUpdate(target_name, "INFO") } else { postUpdate(target_name, "OK") } end // erzeugt eine Critical-Warning, wenn ein Switch nach Off geschaltet wird rule "check GR_Monitor_Switch_Off_Critical" when Member of GR_Monitor_Switch_Off_Critical changed then val target_name = triggeringItem.name + "_State" if (triggeringItem.state == OFF ) { postUpdate(target_name, "CRIT") } else { postUpdate(target_name, "OK") } end // erzeugt eine Warning-Meldung, wenn ein Switch nach On geschaltet wird rule "check GR_Monitor_Switch_On_Warning" when Member of GR_Monitor_Switch_On_Warning changed then val target_name = triggeringItem.name + "_State" if (triggeringItem.state == ON ) { postUpdate(target_name, "WARN") } else { postUpdate(target_name, "OK") } end // Prüft alle Items der Gruppe GR_Warnings und setzt das Item // ST_House_State auf den höchsten State // Alle Items der Gruppe müssen vom Typ String sein und dürfen nur // die Werte "OK", "INFO", "WARN" und "CRIT" haben rule "sumarize all warning-states" when Member of GR_Warnings changed then // Gucken was der höchste State ist var int countOk = 0 var int countInfo = 0 var int countWarn = 0 var int countCrit = 0 var int countNull = 0 GR_Warnings?.allMembers.forEach[i| //logInfo("GROUP TEST","ITEM =(" + i.name + ") state=(" + i.state.toString + ")") if (i.state == NULL) { countNull += 1 } else { switch i.state.toString { case "OK": { countOk += 1 } case "INFO": { countInfo += 1 } case "WARN": { countWarn += 1 } case "CRIT": { countCrit += 1 } default: { logWarn("WarningStates", "Illegal warning State " + i.state.toString + " in item " + i.name) //sendTelegram("igor", "Illegal warning State " + i.state.toString + " in item " + i.name) } } } ] logInfo("WarningCount", "Uninitializes States: " + countNull) logInfo("WarningCount", "Crit: " + countCrit + " Warn: " + countWarn + " INFO: " + countInfo + " OK: " + countOk) if (countCrit > 0) { postUpdate(ST_House_State, "CRIT") } else if (countWarn > 0) { postUpdate(ST_House_State, "WARN") } else if (countInfo > 0) { postUpdate(ST_House_State, "INFO") } else { postUpdate(ST_House_State, "OK") } end //# This rule cases the pre-compile of the whole rulefile by system-start. //# Verhindert, dass Rules erst bei der ersten Schalter-bedinung compiliert //# werden. //# Wichtig: RuleName muss eindeutig sein. Verwende Dateiname rule "precompile monitoring_checkers" when System started then logInfo(logName, "precompile triggered") end