contrib-munin/plugins/vdr/vdr_

161 lines
4.9 KiB
Perl
Executable File

#!/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 munic conform 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=<BEFEHL>){
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=<BEFEHL>){
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=<BEFEHL>){
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;
}