Die schlechte Wirtschaft hat wohl auch den Betriebssystem-Monopolisten erwischt, zumindest werden da aktuell wohl einige Stellen abgebaut. Leider ausgerechnet in der Entwicklungsabteilung der einzigen Software aus dem Unternehmen mit der ich mich gerne nochmal intensiv befassen würde: den Flugsimulator-Entwicklern. Doof. Aber wo ich gerade dabei bin: läuft der eigentlich unter Wine? Vielleicht sollte ich mir tatsächlich nochmal eine Version davon besorgen…

Komische Bewertungen bei eBayIch war etwas irritiert. Der Anbieter hat 212.212 Deals gemacht, und dabei nur 36% positive Resonanz? Oder ist das nicht binär? Haben von den Kunden insgesamt 212.424.212 eine positive Bewertung abgegeben, damit man auf 100100% kommt?

Oder werden da einfach Zahlen wie 212 oder 100 doppelt dargestellt, wenn man ohne Javascript einkaufen will? Wenn ich Skripte wieder zulasse sieht’s anders aus…

In den letzten Tagen habe ich nach längerer Pause mal wieder ausgiebig mit Nagios gespielt. Bei einer ausgiebigen Umstellung meines Netzes habe ich vor einer Weile den alten Nagios nach /dev/null verschoben, seitdem gab es Blindflug.

Soweit alles prima, allerdings bin ich an einer Stelle hängen geblieben: dem Drucker. Klar kann man einen Laserjet mit Netzwerkkarte problemlos überwachen, problematisch ist nur dass mein Drucker nur alle paar Wochen mal benutzt wird. Dazwischen ist der natürlich ausgeschaltet.

Das Problem: Wenn ich den Drucker ausschalte werden weiter alle Parameter (Tonerstand, Papiervorrat, Nachrichten…) geprüft, was natürlich nur zu Fehlern oder Nonsens führt. Besser fände ich wenn die Parameter den alten Zustand beibehalten würden, und lediglich das Gerät als ausgeschaltet gemeldet wird. Offenbar kann man das so aber nicht konfigurieren. Zumindest habe ich das nicht gefunden, für sachdienliche Hinweise wäre ich dankbar.

Ich habe vorhin mal ein wenig gescriptet, mit diesem Stück Shell geht es dann doch:

#!/bin/sh
host=$1
shift
command=$@
CACHEFILE=/tmp/check_cached.dat
if ping -c 1 $host > /dev/null; then
  # $host is online, fetch fresh data
  output=$(eval $command)
  returncode=$?
  # escape command and remove old entry from cache file
  ecommand=$(echo $command | sed -e "s_/_\/_g")
  sed -i "/^$ecommand;/d" $CACHEFILE
  # append command with fresh values to cache file
  echo "$command;$returncode;$output" >> $CACHEFILE
else
  # $host is offline, fetch data from cache file
  output="cached: $(sed -ne "s#^$command;[0-9];(.*)$#1#p" $CACHEFILE)"
  returncode=$(sed -ne "s#^$command;([0-9]).*$#1#p" $CACHEFILE)
fi
echo "$output"
exit $returncode

Ich habe das unter dem Namen check_cached.sh gespeichert. Jetzt musste ich nur noch das Kommando ändern mit dem der Drucker kontrolliert wird:

define command{
  command_name check_snmp_printer
  command_line /usr/local/nagios/plugins/check_snmp_printer '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$'
}

Daraus mache ich folgendes:

define command{
  command_name check_snmp_printer
  command_line /usr/local/nagios/plugins/check_cached.sh '$HOSTADDRESS$' "/usr/local/nagios/plugins/check_snmp_printer '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$'"
}

Alle Services die check_snmp_printer benutzen sind ab sofort gecached. Rein theoretisch sollte das auch mit allen anderen Checks funktionieren, ich habe das aber selbst mit diesem bis jetzt nur oberflächlich getestet, ich übernehme (natürlich) keine Verantwortung für alles was mit dem Skript oder wegen des Skriptes passiert. :-)

Fragen und Vorschläge fühlen sich hier in den Kommentaren wohl. :-)

Oh, und eine Frage kann ich im Voraus beantworten: Nein, eigentlich brauche ich kein so dickes Netzwerkmanagement in meinem Heim-Netz. Grund für die Bastelei ist Spaß an der Sache, und nachdem ich in letzter Zeit mit einem teuren kommerziellen System arbeiten muss will ich mir zu Hause einfach nochmal klar machen dass man mit der freien Lösung auch das meiste — wenn nicht alles — hinkriegt. :-D

Nachtrag: Momentan stört mich das nicht, aber wer das im großen Stil einsetzen will sollte vielleicht noch was einbauen das dafür sorgt dass auch etwas sinnvolles passiert wenn der Host offline ist, aber noch keine Daten dafür im Cache liegen…