#!/usr/bin/perl -w # Version 1.2 # - kein div 0 Fehler mehr wenn der Host nicht zu erreichen ist # - Serien Timer werden nun separat gezaehlt (anzahl pro Woche) # - im Namen kann Munin-konform der Hostname mit angegeben werden: vdr_localhost vdr_192.168.0.2, ... (localhost ist default) # - Timer werden nur ignoriert wenn sie 0(inaktiv) als Status haben # - Erkennung der neuen Aufzeichnungen passte nicht mehr # # Version 1.1 # - laufende Timer zaehlen nun zu aktiven Timern. # - Ausgabe fuer Festplatteninformation # # Version 1.0 # - Release use strict; use diagnostics; $0 =~ /vdr_(.+)*$/; my $host = $1 || "localhost";; #print "Name: $0\nHost: $host\n"; my $SVDRPSENDPL="/usr/bin/svdrpsend -d $host"; sub ermittelnTimer; sub ermittelnAufnahmen; sub ermittelnPlatte; sub uhrzeit2min; if (($ARGV[0])&&($ARGV[0] eq "config")){ print "graph_title VDR Sensors ($host)\n"; # print "graph_args --upper-limit 50 -l 0\n"; print "graph_args -l 0\n"; print "graph_vlabel Anzahl\n"; print "graph_category tv\n"; print "graph_info Diese Graphen zeigen verschiedene Werte des VDR.\n"; print "timer.label Timer (Anzahl)\n"; print "timer.info Anzahl aller aktivierten Timer\n"; print "timer.draw LINE2\n"; print "timer_durchschnitt.label Timer Durchschnitt (Minuten)\n"; print "timer_durchschnitt.info Die durchschnittliche Dauer eines Timers\n"; print "timer_durchschnitt.draw LINE2\n"; print "serientimer.label Serien Timer (Anzahl)\n"; print "serientimer.info Anzahl aller aktivierten Serien Timer\n"; print "serientimer.draw LINE2\n"; print "serientimer_durchschnitt.label Serien Timer Durchschnitt (Minuten)\n"; print "serientimer_durchschnitt.info Die durchschnittliche Dauer eines Timers\n"; print "serientimer_durchschnitt.draw LINE2\n"; print "aufnahmen_gesehen.label Aufnahmen gesehen (Anzahl)\n"; print "aufnahmen_gesehen.info Aufnahmen die schon angeschaut wurden.\n"; print "aufnahmen_gesehen.draw LINE2\n"; print "aufnahmen_neu.label Aufnahmen ungesehen (Anzahl)\n"; print "aufnahmen_neu.info Aufnahmen die noch nicht angeschaut wurden.\n"; print "aufnahmen_neu.draw LINE2\n"; print "platte.label Belegung VDR-Platten (%)\n"; print "platte.info Angabe, wieviel der von VDR beschreibbaren Festplatten belegt ist.\n"; print "platte.draw LINE2\n"; exit 0 } ermittelnTimer(); ermittelnPlatte(); ermittelnAufnahmen(); sub ermittelnAufnahmen(){ my $zeile; my $anzahlAufnahmenNeu=0; my $anzahlAufnahmenGesehen=0; open BEFEHL,"$SVDRPSENDPL lstr|"; while($zeile=){ if ($zeile=~/^250.* .* [.^*]*\ /){ $anzahlAufnahmenNeu++; } else { $anzahlAufnahmenGesehen++; } } print "aufnahmen_gesehen.value ".$anzahlAufnahmenGesehen."\n"; print "aufnahmen_neu.value ".$anzahlAufnahmenNeu."\n"; } sub ermittelnPlatte(){ my $zeile; my $muell; my $platteProzent=0; open BEFEHL,"$SVDRPSENDPL stat disk|"; while($zeile=){ if ($zeile=~/^250.*/){ ($muell,$muell,$muell,$platteProzent)=split(/ /,$zeile,4); $platteProzent=~s/%//g; $platteProzent=~s/ //g; $platteProzent=~s/\n//g; $platteProzent=~s/\r//g; #print $zeile; } } print "platte.value ".$platteProzent."\n"; } sub ermittelnTimer(){ my $zeile; my $anzahl; my $anzahlTimer=0; my $anzahlSerienTimer=0; my $anzahlMinuten=0; my $anzahlSerienMinuten=0; my $start; my $ende; my $dauer; my $muell; open BEFEHL,"$SVDRPSENDPL lstt|"; while($zeile=){ if ($zeile=~/^250.[0-9]* [1-9]*/){ ($muell,$muell,$anzahl,$start,$ende,$muell)=split(/:/,$zeile,6); #print $zeile; $anzahl =~ s/\-//g; #ermittle timerdauer $start=uhrzeit2min($start); $ende=uhrzeit2min($ende); if ($start<$ende){ $dauer=$ende-$start; }else{ $dauer=1440-$start; $dauer=$dauer+$ende; } if (length($anzahl) && $anzahl =~ /\D/){ #print "Series"; $anzahlSerienTimer+=length($anzahl); $anzahlSerienMinuten+=$dauer*length($anzahl); } else { #print "keine Series"; $anzahlTimer++; $anzahlMinuten+=$dauer; } #print "$start-$ende=$dauer\n"; } } print "timer.value ".$anzahlTimer."\n"; printf $anzahlTimer ? ("timer_durchschnitt.value %d\n",($anzahlMinuten/$anzahlTimer)) : "timer_durchschnitt.value 0\n"; print "serientimer.value ".$anzahlSerienTimer."\n"; printf $anzahlSerienTimer ? ("serientimer_durchschnitt.value %d\n",($anzahlSerienMinuten/$anzahlSerienTimer)) : "serientimer_durchschnitt.value 0\n"; } sub uhrzeit2min(){ my $zeit=$_[0]; $zeit=$zeit%100+($zeit-$zeit%100)/100*60; return $zeit; }