# HG changeset patch # User Tyler Durden # Date 2016-10-19 15:23:57 # Node ID 3e4c902b7427479fa153fc22497d72a9a1632116 Added file via Kallithea diff --git a/Exit-Network-Stats.pl b/Exit-Network-Stats.pl new file mode 100644 --- /dev/null +++ b/Exit-Network-Stats.pl @@ -0,0 +1,78 @@ +#!/usr/bin/env perl +# by virii - enn.lu + +use strict; + +use XML::LibXML; +use HTTP::Tiny; + +use JSON::Parse qw(:all); +use List::UtilsBy qw( nsort_by ); + + +my ($api, $api_request, $json, $nodes_in_numbers, $parser, $vnstat_xml, $query, $entry); +my ($rx, $tx, $rx_TiB, $tx_TiB, $rx_TiB_total, $tx_TiB_total, $argument); +my (@nodes_rand, @nodes_sorted); + +$api = HTTP::Tiny->new; +$api_request = $api->get('https://enn.lu/api/export/exit'); +$json = valid_json($api_request->{content}); +$json = parse_json($api_request->{content}); + + +$nodes_in_numbers = scalar @$json; + +push @nodes_rand, [$json->[$_]{ip}, $json->[$_]{name}, $json->[$_]{country}] for (0..$nodes_in_numbers -1); +@nodes_sorted = nsort_by { int $_->[0] } @nodes_rand; + + +format HEAD = +************************************************ + Country RX TX +************************************************ +. +write HEAD; + + +for (0..$nodes_in_numbers -1) { + unless ($nodes_sorted[$_][0] == $nodes_sorted[$_ +1][0]) { + $api_request = $api->get('http://' . $nodes_sorted[$_][1] . '.enn.lu/vnstat.xml'); + $parser = XML::LibXML->new(); + $vnstat_xml = $parser->load_xml(string => $api_request->{content}); + + $query = '/vnstat/interface/traffic/total'; + + foreach $entry ($vnstat_xml->findnodes($query)) { + $rx = int $entry->findnodes('./rx'); + $tx = int $entry->findnodes('./tx'); + } + + + ($rx_TiB, $tx_TiB) = ($rx * (9.313 * 1.0E-10), $tx * (9.313 * 10E-10)); + ($rx_TiB, $tx_TiB) = (substr ($rx_TiB, 0, 4), substr ($tx_TiB, 0, 4)); + + $rx_TiB_total += $rx_TiB; + $tx_TiB_total += $tx_TiB; + + format_output($nodes_sorted[$_][2]); + } +} + +format_output('TOTAL'); + + +sub format_output { +$argument = shift; + +if ($argument eq 'TOTAL') { + ($argument, $rx_TiB, $tx_TiB) = (" TOTAL", $rx_TiB_total, $tx_TiB_total); + print '*' x 48, "\n"; +} + +format = +@<<<<<<<<< @>>>>>>>>>>>>> @>>>>>>>>>>>>> +$argument, "$rx_TiB TiB", "$tx_TiB TiB" +. +write; + +}