From 78af7a10e7d5edfa638e5f165130ae170ca32f5a Mon Sep 17 00:00:00 2001 From: root Date: Fri, 18 Apr 2014 04:39:16 +0200 Subject: Add missing file nettkart-json.pl. --- web/nms.gathering.org/nettkart-json.pl | 72 ++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 web/nms.gathering.org/nettkart-json.pl (limited to 'web/nms.gathering.org/nettkart-json.pl') diff --git a/web/nms.gathering.org/nettkart-json.pl b/web/nms.gathering.org/nettkart-json.pl new file mode 100755 index 0000000..54ef1d2 --- /dev/null +++ b/web/nms.gathering.org/nettkart-json.pl @@ -0,0 +1,72 @@ +#! /usr/bin/perl +use CGI; +use DBI; +use POSIX; +use lib '../../include'; +use strict; +use warnings; +use nms; +use JSON::XS; +use Digest::MD5; + +my $cgi = CGI->new; +my $secret = $cgi->param('secret'); +my $noise = $cgi->param('noise') // 0; +my $dbh = nms::db_connect(); + +my %json = (); +my $q = $dbh->prepare("select * from ( SELECT switch,sysname,sum(bytes_in) AS bytes_in,sum(bytes_out) AS bytes_out from switches natural left join get_current_datarate() where ip <> inet '127.0.0.1' group by switch,sysname) t1 natural join placements order by zorder;"); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { + + # for now: + # 10Mbit/switch = green + # 100Mbit/switch = yellow + # 1Gbit/switch = red + # 10Gbit/switch = white + + my $clr; + + if (defined($ref->{'bytes_in'})) { + my $intensity = 0.0; + my $traffic = 4.0 * ($ref->{'bytes_in'} + $ref->{'bytes_out'}); # average and convert to bits (should be about the same in practice) + + my $max = 100_000_000_000.0; # 100Gbit + my $min = 10_000_000.0; # 10Mbit + if ($traffic >= $min) { + $intensity = log($traffic / $min) / log(10); + + my $fudge = oct('0x'.substr(Digest::MD5::md5_hex($cgi->{'sysname'} . $cgi->param('secret')), 0, 8)); + $intensity += $fudge * $noise; + + $intensity = 4.0 if ($intensity > 4.0); + } + $clr = get_color($intensity); + } else { + $clr = [ 0, 0, 255 ]; + } + + $clr = sprintf("#%02x%02x%02x", + POSIX::floor($clr->[0] + 0.5), + POSIX::floor($clr->[1] + 0.5), + POSIX::floor($clr->[2] + 0.5)); + + $json{'switches'}{$ref->{'switch'}}{'color'} = $clr; +} +$dbh->disconnect; +print CGI::header(-type=>'text/json; charset=utf-8'); +print JSON::XS::encode_json(\%json); + +sub get_color { + my $intensity = shift; + my $gamma = 1.0/1.90; + if ($intensity > 3.0) { + return [ 255.0 * ((4.0 - $intensity) ** $gamma), 255.0 * ((4.0 - $intensity) ** $gamma), 255.0 * ((4.0 - $intensity) ** $gamma) ]; + } elsif ($intensity > 2.0) { + return [ 255.0, 255.0 * (($intensity - 2.0) ** $gamma), 255.0 * (($intensity - 2.0) ** $gamma) ]; + } elsif ($intensity > 1.0) { + return [ 255.0, 255.0 * ((2.0 - $intensity) ** $gamma), 0 ]; + } else { + return [ 255.0 * ($intensity ** $gamma), 255, 0 ]; + } +} -- cgit v1.2.3 From ac3714f34480fbc79c02e2abdee1e1fdcc7d2db8 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 18 Apr 2014 14:15:45 +0200 Subject: More adjustments. --- web/nms.gathering.org/nettkart-json.pl | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'web/nms.gathering.org/nettkart-json.pl') diff --git a/web/nms.gathering.org/nettkart-json.pl b/web/nms.gathering.org/nettkart-json.pl index 54ef1d2..7ffd05b 100755 --- a/web/nms.gathering.org/nettkart-json.pl +++ b/web/nms.gathering.org/nettkart-json.pl @@ -11,7 +11,14 @@ use Digest::MD5; my $cgi = CGI->new; my $secret = $cgi->param('secret'); +my $secret2 = $cgi->param('secret2'); my $noise = $cgi->param('noise') // 0; +my $fade_time = 0.0; +if (defined($secret2)) { + my $phase = $cgi->param('phase'); + my $period = $cgi->param('period'); + $fade_time = sin((time - $phase) * 2.0 * 3.14159265358 / $period) * 0.5 + 0.5; +} my $dbh = nms::db_connect(); my %json = (); @@ -36,8 +43,9 @@ while (my $ref = $q->fetchrow_hashref()) { if ($traffic >= $min) { $intensity = log($traffic / $min) / log(10); - my $fudge = oct('0x'.substr(Digest::MD5::md5_hex($cgi->{'sysname'} . $cgi->param('secret')), 0, 8)); - $intensity += $fudge * $noise; + my $fudge1 = oct('0x'.substr(Digest::MD5::md5_hex($cgi->{'sysname'} . $cgi->param('secret')), 0, 8)); + my $fudge2 = oct('0x'.substr(Digest::MD5::md5_hex($cgi->{'sysname'} . $cgi->param('secret2')), 0, 8)); + $intensity += ($fudge1 + ($fudge2 - $fudge1) * $fade_time) * $noise; $intensity = 4.0 if ($intensity > 4.0); } -- cgit v1.2.3