diff --git a/contrib/freemobile-munin b/contrib/freemobile-munin index dd278f74..8d7a2f09 100755 --- a/contrib/freemobile-munin +++ b/contrib/freemobile-munin @@ -3,8 +3,8 @@ =head1 NAME -freemobile - Plugin to monitor a freemobile subscription -copy this script to /etc/munin/plugins/freemobile +freemobile - A plugin to monitor a freemobile subscription +create a link to this script in /etc/munin/plugins/ =note1 @@ -20,159 +20,157 @@ env.HOME /home/florent user florent group florent -You can configure the list of monitored data with the ligne: +You can configure the list of monitored data with the line: env.freemonitored voice sms mms data Others monitored options: voicetoint voiceint smsint mmsint dataint specialvoice -The cache timeout is 3 hours by default. You can change this value +The cache timeout is 3 hours by default. You can change this value with env.cache_expire. -WARNING: Some monitored options are *not* tested by author - =cut use warnings; # Munin doesn't like utf-8 :-( use encoding "iso-8859-1"; -use Encode; +use Encode; my @monitored = split(/ /, $ENV{'freemonitored'} || 'voice sms'); my $cachefile = $ENV{'HOME'} . '/.config/weboob/munin/freemobile-munin'; -my $refreshtime = $ENV{'cache_expire'} || 10800; +my $refreshtime = $ENV{'cache_expire'} || 10800; my $weboob = "/usr/bin/env weboob-cli ICapBill get_details coin -f table |"; my %label = ( - 'voice' => "Voix en France (min)\n", - 'voicetoint' => "Voix vers l'international (min)\n", - 'specialvoice' => "Numéro spéciaux (min) \n", - 'sms' => "SMS en France\n", - 'mms' => "MMS en France\n", - 'data' => "Data en France\n", - 'voiceint' => "Voix à l\'international (min)\n", - 'smsint' => "SMS à l\'international\n", - 'mmsint' => "MMS à l\'international\n", - 'dataint' => "Data à l\'international\n" - ); + 'voice' => "Voix en France (min)\n", + 'voicetoint' => "Voix vers l'international (min)\n", + 'specialvoice' => "Numéro spéciaux (min) \n", + 'sms' => "SMS en France\n", + 'mms' => "MMS en France\n", + 'data' => "Data en France\n", + 'voiceint' => "Voix à l\'international (min)\n", + 'smsint' => "SMS à l\'international\n", + 'mmsint' => "MMS à l\'international\n", + 'dataint' => "Data à l\'international\n" + ); my %linenum = ( - 'voice' => 3, - 'voicetoint' => 3, - 'specialvoice' => 4, - 'sms' => 5, - 'mms' => 6, - 'data' => 7, - 'voiceint' => 8, - 'smsint' => 9, - 'mmsint' => 10, - 'dataint' => 11 - ); + 'voice' => 3, + 'voicetoint' => 3, + 'specialvoice' => 4, + 'sms' => 5, + 'mms' => 6, + 'data' => 7, + 'voiceint' => 8, + 'smsint' => 9, + 'mmsint' => 10, + 'dataint' => 11 + ); my %regexp = ( - 'voice' => 'National : (\d+)h(\d+)min(\d+)s', - 'voicetoint' => 'International : (\d+)h(\d+)min(\d+)s', - 'specialvoice' => '\| (\d+)h(\d+) min (\d+)s', - 'sms' => 'Conso SMS \| (\d+) \/ (.*)', - 'mms' => 'Vous avez consommé (\d+) MMS', - 'data' => 'Vous avez consommé ([\d\-\.]+) Mo', - 'voiceint' => 'Appels émis (\d+)h(\d+)min(\d+)s', - 'smsint' => 'Conso SMS (international) \| (\d+)', - 'mmsint' => 'Vous avez consommé (\d+) MMS', - 'dataint' => 'Vous avez consommé ([\d\-]+) Mo' - ); + 'voice' => 'National : (\d+)h(\d+)min(\d+)s', + 'voicetoint' => 'International : (\d+)h(\d+)min(\d+)s', + 'specialvoice' => '\| (\d+)h(\d+) min (\d+)s', + 'sms' => 'Conso SMS \| (\d+) \/ (.*)', + 'mms' => 'Vous avez consommé (\d+) MMS', + 'data' => 'Vous avez consommé ([\d\-\.]+) Mo', + 'voiceint' => 'Appels émis (\d+)h(\d+)min(\d+)s', + 'smsint' => 'Conso SMS (international) \| (\d+)', + 'mmsint' => 'Vous avez consommé (\d+) MMS', + 'dataint' => 'Vous avez consommé ([\d\-]+) Mo' + ); my %post = ( - 'voice' => 'postvoice', - 'voicetoint' => 'postvoice', - 'specialvoice' => 'postvoice', - 'sms' => 'simplepost', - 'mms' => 'simplepost', - 'data' => 'simplepost', - 'voiceint' => 'postvoice', - 'smsint' => 'simplepost', - 'mmsint' => 'simplepost', - 'dataint' => 'simplepost' - ); + 'voice' => 'postvoice', + 'voicetoint' => 'postvoice', + 'specialvoice' => 'postvoice', + 'sms' => 'simplepost', + 'mms' => 'simplepost', + 'data' => 'simplepost', + 'voiceint' => 'postvoice', + 'smsint' => 'simplepost', + 'mmsint' => 'simplepost', + 'dataint' => 'simplepost' + ); my @lines; my $cache; my $expr; if ($ARGV[0] and $ARGV[0] eq "config") { - binmode STDOUT, ":encoding(iso-8859-1)"; - print "graph_title Conso Free\n"; - print "graph_vlabel Suivi conso du forfait Free Mobile\n"; - print "graph_category weboob\n"; - print "graph_args -l 0\n"; - foreach (@monitored) { - print "$_" . ".label "; - print $label{$_}; - } + binmode STDOUT, ":encoding(iso-8859-1)"; + print "graph_title Conso Free\n"; + print "graph_vlabel Suivi conso du forfait Free Mobile\n"; + print "graph_category weboob\n"; + print "graph_args -l 0\n"; + foreach (@monitored) { + print "$_" . ".label "; + print $label{$_}; + } } else { - my $refresh; - my $first = 1; - my $time = time(); - # Check if cache exist and not older than 3 hours - if (open(CACHE, "< " . $cachefile)) { - $cache = 1; - LOOP: while() { - if ($first) { - if ($time - $_ > $refreshtime) { - $refresh = 0; - last; - } - else { - $refresh = 1; - } - $first = 0; - } - else { - print $_; - } - } - } - close(CACHE); - exit if $cache and $refresh; + my $refresh; + my $first = 1; + my $time = time(); + # Check if cache exist and not older than 3 hours + if (open(CACHE, "< " . $cachefile)) { + $cache = 1; + LOOP: while() { + if ($first) { + if ($time - $_ > $refreshtime) { + $refresh = 0; + last; + } + else { + $refresh = 1; + } + $first = 0; + } + else { + print $_; + } + } + } + close(CACHE); + exit if $cache and $refresh; - # Open cache for writing and execute weboob - open(CACHE, "> " . $cachefile) or die "Failed to open file $cachefile"; - open(DATA, $weboob) or die "Couldn't execute program: $!"; - LOOP: while () { - push(@lines,$_); - } - close(DATA); - print CACHE time(). "\n"; + # Open cache for writing and execute weboob + open(CACHE, "> " . $cachefile) or die "Failed to open file $cachefile"; + open(DATA, $weboob) or die "Couldn't execute program: $!"; + LOOP: while () { + push(@lines,$_); + } + close(DATA); + print CACHE time(). "\n"; - foreach $monit (@monitored) { - doubleprint("$monit" . ".value "); - if ($lines[$linenum{$monit}] =~ /$regexp{$monit}/ ) { - my $string; - foreach $expr (1..$#-) { - $string = $string . "${$expr} "; - } - my $postfunction = $post{$monit}; - &$postfunction($string); - } - else { - doubleprint("0 \n"); - } - } - close(CACHE); + foreach $monit (@monitored) { + doubleprint("$monit" . ".value "); + if ($lines[$linenum{$monit}] =~ /$regexp{$monit}/ ) { + my $string; + foreach $expr (1..$#-) { + $string = $string . "${$expr} "; + } + my $postfunction = $post{$monit}; + &$postfunction($string); + } + else { + doubleprint("0 \n"); + } + } + close(CACHE); } sub doubleprint { - print CACHE $_[0]; - print $_[0]; + print CACHE $_[0]; + print $_[0]; } sub postvoice { - my @args = split(/ /, $_[0]); - my $minutes = $args[0] * 60 + $args[1] + $args[2] / 60; - doubleprint("$minutes \n"); + my @args = split(/ /, $_[0]); + my $minutes = $args[0] * 60 + $args[1] + $args[2] / 60; + doubleprint("$minutes \n"); } sub simplepost { - my @args = split(/ /,$_[0]); - doubleprint("$args[0] \n"); + my @args = split(/ /,$_[0]); + doubleprint("$args[0] \n"); }