/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