/var/www/www.irssi.org-old/scripts/html/bandwidth.pl


   1 # Mrtg-compatible any statistic loader
   2 #  /SET status_min_in - The minimum load to show
   3 #  /SET status_min_in - The minimum load to show
   4 #  /SET status_refresh - How often the loadavg is refreshed
   5 #
   6 #  takes output from mrtg compatible scripts, 
   7 #  see the mrtg-contrib and mrtgutils package for scripts to load
   8 #
   9 #  this one requires /usr/bin/mrtg-ip-acct from mrtgutils package
  10 #
  11 #  TODO ; add support for more than one stat at the same time
  12 #  TODO : negative amounts?
  13   
  14 use Irssi 20011113;
  15 use Irssi::TextUI;
  16 
  17 use strict;
  18 use 5.6.0;
  19 
  20 use vars qw($VERSION %IRSSI);
  21     
  22 # header begins here
  23 
  24 $VERSION = "1.0";
  25 %IRSSI = (
  26 	authors     => "Riku Voipio",
  27 	contact     => "riku.voipio\@iki.fi",
  28 	name        => "bandwidth",
  29 	description => "shows bandwidth usage in statusbar",
  30         license     => "GPLv2",
  31         url         => "http://nchip.ukkosenjyly.mine.nu/irssiscripts/",
  32     );
  33 
  34 my ($refresh, $last_refresh, $refresh_tag) = (10);
  35 my ($last_in, $last_out) = (0.0,0.0);
  36 my ($min_in, $min_out) = (1.0,1.0);
  37 my ($cur_in, $cur_out, $first_run) = (0.0,0.0,1);
  38 my $command =  '/usr/bin/mrtg-ip-acct';
  39 
  40 
  41 sub get_stats 
  42 {
  43   my ($old_in, $old_out) = ($last_in, $last_out);
  44 
  45   my @localstats;
  46   if (open my $fh, "$command|") 
  47   {
  48      @localstats = <$fh>;
  49     close $fh;
  50   } else {
  51     Irssi::print("Failed to execute $command: $!", MSGLEVEL_CLIENTERROR);
  52   }
  53   
  54   for(@localstats[0..1]) {
  55     return unless defined;
  56     return unless /^\d+$/;
  57   }
  58   $last_in=$localstats[0];
  59   $last_out=$localstats[1];
  60 
  61   if ($old_out==0){return;}
  62 
  63   $cur_out=($last_out-$old_out) / ($refresh*1024);
  64   $cur_in=($last_in-$old_in) / ($refresh*1024);
  65 }
  66 
  67 sub stats {
  68   my ($item, $get_size_only) = @_;
  69   #get_stats();
  70   
  71   $min_out = Irssi::settings_get_int('stats_min_out');
  72   $min_in = Irssi::settings_get_int('stats_min_in');
  73   $min_in = 0 if $min_in < 0;
  74   $min_out = 0 if $min_out < 0;
  75   
  76   
  77   if ($cur_in < $min_in and $cur_out <$min_out){
  78 	  #dont print
  79     if ($get_size_only) {
  80       $item->{min_size} = $item->{max_size} = 0;
  81     }
  82   } else { 
  83       $item->default_handler($get_size_only, undef, sprintf("i:%.2f o:%.2f",$cur_in, $cur_out ), 1 );
  84   }
  85 }
  86 
  87 sub refresh_stats {
  88   get_stats();
  89   Irssi::statusbar_items_redraw('stats');
  90 }
  91 
  92 sub read_settings {
  93   $refresh = Irssi::settings_get_int('stats_refresh');
  94   $command = Irssi::settings_get_str('stats_commandline');
  95   $refresh = 1 if $refresh < 1;
  96   return if $refresh == $last_refresh;
  97   $last_refresh = $refresh;
  98 
  99   Irssi::timeout_remove($refresh_tag) if $refresh_tag;
 100   $refresh_tag = Irssi::timeout_add($refresh*1000, 'refresh_stats', undef);
 101 }
 102 
 103 Irssi::settings_add_int('misc', 'stats_min_in', $min_in);
 104 Irssi::settings_add_int('misc', 'stats_min_out', $min_out);
 105 Irssi::settings_add_int('misc', 'stats_refresh', $refresh);
 106 Irssi::settings_add_str('misc', 'stats_commandline', $command);
 107 
 108 Irssi::statusbar_item_register('stats', '{sb S: $0-}', 'stats');
 109 Irssi::statusbars_recreate_items();
 110 
 111 read_settings();
 112 Irssi::signal_add('setup changed', 'read_settings');
 113 
 114