Repository
Munin (contrib)
Last change
2020-03-26
Graph Categories
Capabilities
Keywords
Language
Perl

vdr_

Sadly there is no documentation for this plugin.

#!/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=<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;
}