Ich suche bisher vergeblich nach einer Möglichkeit, z.b. einen Notify abzufeuern wen im Logfile mehr als ein Schwellenwert Zeilen pro Minute erzeugt werden.
Ich nutze das Logfile nur noch für Fehlernmeldungen - readings sind bei mir in der LogDB.
Heute morgen hat das Netatmo-Device bei mir verrückt gespielt und Fhem lahmgelegt durch 3 Logeinträge pro Sekunde (natürlich passierte im Hintergrund noch mehr um Fhem zu blockieren)
Deswegen würde ich gerne einen Alarm per Email bekommen wenn zu viele Zeilen innerhalb eines Zeitraumes geschrieben werden.
Man kann ein notify mit dem readLog Attribut definieren.
Leider ist ab hier "Handarbeit" gefragt...
defmod logAt at +*00:01:00 {countLog(5)}
sub countLog {
my $limit = shift;
$limit //= 1;
my ($err,@content) = FileRead( { ( "ForceType" => "FILE", "FileName" => InternalVal('Logfile','currentlogfile','') ) } );
return $err if($err);
my $count = scalar(@content);
my $diff = $count - ReadingsNum('Logfile','oldCount',0);
if($diff >= $limit) {
Debug "Alarm im Log: $diff neue Einträge innerhalb der letzten Minute";
}
fhem("setreading Logfile oldCount $count",1);
}
Der Code ist absichtlich sehr ausführlich gehalten, um die Idee zu verdeutlichen.
Anstatt der Debug Meldung kann man natürlich auch andere Aktionen ausführen.
Vielen Dank.
Ich hatte erst das Notify verwendet aber einmal alle 10 Minuten die Zeilenzahl abfragen erscheint mir Ressourcenschonender.