freemobile-munin: Fix typos, indentation, documentation

This commit is contained in:
Laurent Bachelier 2012-03-15 01:30:19 +01:00
commit d806585109

View file

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