Files
@ 4c3f2f6f06e3
Branch filter:
Location: FVDE/ennstatus/Scripts/traffic_statistics.pl - annotation
4c3f2f6f06e3
2.9 KiB
text/x-perl
fixed bug in status function check server
aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 aa70ef866179 | #!/usr/bin/perl
=About
This perl scripts generates statistics about the servers traffic consumption
by virii
=cut
use HTTP::Tiny;
use IO::Socket;
use Chart::Clicker;
use Chart::Clicker::Context;
use Chart::Clicker::Data::DataSet;
use Chart::Clicker::Data::Marker;
use Chart::Clicker::Data::Series;
use Chart::Clicker::Renderer::Area;
use Geometry::Primitive::Rectangle;
use Graphics::Color::RGB;
############### [Create new statistics image] ##########################
$cc = Chart::Clicker->new(width => 1248, height => 800);
$ds = Chart::Clicker::Data::DataSet->new();
@months = qw(1 2 3 4 5 6 7 8 9 10 11 12);
@series;
@traffix;
########################################################################
@nodes = qw(relay exit);
############### [Servername gathering via Ennstatus API] ###############
foreach $node (@nodes) {
print "[+] Checking for $node\n";
$gather_nodes = HTTP::Tiny->new->get('http://enn.lu/api/export/xml/' . $node) || die "[-] Cannot connect to $node API\n";
@xml_response = split(/\n/,$gather_nodes->{content});
foreach $xml_line (@xml_response) {
$counter++;
if ($xml_line =~ /\<server_name\>(\w+)\<\/server_name\>/i) {
$server_nick = $1;
if ($xml_response[$counter] =~ /\<server_status\>(\w+)\<\/server_status\>/i) {
push @servers, $server_nick if ($1 eq "Online"); # we want only those who are online
}
}
}
undef $counter;
}
####################### [Connect to each server] #######################
foreach $server_name (@servers) {
print "[+] Checking '$server_name'\n";
$server_response = HTTP::Tiny->new->get('http://' . $server_name . '.enn.lu/vnstat.xml');
die "[-] '$server_name' Failed!\n" unless $server_response->{success};
@xml_content = split(/\n/,$server_response->{content});
foreach $xml_line (@xml_content) {
if ($xml_line =~ /\<month id="(\d+)"\>\<date\>\<year\>(\d+)\<\/year\>\<month\>(\d+)\<\/month\>\<\/date\>\<rx\>(\d+)\<\/rx\>\<tx\>(\d+)\<\/tx\>\<\/month\>/ig) {
($id,$year,$month,$rx,$tx) = ($1,$2,$3,$4,$5,$6);
$rxtx = ($tx + $rx) * 10e-10;
$traffic = $1 if $rxtx =~ /^(\d+\.?\d{5})/;
push @traffix, $traffic;
}
}
for (scalar @traffix..11) {
unshift @traffix, 0;
}
$ds->add_to_series(Chart::Clicker::Data::Series->new(
keys => \@months,
values => [@traffix],
name => $server_name
));
undef @traffix;
}
$cc->add_to_datasets($ds);
$def = $cc->get_context('default');
$def->range_axis->label('Tbit');
$def->domain_axis->label('Month');
$area = Chart::Clicker::Renderer::Area->new(opacity => .2);
$area->brush->width(3);
$def->renderer($area);
$def->range_axis->tick_values([qw(20 40 60 80 100 120 140 160 180 200 220)]);
$def->range_axis->format('%d');
$def->domain_axis->ticks(11);
$def->domain_axis->tick_labels([qw(January February Mars April June July August September October November December)]);
$def->domain_axis->format('%d');
$cc->write_output('stats.png');
|