From d637b9f2d67647fd14de3a814192b0d7dd3d332a Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Sat, 19 Mar 2016 17:00:01 +0000 Subject: SNMP fetch: make sure we commit --- clients/snmpfetchng.pl | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/clients/snmpfetchng.pl b/clients/snmpfetchng.pl index e813499..394abae 100755 --- a/clients/snmpfetchng.pl +++ b/clients/snmpfetchng.pl @@ -9,7 +9,7 @@ use Data::Dumper; use lib '../include'; use nms; -SNMP::addMibDirs("/tmp/tmp.esQYrkg9MW/v2"); +SNMP::addMibDirs("/srv/tgmanage/mibs"); SNMP::loadModules('SNMPv2-MIB'); SNMP::loadModules('ENTITY-MIB'); SNMP::loadModules('IF-MIB'); @@ -48,8 +48,6 @@ my @switches = (); my $sth = $dbh->prepare("INSERT INTO snmp (switch,data) VALUES((select switch from switches where sysname=?), ?)"); -our $outstanding = 0; - sub mylog { my $msg = shift; @@ -61,17 +59,11 @@ sub mylog sub populate_switches { @switches = (); - my $limit = $nms::config::snmp_max - $outstanding; - if ($limit < 0) { - mylog("Something wrong. Too many outstanding polls going."); - $limit = 1; - } - if ($outstanding > 0) { - mylog("Outstanding polls: $outstanding . Current limit: $limit"); - } + my $limit = $nms::config::snmp_max; + print "called populate\n"; $qswitch->execute($limit) or die "Couldn't get switch"; - + $dbh->commit; while (my $ref = $qswitch->fetchrow_hashref()) { push @switches, { 'sysname' => $ref->{'sysname'}, @@ -87,7 +79,6 @@ sub inner_loop populate_switches(); my $poll_todo = ""; for my $refswitch (@switches) { - $outstanding++; my %switch = %{$refswitch}; $poll_todo .= "$switch{'sysname'} "; @@ -102,7 +93,6 @@ sub inner_loop my $ret = $s->bulkwalk(0, 10, @nms::config::snmp_objects, sub{ callback(\%switch, @_); }); if (!defined($ret)) { mylog("Fudge: ". $s->{'ErrorStr'}); - $outstanding--; } } mylog( "Polling " . @switches . " switches: $poll_todo"); @@ -146,8 +136,7 @@ sub callback{ $qunlock->execute($switch{'id'}) or die "Couldn't unlock switch"; $dbh->commit; - $outstanding--; - mylog( "Polled $switch{'sysname'} in " . (time - $switch{'start'}) . "s. ($outstanding outstanding polls)"); + mylog( "Polled $switch{'sysname'} in " . (time - $switch{'start'}) . "s."); } while (1) { inner_loop(); -- cgit v1.2.3 From 96c78ee43524a7e36d292fbc47cd1c3523f79ac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sat, 19 Mar 2016 16:40:55 +0100 Subject: README.md comment --- nms/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nms/README.md b/nms/README.md index 4d310cb..68d9ab9 100644 --- a/nms/README.md +++ b/nms/README.md @@ -2,11 +2,13 @@ ## Installation - fetch data from tg server: `scp ${USER}@wat.gathering.org:/root/nms-2015.sql.gz .` +- Rename the nms dump so we can use it later: `mv nms-2015.sql.gz nms-dump.sql.gz` - Do the Debian install(or whatever OS you're on.): https://docs.docker.com/engine/installation/linux/debian/ And make sure that your user is in the docker group, so that you can run docker without sudo. - Clone repository: `git clone git@github.com:tech-server/tgmanage.git` + - run `./makedockerfiles.sh`, which creates the docker image files, and builds them. -- cgit v1.2.3 From 767374fb31f8d993cc75e2e8c79e9eb3c57ee555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sat, 19 Mar 2016 16:50:28 +0100 Subject: Spelling mistake in Readme. --- nms/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nms/README.md b/nms/README.md index 68d9ab9..107b630 100644 --- a/nms/README.md +++ b/nms/README.md @@ -14,7 +14,7 @@ - Start database node: `docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=db nms-db` - Start front end node: ` docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=front --link=db:db nms-front ` -- Find IP's: `docker inspect front`, `docker instpect db` +- Find IP's: `docker inspect front`, `docker inspect db` - Start a shell in a container: `docker exec front /bin/bash` - Open localhost:PORT in browser to start testing. -- cgit v1.2.3 From a39e47202c108453cac8402b810cc0029c21c1c9 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Sat, 19 Mar 2016 20:50:02 +0000 Subject: NMS: Intelligent, undocumented active-ports-search --- clients/snmpfetchng.pl | 1 - web/nms.gathering.org/js/nms-info-box.js | 48 +++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/clients/snmpfetchng.pl b/clients/snmpfetchng.pl index 394abae..bece8ab 100755 --- a/clients/snmpfetchng.pl +++ b/clients/snmpfetchng.pl @@ -60,7 +60,6 @@ sub populate_switches { @switches = (); my $limit = $nms::config::snmp_max; - print "called populate\n"; $qswitch->execute($limit) or die "Couldn't get switch"; $dbh->commit; diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index 6b13498..0175b6f 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -140,6 +140,38 @@ nmsInfoBox._makeCommentTable = function(content) { return table; } +nmsInfoBox._searchSmart = function(id, sw) { + if (nmsData.smanagement.switches[sw].distro == id) { + console.log("ieh"); + return true; + } + if (id.match("[a-z]+.active")) { + console.log("hei: " + sw); + var family = id.match("[a-z]+"); + var limit = id; + limit = limit.replace(family + ".active>",""); + limit = limit.replace(family + ".active<",""); + limit = limit.replace(family + ".active=",""); + var operator = id.replace(family + ".active","")[0]; + if (limit == parseInt(limit)) { + if (operator == ">" ) { + if (nmsData.switchstate.switches[sw][family].live > limit) { + return true; + } + } else if (operator == "<") { + if (nmsData.switchstate.switches[sw][family].live < limit) { + return true; + } + } else if (operator == "=") { + if (nmsData.switchstate.switches[sw][family].live == limit) { + return true; + } + } + } + } + return false; +} + /* * FIXME: Not sure this belongs here, it's really part of the "Core" ui, * not just the infobox. @@ -153,11 +185,19 @@ nmsInfoBox._search = function() { } if(id) { for(var sw in nmsData.switches.switches) { - if(sw.indexOf(id) > -1) { - hits++; - nmsMap.setSwitchHighlight(sw,true); + if (id[0] == "/") { + if (nmsInfoBox._searchSmart(id.slice(1),sw)) { + nmsMap.setSwitchHighlight(sw,true); + } else { + nmsMap.setSwitchHighlight(sw,false); + } } else { - nmsMap.setSwitchHighlight(sw,false); + if(sw.indexOf(id) > -1) { + hits++; + nmsMap.setSwitchHighlight(sw,true); + } else { + nmsMap.setSwitchHighlight(sw,false); + } } } } else { -- cgit v1.2.3 From 38a97f8e3fa5a5a008ed591fc8b2fdfb6fef7abc Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Sat, 19 Mar 2016 19:54:14 +0100 Subject: NMS: Add basic add-switch interface --- web/nms.gathering.org/api/private/switch-add | 32 +------ web/nms.gathering.org/api/private/switch-update | 122 ++++++++++++++++++++++++ web/nms.gathering.org/index.html | 3 +- web/nms.gathering.org/js/nms-info-box.js | 45 ++++++++- 4 files changed, 169 insertions(+), 33 deletions(-) create mode 100755 web/nms.gathering.org/api/private/switch-update diff --git a/web/nms.gathering.org/api/private/switch-add b/web/nms.gathering.org/api/private/switch-add index 3d7b119..70d6212 100755 --- a/web/nms.gathering.org/api/private/switch-add +++ b/web/nms.gathering.org/api/private/switch-add @@ -83,40 +83,10 @@ foreach my $tmp2 (@tmp) { $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, switchtype, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement) VALUES ($template{'ip'}, $template{'sysname'}, $template{'switchtype'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'});"); push @added, $switch{'sysname'}; - } else { - if (defined($switch{'placement'})) { - my %placement; - if ($switch{'placement'} eq "reset") { - %placement = guess_placement($switch{'sysname'}); - } else { - %placement = %{convertplace($switch{'placement'})}; - } - my ($x1,$x2,$y1,$y2); - $x1 = $placement{'x1'}; - $y1 = $placement{'y1'}; - $x2 = $placement{'xx'}; - $y2 = $placement{'yy'}; - $switch{'placement'} = "(($x1,$y1),($x2,$y2))"; - push @dups, "not really, but: " . $switch{'placement'}; - } - if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) { - $switch{'ip'} = $switch{'mgtmt4'}; - } - if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) { - $switch{'secondary_ip'} = $switch{'mgtmt6'}; - } - my @set; - map { - if (defined($template{$_})) { - push @set, "$_=" . $dbh->quote($switch{$_}); - } - } keys %switch; - $nms::web::dbh->do("UPDATE SWITCHES SET " . join(", ", @set) . "WHERE sysname=" . $dbh->quote($switch{'sysname'}) . ";"); - push @dups, $switch{'sysname'}; } } + $json{'switches_addded'} = \@added; -$json{'switches_updated'} = \@dups; print "X-ban: /api/.*switches.*\n"; finalize_output(); diff --git a/web/nms.gathering.org/api/private/switch-update b/web/nms.gathering.org/api/private/switch-update new file mode 100755 index 0000000..3d7b119 --- /dev/null +++ b/web/nms.gathering.org/api/private/switch-update @@ -0,0 +1,122 @@ +#! /usr/bin/perl +# vim:ts=8:sw=8 + +#use CGI qw(fatalsToBrowser); +use DBI; +use lib '../../../../include'; +use nms; +use nms::web qw(%get_params %json finalize_output get_input $dbh); +use nms::util qw(guess_placement); +use strict; +use warnings; +use JSON; +use Data::Dumper; + +$nms::web::cc{'max-age'} = "0"; + +my $in = get_input(); +my @tmp = @{JSON::XS::decode_json($in)}; + +my @added; +my @dups; + +my $sth = $nms::web::dbh->prepare("SELECT sysname FROM switches WHERE sysname=?"); + +my @fields = ('ip', 'sysname', 'switchtype', 'last_updated', 'locked', 'poll_frequency', 'community', 'lldp_chassis_id', 'secondary_ip', 'subnet4', 'subnet6', 'placement', 'distro', 'secondary_ip'); + +sub convertplace +{ + my %in = %{$_[0]}; + my %out = (); + + if (not defined $in{'x1'} and defined($in{'x'})) { + $out{'x1'} = int($in{'x'}); + $out{'y1'} = int($in{'y'}); + $out{'xx'} = int($in{'x'} + $in{'width'}); + $out{'yy'} = int($in{'y'} + $in{'height'}); + } else { + return \%in; + } + return \%out; +} + +foreach my $tmp2 (@tmp) { + my %switch = %{$tmp2}; + my $affected = 0; + my %template = (); + map { $template{$_} = 'DEFAULT' } @fields; + if (not defined($switch{'sysname'})) { + next; + } + + $sth->execute( $switch{'sysname'}); + while ( my @row = $sth->fetchrow_array ) { + $affected += 1; + } + + if ($affected == 0) { + my %placement; + if (not defined ($switch{'placement'})) { + %placement = guess_placement($switch{'sysname'}); + } else { + %placement = %{convertplace($switch{'placement'})}; + } + if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) { + $switch{'ip'} = $switch{'mgtmt4'}; + } + if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) { + $switch{'secondary_ip'} = $switch{'mgtmt6'}; + } + my ($x1,$x2,$y1,$y2); + $x1 = $placement{'x1'}; + $y1 = $placement{'y1'}; + $x2 = $placement{'xx'}; + $y2 = $placement{'yy'}; + $switch{'placement'} = "(($x1,$y1),($x2,$y2))"; + + map { + if (defined ($template{$_})) { + $template{$_} = $dbh->quote($switch{$_}); + } + } keys %switch; + + + $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, switchtype, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement) VALUES ($template{'ip'}, $template{'sysname'}, $template{'switchtype'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'});"); + push @added, $switch{'sysname'}; + } else { + if (defined($switch{'placement'})) { + my %placement; + if ($switch{'placement'} eq "reset") { + %placement = guess_placement($switch{'sysname'}); + } else { + %placement = %{convertplace($switch{'placement'})}; + } + my ($x1,$x2,$y1,$y2); + $x1 = $placement{'x1'}; + $y1 = $placement{'y1'}; + $x2 = $placement{'xx'}; + $y2 = $placement{'yy'}; + $switch{'placement'} = "(($x1,$y1),($x2,$y2))"; + push @dups, "not really, but: " . $switch{'placement'}; + } + if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) { + $switch{'ip'} = $switch{'mgtmt4'}; + } + if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) { + $switch{'secondary_ip'} = $switch{'mgtmt6'}; + } + my @set; + map { + if (defined($template{$_})) { + push @set, "$_=" . $dbh->quote($switch{$_}); + } + } keys %switch; + $nms::web::dbh->do("UPDATE SWITCHES SET " . join(", ", @set) . "WHERE sysname=" . $dbh->quote($switch{'sysname'}) . ";"); + push @dups, $switch{'sysname'}; + } +} +$json{'switches_addded'} = \@added; +$json{'switches_updated'} = \@dups; + +print "X-ban: /api/.*switches.*\n"; +finalize_output(); diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html index e70c9e3..a20ae67 100644 --- a/web/nms.gathering.org/index.html +++ b/web/nms.gathering.org/index.html @@ -74,6 +74,7 @@
  • Enable switch moving
  • Disable switch moving
  • +
  • Add switch
  • Keyboard Shortcuts
  • @@ -104,7 +105,7 @@ -
    +
    diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index 0175b6f..7e27ce7 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -65,6 +65,7 @@ nmsInfoBox._hide = function() nmsInfoBox._showing = ""; nmsInfoBox._editHide(); nmsInfoBox._snmpHide(); + nmsInfoBox._createHide(); } /* @@ -388,7 +389,7 @@ nmsInfoBox._editSave = function(sw, e) { var myData = nmsInfoBox._editStringify(sw); $.ajax({ type: "POST", - url: "/api/private/switch-add", + url: "/api/private/switch-update", dataType: "text", data:myData, success: function (data, textStatus, jqXHR) { @@ -398,3 +399,45 @@ nmsInfoBox._editSave = function(sw, e) { }); nmsInfoBox._editHide(); } + + +/* + * Display infobox for new switch + * + * TODO: Integrate and rebuild info-box display logic + */ +nmsInfoBox._createShow = function() +{ + var container = document.createElement("div"); + container.className = "col-md-5"; + container.id = "nmsInfoBox-create"; + container.style.zIndex = "999"; + + var swtop = document.getElementById("wrap"); + nmsInfoBox._hide(); + + container.innerHTML = '
    Add new switch
    '; + + swtop.appendChild(container); +} +nmsInfoBox._createSave = function(sw) { + var feedback = document.getElementById("create-switch-feedback"); + var myData = JSON.stringify([{'sysname':sw}]); + $.ajax({ + type: "POST", + url: "/api/private/switch-add", + dataType: "text", + data:myData, + success: function (data, textStatus, jqXHR) { + var result = JSON.parse(data); + if(result.switches_addded.length > 0) { + nmsInfoBox._createHide(); + } + } + }); +} +nmsInfoBox._createHide = function() { + var container = document.getElementById("nmsInfoBox-create"); + if (container != undefined) + container.parentNode.removeChild(container); +} -- cgit v1.2.3 From 193141d3e783ab15cf86a956d7533dcb80b0d02f Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Sat, 19 Mar 2016 23:21:10 +0100 Subject: NMS: Fix disappearing BG on resizeEvent --- web/nms.gathering.org/js/nms-map.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web/nms.gathering.org/js/nms-map.js b/web/nms.gathering.org/js/nms-map.js index 9bba1bf..3749a16 100644 --- a/web/nms.gathering.org/js/nms-map.js +++ b/web/nms.gathering.org/js/nms-map.js @@ -138,6 +138,9 @@ nmsMap._resizeEvent = function() { continue; nmsMap._c[a].c.height = nmsMap._canvas.height; nmsMap._c[a].c.width = nmsMap._canvas.width; + if(a == 'bg') { + nmsMap._drawBG(); + } } if (nmsMap._init != true) { console.log("Drawing shit"); -- cgit v1.2.3 From d98c48eeb7b3d3ae0bf49012160dfde907c014b2 Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Sun, 20 Mar 2016 10:53:28 +0100 Subject: NMS: Fix nms-map load not triggering --- web/nms.gathering.org/js/nms-map.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/nms.gathering.org/js/nms-map.js b/web/nms.gathering.org/js/nms-map.js index 3749a16..bbb304f 100644 --- a/web/nms.gathering.org/js/nms-map.js +++ b/web/nms.gathering.org/js/nms-map.js @@ -59,7 +59,7 @@ nmsMap.init = function() { this._init = true; nmsData.addHandler("switches","nmsMap",function(){nmsMap._resizeEvent();}); window.addEventListener('resize',nmsMap._resizeEvent,true); - document.addEventListener('load',nmsMap._loadEvent,true); + window.addEventListener('load',nmsMap._loadEvent,true); } nmsMap.setSwitchColor = function(sw, color) { @@ -143,7 +143,6 @@ nmsMap._resizeEvent = function() { } } if (nmsMap._init != true) { - console.log("Drawing shit"); nmsMap._blurDrawn = false; nmsMap._drawBG(); nmsMap._drawAllSwitches(); -- cgit v1.2.3 From 06c9106b396d02d45ce5dd954507d010063ded59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 13:59:46 +0100 Subject: Added basic .bashrc file for simplifed development in container. --- nms/.bashrc | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 nms/.bashrc diff --git a/nms/.bashrc b/nms/.bashrc new file mode 100644 index 0000000..c1fd16f --- /dev/null +++ b/nms/.bashrc @@ -0,0 +1,8 @@ +NAME='NMS Docker' + +# Aliases +alias h="history" +alias l="ls -lAhoF --color --show-control-chars" +alias ll="ls -lash --color --show-control-chars" +alias cd..="cd .." + -- cgit v1.2.3 From 25c603b32eaf35f07bea0dfd9541afd196cb1343 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 14:00:33 +0100 Subject: Updated config to nms-dev-db --- nms/config.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nms/config.pm b/nms/config.pm index faaeaa1..db9775f 100755 --- a/nms/config.pm +++ b/nms/config.pm @@ -6,9 +6,9 @@ package nms::config; # DB our $db_name = "nms"; -our $db_host = "db"; +our $db_host = "nms-dev-db.gathering.org"; our $db_username = "nms"; -our $db_password = "foobar"; +our $db_password = "nms-lol"; # NMS hash used for public NMS obfuscation of interface names our $nms_hash = ""; -- cgit v1.2.3 From 47788e2d2c95ecf4174dbb9ab8d5dafcfd552c67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 14:01:13 +0100 Subject: Updated Readme with new docker run commands. --- nms/README.md | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/nms/README.md b/nms/README.md index 107b630..739fc5b 100644 --- a/nms/README.md +++ b/nms/README.md @@ -4,21 +4,28 @@ - fetch data from tg server: `scp ${USER}@wat.gathering.org:/root/nms-2015.sql.gz .` - Rename the nms dump so we can use it later: `mv nms-2015.sql.gz nms-dump.sql.gz` -- Do the Debian install(or whatever OS you're on.): https://docs.docker.com/engine/installation/linux/debian/ And make sure that your user is in the docker group, so that you can run docker without sudo. +- Do the Debian install(or whatever OS you're on.): +https://docs.docker.com/engine/installation/linux/debian/ +And make sure that your user is in the docker group, so that you can run docker without sudo. - Clone repository: `git clone git@github.com:tech-server/tgmanage.git` - - run `./makedockerfiles.sh`, which creates the docker image files, and builds them. -- Start database node: `docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=db nms-db` -- Start front end node: ` docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=front --link=db:db nms-front ` -- Find IP's: `docker inspect front`, `docker inspect db` -- Start a shell in a container: `docker exec front /bin/bash` -- Open localhost:PORT in browser to start testing. +- Start database node: +`docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=db nms-db` + +- Start front end node: +-- with cgroup: `docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=front --link=db:db nms-front` + +-- getting to prompt(without cgroup): +`docker run -v "/home/kiro/repos/tgmanage:/srv/tgmanage" -v "/home/kiro/repos/tgmanage/nms/.bashrc:/root/.bashrc" -w "/srv/tgmanage/web/nms.gathering.org" \ +-it --privileged nms-front /bin/bash` +- Find IP's: +`docker inspect nms-db | grep "IPAddress\":"` +`docker inspect nms-front | grep "IPAddress\":"` +- Open the nms-front ip in the web browser. -## TODO -- finish the installation guide above. -- cgit v1.2.3 From 4e411aa684bfc2f224319ef0df7ea9555b6faa29 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Sun, 20 Mar 2016 13:05:08 +0000 Subject: NMS: Add dhcp-summary --- web/nms.gathering.org/api/public/dhcp-summary | 19 +++++++++++++++++++ web/nms.gathering.org/js/nms.js | 1 + 2 files changed, 20 insertions(+) create mode 100755 web/nms.gathering.org/api/public/dhcp-summary diff --git a/web/nms.gathering.org/api/public/dhcp-summary b/web/nms.gathering.org/api/public/dhcp-summary new file mode 100755 index 0000000..31bc8eb --- /dev/null +++ b/web/nms.gathering.org/api/public/dhcp-summary @@ -0,0 +1,19 @@ +#! /usr/bin/perl +use lib '../../../../include'; +use nms::web; + +nms::web::setwhen('2h'); +my $q = $nms::web::dbh->prepare("select count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp;"); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { + $nms::web::json{'dhcp'}{'total'} = $ref; +} + +my $q2 = $nms::web::dbh->prepare("select count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp where $nms::web::when;"); +$q2->execute(); +while (my $ref = $q2->fetchrow_hashref()) { + $nms::web::json{'dhcp'}{'recent'} = $ref; +} +$nms::web::cc{'max-age'} = "10"; +$nms::web::cc{'stale-while-revalidate'} = "15"; +finalize_output(); diff --git a/web/nms.gathering.org/js/nms.js b/web/nms.gathering.org/js/nms.js index 1270a7f..bf13c57 100644 --- a/web/nms.gathering.org/js/nms.js +++ b/web/nms.gathering.org/js/nms.js @@ -465,6 +465,7 @@ function initNMS() { nmsData.registerSource("ping", "/api/public/ping"); nmsData.registerSource("switches","/api/public/switches"); nmsData.registerSource("switchstate","/api/public/switch-state"); + nmsData.registerSource("dhcpsummary","/api/public/dhcp-summary"); // This is a magic dummy-source, it's purpose is to give a unified // way to get ticks every second. It is mainly meant to allow map -- cgit v1.2.3 From 56a5987b760a822784bb53a3c27f30afec9f6a82 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Sun, 20 Mar 2016 14:09:25 +0000 Subject: NMS: Update schema with recent dhcp-changes --- nms/nms-dump.sql | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/nms/nms-dump.sql b/nms/nms-dump.sql index bbe141d..335a3b0 100644 --- a/nms/nms-dump.sql +++ b/nms/nms-dump.sql @@ -44,17 +44,18 @@ SET default_tablespace = ''; SET default_with_oids = false; -- --- Name: dhcp; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- Name: dhcp; Type: TABLE; Schema: public; Owner: nms; Tablespace: -- CREATE TABLE dhcp ( switch integer, "time" timestamp without time zone, - mac macaddr + mac macaddr, + ip inet ); -ALTER TABLE dhcp OWNER TO postgres; +ALTER TABLE dhcp OWNER TO nms; -- -- Name: linknet_ping; Type: TABLE; Schema: public; Owner: nms; Tablespace: @@ -162,7 +163,7 @@ CREATE TABLE seen_mac ( ALTER TABLE seen_mac OWNER TO nms; -- --- Name: snmp; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- Name: snmp; Type: TABLE; Schema: public; Owner: nms; Tablespace: -- CREATE TABLE snmp ( @@ -176,7 +177,7 @@ CREATE TABLE snmp ( ALTER TABLE snmp OWNER TO nms; -- --- Name: snmp_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- Name: snmp_id_seq; Type: SEQUENCE; Schema: public; Owner: nms -- CREATE SEQUENCE snmp_id_seq @@ -190,7 +191,7 @@ CREATE SEQUENCE snmp_id_seq ALTER TABLE snmp_id_seq OWNER TO nms; -- --- Name: snmp_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- Name: snmp_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms -- ALTER SEQUENCE snmp_id_seq OWNED BY snmp.id; @@ -292,7 +293,7 @@ ALTER TABLE ONLY linknets ALTER COLUMN linknet SET DEFAULT nextval('linknets_lin -- --- Name: id; Type: DEFAULT; Schema: public; Owner: postgres +-- Name: id; Type: DEFAULT; Schema: public; Owner: nms -- ALTER TABLE ONLY snmp ALTER COLUMN id SET DEFAULT nextval('snmp_id_seq'::regclass); @@ -354,14 +355,14 @@ ALTER TABLE ONLY switches -- --- Name: dhcp_switch; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: dhcp_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX dhcp_switch ON dhcp USING btree (switch); -- --- Name: dhcp_time; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: dhcp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX dhcp_time ON dhcp USING btree ("time"); @@ -417,21 +418,21 @@ CREATE INDEX seen_mac_seen ON seen_mac USING btree (seen); -- --- Name: snmp_time; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: snmp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX snmp_time ON snmp USING btree ("time"); -- --- Name: snmp_time15; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: snmp_time15; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX snmp_time15 ON snmp USING btree (id, switch); -- --- Name: snmp_time6; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: snmp_time6; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX snmp_time6 ON snmp USING btree ("time" DESC, switch); @@ -466,7 +467,7 @@ CREATE INDEX updated_index3 ON ping_secondary_ip USING btree ("time"); -- --- Name: dhcp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- Name: dhcp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms -- ALTER TABLE ONLY dhcp @@ -474,7 +475,7 @@ ALTER TABLE ONLY dhcp -- --- Name: snmp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- Name: snmp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms -- ALTER TABLE ONLY snmp @@ -525,23 +526,23 @@ GRANT ALL ON TABLE seen_mac TO nms; -- --- Name: snmp; Type: ACL; Schema: public; Owner: postgres +-- Name: snmp; Type: ACL; Schema: public; Owner: nms -- REVOKE ALL ON TABLE snmp FROM PUBLIC; -REVOKE ALL ON TABLE snmp FROM postgres; -GRANT ALL ON TABLE snmp TO postgres; +REVOKE ALL ON TABLE snmp FROM nms; GRANT ALL ON TABLE snmp TO nms; +GRANT ALL ON TABLE snmp TO postgres; -- --- Name: snmp_id_seq; Type: ACL; Schema: public; Owner: postgres +-- Name: snmp_id_seq; Type: ACL; Schema: public; Owner: nms -- REVOKE ALL ON SEQUENCE snmp_id_seq FROM PUBLIC; -REVOKE ALL ON SEQUENCE snmp_id_seq FROM postgres; -GRANT ALL ON SEQUENCE snmp_id_seq TO postgres; +REVOKE ALL ON SEQUENCE snmp_id_seq FROM nms; GRANT ALL ON SEQUENCE snmp_id_seq TO nms; +GRANT ALL ON SEQUENCE snmp_id_seq TO postgres; -- -- cgit v1.2.3 From 873418b97df1eb6686ab9379f70c525dbf46aeee Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Sat, 19 Mar 2016 20:50:02 +0000 Subject: NMS: Intelligent, undocumented active-ports-search --- clients/snmpfetchng.pl | 1 - web/nms.gathering.org/js/nms-info-box.js | 48 +++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/clients/snmpfetchng.pl b/clients/snmpfetchng.pl index 394abae..bece8ab 100755 --- a/clients/snmpfetchng.pl +++ b/clients/snmpfetchng.pl @@ -60,7 +60,6 @@ sub populate_switches { @switches = (); my $limit = $nms::config::snmp_max; - print "called populate\n"; $qswitch->execute($limit) or die "Couldn't get switch"; $dbh->commit; diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index 6b13498..0175b6f 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -140,6 +140,38 @@ nmsInfoBox._makeCommentTable = function(content) { return table; } +nmsInfoBox._searchSmart = function(id, sw) { + if (nmsData.smanagement.switches[sw].distro == id) { + console.log("ieh"); + return true; + } + if (id.match("[a-z]+.active")) { + console.log("hei: " + sw); + var family = id.match("[a-z]+"); + var limit = id; + limit = limit.replace(family + ".active>",""); + limit = limit.replace(family + ".active<",""); + limit = limit.replace(family + ".active=",""); + var operator = id.replace(family + ".active","")[0]; + if (limit == parseInt(limit)) { + if (operator == ">" ) { + if (nmsData.switchstate.switches[sw][family].live > limit) { + return true; + } + } else if (operator == "<") { + if (nmsData.switchstate.switches[sw][family].live < limit) { + return true; + } + } else if (operator == "=") { + if (nmsData.switchstate.switches[sw][family].live == limit) { + return true; + } + } + } + } + return false; +} + /* * FIXME: Not sure this belongs here, it's really part of the "Core" ui, * not just the infobox. @@ -153,11 +185,19 @@ nmsInfoBox._search = function() { } if(id) { for(var sw in nmsData.switches.switches) { - if(sw.indexOf(id) > -1) { - hits++; - nmsMap.setSwitchHighlight(sw,true); + if (id[0] == "/") { + if (nmsInfoBox._searchSmart(id.slice(1),sw)) { + nmsMap.setSwitchHighlight(sw,true); + } else { + nmsMap.setSwitchHighlight(sw,false); + } } else { - nmsMap.setSwitchHighlight(sw,false); + if(sw.indexOf(id) > -1) { + hits++; + nmsMap.setSwitchHighlight(sw,true); + } else { + nmsMap.setSwitchHighlight(sw,false); + } } } } else { -- cgit v1.2.3 From cc2534ef349680951afb0d0dfe7797843d10cccf Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Sat, 19 Mar 2016 19:54:14 +0100 Subject: NMS: Add basic add-switch interface --- web/nms.gathering.org/api/private/switch-add | 32 +------ web/nms.gathering.org/api/private/switch-update | 122 ++++++++++++++++++++++++ web/nms.gathering.org/index.html | 3 +- web/nms.gathering.org/js/nms-info-box.js | 45 ++++++++- 4 files changed, 169 insertions(+), 33 deletions(-) create mode 100755 web/nms.gathering.org/api/private/switch-update diff --git a/web/nms.gathering.org/api/private/switch-add b/web/nms.gathering.org/api/private/switch-add index 3d7b119..70d6212 100755 --- a/web/nms.gathering.org/api/private/switch-add +++ b/web/nms.gathering.org/api/private/switch-add @@ -83,40 +83,10 @@ foreach my $tmp2 (@tmp) { $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, switchtype, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement) VALUES ($template{'ip'}, $template{'sysname'}, $template{'switchtype'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'});"); push @added, $switch{'sysname'}; - } else { - if (defined($switch{'placement'})) { - my %placement; - if ($switch{'placement'} eq "reset") { - %placement = guess_placement($switch{'sysname'}); - } else { - %placement = %{convertplace($switch{'placement'})}; - } - my ($x1,$x2,$y1,$y2); - $x1 = $placement{'x1'}; - $y1 = $placement{'y1'}; - $x2 = $placement{'xx'}; - $y2 = $placement{'yy'}; - $switch{'placement'} = "(($x1,$y1),($x2,$y2))"; - push @dups, "not really, but: " . $switch{'placement'}; - } - if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) { - $switch{'ip'} = $switch{'mgtmt4'}; - } - if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) { - $switch{'secondary_ip'} = $switch{'mgtmt6'}; - } - my @set; - map { - if (defined($template{$_})) { - push @set, "$_=" . $dbh->quote($switch{$_}); - } - } keys %switch; - $nms::web::dbh->do("UPDATE SWITCHES SET " . join(", ", @set) . "WHERE sysname=" . $dbh->quote($switch{'sysname'}) . ";"); - push @dups, $switch{'sysname'}; } } + $json{'switches_addded'} = \@added; -$json{'switches_updated'} = \@dups; print "X-ban: /api/.*switches.*\n"; finalize_output(); diff --git a/web/nms.gathering.org/api/private/switch-update b/web/nms.gathering.org/api/private/switch-update new file mode 100755 index 0000000..3d7b119 --- /dev/null +++ b/web/nms.gathering.org/api/private/switch-update @@ -0,0 +1,122 @@ +#! /usr/bin/perl +# vim:ts=8:sw=8 + +#use CGI qw(fatalsToBrowser); +use DBI; +use lib '../../../../include'; +use nms; +use nms::web qw(%get_params %json finalize_output get_input $dbh); +use nms::util qw(guess_placement); +use strict; +use warnings; +use JSON; +use Data::Dumper; + +$nms::web::cc{'max-age'} = "0"; + +my $in = get_input(); +my @tmp = @{JSON::XS::decode_json($in)}; + +my @added; +my @dups; + +my $sth = $nms::web::dbh->prepare("SELECT sysname FROM switches WHERE sysname=?"); + +my @fields = ('ip', 'sysname', 'switchtype', 'last_updated', 'locked', 'poll_frequency', 'community', 'lldp_chassis_id', 'secondary_ip', 'subnet4', 'subnet6', 'placement', 'distro', 'secondary_ip'); + +sub convertplace +{ + my %in = %{$_[0]}; + my %out = (); + + if (not defined $in{'x1'} and defined($in{'x'})) { + $out{'x1'} = int($in{'x'}); + $out{'y1'} = int($in{'y'}); + $out{'xx'} = int($in{'x'} + $in{'width'}); + $out{'yy'} = int($in{'y'} + $in{'height'}); + } else { + return \%in; + } + return \%out; +} + +foreach my $tmp2 (@tmp) { + my %switch = %{$tmp2}; + my $affected = 0; + my %template = (); + map { $template{$_} = 'DEFAULT' } @fields; + if (not defined($switch{'sysname'})) { + next; + } + + $sth->execute( $switch{'sysname'}); + while ( my @row = $sth->fetchrow_array ) { + $affected += 1; + } + + if ($affected == 0) { + my %placement; + if (not defined ($switch{'placement'})) { + %placement = guess_placement($switch{'sysname'}); + } else { + %placement = %{convertplace($switch{'placement'})}; + } + if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) { + $switch{'ip'} = $switch{'mgtmt4'}; + } + if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) { + $switch{'secondary_ip'} = $switch{'mgtmt6'}; + } + my ($x1,$x2,$y1,$y2); + $x1 = $placement{'x1'}; + $y1 = $placement{'y1'}; + $x2 = $placement{'xx'}; + $y2 = $placement{'yy'}; + $switch{'placement'} = "(($x1,$y1),($x2,$y2))"; + + map { + if (defined ($template{$_})) { + $template{$_} = $dbh->quote($switch{$_}); + } + } keys %switch; + + + $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, switchtype, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement) VALUES ($template{'ip'}, $template{'sysname'}, $template{'switchtype'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'});"); + push @added, $switch{'sysname'}; + } else { + if (defined($switch{'placement'})) { + my %placement; + if ($switch{'placement'} eq "reset") { + %placement = guess_placement($switch{'sysname'}); + } else { + %placement = %{convertplace($switch{'placement'})}; + } + my ($x1,$x2,$y1,$y2); + $x1 = $placement{'x1'}; + $y1 = $placement{'y1'}; + $x2 = $placement{'xx'}; + $y2 = $placement{'yy'}; + $switch{'placement'} = "(($x1,$y1),($x2,$y2))"; + push @dups, "not really, but: " . $switch{'placement'}; + } + if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) { + $switch{'ip'} = $switch{'mgtmt4'}; + } + if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) { + $switch{'secondary_ip'} = $switch{'mgtmt6'}; + } + my @set; + map { + if (defined($template{$_})) { + push @set, "$_=" . $dbh->quote($switch{$_}); + } + } keys %switch; + $nms::web::dbh->do("UPDATE SWITCHES SET " . join(", ", @set) . "WHERE sysname=" . $dbh->quote($switch{'sysname'}) . ";"); + push @dups, $switch{'sysname'}; + } +} +$json{'switches_addded'} = \@added; +$json{'switches_updated'} = \@dups; + +print "X-ban: /api/.*switches.*\n"; +finalize_output(); diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html index e70c9e3..a20ae67 100644 --- a/web/nms.gathering.org/index.html +++ b/web/nms.gathering.org/index.html @@ -74,6 +74,7 @@
  • Enable switch moving
  • Disable switch moving
  • +
  • Add switch
  • Keyboard Shortcuts
  • @@ -104,7 +105,7 @@
    -
    +
    diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index 0175b6f..7e27ce7 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -65,6 +65,7 @@ nmsInfoBox._hide = function() nmsInfoBox._showing = ""; nmsInfoBox._editHide(); nmsInfoBox._snmpHide(); + nmsInfoBox._createHide(); } /* @@ -388,7 +389,7 @@ nmsInfoBox._editSave = function(sw, e) { var myData = nmsInfoBox._editStringify(sw); $.ajax({ type: "POST", - url: "/api/private/switch-add", + url: "/api/private/switch-update", dataType: "text", data:myData, success: function (data, textStatus, jqXHR) { @@ -398,3 +399,45 @@ nmsInfoBox._editSave = function(sw, e) { }); nmsInfoBox._editHide(); } + + +/* + * Display infobox for new switch + * + * TODO: Integrate and rebuild info-box display logic + */ +nmsInfoBox._createShow = function() +{ + var container = document.createElement("div"); + container.className = "col-md-5"; + container.id = "nmsInfoBox-create"; + container.style.zIndex = "999"; + + var swtop = document.getElementById("wrap"); + nmsInfoBox._hide(); + + container.innerHTML = '
    Add new switch
    '; + + swtop.appendChild(container); +} +nmsInfoBox._createSave = function(sw) { + var feedback = document.getElementById("create-switch-feedback"); + var myData = JSON.stringify([{'sysname':sw}]); + $.ajax({ + type: "POST", + url: "/api/private/switch-add", + dataType: "text", + data:myData, + success: function (data, textStatus, jqXHR) { + var result = JSON.parse(data); + if(result.switches_addded.length > 0) { + nmsInfoBox._createHide(); + } + } + }); +} +nmsInfoBox._createHide = function() { + var container = document.getElementById("nmsInfoBox-create"); + if (container != undefined) + container.parentNode.removeChild(container); +} -- cgit v1.2.3 From c7183bab82f51de2bd6294e227ecd4d419d7066e Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Sat, 19 Mar 2016 23:21:10 +0100 Subject: NMS: Fix disappearing BG on resizeEvent --- web/nms.gathering.org/js/nms-map.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web/nms.gathering.org/js/nms-map.js b/web/nms.gathering.org/js/nms-map.js index 9bba1bf..3749a16 100644 --- a/web/nms.gathering.org/js/nms-map.js +++ b/web/nms.gathering.org/js/nms-map.js @@ -138,6 +138,9 @@ nmsMap._resizeEvent = function() { continue; nmsMap._c[a].c.height = nmsMap._canvas.height; nmsMap._c[a].c.width = nmsMap._canvas.width; + if(a == 'bg') { + nmsMap._drawBG(); + } } if (nmsMap._init != true) { console.log("Drawing shit"); -- cgit v1.2.3 From b2f71d875810476af383c0cfcf8e633a0fdb84f0 Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Sun, 20 Mar 2016 10:53:28 +0100 Subject: NMS: Fix nms-map load not triggering --- web/nms.gathering.org/js/nms-map.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/nms.gathering.org/js/nms-map.js b/web/nms.gathering.org/js/nms-map.js index 3749a16..bbb304f 100644 --- a/web/nms.gathering.org/js/nms-map.js +++ b/web/nms.gathering.org/js/nms-map.js @@ -59,7 +59,7 @@ nmsMap.init = function() { this._init = true; nmsData.addHandler("switches","nmsMap",function(){nmsMap._resizeEvent();}); window.addEventListener('resize',nmsMap._resizeEvent,true); - document.addEventListener('load',nmsMap._loadEvent,true); + window.addEventListener('load',nmsMap._loadEvent,true); } nmsMap.setSwitchColor = function(sw, color) { @@ -143,7 +143,6 @@ nmsMap._resizeEvent = function() { } } if (nmsMap._init != true) { - console.log("Drawing shit"); nmsMap._blurDrawn = false; nmsMap._drawBG(); nmsMap._drawAllSwitches(); -- cgit v1.2.3 From 2971d19f9835b0787813af22fd6bad3a6aca88e7 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Sun, 20 Mar 2016 13:05:08 +0000 Subject: NMS: Add dhcp-summary --- web/nms.gathering.org/api/public/dhcp-summary | 19 +++++++++++++++++++ web/nms.gathering.org/js/nms.js | 1 + 2 files changed, 20 insertions(+) create mode 100755 web/nms.gathering.org/api/public/dhcp-summary diff --git a/web/nms.gathering.org/api/public/dhcp-summary b/web/nms.gathering.org/api/public/dhcp-summary new file mode 100755 index 0000000..31bc8eb --- /dev/null +++ b/web/nms.gathering.org/api/public/dhcp-summary @@ -0,0 +1,19 @@ +#! /usr/bin/perl +use lib '../../../../include'; +use nms::web; + +nms::web::setwhen('2h'); +my $q = $nms::web::dbh->prepare("select count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp;"); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { + $nms::web::json{'dhcp'}{'total'} = $ref; +} + +my $q2 = $nms::web::dbh->prepare("select count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp where $nms::web::when;"); +$q2->execute(); +while (my $ref = $q2->fetchrow_hashref()) { + $nms::web::json{'dhcp'}{'recent'} = $ref; +} +$nms::web::cc{'max-age'} = "10"; +$nms::web::cc{'stale-while-revalidate'} = "15"; +finalize_output(); diff --git a/web/nms.gathering.org/js/nms.js b/web/nms.gathering.org/js/nms.js index 1270a7f..bf13c57 100644 --- a/web/nms.gathering.org/js/nms.js +++ b/web/nms.gathering.org/js/nms.js @@ -465,6 +465,7 @@ function initNMS() { nmsData.registerSource("ping", "/api/public/ping"); nmsData.registerSource("switches","/api/public/switches"); nmsData.registerSource("switchstate","/api/public/switch-state"); + nmsData.registerSource("dhcpsummary","/api/public/dhcp-summary"); // This is a magic dummy-source, it's purpose is to give a unified // way to get ticks every second. It is mainly meant to allow map -- cgit v1.2.3 From 0ff7168d629c33a76ee117767a279afaabbca85c Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Sun, 20 Mar 2016 14:09:25 +0000 Subject: NMS: Update schema with recent dhcp-changes --- nms/nms-dump.sql | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/nms/nms-dump.sql b/nms/nms-dump.sql index bbe141d..335a3b0 100644 --- a/nms/nms-dump.sql +++ b/nms/nms-dump.sql @@ -44,17 +44,18 @@ SET default_tablespace = ''; SET default_with_oids = false; -- --- Name: dhcp; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- Name: dhcp; Type: TABLE; Schema: public; Owner: nms; Tablespace: -- CREATE TABLE dhcp ( switch integer, "time" timestamp without time zone, - mac macaddr + mac macaddr, + ip inet ); -ALTER TABLE dhcp OWNER TO postgres; +ALTER TABLE dhcp OWNER TO nms; -- -- Name: linknet_ping; Type: TABLE; Schema: public; Owner: nms; Tablespace: @@ -162,7 +163,7 @@ CREATE TABLE seen_mac ( ALTER TABLE seen_mac OWNER TO nms; -- --- Name: snmp; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- Name: snmp; Type: TABLE; Schema: public; Owner: nms; Tablespace: -- CREATE TABLE snmp ( @@ -176,7 +177,7 @@ CREATE TABLE snmp ( ALTER TABLE snmp OWNER TO nms; -- --- Name: snmp_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- Name: snmp_id_seq; Type: SEQUENCE; Schema: public; Owner: nms -- CREATE SEQUENCE snmp_id_seq @@ -190,7 +191,7 @@ CREATE SEQUENCE snmp_id_seq ALTER TABLE snmp_id_seq OWNER TO nms; -- --- Name: snmp_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- Name: snmp_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms -- ALTER SEQUENCE snmp_id_seq OWNED BY snmp.id; @@ -292,7 +293,7 @@ ALTER TABLE ONLY linknets ALTER COLUMN linknet SET DEFAULT nextval('linknets_lin -- --- Name: id; Type: DEFAULT; Schema: public; Owner: postgres +-- Name: id; Type: DEFAULT; Schema: public; Owner: nms -- ALTER TABLE ONLY snmp ALTER COLUMN id SET DEFAULT nextval('snmp_id_seq'::regclass); @@ -354,14 +355,14 @@ ALTER TABLE ONLY switches -- --- Name: dhcp_switch; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: dhcp_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX dhcp_switch ON dhcp USING btree (switch); -- --- Name: dhcp_time; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: dhcp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX dhcp_time ON dhcp USING btree ("time"); @@ -417,21 +418,21 @@ CREATE INDEX seen_mac_seen ON seen_mac USING btree (seen); -- --- Name: snmp_time; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: snmp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX snmp_time ON snmp USING btree ("time"); -- --- Name: snmp_time15; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: snmp_time15; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX snmp_time15 ON snmp USING btree (id, switch); -- --- Name: snmp_time6; Type: INDEX; Schema: public; Owner: postgres; Tablespace: +-- Name: snmp_time6; Type: INDEX; Schema: public; Owner: nms; Tablespace: -- CREATE INDEX snmp_time6 ON snmp USING btree ("time" DESC, switch); @@ -466,7 +467,7 @@ CREATE INDEX updated_index3 ON ping_secondary_ip USING btree ("time"); -- --- Name: dhcp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- Name: dhcp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms -- ALTER TABLE ONLY dhcp @@ -474,7 +475,7 @@ ALTER TABLE ONLY dhcp -- --- Name: snmp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- Name: snmp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms -- ALTER TABLE ONLY snmp @@ -525,23 +526,23 @@ GRANT ALL ON TABLE seen_mac TO nms; -- --- Name: snmp; Type: ACL; Schema: public; Owner: postgres +-- Name: snmp; Type: ACL; Schema: public; Owner: nms -- REVOKE ALL ON TABLE snmp FROM PUBLIC; -REVOKE ALL ON TABLE snmp FROM postgres; -GRANT ALL ON TABLE snmp TO postgres; +REVOKE ALL ON TABLE snmp FROM nms; GRANT ALL ON TABLE snmp TO nms; +GRANT ALL ON TABLE snmp TO postgres; -- --- Name: snmp_id_seq; Type: ACL; Schema: public; Owner: postgres +-- Name: snmp_id_seq; Type: ACL; Schema: public; Owner: nms -- REVOKE ALL ON SEQUENCE snmp_id_seq FROM PUBLIC; -REVOKE ALL ON SEQUENCE snmp_id_seq FROM postgres; -GRANT ALL ON SEQUENCE snmp_id_seq TO postgres; +REVOKE ALL ON SEQUENCE snmp_id_seq FROM nms; GRANT ALL ON SEQUENCE snmp_id_seq TO nms; +GRANT ALL ON SEQUENCE snmp_id_seq TO postgres; -- -- cgit v1.2.3 From 699d843a141f3bc8a835c38cce039737f3dfd5ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 17:37:56 +0100 Subject: Readme: updated docker cms + added link location to working dev site. --- nms/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nms/README.md b/nms/README.md index 739fc5b..7be3f14 100644 --- a/nms/README.md +++ b/nms/README.md @@ -21,11 +21,12 @@ And make sure that your user is in the docker group, so that you can run docker -- getting to prompt(without cgroup): `docker run -v "/home/kiro/repos/tgmanage:/srv/tgmanage" -v "/home/kiro/repos/tgmanage/nms/.bashrc:/root/.bashrc" -w "/srv/tgmanage/web/nms.gathering.org" \ --it --privileged nms-front /bin/bash` +-rm=true -ti --name=front --privileged nms-front /bin/bash` - Find IP's: `docker inspect nms-db | grep "IPAddress\":"` `docker inspect nms-front | grep "IPAddress\":"` - Open the nms-front ip in the web browser. +http://172.17.0.2:8080/ -- cgit v1.2.3 From fe68ba984f7f1c1e586fc02219b80adedb64c555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 18:03:36 +0100 Subject: bash rc stuffs for dev docker container. --- nms/.bashrc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/nms/.bashrc b/nms/.bashrc index c1fd16f..06072e3 100644 --- a/nms/.bashrc +++ b/nms/.bashrc @@ -1,5 +1,13 @@ NAME='NMS Docker' + +ln -s /srv/tgmanage/web/etc/apache2/nms.tg16.gathering.org.conf /etc/apache2/sites-enabled/ +ln -s /srv/tgmanage/nms/config.pm /srv/tgmanage/include/ +echo 'demo:$apr1$IKrQYF6x$0zmRciLR7Clc2tEEosyHV.' > /srv/tgmanage/web/.htpasswd + +/etc/init.d/apache2 restart +echo "go here to look at nms: http://172.17.0.2:8080/" + # Aliases alias h="history" alias l="ls -lAhoF --color --show-control-chars" -- cgit v1.2.3 From ae28f0b1b1e584fbe7ee818020a07d647548785f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 20:31:54 +0100 Subject: web.pm spellingmistake jso->json --- include/nms/web.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/nms/web.pm b/include/nms/web.pm index 2a5e132..b36d692 100755 --- a/include/nms/web.pm +++ b/include/nms/web.pm @@ -81,7 +81,7 @@ sub finalize_output { printcc; print "Etag: $hash\n"; - print "Content-Type: text/jso; charset=utf-8\n\n"; + print "Content-Type: text/json; charset=utf-8\n\n"; print JSON::XS::encode_json(\%json); print "\n"; } -- cgit v1.2.3 From 7d97e4c3bead329419d594daac11644e14c000e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 20:32:22 +0100 Subject: readability in switch-state --- web/nms.gathering.org/api/public/switch-state | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/web/nms.gathering.org/api/public/switch-state b/web/nms.gathering.org/api/public/switch-state index 38f4c57..62d0078 100755 --- a/web/nms.gathering.org/api/public/switch-state +++ b/web/nms.gathering.org/api/public/switch-state @@ -7,10 +7,11 @@ use strict; use warnings; use Data::Dumper; -my $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . 'group by switch);'); +my $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' + . $nms::web::when . 'group by switch);'); $q->execute(); -while (my $ref = $q->fetchrow_hashref()) { +while ( my $ref = $q->fetchrow_hashref() ) { my $sysname = $ref->{'sysname'}; my %data = %{JSON::XS::decode_json($ref->{'data'})}; @@ -37,6 +38,7 @@ while (my $ref = $q->fetchrow_hashref()) { } $json{'switches'}{$sysname}{'time'} = $ref->{'time'}; } + $nms::web::cc{'max-age'} = "5"; $nms::web::cc{'stale-while-revalidate'} = "30"; finalize_output(); -- cgit v1.2.3 From 65bc1d20d443c987df5681b87967974c12169ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 20:32:42 +0100 Subject: strict and warnings in dhcp-summary. --- web/nms.gathering.org/api/public/dhcp-summary | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/nms.gathering.org/api/public/dhcp-summary b/web/nms.gathering.org/api/public/dhcp-summary index 31bc8eb..dd643b2 100755 --- a/web/nms.gathering.org/api/public/dhcp-summary +++ b/web/nms.gathering.org/api/public/dhcp-summary @@ -1,5 +1,7 @@ #! /usr/bin/perl use lib '../../../../include'; +use strict; +use warnings; use nms::web; nms::web::setwhen('2h'); -- cgit v1.2.3 From b5b57c04f96b3ddedf8b94dc2188e9d421b53cde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 20:33:02 +0100 Subject: line breakup in snmp --- web/nms.gathering.org/api/private/snmp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/nms.gathering.org/api/private/snmp b/web/nms.gathering.org/api/private/snmp index 4779659..f69ca62 100755 --- a/web/nms.gathering.org/api/private/snmp +++ b/web/nms.gathering.org/api/private/snmp @@ -13,7 +13,8 @@ use Data::Dumper; $nms::web::cc{'max-age'} = "10"; -my $q = $nms::web::dbh->prepare('select sysname,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . 'group by switch);'); +my $q = $nms::web::dbh->prepare('select sysname,data from snmp natural join switches where id in (select max(id) from snmp where ' + . $nms::web::when . 'group by switch);'); $q->execute(); while (my $ref = $q->fetchrow_hashref()) { -- cgit v1.2.3 From f96901df27b451cb9f08a513932d0034042b0c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 20:33:39 +0100 Subject: ping cleanup/formatting, and timestamp to seconds conversion improvement. --- web/nms.gathering.org/api/public/ping | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/web/nms.gathering.org/api/public/ping b/web/nms.gathering.org/api/public/ping index bf92440..ba572af 100755 --- a/web/nms.gathering.org/api/public/ping +++ b/web/nms.gathering.org/api/public/ping @@ -1,31 +1,35 @@ #! /usr/bin/perl use lib '../../../../include'; +use strict; +use warnings; use nms::web; #nms::web::setwhen('1s'); -my $q = $nms::web::dbh->prepare("SELECT DISTINCT ON (sysname) (now() - time) as age,sysname, latency_ms FROM ping NATURAL JOIN switches WHERE time in (select max(time) from ping where " . $nms::web::when . " group by switch)"); +my $q = $nms::web::dbh->prepare("SELECT DISTINCT ON (sysname) (now() - time) as age,sysname, latency_ms FROM ping NATURAL JOIN switches WHERE time in (select max(time) from ping where " + . $nms::web::when . " group by switch)"); + $q->execute(); while (my $ref = $q->fetchrow_hashref()) { - $nms::web::json{'switches'}{$ref->{'sysname'}}{'latency'} = $ref->{'latency_ms'}; - # This isn't pretty, feel free to fix, but I want age == seconds - # without decimals. - my ($h,$m,$ss) = split(':', $ref->{'age'}); - my ($s,undef) = split('\.', "$ss"); - - $nms::web::json{'switches'}{$ref->{'sysname'}}{'age'} = ($h*60*60) + ($m*60) + $s;# $$ref->{'age'}; + $nms::web::json{'switches'}{$ref->{'sysname'}}{'latency'} = $ref->{'latency_ms'}; + # Get seconds, without decimlas, from timestamp. + # '00:01:01.435601' => 61 seconds. + my ( $h, $m, $s ) = split( ':|\.', $ref->{'age'} ); + $nms::web::json{'switches'}{$ref->{'sysname'}}{'age'} = ($h*60*60) + ($m*60) + $s; # $$ref->{'age'}; } -my $qs = $nms::web::dbh->prepare("SELECT DISTINCT ON (switch) switch, latency_ms FROM ping_secondary_ip WHERE " . $nms::web::when . " ORDER BY switch, time DESC;"); +my $qs = $nms::web::dbh->prepare("SELECT DISTINCT ON (switch) switch, latency_ms FROM ping_secondary_ip WHERE " + . $nms::web::when . " ORDER BY switch, time DESC;"); $qs->execute(); -while (my $ref = $qs->fetchrow_hashref()) { - $nms::web::json{'switches'}{$ref->{'switch'}}{'latency_secondary'} = $ref->{'latency_ms'}; +while ( my $ref = $qs->fetchrow_hashref() ) { + $nms::web::json{'switches'}{$ref->{'switch'}}{'latency_secondary'} = $ref->{'latency_ms'}; } -my $lq = $nms::web::dbh->prepare("SELECT DISTINCT ON (linknet) linknet, latency1_ms, latency2_ms FROM linknet_ping WHERE ". $nms::web::when . " ORDER BY linknet, time DESC;"); +my $lq = $nms::web::dbh->prepare("SELECT DISTINCT ON (linknet) linknet, latency1_ms, latency2_ms FROM linknet_ping WHERE " + . $nms::web::when . " ORDER BY linknet, time DESC;"); $lq->execute(); -while (my $ref = $lq->fetchrow_hashref()) { - $nms::web::json{'linknets'}{$ref->{'linknet'}} = [ $ref->{'latency1_ms'}, $ref->{'latency2_ms'} ]; +while ( my $ref = $lq->fetchrow_hashref() ) { + $nms::web::json{'linknets'}{$ref->{'linknet'}} = [ $ref->{'latency1_ms'}, $ref->{'latency2_ms'} ]; } $nms::web::cc{'max-age'} = "1"; -- cgit v1.2.3 From 11fc373807b9a14ee14499165b00f5e775d11a59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 21:49:15 +0100 Subject: which switch an I on script file. --- web/nms.gathering.org/api/private/which-switch-am-i-on | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 web/nms.gathering.org/api/private/which-switch-am-i-on diff --git a/web/nms.gathering.org/api/private/which-switch-am-i-on b/web/nms.gathering.org/api/private/which-switch-am-i-on new file mode 100755 index 0000000..4adfb2b --- /dev/null +++ b/web/nms.gathering.org/api/private/which-switch-am-i-on @@ -0,0 +1,15 @@ +#! /usr/bin/perl +# vim:ts=8:sw=8 + +use lib '../../../../include'; +use nms::web; +use strict; +use warnings; + +my $query = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,state,username,id,comment from switch_comments natural join switches where state != \'delete\' order by time desc'); +$query->execute(); +while (my $ref = $query->fetchrow_hashref()) { + push @{$nms::web::json{'comments'}{$ref->{'sysname'}}{'comments'}},$ref; +} + +nms::web::finalize_output(); -- cgit v1.2.3 From 925af79d0cceb61755a0846f78fa46fbf0012406 Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Sun, 20 Mar 2016 22:08:38 +0100 Subject: NMS: Rewrite infoBox to enable multiple windowTypes --- web/nms.gathering.org/index.html | 6 +- web/nms.gathering.org/js/nms-info-box.js | 526 +++++++++++++++++-------------- 2 files changed, 288 insertions(+), 244 deletions(-) diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html index a20ae67..bdb5912 100644 --- a/web/nms.gathering.org/index.html +++ b/web/nms.gathering.org/index.html @@ -74,7 +74,7 @@
  • Enable switch moving
  • Disable switch moving
  • -
  • Add switch
  • +
  • Add switch
  • Keyboard Shortcuts
  • @@ -222,9 +222,7 @@
    - diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index 7e27ce7..49825bc 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -1,71 +1,316 @@ "use strict"; /* - * Handle the info-box for switches (e.g.: what's shown when a switch is - * clicked). + * NMS info window controller + * + * Interface: nmsInfoBox.showWindow(windowType,optionalParameter), nmsInfoBox.hide(), nmsInfoBox.refresh() + * + * Any windowTypes should at a minimum implement load, unload, getTitle, getContent, getChildContent + * + * TODO: Implement useful update methods on windowTypes * - * Interfaces: show(switch), hide(), click(switch). */ - var nmsInfoBox = nmsInfoBox || { - stats: {}, - _showing:"" // Which switch we are displaying (if any). + stats: {}, + _container: false, //Container window + _window: false, //Active window (reference to _windowTypes object or false) + _windowTypes: [], //List of all avaliable window types +} + +/* + * Shows a window from the _windowTypes list + */ +nmsInfoBox.showWindow = function (windowName,argument) { + nmsInfoBox.hide(); + for(var win in this._windowTypes) { + if(windowName == win) { + this._window = this._windowTypes[win]; + this._show(argument); + return; + } + } } /* - * Show the infobox for a switch. + * Refresh the active window * - * Just a wrapper for _show, but adds a handler for comments. Could easily - * add a handler for other events too. E.g.: switches. + * Todo: Could use a less aggressive refresh that doesn't hide-show everything + * + */ +nmsInfoBox.refresh = function() { + nmsInfoBox._show(); +} + +/* + * Internal function to show the active _window and pass along any arguments */ -nmsInfoBox.show = function(x) { - nmsData.addHandler("comments","switchshower",nmsInfoBox._show,x); - nmsData.addHandler("switches","switchshower",nmsInfoBox._show,x); - nmsData.addHandler("smanagement","switchshower",nmsInfoBox._show,x); - nmsInfoBox._show(x); +nmsInfoBox._show = function(argument) { + nmsData.addHandler("comments","switchshower",nmsInfoBox.update,argument); + nmsData.addHandler("switches","switchshower",nmsInfoBox.update,argument); + nmsData.addHandler("smanagement","switchshower",nmsInfoBox.update,argument); + nmsData.addHandler("snmp","switchshower",nmsInfoBox.update,argument); + + this._window.load(argument); + + this._container = document.getElementById("info-panel-container"); + var panel = document.createElement("div"); + panel.classList.add("panel", "panel-default"); + var title = document.createElement("div"); + title.classList.add("panel-heading"); + var body = document.createElement("div"); + body.classList.add("panel-body"); + + title.innerHTML = this._window.getTitle() + ''; + var content = this._window.getContent(); + if(!content.nodeName) { + body.innerHTML = this._window.content; + } else { + body.appendChild(content); + } + var childContent = this._window.getChildContent(); + if(childContent != false) { + body.appendChild(childContent); + } + + panel.appendChild(title); + panel.appendChild(body); + while(this._container.firstChild) { + this._container.removeChild(this._container.firstChild); + } + this._container.appendChild(panel); + this._container.style.display = "block"; } /* - * Hide switch info-box and remove handler. + * Hide the active window and tell it to unload */ nmsInfoBox.hide = function() { - nmsInfoBox._hide(); + if(this._container == false || this._window == false) + return; + this._container.style.display = "none"; + this._window.unload(); + this._window = false; nmsData.unregisterHandler("comments","switchshower"); nmsData.unregisterHandler("switches","switchshower"); nmsData.unregisterHandler("smanagement","switchshower"); + nmsData.unregisterHandler("snmp","switchshower"); } /* - * Click a switch: If it's currently showing: hide it, otherwise display + * Window type: Add Switch + * + * Basic window that lets you create a new switch + * + */ +nmsInfoBox._windowTypes.addSwitch = { + title: 'Add new switch', + content: '', + childContent: false, + getTitle: function() { + return this.title; + }, + getContent: function() { + return this.content; + }, + getChildContent: function() { + return this.childContent; + }, + load: function(argument) { + }, + unload: function() { + }, + save: function() { + var sysname = document.getElementById('create-sysname').value; + var myData = JSON.stringify([{'sysname':sysname}]); + $.ajax({ + type: "POST", + url: "/api/private/switch-add", + dataType: "text", + data:myData, + success: function (data, textStatus, jqXHR) { + var result = JSON.parse(data); + if(result.switches_addded.length > 0) { + nmsInfoBox.hide(); + } + } + }); + } +}; + +/* + * Window type: Switch info + * + * Advanced window with information about a specific switch, and basic editing options + * + * Custom interfaces: showComments, showSNMP, showEdit, save + * + */ +nmsInfoBox._windowTypes.switchInfo = { + title: '', + content: '', + childContent: false, + sw: '', + swi: '', + swm: '', + load: function(sw) { + if(sw) { + this.sw = sw; + } + this.swi = nmsData.switches["switches"][this.sw]; + this.swm = nmsData.smanagement.switches[this.sw]; + + var content = []; + + for (var v in this.swi) { + if (v == "placement") { + var place = JSON.stringify(this.swi[v]); + content.push([v,place]); + continue; + } + content.push([v, this.swi[v]]); + } + + for (var v in this.swm) { + content.push([v, this.swm[v]]); + } + content.sort(); + + var infotable = nmsInfoBox._makeTable(content); + infotable.id = "info-switch-table"; + + this.content = infotable; + + }, + getTitle: function() { + return ' ' + this.sw + ''; + }, + getContent: function() { + return this.content; + }, + getChildContent: function() { + return this.childContent; + }, + showComments: function() { + var domObj = document.createElement("div"); + var comments = []; + if (nmsData.comments.comments != undefined && nmsData.comments.comments[this.sw] != undefined) { + for (var c in nmsData.comments.comments[this.sw]["comments"]) { + var comment = nmsData.comments.comments[this.sw]["comments"][c]; + if (comment["state"] == "active" || comment["state"] == "persist" || comment["state"] == "inactive") { + comments.push(comment); + } + } + } + + if (comments.length > 0) { + var commenttable = nmsInfoBox._makeCommentTable(comments); + commenttable.id = "info-switch-comments-table"; + domObj.appendChild(commenttable); + $(function () { $('[data-toggle="popover"]').popover({placement:"top",continer:'body'}) }) + } + var commentbox = document.createElement("div"); + commentbox.id = "commentbox"; + commentbox.className = "panel-body"; + commentbox.style.width = "100%"; + commentbox.innerHTML = '
    '; + domObj.appendChild(commentbox); + + this.childContent = domObj; + nmsInfoBox.refresh(); + }, + showEdit: function() { + var domObj = document.createElement("div"); + var template = {}; + + nmsInfoBox._editValues = {}; + for (var v in this.swi) { + if (v == "placement") { + var place = JSON.stringify(this.swi[v]); + template[v] = place; + continue; + } + template[v] = nmsInfoBox._nullBlank(this.swi[v]); + } + for (var v in this.swm) { + template[v] = nmsInfoBox._nullBlank(this.swm[v]); + } + var content = []; + for (v in template) { + var tmpsw = '\'' + this.sw + '\''; + var tmpv = '\'' + v + '\''; + var tmphandler = '"nmsInfoBox._editChange(' + tmpsw + ',' + tmpv + ');"'; + var html = "'; + content.push([v, html]); + } + + var table = nmsInfoBox._makeTable(content, "edit"); + domObj.appendChild(table); + + var submit = document.createElement("button"); + submit.innerHTML = "Save changes"; + submit.classList.add("btn", "btn-primary"); + submit.id = "edit-submit-" + this.sw; + submit.onclick = function(e) { nmsInfoBox._windowTypes.switchInfo.save(); }; + domObj.appendChild(submit); + + var output = document.createElement("output"); + output.id = "edit-output"; + domObj.appendChild(output); + + if (place) { + var pval = document.getElementById("edit-" + this.sw + "-placement"); + if (pval) { + pval.value = place; + } + } + + this.childContent = domObj; + nmsInfoBox.refresh(); + }, + showSNMP: function(tree) { + var domObj = document.createElement("div"); + + var output = document.createElement("output"); + output.id = "edit-output"; + output.style = "white-space: pre;"; + try { + output.value = JSON.stringify(nmsData.snmp.snmp[this.sw][tree],null,4); + } catch(e) { + output.value = "(no recent data (yet)?)"; + } + domObj.appendChild(output); + + this.childContent = domObj; + nmsInfoBox.refresh(); + }, + unload: function() { + this.childContent = false; + }, + save: function() { + var myData = nmsInfoBox._editStringify(this.sw); + console.log(myData); + $.ajax({ + type: "POST", + url: "/api/private/switch-update", + dataType: "text", + data:myData, + success: function (data, textStatus, jqXHR) { + nmsData.invalidate("switches"); + nmsData.invalidate("smanagement"); + } + }); + nmsInfoBox.hide(); + } +}; + +/* + * Click a switch and display it * it. */ nmsInfoBox.click = function(sw) { - if (nmsInfoBox._showing == sw) - nmsInfoBox.hide(); - else - nmsInfoBox.show(sw); -} - -nmsInfoBox._hide = function() -{ - var swtop = document.getElementById("info-switch-parent"); - var switchele = document.getElementById("info-switch-table"); - var comments = document.getElementById("info-switch-comments-table"); - var commentbox; - if (switchele != undefined) - switchele.parentNode.removeChild(switchele); - if (comments != undefined) - comments.parentNode.removeChild(comments); - commentbox = document.getElementById("commentbox"); - if (commentbox != undefined) - commentbox.parentNode.removeChild(commentbox); - swtop.style.display = 'none'; - nmsInfoBox._showing = ""; - nmsInfoBox._editHide(); - nmsInfoBox._snmpHide(); - nmsInfoBox._createHide(); + this.showWindow("switchInfo",sw); } /* @@ -206,86 +451,6 @@ nmsInfoBox._search = function() { } } -nmsInfoBox._snmp = function(x,tree) -{ - - nmsInfoBox._snmpHide(); - var container = document.createElement("div"); - container.id = "nmsInfoBox-snmp-show"; - - var swtop = document.getElementById("info-switch-parent"); - var output = document.createElement("output"); - output.id = "edit-output"; - output.style = "white-space: pre;"; - try { - output.value = JSON.stringify(nmsData.snmp.snmp[x][tree],null,4); - } catch(e) { - output.value = "(no recent data (yet)?)"; - } - container.appendChild(output); - swtop.appendChild(container); -} -/* - * Display info on switch "x" in the info-box - * - * Use nmsInfoBox.show(), otherwise changes wont be picked up. - */ -nmsInfoBox._show = function(x) -{ - var sw = nmsData.switches["switches"][x]; - var swm = nmsData.smanagement.switches[x]; - var swtop = document.getElementById("info-switch-parent"); - var swpanel = document.getElementById("info-switch-panel-body"); - var swtitle = document.getElementById("info-switch-title"); - var content = []; - - - nmsInfoBox._hide(); - nmsInfoBox._showing = x; - - swtitle.innerHTML = ' ' + x + ' '; - - for (var v in sw) { - if (v == "placement") { - var place = JSON.stringify(sw[v]); - content.push([v,place]); - continue; - } - content.push([v, sw[v]]); - } - - for (var v in swm) { - content.push([v, swm[v]]); - } - content.sort(); - - var comments = []; - if (nmsData.comments.comments != undefined && nmsData.comments.comments[x] != undefined) { - for (var c in nmsData.comments.comments[x]["comments"]) { - var comment = nmsData.comments.comments[x]["comments"][c]; - if (comment["state"] == "active" || comment["state"] == "persist" || comment["state"] == "inactive") { - comments.push(comment); - } - } - } - - var infotable = nmsInfoBox._makeTable(content); - infotable.id = "info-switch-table"; - swtop.appendChild(infotable); - if (comments.length > 0) { - var commenttable = nmsInfoBox._makeCommentTable(comments); - commenttable.id = "info-switch-comments-table"; - swtop.appendChild(commenttable); - $(function () { $('[data-toggle="popover"]').popover({placement:"top",continer:'body'}) }) - } - var commentbox = document.createElement("div"); - commentbox.id = "commentbox"; - commentbox.className = "panel-body"; - commentbox.style.width = "100%"; - commentbox.innerHTML = '
    '; - swtop.appendChild(commentbox); - swtop.style.display = 'block'; -} nmsInfoBox._nullBlank = function(x) { if (x == null || x == false || x == undefined) @@ -293,69 +458,6 @@ nmsInfoBox._nullBlank = function(x) { return x; } -nmsInfoBox._editHide = function() { - var container = document.getElementById("nmsInfoBox-edit-box"); - if (container != undefined) - container.parentNode.removeChild(container); -} -nmsInfoBox._snmpHide = function() { - var container = document.getElementById("nmsInfoBox-snmp-show"); - if (container != undefined) - container.parentNode.removeChild(container); -} - -nmsInfoBox._edit = function(sw) { - var template = {}; - var place = false; - nmsInfoBox._editHide(); - nmsInfoBox._snmpHide(); - var container = document.createElement("div"); - container.id = "nmsInfoBox-edit-box"; - - nmsInfoBox._editValues = {}; - if (nmsData.switches.switches[sw] != undefined) { - for (var v in nmsData.switches.switches[sw]) { - if (v == "placement") { - place = JSON.stringify(nmsData.switches.switches[sw][v]); - template[v] = ""; - continue; - } - template[v] = this._nullBlank(nmsData.switches.switches[sw][v]); - } - } - if (nmsData.smanagement.switches[sw] != undefined) { - for (var v in nmsData.smanagement.switches[sw]) { - template[v] = this._nullBlank(nmsData.smanagement.switches[sw][v]); - } - } - var content = []; - for (v in template) { - var tmpsw = '\'' + sw + '\''; - var tmpv = '\'' + v + '\''; - var tmphandler = '"nmsInfoBox._editChange(' + tmpsw + ',' + tmpv + ');"'; - var html = "'; - content.push([v, html]); - } - var table = nmsInfoBox._makeTable(content, "edit"); - var swtop = document.getElementById("info-switch-parent"); - container.appendChild(table); - var submit = document.createElement("button"); - submit.innerHTML = "Save changes"; - submit.classList.add("btn", "btn-primary"); - submit.id = "edit-submit-" + sw; - submit.onclick = function(e) { nmsInfoBox._editSave(sw, e); }; - container.appendChild(submit); - var output = document.createElement("output"); - output.id = "edit-output"; - container.appendChild(output); - swtop.appendChild(container); - if (place) { - var pval = document.getElementById("edit-" + sw + "-placement"); - if (pval) { - pval.value = place; - } - } -} nmsInfoBox._editChange = function(sw, v) { var el = document.getElementById("edit-" + sw + "-" + v); @@ -385,59 +487,3 @@ nmsInfoBox._editStringify = function(sw) { var myData = JSON.stringify([nmsInfoBox._editValues]); return myData; } -nmsInfoBox._editSave = function(sw, e) { - var myData = nmsInfoBox._editStringify(sw); - $.ajax({ - type: "POST", - url: "/api/private/switch-update", - dataType: "text", - data:myData, - success: function (data, textStatus, jqXHR) { - nmsData.invalidate("switches"); - nmsData.invalidate("smanagement"); - } - }); - nmsInfoBox._editHide(); -} - - -/* - * Display infobox for new switch - * - * TODO: Integrate and rebuild info-box display logic - */ -nmsInfoBox._createShow = function() -{ - var container = document.createElement("div"); - container.className = "col-md-5"; - container.id = "nmsInfoBox-create"; - container.style.zIndex = "999"; - - var swtop = document.getElementById("wrap"); - nmsInfoBox._hide(); - - container.innerHTML = '
    Add new switch
    '; - - swtop.appendChild(container); -} -nmsInfoBox._createSave = function(sw) { - var feedback = document.getElementById("create-switch-feedback"); - var myData = JSON.stringify([{'sysname':sw}]); - $.ajax({ - type: "POST", - url: "/api/private/switch-add", - dataType: "text", - data:myData, - success: function (data, textStatus, jqXHR) { - var result = JSON.parse(data); - if(result.switches_addded.length > 0) { - nmsInfoBox._createHide(); - } - } - }); -} -nmsInfoBox._createHide = function() { - var container = document.getElementById("nmsInfoBox-create"); - if (container != undefined) - container.parentNode.removeChild(container); -} -- cgit v1.2.3 From e763a7874093d7c36b89424b116dd99fc2966312 Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Sun, 20 Mar 2016 23:53:39 +0100 Subject: NMS: Enable search GO-button --- web/nms.gathering.org/index.html | 2 +- web/nms.gathering.org/js/nms-info-box.js | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html index bdb5912..db1acfa 100644 --- a/web/nms.gathering.org/index.html +++ b/web/nms.gathering.org/index.html @@ -92,7 +92,7 @@
    - +
    diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index 49825bc..d484cc8 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -425,7 +425,7 @@ nmsInfoBox._searchSmart = function(id, sw) { nmsInfoBox._search = function() { var el = document.getElementById("searchbox"); var id = false; - var hits = 0; + var matches = []; if (el) { id = el.value; } @@ -433,13 +433,14 @@ nmsInfoBox._search = function() { for(var sw in nmsData.switches.switches) { if (id[0] == "/") { if (nmsInfoBox._searchSmart(id.slice(1),sw)) { + matches.push(sw); nmsMap.setSwitchHighlight(sw,true); } else { nmsMap.setSwitchHighlight(sw,false); } } else { if(sw.indexOf(id) > -1) { - hits++; + matches.push(sw); nmsMap.setSwitchHighlight(sw,true); } else { nmsMap.setSwitchHighlight(sw,false); @@ -449,6 +450,16 @@ nmsInfoBox._search = function() { } else { nmsMap.removeAllSwitchHighlights(); } + if(matches.length == 1) { + document.getElementById("searchbox-submit").classList.add("btn-primary"); + document.getElementById("searchbox").addEventListener("keydown",function(e) { + if(e.keyCode == 13) + nmsInfoBox.showWindow("switchInfo",matches[0]); + }); + } else { + document.getElementById("searchbox-submit").classList.remove("btn-primary"); + document.getElementById("searchbox").removeEventListener("keydown",false); + } } -- cgit v1.2.3 From 6fa911c8565a54c9b56cfae479a92da094990876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Sun, 20 Mar 2016 23:53:46 +0100 Subject: which switch: getting IP and printing it. Need to style with html. --- .../api/private/which-switch-am-i-on | 23 ++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/web/nms.gathering.org/api/private/which-switch-am-i-on b/web/nms.gathering.org/api/private/which-switch-am-i-on index 4adfb2b..82436ea 100755 --- a/web/nms.gathering.org/api/private/which-switch-am-i-on +++ b/web/nms.gathering.org/api/private/which-switch-am-i-on @@ -5,11 +5,26 @@ use lib '../../../../include'; use nms::web; use strict; use warnings; +use Data::Dumper; -my $query = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,state,username,id,comment from switch_comments natural join switches where state != \'delete\' order by time desc'); +#my $query = $nms::web::dbh->prepare("select * from switches where '185.110.150.7' << subnet4"); +my $query = $nms::web::dbh->prepare("select * from switches where '88.92.5.67' << subnet4"); $query->execute(); -while (my $ref = $query->fetchrow_hashref()) { - push @{$nms::web::json{'comments'}{$ref->{'sysname'}}{'comments'}},$ref; + +print "Cache-Control: max-age=0"; +print "Content-Type: text/html"; +print "\n\n"; + +# get user ip from somewhere. +# HTTP_X_FORWARDED_FOR is set by varnish. When using varnish, the REMOTE_ADDR will always be localhost. +my $addr = $ENV{HTTP_X_FORWARDED_FOR} // $ENV{REMOTE_ADDR}; +print "-:" . $addr ."\n"; + + +# add start html: header + body etc. + +while ( my $ref = $query->fetchrow_hashref() ) { + print $ref->{sysname}. " @ " . $ref->{distro}; } -nms::web::finalize_output(); +# add end html -- cgit v1.2.3 From 3d840d42ab7a05059b457fd5ffb22b6c3beea8a6 Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Mon, 21 Mar 2016 00:26:14 +0100 Subject: NMS: Improve search GO-button event listener --- web/nms.gathering.org/js/nms-info-box.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index d484cc8..88bc7d7 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -452,13 +452,19 @@ nmsInfoBox._search = function() { } if(matches.length == 1) { document.getElementById("searchbox-submit").classList.add("btn-primary"); - document.getElementById("searchbox").addEventListener("keydown",function(e) { - if(e.keyCode == 13) - nmsInfoBox.showWindow("switchInfo",matches[0]); - }); + document.getElementById("searchbox").dataset.match = matches[0]; + document.getElementById("searchbox").addEventListener("keydown",nmsInfoBox._searchKeyListener,false); } else { document.getElementById("searchbox-submit").classList.remove("btn-primary"); - document.getElementById("searchbox").removeEventListener("keydown",false); + document.getElementById("searchbox").dataset.match = ''; + document.getElementById("searchbox").removeEventListener("keydown",nmsInfoBox._searchKeyListener,false); + } +} + +nmsInfoBox._searchKeyListener = function(e) { + if(e.keyCode == 13) { + var sw = document.getElementById("searchbox").dataset.match; + nmsInfoBox.showWindow("switchInfo",sw); } } -- cgit v1.2.3 From 4dffc5e5431c83595f2bd102f120ad6def011d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Mon, 21 Mar 2016 10:33:25 +0100 Subject: which switch html finished. --- web/nms.gathering.org/api/private/which-switch-am-i-on | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/web/nms.gathering.org/api/private/which-switch-am-i-on b/web/nms.gathering.org/api/private/which-switch-am-i-on index 82436ea..0d3f2b4 100755 --- a/web/nms.gathering.org/api/private/which-switch-am-i-on +++ b/web/nms.gathering.org/api/private/which-switch-am-i-on @@ -18,13 +18,23 @@ print "\n\n"; # get user ip from somewhere. # HTTP_X_FORWARDED_FOR is set by varnish. When using varnish, the REMOTE_ADDR will always be localhost. my $addr = $ENV{HTTP_X_FORWARDED_FOR} // $ENV{REMOTE_ADDR}; -print "-:" . $addr ."\n"; - # add start html: header + body etc. +print " + + +"; + +# print address +print "" . $addr ."
    "; +# print switch name and distroname. while ( my $ref = $query->fetchrow_hashref() ) { print $ref->{sysname}. " @ " . $ref->{distro}; } # add end html +print " + + +"; -- cgit v1.2.3 From 5e47027761aae86e24a840cf303e0189cd0853e2 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Mon, 21 Mar 2016 11:12:33 +0100 Subject: NMS: Fetch all mibs --- tools/get_mibs.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/get_mibs.sh b/tools/get_mibs.sh index cab9fa3..7c8cc52 100755 --- a/tools/get_mibs.sh +++ b/tools/get_mibs.sh @@ -1,6 +1,5 @@ #!/bin/sh -MIBS="SNMPv2 ENTITY IF LLDP IP IP-FORWARD" ORIGPWD=$PWD TMP=$(mktemp -d) set -x @@ -10,9 +9,7 @@ wget ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz tar xvzf v2.tar.gz --strip-components=2 mkdir -p mibs -for a in $MIBS; do - cp v2/$a-MIB.my mibs/ -done +cp v2/* mibs/ mv mibs ${ORIGPWD}/ cd ${ORIGPWD} rm -rf ${TMP} -- cgit v1.2.3 From 9294a2f2b20a9289a9b5c4a4b72f308de85d8c30 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Mon, 21 Mar 2016 11:57:33 +0100 Subject: NMS: Fix switch movement and poll timeout --- clients/snmpfetchng.pl | 2 +- web/nms.gathering.org/js/nms-info-box.js | 2 ++ web/nms.gathering.org/js/nms-map.js | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/clients/snmpfetchng.pl b/clients/snmpfetchng.pl index bece8ab..36dd675 100755 --- a/clients/snmpfetchng.pl +++ b/clients/snmpfetchng.pl @@ -95,7 +95,7 @@ sub inner_loop } } mylog( "Polling " . @switches . " switches: $poll_todo"); - SNMP::MainLoop(5); + SNMP::MainLoop(10); } sub callback{ diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index 88bc7d7..dc993a9 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -133,6 +133,8 @@ nmsInfoBox._windowTypes.addSwitch = { if(result.switches_addded.length > 0) { nmsInfoBox.hide(); } + nmsData.invalidate("switches"); + nmsData.invalidate("smanagement"); } }); } diff --git a/web/nms.gathering.org/js/nms-map.js b/web/nms.gathering.org/js/nms-map.js index bbb304f..b74626a 100644 --- a/web/nms.gathering.org/js/nms-map.js +++ b/web/nms.gathering.org/js/nms-map.js @@ -433,7 +433,7 @@ nmsMap._moveSubmit = function() { var myData = JSON.stringify([data]); $.ajax({ type: "POST", - url: "/api/private/switch-add", + url: "/api/private/switch-update", dataType: "text", data:myData, success: function (data, textStatus, jqXHR) { -- cgit v1.2.3 From 9f2d2bc0faba3eef6ddfd7cfaf87dc28988acecf Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Mon, 21 Mar 2016 12:21:16 +0100 Subject: NMS: Adjust temperature handler to new schema --- web/nms.gathering.org/js/nms-map-handlers.js | 49 ++++++++++++++++------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/web/nms.gathering.org/js/nms-map-handlers.js b/web/nms.gathering.org/js/nms-map-handlers.js index fa33bad..b1d31f0 100644 --- a/web/nms.gathering.org/js/nms-map-handlers.js +++ b/web/nms.gathering.org/js/nms-map-handlers.js @@ -204,45 +204,52 @@ function colorFromSpeed(speed,factor) } -/* - * Tweaked this to scale from roughly 20C to 35C. Hence the -20 and /15 - * thing (e.g., "0" is 20 and "15" is 35 by the time we pass it to - * rgb_from_max()); - */ function temp_color(t) { if (t == undefined) { console.log("Temp_color, but temp is undefined"); return blue; } - t = parseInt(t) - 12; - t = Math.floor((t / 23) * 1000); + t = parseInt(t); + t = Math.floor(t * 10); return getColorStop(t); } function tempUpdater() { - for (sw in nms.switches_now["switches"]) { + if(!nmsData.switches) + return; + + for (sw in nmsData.switches["switches"]) { var t = "white"; var temp = ""; - if (nms.switches_now["switches"][sw]["temp"]) { - t = temp_color(nms.switches_now["switches"][sw]["temp"]); - temp = nms.switches_now["switches"][sw]["temp"] + "°C"; - } - - setSwitchColor(sw, t); - switchInfoText(sw, temp); + + if(!nmsData.snmp || !nmsData.snmp.snmp[sw]["misc"] || !nmsData.snmp.snmp[sw]["misc"]["enterprises.2636.3.1.13.1.7.7.1.0.0"]) + continue; + + tempObj = nmsData.snmp.snmp[sw]["misc"]["enterprises.2636.3.1.13.1.7.7.1.0.0"]; + Object.keys(tempObj).forEach(function (key) { + if(key == "") { + temp = tempObj[key] + "°C"; + t = temp_color(temp); + } + }); + + nmsMap.setSwitchColor(sw, t); + nmsMap.setSwitchInfo(sw, temp); } } function tempInit() -{ - drawGradient(["black",blue,lightblue,lightgreen,green,orange,red]); - setLegend(1,temp_color(15),"15 °C"); - setLegend(2,temp_color(20),"20 °C"); +{ + //Padded the gradient with extra colors for the upper unused values + drawGradient([blue,lightgreen,green,orange,red,red,red,red,red,red]); + setLegend(1,temp_color(0),"0 °C"); + setLegend(2,temp_color(15),"15 °C"); setLegend(3,temp_color(25),"25 °C"); - setLegend(4,temp_color(30),"30 °C"); - setLegend(5,temp_color(35),"35 °C"); + setLegend(4,temp_color(35),"35 °C"); + setLegend(5,temp_color(45),"45 °C"); + nmsData.addHandler("switchstate","mapHandler",tempUpdater); } function pingUpdater() -- cgit v1.2.3 From e2c018a18d972679160220b6cf76fa1a337e0a08 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Mon, 21 Mar 2016 12:26:00 +0100 Subject: NMS: Fix distro --- include/nms/util.pm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/include/nms/util.pm b/include/nms/util.pm index 79598d7..d063bf2 100644 --- a/include/nms/util.pm +++ b/include/nms/util.pm @@ -114,7 +114,13 @@ sub guess_placement { $y = int(759 + 20.5 * $s); $xx = $x + 65; $yy = $y + 14; - + } elsif ($name =~ /^distro(\d)/) { + my $d = ($1); + $src = "distro"; + $x = 292 + $d * 165; + $y = 415; + $xx = $x + 130; + $yy = $y + 20; } else { # Fallback to have _some_ position $src = "random"; -- cgit v1.2.3 From de396b689bb2ad8241d19ddf8cb97197e7054bec Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Mon, 21 Mar 2016 14:15:29 +0100 Subject: NMS: Add click-toggle to switchInfo window --- web/nms.gathering.org/js/nms-info-box.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index dc993a9..5f16ec2 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -22,6 +22,10 @@ var nmsInfoBox = nmsInfoBox || { * Shows a window from the _windowTypes list */ nmsInfoBox.showWindow = function (windowName,argument) { + if(windowName == "switchInfo" && argument != '' && argument == this._window.sw) { + nmsInfoBox.hide(); + return; + } nmsInfoBox.hide(); for(var win in this._windowTypes) { if(windowName == win) { -- cgit v1.2.3 From 0dfc30bc1a17c17716f11ec522e4a145f5629ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Mon, 21 Mar 2016 15:43:32 +0100 Subject: js inspection fixes and readability formatting. --- web/nms.gathering.org/js/nms.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/web/nms.gathering.org/js/nms.js b/web/nms.gathering.org/js/nms.js index bf13c57..8268732 100644 --- a/web/nms.gathering.org/js/nms.js +++ b/web/nms.gathering.org/js/nms.js @@ -16,8 +16,8 @@ var nms = { * FIXME: Should just stop using these. */ timers: { - playback:false, - }, + playback:false + }, menuShowing:true, /* @@ -82,7 +82,7 @@ function nmsTimer(handler, interval, name, description) { }; this.setInterval = function(interval) { - var started = this.handle == false ? false : true; + var started = this.handle != false; this.stop(); this.interval = parseInt(interval); if (started) @@ -205,7 +205,7 @@ nms.playback.startReplay = function(startTime,stopTime) { nms.playback.stopTime = stringToEpoch(stopTime); nms.now = epochToString(nms.playback.startTime); nms.playback.play(); -} +}; /* * Pause playback @@ -213,7 +213,7 @@ nms.playback.startReplay = function(startTime,stopTime) { nms.playback.pause = function() { nms.timers.playback.stop(); nms.playback.playing = false; -} +}; /* * Start playback @@ -222,7 +222,7 @@ nms.playback.play = function() { nms.playback.tick(); nms.timers.playback.start(); nms.playback.playing = true; -} +}; /* * Toggle playback @@ -233,19 +233,18 @@ nms.playback.toggle = function() { } else { nms.playback.play(); } -} +}; /* * Jump to place in time */ nms.playback.setNow = function(now) { - var now = parseNow(now); - nms.now = now; + nms.now = parseNow(now); nms.playback.stopTime = false; nms.playback.startTime = false; nms.playback.tick(); -} +}; /* * Step forwards or backwards in timer @@ -258,7 +257,7 @@ nms.playback.stepTime = function(n) if(!nms.playback.playing) nms.playback.tick(); -} +}; /* * Ticker to trigger updates, and advance time if replaying @@ -286,7 +285,7 @@ nms.playback.tick = function() if(nms.now !== false && nms.playback.playing) { nms.playback.stepTime(nms.playback.replayIncrement); } -} +}; /* * Helper function for safely getting a valid now-epoch @@ -600,8 +599,8 @@ function getCookie(cname) { function saveSettings() { var foo={}; - for (var v in nms.settingsList) { - foo[nms.settingsList[v]] = nms[nms.settingsList[v]]; + for ( var v in nms.settingsList ) { + foo[ nms.settingsList[v] ] = nms[ nms.settingsList[v] ]; } document.cookie = 'nms='+btoa(JSON.stringify(foo)); } -- cgit v1.2.3 From 90632b710fa8798c0eeda1bb10ff25b328634e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Kir=C3=B8?= Date: Mon, 21 Mar 2016 16:25:14 +0100 Subject: js linting / code fixup. --- web/nms.gathering.org/js/nms-color-util.js | 3 +- web/nms.gathering.org/js/nms-data.js | 30 +++++------ web/nms.gathering.org/js/nms-info-box.js | 43 ++++++++-------- web/nms.gathering.org/js/nms-map-handlers.js | 15 +++--- web/nms.gathering.org/js/nms-map.js | 77 +++++++++++++++------------- web/nms.gathering.org/js/nms.js | 35 ++++++------- 6 files changed, 99 insertions(+), 104 deletions(-) diff --git a/web/nms.gathering.org/js/nms-color-util.js b/web/nms.gathering.org/js/nms-color-util.js index f50ee04..6b5a4b5 100644 --- a/web/nms.gathering.org/js/nms-color-util.js +++ b/web/nms.gathering.org/js/nms-color-util.js @@ -89,6 +89,5 @@ function getColor(x,y) { var data = imageData.data; if (data.length < 4) return false; - var ret = 'rgb(' + data[0] + ',' + data[1] + ',' + data[2] + ')'; - return ret; + return 'rgb(' + data[0] + ',' + data[1] + ',' + data[2] + ')'; } diff --git a/web/nms.gathering.org/js/nms-data.js b/web/nms.gathering.org/js/nms-data.js index 155b5a8..14e5fed 100644 --- a/web/nms.gathering.org/js/nms-data.js +++ b/web/nms.gathering.org/js/nms-data.js @@ -82,7 +82,7 @@ var nmsData = nmsData || { nmsData._dropData = function (name) { delete this[name]; delete this.old[name]; -} +}; nmsData.removeSource = function (name) { if (this._sources[name] == undefined) { @@ -94,7 +94,7 @@ nmsData.removeSource = function (name) { clearInterval(this._sources[name]['handle']); } delete this._sources[name]; -} +}; /* * Register a source. @@ -121,7 +121,7 @@ nmsData.registerSource = function(name, target) { } this.stats.pollSets++; -} +}; /* * Add a handler (callback) for a source, using an id. @@ -142,7 +142,7 @@ nmsData.addHandler = function(name, id, cb, cbdata) { } this._sources[name].cbs[id] = cbob; this.updateSource(name); -} +}; /* * Unregister all handlers with the "id" for all sources. @@ -154,11 +154,11 @@ nmsData.unregisterHandlerWildcard = function(id) { for (var v in nmsData._sources) { this.unregisterHandler(v, id); } -} +}; nmsData.unregisterHandler = function(name, id) { delete this._sources[name].cbs[id]; -} +}; /* * Updates a source. @@ -181,11 +181,11 @@ nmsData.updateSource = function(name) { return; } this._genericUpdater(name, true); -} +}; nmsData.invalidate = function(name) { this._genericUpdater(name, false); -} +}; /* * Reset a source, deleting all data, including old. * @@ -195,7 +195,7 @@ nmsData.resetSource = function(name) { this[name] = {}; this.old[name] = {}; this.updateSource(name); -} +}; /* * Updates nmsData[name] and nmsData.old[name], issuing any callbacks where @@ -236,16 +236,16 @@ nmsData._genericUpdater = function(name, cacheok) { nmsData[name] = data; nmsMap.drawNow(); for (var i in nmsData._sources[name].cbs) { - var tmp = nmsData._sources[name].cbs[i]; - if (tmp.cb != undefined) { - tmp.cb(tmp.cbdata); + var tmp2 = nmsData._sources[name].cbs[i]; + if (tmp2.cb != undefined) { + tmp2.cb(tmp2.cbdata); } } } else { - for (var i in nmsData._sources[name].cbs) { - var tmp = nmsData._sources[name].cbs[i]; + for (var j in nmsData._sources[name].cbs) { + var tmp = nmsData._sources[name].cbs[j]; if (tmp.cb != undefined && tmp.fresh) { - nmsData._sources[name].cbs[i].fresh = false; + nmsData._sources[name].cbs[j].fresh = false; tmp.cb(tmp.cbdata); } } diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index dc993a9..e93ab55 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -15,8 +15,8 @@ var nmsInfoBox = nmsInfoBox || { stats: {}, _container: false, //Container window _window: false, //Active window (reference to _windowTypes object or false) - _windowTypes: [], //List of all avaliable window types -} + _windowTypes: [] //List of all avaliable window types +}; /* * Shows a window from the _windowTypes list @@ -30,7 +30,7 @@ nmsInfoBox.showWindow = function (windowName,argument) { return; } } -} +}; /* * Refresh the active window @@ -40,7 +40,7 @@ nmsInfoBox.showWindow = function (windowName,argument) { */ nmsInfoBox.refresh = function() { nmsInfoBox._show(); -} +}; /* * Internal function to show the active _window and pass along any arguments @@ -80,7 +80,7 @@ nmsInfoBox._show = function(argument) { } this._container.appendChild(panel); this._container.style.display = "block"; -} +}; /* * Hide the active window and tell it to unload @@ -95,7 +95,7 @@ nmsInfoBox.hide = function() { nmsData.unregisterHandler("switches","switchshower"); nmsData.unregisterHandler("smanagement","switchshower"); nmsData.unregisterHandler("snmp","switchshower"); -} +}; /* * Window type: Add Switch @@ -130,7 +130,7 @@ nmsInfoBox._windowTypes.addSwitch = { data:myData, success: function (data, textStatus, jqXHR) { var result = JSON.parse(data); - if(result.switches_addded.length > 0) { + if(result.switches_addded.length > 0) { // FIXME unresolved variable switches_addded nmsInfoBox.hide(); } nmsData.invalidate("switches"); @@ -226,9 +226,10 @@ nmsInfoBox._windowTypes.switchInfo = { var template = {}; nmsInfoBox._editValues = {}; + var place; for (var v in this.swi) { if (v == "placement") { - var place = JSON.stringify(this.swi[v]); + place = JSON.stringify(this.swi[v]); template[v] = place; continue; } @@ -313,7 +314,7 @@ nmsInfoBox._windowTypes.switchInfo = { nmsInfoBox.click = function(sw) { this.showWindow("switchInfo",sw); -} +}; /* * General-purpose table-maker? @@ -343,7 +344,7 @@ nmsInfoBox._makeTable = function(content, caption) { td2.innerHTML = content[v][1]; } return table; -} +}; /* * Create and return a table for comments. @@ -386,7 +387,7 @@ nmsInfoBox._makeCommentTable = function(content) { td2.innerHTML = comment["comment"]; } return table; -} +}; nmsInfoBox._searchSmart = function(id, sw) { if (nmsData.smanagement.switches[sw].distro == id) { @@ -418,7 +419,7 @@ nmsInfoBox._searchSmart = function(id, sw) { } } return false; -} +}; /* * FIXME: Not sure this belongs here, it's really part of the "Core" ui, @@ -461,21 +462,21 @@ nmsInfoBox._search = function() { document.getElementById("searchbox").dataset.match = ''; document.getElementById("searchbox").removeEventListener("keydown",nmsInfoBox._searchKeyListener,false); } -} +}; nmsInfoBox._searchKeyListener = function(e) { if(e.keyCode == 13) { var sw = document.getElementById("searchbox").dataset.match; nmsInfoBox.showWindow("switchInfo",sw); } -} +}; nmsInfoBox._nullBlank = function(x) { if (x == null || x == false || x == undefined) return ""; return x; -} +}; nmsInfoBox._editChange = function(sw, v) { @@ -496,13 +497,9 @@ nmsInfoBox._editChange = function(sw, v) { var myData = nmsInfoBox._editStringify(sw); var out = document.getElementById("edit-output"); out.value = myData; -} +}; nmsInfoBox._editStringify = function(sw) { - for (var key in nmsInfoBox._editValues) { - var val = nmsInfoBox._editValues[key]; - } - nmsInfoBox._editValues['sysname'] = sw; - var myData = JSON.stringify([nmsInfoBox._editValues]); - return myData; -} + nmsInfoBox._editValues['sysname'] = sw; + return JSON.stringify([nmsInfoBox._editValues]); +}; diff --git a/web/nms.gathering.org/js/nms-map-handlers.js b/web/nms.gathering.org/js/nms-map-handlers.js index b1d31f0..b98a944 100644 --- a/web/nms.gathering.org/js/nms-map-handlers.js +++ b/web/nms.gathering.org/js/nms-map-handlers.js @@ -84,7 +84,7 @@ function uplinkUpdater() return; if (!nmsData.switchstate.switches) return; - for (sw in nmsData.switches.switches) { + for (var sw in nmsData.switches.switches) { var uplinks=0; if (nmsData.switchstate.switches[sw] == undefined || nmsData.switchstate.switches[sw].uplinks == undefined) { uplinks=0; @@ -139,9 +139,9 @@ function trafficUpdater() { if (!nms.switches_now["switches"]) return; - for (sw in nms.switches_now["switches"]) { + for (var sw in nms.switches_now["switches"]) { var speed = 0; - for (port in nms.switches_now["switches"][sw]["ports"]) { + for (var port in nms.switches_now["switches"][sw]["ports"]) { if (/ge-0\/0\/44$/.exec(port) || /ge-0\/0\/45$/.exec(port) || /ge-0\/0\/46$/.exec(port) || @@ -177,9 +177,9 @@ function trafficTotUpdater() { if (!nms.switches_now["switches"]) return; - for (sw in nms.switches_now["switches"]) { + for (var sw in nms.switches_now["switches"]) { var speed = 0; - for (port in nms.switches_now["switches"][sw]["ports"]) { + for (var port in nms.switches_now["switches"][sw]["ports"]) { if (!nms.switches_then["switches"][sw] || !nms.switches_then["switches"][sw]["ports"] || !nms.switches_then["switches"][sw]["ports"][port]) @@ -220,14 +220,14 @@ function tempUpdater() if(!nmsData.switches) return; - for (sw in nmsData.switches["switches"]) { + for ( var sw in nmsData.switches["switches"]) { var t = "white"; var temp = ""; if(!nmsData.snmp || !nmsData.snmp.snmp[sw]["misc"] || !nmsData.snmp.snmp[sw]["misc"]["enterprises.2636.3.1.13.1.7.7.1.0.0"]) continue; - tempObj = nmsData.snmp.snmp[sw]["misc"]["enterprises.2636.3.1.13.1.7.7.1.0.0"]; + var tempObj = nmsData.snmp.snmp[sw]["misc"]["enterprises.2636.3.1.13.1.7.7.1.0.0"]; Object.keys(tempObj).forEach(function (key) { if(key == "") { temp = tempObj[key] + "°C"; @@ -259,6 +259,7 @@ function pingUpdater() } for (var sw in nmsData.switches.switches) { try { + var c; if (nmsData.ping.switches[sw].age > 0) { c = red; } else { diff --git a/web/nms.gathering.org/js/nms-map.js b/web/nms.gathering.org/js/nms-map.js index b74626a..c6bad49 100644 --- a/web/nms.gathering.org/js/nms-map.js +++ b/web/nms.gathering.org/js/nms-map.js @@ -48,19 +48,20 @@ var nmsMap = nmsMap || { _color: { }, _highlight: { }, _c: {} -} +}; nmsMap._loadEvent = function(e) { nmsMap._init = false; nmsMap._drawAllSwitches(); -} +}; + nmsMap.init = function() { this._initContexts(); this._init = true; nmsData.addHandler("switches","nmsMap",function(){nmsMap._resizeEvent();}); window.addEventListener('resize',nmsMap._resizeEvent,true); window.addEventListener('load',nmsMap._loadEvent,true); -} +}; nmsMap.setSwitchColor = function(sw, color) { if (this._color[sw] != color) { @@ -70,7 +71,7 @@ nmsMap.setSwitchColor = function(sw, color) { } else { this.stats.colorSame++; } -} +}; nmsMap.setSwitchHighlight = function(sw, highlight) { if(highlight) @@ -80,12 +81,12 @@ nmsMap.setSwitchHighlight = function(sw, highlight) { this._drawSwitch(sw); this.stats.highlightChange++; } -} +}; nmsMap.removeAllSwitchHighlights = function() { for(var sw in this._highlight) this.setSwitchHighlight(sw,false); -} +}; nmsMap.reset = function() { for (var sw in this._color) { @@ -94,7 +95,7 @@ nmsMap.reset = function() { for (var sw in this._info) { nmsMap.setSwitchInfo(sw, undefined); } -} +}; nmsMap.setSwitchInfo = function(sw,info) { if (this._info[sw] != info) { @@ -104,19 +105,19 @@ nmsMap.setSwitchInfo = function(sw,info) { } else { this.stats.switchInfoSame++; } -} +}; nmsMap._initContext = function(name) { this._c[name] = {}; this._c[name].c = document.getElementById(name + "Canvas"); this._c[name].ctx = this._c[name].c.getContext('2d'); -} +}; nmsMap._initContexts = function() { for (var context in this.contexts) { this._initContext(this.contexts[context]); } -} +}; nmsMap._resizeEvent = function() { var width = window.innerWidth - nmsMap._c.bg.c.offsetLeft; @@ -149,7 +150,7 @@ nmsMap._resizeEvent = function() { nmsMap.drawNow(); nmsMap.stats.resizeEvents++; } -} +}; /* * Draw current time-window @@ -177,10 +178,10 @@ nmsMap.drawNow = function () ctx.fillStyle = "white"; ctx.strokeStyle = "black"; ctx.lineWidth = nms.fontLineFactor; - ctx.strokeText(now, 0 + this._settings.textMargin, 25); - ctx.fillText(now, 0 + this._settings.textMargin, 25); + ctx.strokeText(now, this._settings.textMargin, 25); + ctx.fillText(now, this._settings.textMargin, 25); ctx.restore(); -} +}; nmsMap.setNightMode = function(toggle) { if (this._nightmode == toggle) @@ -196,14 +197,14 @@ nmsMap.setNightMode = function(toggle) { this._c.blur.c.style.display = ""; } nmsMap._drawBG(); -} +}; nmsMap._drawBG = function() { var imageObj = document.getElementById('source'); this._c.bg.ctx.drawImage(imageObj, 0, 0, nmsMap._canvas.width, nmsMap._canvas.height); if(this._nightmode) nmsMap._invertBG(); -} +}; nmsMap._invertBG = function() { var imageData = this._c.bg.ctx.getImageData(0, 0, nmsMap._canvas.width, nmsMap._canvas.height); @@ -215,7 +216,7 @@ nmsMap._invertBG = function() { data[i + 2] = 255 - data[i + 2]; } this._c.bg.ctx.putImageData(imageData, 0, 0); -} +}; nmsMap._getBox = function(sw) { var box = nmsData.switches.switches[sw]['placement']; @@ -224,7 +225,7 @@ nmsMap._getBox = function(sw) { box.width = parseInt(box.width); box.height = parseInt(box.height); return box; -} +}; nmsMap._drawSwitchBlur = function(sw) { @@ -238,7 +239,8 @@ nmsMap._drawSwitchBlur = function(sw) this._c.blur.ctx.scale(this.scale, this.scale); // FIXME this._c.blur.ctx.fillRect(box['x'],box['y'],box['width'],box['height']); this._c.blur.ctx.restore(); -} +}; + nmsMap._drawSwitch = function(sw) { // XXX: If a handler sets a color before switches are loaded... The @@ -257,7 +259,7 @@ nmsMap._drawSwitch = function(sw) this._drawBox(this._c.switch.ctx, box['x'],box['y'],box['width'],box['height']); this._c.switch.ctx.shadowBlur = 0; this._drawText(this._c.text.ctx, sw,box); -} +}; nmsMap._drawSwitchInfo = function(sw) { var box = this._getBox(sw); @@ -266,14 +268,14 @@ nmsMap._drawSwitchInfo = function(sw) { } else { this._drawText(this._c.textInfo.ctx, this._info[sw], box, "right"); } -} +}; nmsMap._clearBox = function(ctx,box) { ctx.save(); ctx.scale(this.scale,this.scale); ctx.clearRect(box['x'], box['y'], box['width'], box['height']); ctx.restore(); -} +}; nmsMap._drawText = function(ctx, text, box, align) { var rotate = false; @@ -309,7 +311,7 @@ nmsMap._drawText = function(ctx, text, box, align) { ctx.strokeText(text, 0, 0); ctx.fillText(text, 0, 0); ctx.restore(); -} +}; nmsMap._drawAllSwitches = function() { if (nmsData.switches == undefined) { @@ -321,7 +323,7 @@ nmsMap._drawAllSwitches = function() { } if (this._nightmode) this._drawAllBlur(); -} +}; nmsMap._drawAllBlur = function() { if (nmsMap._blurDrawn == true) @@ -330,7 +332,7 @@ nmsMap._drawAllBlur = function() { for (var sw in nmsData.switches.switches) { nmsMap._drawSwitchBlur(sw); } -} +}; nmsMap._drawBox = function(ctx, x, y, boxw, boxh) { ctx.save(); @@ -340,12 +342,12 @@ nmsMap._drawBox = function(ctx, x, y, boxw, boxh) { ctx.strokeStyle = "#000000"; ctx.strokeRect(x,y, boxw, boxh); ctx.restore(); -} +}; nmsMap._connectSwitches = function(sw1, sw2, color1, color2) { nmsMap._connectBoxes(this._getBox(sw1), this._getBox(sw2), color1, color2); -} +}; /* * Draw a line between two boxes, with a gradient going from color1 to @@ -372,13 +374,13 @@ nmsMap._connectBoxes = function(box1, box2,color1, color2) { ctx.lineWidth = 5; ctx.stroke(); ctx.restore(); -} +}; nmsMap.moveSet = function(toggle) { nmsMap._moveInProgress = toggle; if (!toggle) nmsMap._moveStopListen(); -} +}; /* * onclick handler for the canvas. @@ -395,7 +397,7 @@ nmsMap.canvasClick = function(e) nmsInfoBox.click(sw); } } -} +}; nmsMap._clearOld = function(box) { if (box) { @@ -405,7 +407,7 @@ nmsMap._clearOld = function(box) { nmsMap._c.top.ctx.clearRect(box['x'] - 5, box['y'] - 5, box['width'] + 10, box['height'] + 10); nmsMap._c.top.ctx.restore(); } -} +}; nmsMap._moveMove = function(e) { nmsMap._moveX = (e.pageX - e.target.offsetLeft) / nmsMap.scale; @@ -423,13 +425,13 @@ nmsMap._moveMove = function(e) { nmsMap._c.top.ctx.fillStyle = "red"; nmsMap._drawBox(nmsMap._c.top.ctx, box['x'], box['y'], box['width'], box['height']); nmsMap._c.top.ctx.restore(); -} +}; nmsMap._moveSubmit = function() { var data = { sysname: nmsMap._moving, placement: nmsMap._moveOldBox - } + }; var myData = JSON.stringify([data]); $.ajax({ type: "POST", @@ -440,11 +442,12 @@ nmsMap._moveSubmit = function() { nmsData.invalidate("switches"); } }); -} +}; + nmsMap._moveStopListen = function() { nmsMap._c.input.c.removeEventListener('mousemove',nmsMap._moveMove, true); nmsMap._c.input.c.removeEventListener('mouseup',nmsMap._moveDone, true); -} +}; nmsMap._moveDone = function(e) { nmsMap._moveStopListen(); @@ -453,7 +456,7 @@ nmsMap._moveDone = function(e) { } nmsMap._moveSubmit(); nmsMap._clearOld(nmsMap._moveOldBox); -} +}; nmsMap._moveStart = function(sw, e) { @@ -464,7 +467,7 @@ nmsMap._moveStart = function(sw, e) nmsMap._moveBox = nmsData.switches.switches[sw].placement; nmsMap._c.input.c.addEventListener('mousemove',nmsMap._moveMove,true); nmsMap._c.input.c.addEventListener('mouseup',nmsMap._moveDone,true); -} +}; /* diff --git a/web/nms.gathering.org/js/nms.js b/web/nms.gathering.org/js/nms.js index 8268732..8f93367 100644 --- a/web/nms.gathering.org/js/nms.js +++ b/web/nms.gathering.org/js/nms.js @@ -160,27 +160,27 @@ function stringToEpoch(t) function epochToString(t) { // Adjust for timezone when converting from epoch (UTC) to string (local) - var d = new Date(parseInt(t) * parseInt(1000)); - var timezoneOffset = d.getTimezoneOffset() * -60; + var date = new Date(parseInt(t) * parseInt(1000)); + var timezoneOffset = date.getTimezoneOffset() * -60; t = t - timezoneOffset; - var d = new Date(parseInt(t) * parseInt(1000)); - var str = d.getFullYear() + "-"; - if (parseInt(d.getMonth()) < 9) + date = new Date(parseInt(t) * parseInt(1000)); + var str = date.getFullYear() + "-"; + if (parseInt(date.getMonth()) < 9) str += "0"; - str += (parseInt(d.getMonth())+1) + "-"; - if (d.getDate() < 10) + str += (parseInt(date.getMonth())+1) + "-"; + if (date.getDate() < 10) str += "0"; - str += d.getDate() + "T"; - if (d.getHours() < 10) + str += date.getDate() + "T"; + if (date.getHours() < 10) str += "0"; - str += d.getHours() + ":"; - if (d.getMinutes() < 10) + str += date.getHours() + ":"; + if (date.getMinutes() < 10) str += "0"; - str += d.getMinutes() + ":"; - if (d.getSeconds() < 10) + str += date.getMinutes() + ":"; + if (date.getSeconds() < 10) str += "0"; - str += d.getSeconds(); + str += date.getSeconds(); return str; } @@ -409,11 +409,7 @@ function addComment(sw,comment) */ function isIn(box, x, y) { - if ((x >= box.x) && (x <= (box.x + box.width)) && (y >= box.y) && (y <= (box.y + box.height))) { - return true; - } - return false; - + return ((x >= box.x) && (x <= (box.x + box.width)) && (y >= box.y) && (y <= (box.y + box.height))); } /* @@ -486,7 +482,6 @@ function initNMS() { } function detectHandler() { - var url = document.URL; for (var i in handlers) { if (('#' + handlers[i].tag) == document.location.hash) { setUpdater(handlers[i]); -- cgit v1.2.3 From 329750a54d5a04355a787128f4e5bd4a21e4a3d6 Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Mon, 21 Mar 2016 15:55:49 +0100 Subject: NMS: Improve keymappings --- web/nms.gathering.org/index.html | 4 ++++ web/nms.gathering.org/js/nms.js | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html index db1acfa..02ae93c 100644 --- a/web/nms.gathering.org/index.html +++ b/web/nms.gathering.org/index.html @@ -125,6 +125,10 @@ ? + Toggle this help window + + + - Toggle navigation bar diff --git a/web/nms.gathering.org/js/nms.js b/web/nms.gathering.org/js/nms.js index bf13c57..d56953f 100644 --- a/web/nms.gathering.org/js/nms.js +++ b/web/nms.gathering.org/js/nms.js @@ -29,7 +29,7 @@ var nms = { 'menuShowing' ], keyBindings:{ - '?':toggleMenu, + '-':toggleMenu, 'n':toggleNightMode, '1':setMapModeFromN, '2':setMapModeFromN, @@ -43,7 +43,9 @@ var nms = { 'k':moveTimeFromKey, 'l':moveTimeFromKey, 'p':moveTimeFromKey, - 'r':moveTimeFromKey + 'r':moveTimeFromKey, + 'Escape':hideWindow, + '?':toggleHelp }, /* * Playback controllers and variables @@ -509,6 +511,13 @@ function toggleMenu() setMenu(); saveSettings(); } +function hideWindow(e,key) +{ + nmsInfoBox.hide(); +} +function toggleHelp(e,key) { + toggleLayer('aboutKeybindings'); +} function setMapModeFromN(e,key) { @@ -569,7 +578,22 @@ function keyPressed(e) if (e.target.nodeName == "INPUT") { return false; } - var key = String.fromCharCode(e.keyCode); + if(e.key) { + var key = e.key; + } else { + var key = e.keyCode; + } + switch(key) { + case 187: + key = '?'; + break; + case 189: + key = '-'; + break; + case 27: + key = 'Escape'; + break; + } if (nms.keyBindings[key]) return nms.keyBindings[key](e,key); if (nms.keyBindings['default']) @@ -580,7 +604,9 @@ function keyPressed(e) function setupKeyhandler() { var b = document.getElementsByTagName("body")[0]; - b.onkeypress = function(e){keyPressed(e);}; + $( "body" ).keyup(function(e) { + keyPressed(e); + }); } -- cgit v1.2.3 From 4eedfbd1a9cbb447690f86fece8b2ff5a5fc2626 Mon Sep 17 00:00:00 2001 From: Nicolai Tellefsen Date: Mon, 21 Mar 2016 16:57:22 +0100 Subject: NMS: Fix broken keymapping-commit --- web/nms.gathering.org/js/nms.js | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/web/nms.gathering.org/js/nms.js b/web/nms.gathering.org/js/nms.js index d56953f..fd445d1 100644 --- a/web/nms.gathering.org/js/nms.js +++ b/web/nms.gathering.org/js/nms.js @@ -582,17 +582,21 @@ function keyPressed(e) var key = e.key; } else { var key = e.keyCode; - } - switch(key) { - case 187: - key = '?'; - break; - case 189: - key = '-'; - break; - case 27: - key = 'Escape'; - break; + switch(key) { + case 187: + key = '?'; + break; + case 189: + key = '-'; + break; + case 27: + key = 'Escape'; + break; + default: + key = String.fromCharCode(key); + key = key.toLowerCase(); + break; + } } if (nms.keyBindings[key]) return nms.keyBindings[key](e,key); -- cgit v1.2.3 From 43eb5c971842f23bc1a7650215d9397b0fae9bb9 Mon Sep 17 00:00:00 2001 From: Joachim Tingvold Date: Mon, 21 Mar 2016 17:13:54 +0100 Subject: Add some debug to bind. --- bootstrap/make-named.pl | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/bootstrap/make-named.pl b/bootstrap/make-named.pl index 4812d81..2681506 100755 --- a/bootstrap/make-named.pl +++ b/bootstrap/make-named.pl @@ -56,6 +56,42 @@ options { listen-on-v6 { any; }; }; +logging { + category "default" { "debug"; }; + category "general" { "debug"; }; + category "database" { "debug"; }; + category "security" { "debug"; "stats"; }; + category "config" { "debug"; "stats"; }; + category "resolver" { "debug"; "stats"; }; + category "xfer-in" { "debug"; "stats"; }; + category "xfer-out" { "debug"; "stats"; }; + category "notify" { "debug"; "stats"; }; + category "client" { "debug"; }; + category "unmatched" { "debug"; }; + category "network" { "debug"; }; + category "update" { "debug"; }; + category "queries" { "stats"; }; + category "dispatch" { "debug"; }; + category "dnssec" { "debug"; }; + category "lame-servers" { "debug"; }; + + channel "debug" { + file "/etc/bind/nameddbg" versions 2 size 50m; + print-time yes; + print-category yes; + print-severity yes; + severity debug 9; + }; + + channel "stats" { + file "/etc/bind/namedstats" versions 2 size 50m; + print-time yes; + print-category yes; + print-severity yes; + severity debug 3; + }; +}; + key DHCP_UPDATER { algorithm HMAC-MD5.SIG-ALG.REG.INT; secret $nms::config::ddns_key; -- cgit v1.2.3 From 2c0576644afc26f4153ad316d2af216919c04fe4 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Mon, 21 Mar 2016 18:50:25 +0100 Subject: NMS: Tweak searching of switch active ports etc --- web/nms.gathering.org/api/public/switch-state | 13 ++++--- web/nms.gathering.org/js/nms-info-box.js | 52 ++++++++++++++------------- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/web/nms.gathering.org/api/public/switch-state b/web/nms.gathering.org/api/public/switch-state index 62d0078..6f7573c 100755 --- a/web/nms.gathering.org/api/public/switch-state +++ b/web/nms.gathering.org/api/public/switch-state @@ -20,7 +20,7 @@ while ( my $ref = $q->fetchrow_hashref() ) { my %port = %{$data{'ports'}{$porti}}; my $smallport = $porti; $smallport =~ s/[0-9-].*$//; - if ($porti =~ /ge-0\/0\/4[4-7]/ or $porti eq 'eth0') { + if ($porti =~ /ge-0\/0\/4[4-7]/) { $json{'switches'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'}; $json{'switches'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'}; if ($port{'ifOperStatus'} eq "up") { @@ -29,12 +29,15 @@ while ( my $ref = $q->fetchrow_hashref() ) { $json{'switches'}{$sysname}{'uplinks'}{'total'} += 1; } - $json{'switches'}{$sysname}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'}; - $json{'switches'}{$sysname}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'}; + $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'}; + $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'}; + $json{'switches'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'}; + $json{'switches'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'}; if ($port{'ifOperStatus'} eq "up") { - $json{'switches'}{$sysname}{$smallport}{'live'} += 1; + $json{'switches'}{$sysname}{ifs}{$smallport}{'live'} += 1; + $json{'switches'}{$sysname}{totals}{'live'} += 1; } - $json{'switches'}{$sysname}{$smallport}{'total'} += 1; + $json{'switches'}{$sysname}{totals}{'total'} += 1; } $json{'switches'}{$sysname}{'time'} = $ref->{'time'}; } diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js index 5f16ec2..545e62a 100644 --- a/web/nms.gathering.org/js/nms-info-box.js +++ b/web/nms.gathering.org/js/nms-info-box.js @@ -393,33 +393,37 @@ nmsInfoBox._makeCommentTable = function(content) { } nmsInfoBox._searchSmart = function(id, sw) { - if (nmsData.smanagement.switches[sw].distro == id) { - console.log("ieh"); - return true; - } - if (id.match("[a-z]+.active")) { - console.log("hei: " + sw); - var family = id.match("[a-z]+"); - var limit = id; - limit = limit.replace(family + ".active>",""); - limit = limit.replace(family + ".active<",""); - limit = limit.replace(family + ".active=",""); - var operator = id.replace(family + ".active","")[0]; - if (limit == parseInt(limit)) { - if (operator == ">" ) { - if (nmsData.switchstate.switches[sw][family].live > limit) { - return true; - } - } else if (operator == "<") { - if (nmsData.switchstate.switches[sw][family].live < limit) { - return true; - } - } else if (operator == "=") { - if (nmsData.switchstate.switches[sw][family].live == limit) { - return true; + try { + if (nmsData.smanagement.switches[sw].distro == id) { + return true; + } + if (id.match("active")) { + var limit = id; + limit = limit.replace("active>",""); + limit = limit.replace("active<",""); + limit = limit.replace("active=",""); + var operator = id.replace("active","")[0]; + if (limit == parseInt(limit)) { + if (operator == ">" ) { + if (nmsData.switchstate.switches[sw]['totals'].live > limit) { + return true; + } + } else if (operator == "<") { + if (nmsData.switchstate.switches[sw]['totals'].live < limit) { + return true; + } + } else if (operator == "=") { + if (nmsData.switchstate.switches[sw]['totals'].live == limit) { + return true; + } } } } + if (nmsData.snmp.snmp[sw].misc.sysDescr[0].match(id)) { + return true; + } + } catch (e) { + return false; } return false; } -- cgit v1.2.3 From d3efe86d2afaf414725feba0cb500cacfb0fc864 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Mon, 21 Mar 2016 18:55:59 +0100 Subject: NMS: DELETE pulbic, mwhahah --- web/nms-public.gathering.org/cagewave.png | Bin 108137 -> 0 bytes web/nms-public.gathering.org/dhcpkart.html | 10 -- web/nms-public.gathering.org/index.html | 17 --- web/nms-public.gathering.org/led.pl | 128 -------------------- web/nms-public.gathering.org/nettkart-trafikk.html | 10 -- web/nms-public.gathering.org/ping-tg14.html | 22 ---- web/nms-public.gathering.org/ping.css | 1 - web/nms-public.gathering.org/ping.html | 21 ---- web/nms-public.gathering.org/ping.js | 1 - web/nms-public.gathering.org/ping2.html | 21 ---- web/nms-public.gathering.org/speedometer.html | 30 ----- web/nms-public.gathering.org/speedometer.js | 131 --------------------- web/nms-public.gathering.org/tempkart.html | 10 -- web/nms-public.gathering.org/tg14-salkart.png | 1 - web/nms-public.gathering.org/tg15-salkart.png | 1 - .../total_network_traffic-day.sh | 5 - .../total_network_traffic-week.sh | 5 - web/nms-public.gathering.org/trafikk-tg14.html | 25 ---- web/nms-public.gathering.org/weathermap.html | 10 -- web/nms-public.gathering.org/weathermap.pl | 18 --- web/nms-public.gathering.org/weathermap.png | Bin 222386 -> 0 bytes 21 files changed, 467 deletions(-) delete mode 100644 web/nms-public.gathering.org/cagewave.png delete mode 100644 web/nms-public.gathering.org/dhcpkart.html delete mode 100644 web/nms-public.gathering.org/index.html delete mode 100644 web/nms-public.gathering.org/led.pl delete mode 100644 web/nms-public.gathering.org/nettkart-trafikk.html delete mode 100644 web/nms-public.gathering.org/ping-tg14.html delete mode 120000 web/nms-public.gathering.org/ping.css delete mode 100644 web/nms-public.gathering.org/ping.html delete mode 120000 web/nms-public.gathering.org/ping.js delete mode 100644 web/nms-public.gathering.org/ping2.html delete mode 100644 web/nms-public.gathering.org/speedometer.html delete mode 100644 web/nms-public.gathering.org/speedometer.js delete mode 100644 web/nms-public.gathering.org/tempkart.html delete mode 120000 web/nms-public.gathering.org/tg14-salkart.png delete mode 120000 web/nms-public.gathering.org/tg15-salkart.png delete mode 100755 web/nms-public.gathering.org/total_network_traffic-day.sh delete mode 100755 web/nms-public.gathering.org/total_network_traffic-week.sh delete mode 100644 web/nms-public.gathering.org/trafikk-tg14.html delete mode 100644 web/nms-public.gathering.org/weathermap.html delete mode 100755 web/nms-public.gathering.org/weathermap.pl delete mode 100644 web/nms-public.gathering.org/weathermap.png diff --git a/web/nms-public.gathering.org/cagewave.png b/web/nms-public.gathering.org/cagewave.png deleted file mode 100644 index 581df1b..0000000 Binary files a/web/nms-public.gathering.org/cagewave.png and /dev/null differ diff --git a/web/nms-public.gathering.org/dhcpkart.html b/web/nms-public.gathering.org/dhcpkart.html deleted file mode 100644 index 77f7ad5..0000000 --- a/web/nms-public.gathering.org/dhcpkart.html +++ /dev/null @@ -1,10 +0,0 @@ - - - DHCP-kart - - - - -

    - - diff --git a/web/nms-public.gathering.org/index.html b/web/nms-public.gathering.org/index.html deleted file mode 100644 index e4f0e1c..0000000 --- a/web/nms-public.gathering.org/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - -NMS Public - The Gathering 2015 - - - - -

    NMS Public - The Gathering 2015

    - -

    DHCP-kart

    -

    Ping-kart

    -

    Weathermap

    -

    Tempkart

    -

    Switchtrafikk

    - - - diff --git a/web/nms-public.gathering.org/led.pl b/web/nms-public.gathering.org/led.pl deleted file mode 100644 index 12b540b..0000000 --- a/web/nms-public.gathering.org/led.pl +++ /dev/null @@ -1,128 +0,0 @@ -e1-3 on -e1-4 on -e3-3 on -e3-4 on -e5-3 on -e5-4 on -e7-3 on -e7-4 on -e9-3 on -e9-4 on -e11-1 on -e11-2 on -e11-3 on -e11-4 on -e13-1 on -e13-2 on -e13-3 on -e13-4 on -e15-1 on -e15-2 on -e15-3 on -e15-4 on -e17-1 on -e17-2 on -e17-3 on -e17-4 on -e19-1 on -e19-2 on -e19-3 on -e19-4 on -e21-1 on -e21-2 on -e21-3 on -e21-4 on -e23-1 on -e23-2 on -e23-3 on -e23-4 on -e25-1 on -e25-2 on -e25-3 on -e25-4 on -e27-1 on -e27-2 on -e29-1 on -e29-2 on -e31-1 on -e31-2 on -e33-1 on -e33-2 on -e35-1 on -e35-2 on -e37-1 on -e37-2 on -e39-1 on -e39-2 on -e41-1 on -e41-2 on -e43-1 on -e43-2 on -e43-3 on -e43-4 on -e45-1 on -e45-2 on -e45-3 on -e45-4 on -e47-1 on -e47-2 on -e47-3 on -e47-4 on -e49-1 on -e49-2 on -e49-3 on -e49-4 on -e51-1 on -e51-2 on -e51-3 on -e51-4 on -e53-1 on -e53-2 on -e53-3 on -e53-4 on -e55-1 on -e55-2 on -e55-3 on -e55-4 on -e57-1 on -e57-2 on -e57-3 on -e57-4 on -e59-1 on -e59-2 on -e59-3 on -e59-4 on -e61-1 on -e61-2 on -e61-3 on -e61-4 on -e63-1 on -e63-2 on -e63-3 on -e63-4 on -e65-1 on -e65-2 on -e65-3 on -e65-4 on -e67-1 on -e67-2 on -e67-3 on -e67-4 on -e69-1 on -e69-2 on -e69-3 on -e69-4 on -e71-1 on -e71-2 on -e71-3 on -e71-4 on -e73-1 on -e73-2 on -e73-3 on -e73-4 on -e75-1 on -e75-2 on -e75-3 on -e75-4 on -e77-1 on -e77-2 on diff --git a/web/nms-public.gathering.org/nettkart-trafikk.html b/web/nms-public.gathering.org/nettkart-trafikk.html deleted file mode 100644 index 5675473..0000000 --- a/web/nms-public.gathering.org/nettkart-trafikk.html +++ /dev/null @@ -1,10 +0,0 @@ - - - nettkart - - - - -

    - - diff --git a/web/nms-public.gathering.org/ping-tg14.html b/web/nms-public.gathering.org/ping-tg14.html deleted file mode 100644 index 0b4863f..0000000 --- a/web/nms-public.gathering.org/ping-tg14.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - Switch ping - - - - - - -
    -
    -










    -

    Live switch ping

    - - -
    -
    - - diff --git a/web/nms-public.gathering.org/ping.css b/web/nms-public.gathering.org/ping.css deleted file mode 120000 index 8d15979..0000000 --- a/web/nms-public.gathering.org/ping.css +++ /dev/null @@ -1 +0,0 @@ -../nms.gathering.org/ping.css \ No newline at end of file diff --git a/web/nms-public.gathering.org/ping.html b/web/nms-public.gathering.org/ping.html deleted file mode 100644 index 69e2ff5..0000000 --- a/web/nms-public.gathering.org/ping.html +++ /dev/null @@ -1,21 +0,0 @@ - - - Ping? Pong! - - - -

    - - - -

    - - - - diff --git a/web/nms-public.gathering.org/ping.js b/web/nms-public.gathering.org/ping.js deleted file mode 120000 index d6aa5f1..0000000 --- a/web/nms-public.gathering.org/ping.js +++ /dev/null @@ -1 +0,0 @@ -../nms.gathering.org/ping.js \ No newline at end of file diff --git a/web/nms-public.gathering.org/ping2.html b/web/nms-public.gathering.org/ping2.html deleted file mode 100644 index 278c07d..0000000 --- a/web/nms-public.gathering.org/ping2.html +++ /dev/null @@ -1,21 +0,0 @@ - - - Ping? Pong! - - - -

    - - - -

    - - - - diff --git a/web/nms-public.gathering.org/speedometer.html b/web/nms-public.gathering.org/speedometer.html deleted file mode 100644 index 4395ca9..0000000 --- a/web/nms-public.gathering.org/speedometer.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - Network speedometer - - - - - - - - - - - -
    -
    -









    -

    Aggregated internal traffic

    - - - -
    - -
    -
    - - diff --git a/web/nms-public.gathering.org/speedometer.js b/web/nms-public.gathering.org/speedometer.js deleted file mode 100644 index f301476..0000000 --- a/web/nms-public.gathering.org/speedometer.js +++ /dev/null @@ -1,131 +0,0 @@ -$(function () { - - $('#container').highcharts({ - exporting: { - enabled: false - }, - chart: { - type: 'gauge', - plotBackgroundColor: null, - plotBackgroundImage: null, - plotBorderWidth: 0, - plotShadow: false - }, - - title: { - text: '' - }, - - pane: { - startAngle: -150, - endAngle: 150, - background: [{ - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#FFF'], - [1, '#333'] - ] - }, - borderWidth: 0, - outerRadius: '109%' - }, { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#333'], - [1, '#FFF'] - ] - }, - borderWidth: 1, - outerRadius: '107%' - }, { - // default background - }, { - backgroundColor: '#DDD', - borderWidth: 0, - outerRadius: '105%', - innerRadius: '103%' - }] - }, - - // the value axis - yAxis: { - min: 0, - max: 50, - - tickPixelInterval: 30, - tickWidth: 2, - tickPosition: 'inside', - tickLength: 20, - tickColor: '#666', - labels: { - step: 2, - rotation: 'auto', - distance: -40, - style: { - fontSize: '20px' - } - }, - plotBands: [{ - from: 0, - to: 20, - color: '#55BF3B', // green - thickness: 20 - }, { - from: 20, - to: 40, - color: '#DDDF0D', // yellow - thickness: 20 - }, { - from: 40, - to: 50, - color: '#DF5353', // red - thickness: 20 - }] - }, - plotOptions: { - gauge: { - dial: { - baseWidth: 5, - }, - pivot: { - radius: 8, - }, - dataLabels: { - borderWidth: 0, - format: '{y} Gbps', - style: { - fontSize: '40px' - }, - y: 50 - } - } - }, - - series: [{ - name: 'Speed', - data: [0], - tooltip: { - valueSuffix: ' Gbps' - } - }] - - }, - // Add some life - function (chart) { - if (!chart.renderer.forExport) { - setInterval(function () { - $.getJSON('speedometer.json', function(data) { - var point = chart.series[0].points[0]; - if(data.speed > 1){ - point.update(data.speed); - } - if(data.speed > 55){ - point.update(55); - } - }); - }, 1000); - } - }); -}); diff --git a/web/nms-public.gathering.org/tempkart.html b/web/nms-public.gathering.org/tempkart.html deleted file mode 100644 index 216d855..0000000 --- a/web/nms-public.gathering.org/tempkart.html +++ /dev/null @@ -1,10 +0,0 @@ - - - DHCP-kart - - - - -

    - - diff --git a/web/nms-public.gathering.org/tg14-salkart.png b/web/nms-public.gathering.org/tg14-salkart.png deleted file mode 120000 index 0e62de7..0000000 --- a/web/nms-public.gathering.org/tg14-salkart.png +++ /dev/null @@ -1 +0,0 @@ -../nms.gathering.org/tg14-salkart.png \ No newline at end of file diff --git a/web/nms-public.gathering.org/tg15-salkart.png b/web/nms-public.gathering.org/tg15-salkart.png deleted file mode 120000 index f2b408a..0000000 --- a/web/nms-public.gathering.org/tg15-salkart.png +++ /dev/null @@ -1 +0,0 @@ -../nms.gathering.org/tg15-salkart.png \ No newline at end of file diff --git a/web/nms-public.gathering.org/total_network_traffic-day.sh b/web/nms-public.gathering.org/total_network_traffic-day.sh deleted file mode 100755 index 68a4854..0000000 --- a/web/nms-public.gathering.org/total_network_traffic-day.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/sh -echo "Content-Type: image/png" -echo "Refresh: 300;/total_network_traffic-day.sh" -echo -cat /var/lib/munin/cgi-tmp/munin-cgi-graph/tg14.gathering.org/frank.tg14.gathering.org/total_network_traffic-day.png diff --git a/web/nms-public.gathering.org/total_network_traffic-week.sh b/web/nms-public.gathering.org/total_network_traffic-week.sh deleted file mode 100755 index a852776..0000000 --- a/web/nms-public.gathering.org/total_network_traffic-week.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/sh -echo "Content-Type: image/png" -echo "Refresh: 300;/total_network_traffic-week.sh" -echo -cat /var/lib/munin/cgi-tmp/munin-cgi-graph/tg14.gathering.org/frank.tg14.gathering.org/total_network_traffic-week.png diff --git a/web/nms-public.gathering.org/trafikk-tg14.html b/web/nms-public.gathering.org/trafikk-tg14.html deleted file mode 100644 index 69d1b5d..0000000 --- a/web/nms-public.gathering.org/trafikk-tg14.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Traffic stats - - - - - - -
    -
    -
    -









    -

    Traffic stats

    - - -
    -
    -
    - - diff --git a/web/nms-public.gathering.org/weathermap.html b/web/nms-public.gathering.org/weathermap.html deleted file mode 100644 index b0136ca..0000000 --- a/web/nms-public.gathering.org/weathermap.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - The Gathering 2015 - Weathermap - - - - - diff --git a/web/nms-public.gathering.org/weathermap.pl b/web/nms-public.gathering.org/weathermap.pl deleted file mode 100755 index 41aca39..0000000 --- a/web/nms-public.gathering.org/weathermap.pl +++ /dev/null @@ -1,18 +0,0 @@ -#! /usr/bin/perl -use strict; -use warnings; -use CGI; -use File::Copy; - -my $cgi = CGI->new; -my $img_filename = "/root/tgmanage/web/nms-public.gathering.org/weathermap.png"; - -# this must be done for windows -binmode STDOUT; - -# flush headers -$|=1; - -# print the image -print $cgi->header(-type=>'image/png; charset=utf-8', -refresh=>'10; weathermap.pl'); -copy "$img_filename", \*STDOUT; diff --git a/web/nms-public.gathering.org/weathermap.png b/web/nms-public.gathering.org/weathermap.png deleted file mode 100644 index 7cc8ddd..0000000 Binary files a/web/nms-public.gathering.org/weathermap.png and /dev/null differ -- cgit v1.2.3 From 9bf9cd8bf0d52f07e7bcb8a1f4d8b792c3274729 Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Mon, 21 Mar 2016 19:10:45 +0100 Subject: FIX FAX APACHE NMS PUBLIC --- web/etc/apache2/nms-public.tg15.gathering.org.conf | 21 --------------------- web/etc/apache2/nms.tg16.gathering.org.conf | 2 +- web/etc/varnish/nms.vcl | 3 --- 3 files changed, 1 insertion(+), 25 deletions(-) delete mode 100644 web/etc/apache2/nms-public.tg15.gathering.org.conf diff --git a/web/etc/apache2/nms-public.tg15.gathering.org.conf b/web/etc/apache2/nms-public.tg15.gathering.org.conf deleted file mode 100644 index 6ca255d..0000000 --- a/web/etc/apache2/nms-public.tg15.gathering.org.conf +++ /dev/null @@ -1,21 +0,0 @@ - - ServerAdmin drift@gathering.org - ServerName nms-public.tg15.gathering.org - - DocumentRoot /root/tgmanage/web/nms-public.gathering.org - AddHandler cgi-script .cgi .sh .pl .py - - LogLevel warn - ErrorLog /var/log/apache2/error-nms-public.tg15.gathering.org.log - CustomLog /var/log/apache2/access-nms-public.tg15.gathering.org.log combined - - - AllowOverride None - Options Indexes FollowSymLinks ExecCGI MultiViews - - Require all granted - - - ServerSignature On - - diff --git a/web/etc/apache2/nms.tg16.gathering.org.conf b/web/etc/apache2/nms.tg16.gathering.org.conf index 9a6d7cd..1c1d7e3 100644 --- a/web/etc/apache2/nms.tg16.gathering.org.conf +++ b/web/etc/apache2/nms.tg16.gathering.org.conf @@ -1,7 +1,7 @@ ServerAdmin drift@gathering.org ServerName nms.tg16.gathering.org - ServerAlias einstein.tg16.gathering.org + ServerAlias nms.tg16.gathering.org DocumentRoot /srv/tgmanage/web/nms.gathering.org ScriptAlias /api/private/ /srv/tgmanage/web/nms.gathering.org/api/private/ diff --git a/web/etc/varnish/nms.vcl b/web/etc/varnish/nms.vcl index 6349238..93da9de 100644 --- a/web/etc/varnish/nms.vcl +++ b/web/etc/varnish/nms.vcl @@ -22,9 +22,6 @@ sub vcl_recv { return (synth(418,"LOLOLOL")); } - # Hardcoded for testing - set req.http.host = "nms.tg16.gathering.org"; - if (req.method != "GET" && req.method != "HEAD") { /* We only deal with GET and HEAD by default */ return (pass); -- cgit v1.2.3 From 7a6cf59e67d569a412f7670d9f04b2378c546dbc Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Mon, 21 Mar 2016 20:11:32 +0100 Subject: NMS: Remove switchtypes logic --- web/nms.gathering.org/api/private/switch-add | 4 ++-- web/nms.gathering.org/api/private/switch-update | 4 ++-- web/nms.gathering.org/api/public/switches | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/web/nms.gathering.org/api/private/switch-add b/web/nms.gathering.org/api/private/switch-add index 70d6212..48f62fc 100755 --- a/web/nms.gathering.org/api/private/switch-add +++ b/web/nms.gathering.org/api/private/switch-add @@ -22,7 +22,7 @@ my @dups; my $sth = $nms::web::dbh->prepare("SELECT sysname FROM switches WHERE sysname=?"); -my @fields = ('ip', 'sysname', 'switchtype', 'last_updated', 'locked', 'poll_frequency', 'community', 'lldp_chassis_id', 'secondary_ip', 'subnet4', 'subnet6', 'placement', 'distro', 'secondary_ip'); +my @fields = ('ip', 'sysname', 'last_updated', 'locked', 'poll_frequency', 'community', 'lldp_chassis_id', 'secondary_ip', 'subnet4', 'subnet6', 'placement', 'distro', 'secondary_ip'); sub convertplace { @@ -81,7 +81,7 @@ foreach my $tmp2 (@tmp) { } keys %switch; - $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, switchtype, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement) VALUES ($template{'ip'}, $template{'sysname'}, $template{'switchtype'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'});"); + $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement,subnet4,subnet6,distro) VALUES ($template{'ip'}, $template{'sysname'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'},$template{'subnet4'},$template{'subnet6'},$template{'distro'});"); push @added, $switch{'sysname'}; } } diff --git a/web/nms.gathering.org/api/private/switch-update b/web/nms.gathering.org/api/private/switch-update index 3d7b119..6507d2b 100755 --- a/web/nms.gathering.org/api/private/switch-update +++ b/web/nms.gathering.org/api/private/switch-update @@ -22,7 +22,7 @@ my @dups; my $sth = $nms::web::dbh->prepare("SELECT sysname FROM switches WHERE sysname=?"); -my @fields = ('ip', 'sysname', 'switchtype', 'last_updated', 'locked', 'poll_frequency', 'community', 'lldp_chassis_id', 'secondary_ip', 'subnet4', 'subnet6', 'placement', 'distro', 'secondary_ip'); +my @fields = ('ip', 'sysname', 'last_updated', 'locked', 'poll_frequency', 'community', 'lldp_chassis_id', 'secondary_ip', 'subnet4', 'subnet6', 'placement', 'distro', 'secondary_ip'); sub convertplace { @@ -81,7 +81,7 @@ foreach my $tmp2 (@tmp) { } keys %switch; - $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, switchtype, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement) VALUES ($template{'ip'}, $template{'sysname'}, $template{'switchtype'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'});"); + $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement,subnet4,subnet6,distro) VALUES ($template{'ip'}, $template{'sysname'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'},$template{'subnet4'},$template{'subnet6'},$template{'distro'});"); push @added, $switch{'sysname'}; } else { if (defined($switch{'placement'})) { diff --git a/web/nms.gathering.org/api/public/switches b/web/nms.gathering.org/api/public/switches index 8447b2b..7e7f10b 100755 --- a/web/nms.gathering.org/api/public/switches +++ b/web/nms.gathering.org/api/public/switches @@ -12,14 +12,13 @@ use Data::Dumper; $nms::web::cc{'max-age'} = "60"; -my $q2 = $nms::web::dbh->prepare('select switch,sysname,placement,ip,switchtype,poll_frequency,community,last_updated from switches where placement is not null'); +my $q2 = $nms::web::dbh->prepare('select switch,sysname,placement,ip,poll_frequency,community,last_updated from switches where placement is not null'); $q2->execute(); while (my $ref = $q2->fetchrow_hashref()) { $ref->{'placement'} =~ /\((-?\d+),(-?\d+)\),\((-?\d+),(-?\d+)\)/; my ($x1, $y1, $x2, $y2) = ($1, $2, $3, $4); my $sysname = $ref->{'sysname'}; - $nms::web::json{'switches'}{$ref->{'sysname'}}{'switchtype'} = $ref->{'switchtype'}; $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'x'} = $x2; $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'y'} = $y2; $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'width'} = $x1 - $x2; -- cgit v1.2.3 From 727e4ab31aa6d1a754711d4cd29dbcefae2e952a Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Mon, 21 Mar 2016 20:11:55 +0100 Subject: NMS: NMS Public --- web/etc/apache2/nms-public.tg16.gathering.org.conf | 30 + web/nms-public.gathering.org/api/API.rst | 113 + .../api/public/dhcp-summary | 21 + web/nms-public.gathering.org/api/public/ping | 37 + .../api/public/switch-state | 47 + web/nms-public.gathering.org/api/public/switches | 35 + .../css/bootstrap-theme.css | 476 + .../css/bootstrap-theme.css.map | 1 + .../css/bootstrap-theme.min.css | 5 + web/nms-public.gathering.org/css/bootstrap.css | 6584 ++++++++++++++ web/nms-public.gathering.org/css/bootstrap.css.map | 1 + web/nms-public.gathering.org/css/bootstrap.min.css | 5 + .../css/jquery.datetimepicker.css | 568 ++ .../css/navbar-static-top.css | 4 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../img/tg15-salkart-clean-big.png | Bin 0 -> 84362 bytes .../img/tg15-salkart-full.png | Bin 0 -> 167427 bytes web/nms-public.gathering.org/img/tg15-salkart.png | Bin 0 -> 141073 bytes web/nms-public.gathering.org/index.html | 244 + web/nms-public.gathering.org/js/bootstrap.js | 2317 +++++ web/nms-public.gathering.org/js/bootstrap.min.js | 7 + .../js/jquery.datetimepicker.full.js | 3073 +++++++ web/nms-public.gathering.org/js/jquery.min.js | 4 + web/nms-public.gathering.org/js/nms-color-util.js | 94 + web/nms-public.gathering.org/js/nms-data.js | 262 + web/nms-public.gathering.org/js/nms-info-box.js | 521 ++ .../js/nms-map-handlers.js | 371 + web/nms-public.gathering.org/js/nms-map.js | 520 ++ web/nms-public.gathering.org/js/nms.js | 674 ++ web/nms-public.gathering.org/js/npm.js | 13 + .../old/change-switch-pos.pl | 15 + web/nms-public.gathering.org/old/dhcp-json.pl | 19 + web/nms-public.gathering.org/old/dhcpkart.pl | 96 + web/nms-public.gathering.org/old/display-rack.html | 70 + web/nms-public.gathering.org/old/display.html | 64 + web/nms-public.gathering.org/old/edit.html | 21 + web/nms-public.gathering.org/old/index.html | 115 + web/nms-public.gathering.org/old/led.pl | 20 + web/nms-public.gathering.org/old/mygraph.pl | 179 + .../old/nettkart-continuous.html | 31 + web/nms-public.gathering.org/old/nettkart-json.pl | 80 + web/nms-public.gathering.org/old/nettkart-text.pl | 63 + web/nms-public.gathering.org/old/nettkart-web.pl | 47 + web/nms-public.gathering.org/old/nettkart.pl | 145 + web/nms-public.gathering.org/old/observium.html | 37 + web/nms-public.gathering.org/old/ping-json.pl | 32 + web/nms-public.gathering.org/old/ping.css | 13 + web/nms-public.gathering.org/old/ping.html | 21 + web/nms-public.gathering.org/old/ping.js | 238 + web/nms-public.gathering.org/old/ping2.html | 21 + web/nms-public.gathering.org/old/portkart.pl | 93 + web/nms-public.gathering.org/old/showswitch.pl | 249 + web/nms-public.gathering.org/old/slide.html | 38 + web/nms-public.gathering.org/old/smanagement.pl | 246 + .../Statistikk_bakgrunn_alternate-02.png | Bin 0 -> 115463 bytes .../old/speedometer/c3-master/.editorconfig | 10 + .../old/speedometer/c3-master/.gitignore | 8 + .../old/speedometer/c3-master/.jshintrc | 31 + .../old/speedometer/c3-master/.travis.yml | 5 + .../old/speedometer/c3-master/Gruntfile.coffee | 113 + .../old/speedometer/c3-master/LICENSE | 20 + .../old/speedometer/c3-master/README.md | 51 + .../old/speedometer/c3-master/bower.json | 32 + .../old/speedometer/c3-master/c3.css | 158 + .../old/speedometer/c3-master/c3.js | 7049 +++++++++++++++ .../old/speedometer/c3-master/c3.min.css | 1 + .../old/speedometer/c3-master/c3.min.js | 5 + .../old/speedometer/c3-master/component.json | 19 + .../c3-master/extensions/exporter/config.json | 11 + .../extensions/exporter/phantom-exporter.js | 140 + .../c3-master/extensions/exporter/test.png | Bin 0 -> 16458 bytes .../speedometer/c3-master/extensions/js/c3ext.js | 380 + .../c3-master/htdocs/css/bootstrap.min.css | 8 + .../old/speedometer/c3-master/htdocs/css/c3.css | 1 + .../old/speedometer/c3-master/htdocs/css/index.css | 12 + .../old/speedometer/c3-master/htdocs/css/style.css | 9 + .../speedometer/c3-master/htdocs/data/c3_test.csv | 6 + .../speedometer/c3-master/htdocs/data/c3_test.json | 5 + .../speedometer/c3-master/htdocs/data/c3_test.tsv | 6 + .../speedometer/c3-master/htdocs/data/c3_test2.csv | 6 + .../c3-master/htdocs/data/c3_test2_ts.csv | 6 + .../speedometer/c3-master/htdocs/data/c3_test3.csv | 4 + .../c3-master/htdocs/data/c3_test_2.json | 5 + .../c3-master/htdocs/data/c3_test_3.json | 6 + .../c3-master/htdocs/data/c3_test_ts.csv | 6 + .../old/speedometer/c3-master/htdocs/index.html | 481 + .../old/speedometer/c3-master/htdocs/js/c3.js | 1 + .../old/speedometer/c3-master/htdocs/js/c3.min.js | 1 + .../old/speedometer/c3-master/htdocs/js/extensions | 1 + .../old/speedometer/c3-master/htdocs/js/require.js | 36 + .../c3-master/htdocs/js/samples/plugin.js | 13 + .../c3-master/htdocs/js/samples/requirejs.js | 18 + .../c3-master/htdocs/js/samples/zoom_reduction.js | 81 + .../c3-master/htdocs/samples/api_axis_label.html | 70 + .../c3-master/htdocs/samples/api_axis_range.html | 81 + .../c3-master/htdocs/samples/api_category.html | 48 + .../c3-master/htdocs/samples/api_data_colors.html | 33 + .../c3-master/htdocs/samples/api_flow.html | 223 + .../htdocs/samples/api_flow_timeseries.html | 173 + .../c3-master/htdocs/samples/api_legend.html | 136 + .../c3-master/htdocs/samples/api_tooltip_show.html | 38 + .../c3-master/htdocs/samples/api_transform.html | 70 + .../c3-master/htdocs/samples/api_xgrid_lines.html | 125 + .../c3-master/htdocs/samples/api_ygrid_lines.html | 50 + .../c3-master/htdocs/samples/area_zerobased.html | 25 + .../c3-master/htdocs/samples/axes_padding.html | 62 + .../c3-master/htdocs/samples/axes_range.html | 87 + .../c3-master/htdocs/samples/axes_x_extent.html | 76 + .../c3-master/htdocs/samples/axes_x_localtime.html | 137 + .../htdocs/samples/axes_x_range_timeseries.html | 57 + .../htdocs/samples/axes_x_tick_culling.html | 39 + .../c3-master/htdocs/samples/axes_x_tick_fit.html | 35 + .../htdocs/samples/axes_x_tick_rotate.html | 55 + .../htdocs/samples/axes_x_tick_values.html | 55 + .../c3-master/htdocs/samples/axes_y2.html | 30 + .../c3-master/htdocs/samples/axes_y_default.html | 26 + .../c3-master/htdocs/samples/bar_zerobased.html | 25 + .../c3-master/htdocs/samples/bindto.html | 41 + .../c3-master/htdocs/samples/categorized.html | 54 + .../c3-master/htdocs/samples/chart_area.html | 88 + .../htdocs/samples/chart_area_spline.html | 49 + .../htdocs/samples/chart_area_spline_stacked.html | 52 + .../htdocs/samples/chart_area_stacked.html | 52 + .../c3-master/htdocs/samples/chart_area_step.html | 49 + .../htdocs/samples/chart_area_step_stacked.html | 52 + .../c3-master/htdocs/samples/chart_bar.html | 38 + .../htdocs/samples/chart_bar_stacked.html | 91 + .../htdocs/samples/chart_combination.html | 41 + .../c3-master/htdocs/samples/chart_donut.html | 60 + .../c3-master/htdocs/samples/chart_gauge.html | 181 + .../c3-master/htdocs/samples/chart_pie.html | 52 + .../c3-master/htdocs/samples/chart_pie_sort.html | 93 + .../c3-master/htdocs/samples/chart_scatter.html | 42 + .../c3-master/htdocs/samples/chart_spline.html | 25 + .../c3-master/htdocs/samples/chart_step.html | 38 + .../htdocs/samples/chart_step_category.html | 50 + .../htdocs/samples/custom_x_categorized.html | 86 + .../c3-master/htdocs/samples/custom_x_scale.html | 59 + .../c3-master/htdocs/samples/custom_xs_scale.html | 64 + .../c3-master/htdocs/samples/data_columned.html | 22 + .../c3-master/htdocs/samples/data_hide.html | 24 + .../c3-master/htdocs/samples/data_json.html | 90 + .../c3-master/htdocs/samples/data_label.html | 225 + .../htdocs/samples/data_label_format.html | 46 + .../c3-master/htdocs/samples/data_load.html | 131 + .../htdocs/samples/data_load_timeseries.html | 55 + .../c3-master/htdocs/samples/data_region.html | 25 + .../htdocs/samples/data_region_timeseries.html | 34 + .../c3-master/htdocs/samples/data_rowed.html | 26 + .../c3-master/htdocs/samples/data_url.html | 59 + .../c3-master/htdocs/samples/domain_y.html | 71 + .../c3-master/htdocs/samples/element.html | 37 + .../c3-master/htdocs/samples/emptydata.html | 37 + .../c3-master/htdocs/samples/grid_focus.html | 29 + .../c3-master/htdocs/samples/grid_x_lines.html | 66 + .../htdocs/samples/grid_x_lines_timeseries.html | 73 + .../c3-master/htdocs/samples/grids.html | 111 + .../c3-master/htdocs/samples/grids_timeseries.html | 89 + .../htdocs/samples/interaction_enabled.html | 25 + .../c3-master/htdocs/samples/legend.html | 87 + .../c3-master/htdocs/samples/padding.html | 138 + .../c3-master/htdocs/samples/padding_update.html | 88 + .../c3-master/htdocs/samples/plugin.html | 27 + .../c3-master/htdocs/samples/point_r.html | 28 + .../c3-master/htdocs/samples/regions.html | 87 + .../htdocs/samples/regions_timeseries.html | 49 + .../c3-master/htdocs/samples/requirejs.html | 9 + .../c3-master/htdocs/samples/selection.html | 173 + .../c3-master/htdocs/samples/simple.html | 24 + .../c3-master/htdocs/samples/subchart.html | 67 + .../c3-master/htdocs/samples/subchart_onbrush.html | 57 + .../c3-master/htdocs/samples/timeseries.html | 54 + .../c3-master/htdocs/samples/timeseries_date.html | 64 + .../htdocs/samples/timeseries_descendent.html | 72 + .../c3-master/htdocs/samples/timeseries_raw.html | 52 + .../c3-master/htdocs/samples/tooltip_grouped.html | 26 + .../c3-master/htdocs/samples/tooltip_show.html | 32 + .../speedometer/c3-master/htdocs/samples/zoom.html | 71 + .../c3-master/htdocs/samples/zoom_category.html | 47 + .../c3-master/htdocs/samples/zoom_onzoom.html | 57 + .../c3-master/htdocs/samples/zoom_reduction.html | 46 + .../old/speedometer/c3-master/package.json | 36 + .../speedometer/c3-master/spec/api.axis-spec.js | 54 + .../speedometer/c3-master/spec/api.data-spec.js | 164 + .../speedometer/c3-master/spec/api.focus-spec.js | 441 + .../speedometer/c3-master/spec/api.grid-spec.js | 119 + .../speedometer/c3-master/spec/api.load-spec.js | 121 + .../speedometer/c3-master/spec/api.zoom-spec.js | 115 + .../old/speedometer/c3-master/spec/arc-spec.js | 100 + .../old/speedometer/c3-master/spec/axis-spec.js | 769 ++ .../old/speedometer/c3-master/spec/c3-helper.js | 47 + .../old/speedometer/c3-master/spec/c3-spec.js | 10 + .../old/speedometer/c3-master/spec/class-spec.js | 61 + .../old/speedometer/c3-master/spec/core-spec.js | 150 + .../old/speedometer/c3-master/spec/data-spec.js | 1220 +++ .../old/speedometer/c3-master/spec/domain-spec.js | 110 + .../old/speedometer/c3-master/spec/grid-spec.js | 365 + .../speedometer/c3-master/spec/interaction-spec.js | 116 + .../old/speedometer/c3-master/spec/legend-spec.js | 220 + .../speedometer/c3-master/spec/shape.bar-spec.js | 88 + .../speedometer/c3-master/spec/shape.line-spec.js | 99 + .../old/speedometer/c3-master/spec/tooltip-spec.js | 101 + .../old/speedometer/c3-master/spec/type-spec.js | 137 + .../old/speedometer/c3-master/spec/zoom-spec.js | 67 + .../old/speedometer/c3-master/src/api.axis.js | 60 + .../old/speedometer/c3-master/src/api.category.js | 15 + .../old/speedometer/c3-master/src/api.chart.js | 27 + .../old/speedometer/c3-master/src/api.color.js | 5 + .../old/speedometer/c3-master/src/api.data.js | 27 + .../old/speedometer/c3-master/src/api.flow.js | 294 + .../old/speedometer/c3-master/src/api.focus.js | 60 + .../old/speedometer/c3-master/src/api.grid.js | 31 + .../old/speedometer/c3-master/src/api.group.js | 7 + .../old/speedometer/c3-master/src/api.legend.js | 11 + .../old/speedometer/c3-master/src/api.load.js | 57 + .../old/speedometer/c3-master/src/api.region.js | 40 + .../old/speedometer/c3-master/src/api.selection.js | 54 + .../old/speedometer/c3-master/src/api.show.js | 50 + .../old/speedometer/c3-master/src/api.tooltip.js | 35 + .../old/speedometer/c3-master/src/api.transform.js | 16 + .../old/speedometer/c3-master/src/api.x.js | 16 + .../old/speedometer/c3-master/src/api.zoom.js | 22 + .../old/speedometer/c3-master/src/arc.js | 394 + .../old/speedometer/c3-master/src/axis.js | 383 + .../old/speedometer/c3-master/src/c3.axis.js | 330 + .../old/speedometer/c3-master/src/cache.js | 16 + .../old/speedometer/c3-master/src/category.js | 4 + .../old/speedometer/c3-master/src/class.js | 174 + .../old/speedometer/c3-master/src/clip.js | 58 + .../old/speedometer/c3-master/src/color.js | 46 + .../old/speedometer/c3-master/src/config.js | 230 + .../old/speedometer/c3-master/src/core.js | 1008 +++ .../old/speedometer/c3-master/src/data.convert.js | 191 + .../old/speedometer/c3-master/src/data.js | 369 + .../old/speedometer/c3-master/src/data.load.js | 88 + .../old/speedometer/c3-master/src/domain.js | 234 + .../old/speedometer/c3-master/src/drag.js | 81 + .../old/speedometer/c3-master/src/format.js | 42 + .../old/speedometer/c3-master/src/grid.js | 240 + .../old/speedometer/c3-master/src/head.js | 4 + .../old/speedometer/c3-master/src/interaction.js | 341 + .../old/speedometer/c3-master/src/legend.js | 322 + .../old/speedometer/c3-master/src/polyfill.js | 25 + .../old/speedometer/c3-master/src/region.js | 81 + .../old/speedometer/c3-master/src/scale.js | 89 + .../old/speedometer/c3-master/src/scss/arc.scss | 24 + .../old/speedometer/c3-master/src/scss/area.scss | 4 + .../old/speedometer/c3-master/src/scss/axis.scss | 14 + .../old/speedometer/c3-master/src/scss/bar.scss | 6 + .../old/speedometer/c3-master/src/scss/brush.scss | 3 + .../old/speedometer/c3-master/src/scss/chart.scss | 29 + .../old/speedometer/c3-master/src/scss/focus.scss | 9 + .../old/speedometer/c3-master/src/scss/grid.scss | 11 + .../old/speedometer/c3-master/src/scss/legend.scss | 13 + .../old/speedometer/c3-master/src/scss/line.scss | 3 + .../old/speedometer/c3-master/src/scss/main.scss | 59 + .../old/speedometer/c3-master/src/scss/point.scss | 8 + .../old/speedometer/c3-master/src/scss/region.scss | 4 + .../c3-master/src/scss/select_drag.scss | 2 + .../old/speedometer/c3-master/src/scss/text.scss | 7 + .../speedometer/c3-master/src/scss/tooltip.scss | 38 + .../old/speedometer/c3-master/src/selection.js | 75 + .../old/speedometer/c3-master/src/shape.bar.js | 122 + .../old/speedometer/c3-master/src/shape.js | 71 + .../old/speedometer/c3-master/src/shape.line.js | 385 + .../old/speedometer/c3-master/src/size.js | 104 + .../old/speedometer/c3-master/src/subchart.js | 204 + .../old/speedometer/c3-master/src/tail.js | 9 + .../old/speedometer/c3-master/src/text.js | 122 + .../old/speedometer/c3-master/src/tooltip.js | 113 + .../old/speedometer/c3-master/src/type.js | 91 + .../old/speedometer/c3-master/src/ua.js | 8 + .../old/speedometer/c3-master/src/util.js | 46 + .../old/speedometer/c3-master/src/zoom.js | 69 + .../old/speedometer/d3-master/.gitattributes | 5 + .../old/speedometer/d3-master/.gitignore | 3 + .../old/speedometer/d3-master/.npmignore | 5 + .../old/speedometer/d3-master/.spmignore | 4 + .../old/speedometer/d3-master/CONTRIBUTING.md | 27 + .../old/speedometer/d3-master/LICENSE | 26 + .../old/speedometer/d3-master/Makefile | 45 + .../old/speedometer/d3-master/README.md | 9 + .../old/speedometer/d3-master/bin/bower | 31 + .../old/speedometer/d3-master/bin/component | 17 + .../old/speedometer/d3-master/bin/meteor | 20 + .../old/speedometer/d3-master/bin/start | 3 + .../old/speedometer/d3-master/bin/uglify | 34 + .../old/speedometer/d3-master/bower.json | 26 + .../old/speedometer/d3-master/component.json | 19 + .../old/speedometer/d3-master/composer.json | 26 + .../old/speedometer/d3-master/d3.js | 9504 ++++++++++++++++++++ .../old/speedometer/d3-master/d3.min.js | 5 + .../old/speedometer/d3-master/index.js | 9 + .../speedometer/d3-master/lib/colorbrewer/LICENSE | 38 + .../d3-master/lib/colorbrewer/colorbrewer.css | 1690 ++++ .../d3-master/lib/colorbrewer/colorbrewer.js | 302 + .../d3-master/lib/geographiclib/LICENSE | 23 + .../old/speedometer/d3-master/lib/penner/LICENSE | 31 + .../old/speedometer/d3-master/lib/polymaps/LICENSE | 28 + .../old/speedometer/d3-master/lib/protovis/LICENSE | 27 + .../d3-master/lib/rhill-voronoi/LICENSE | 23 + .../old/speedometer/d3-master/lib/science/LICENSE | 26 + .../speedometer/d3-master/lib/science/science.js | 225 + .../d3-master/lib/science/science.lin.js | 27 + .../d3-master/lib/science/science.lin.min.js | 1 + .../d3-master/lib/science/science.min.js | 1 + .../d3-master/lib/science/science.stats.js | 720 ++ .../d3-master/lib/science/science.stats.min.js | 1 + .../old/speedometer/d3-master/package.js | 13 + .../old/speedometer/d3-master/package.json | 69 + .../speedometer/d3-master/src/arrays/ascending.js | 5 + .../old/speedometer/d3-master/src/arrays/bisect.js | 36 + .../speedometer/d3-master/src/arrays/descending.js | 3 + .../speedometer/d3-master/src/arrays/deviation.js | 6 + .../speedometer/d3-master/src/arrays/entries.js | 5 + .../old/speedometer/d3-master/src/arrays/extent.js | 21 + .../old/speedometer/d3-master/src/arrays/index.js | 25 + .../old/speedometer/d3-master/src/arrays/keys.js | 5 + .../old/speedometer/d3-master/src/arrays/map.js | 84 + .../old/speedometer/d3-master/src/arrays/max.js | 14 + .../old/speedometer/d3-master/src/arrays/mean.js | 15 + .../old/speedometer/d3-master/src/arrays/median.js | 16 + .../old/speedometer/d3-master/src/arrays/merge.js | 21 + .../old/speedometer/d3-master/src/arrays/min.js | 14 + .../old/speedometer/d3-master/src/arrays/nest.js | 97 + .../old/speedometer/d3-master/src/arrays/pairs.js | 5 + .../speedometer/d3-master/src/arrays/permute.js | 5 + .../speedometer/d3-master/src/arrays/quantile.js | 8 + .../old/speedometer/d3-master/src/arrays/range.js | 26 + .../old/speedometer/d3-master/src/arrays/set.js | 27 + .../speedometer/d3-master/src/arrays/shuffle.js | 9 + .../old/speedometer/d3-master/src/arrays/sum.js | 14 + .../speedometer/d3-master/src/arrays/transpose.js | 5 + .../old/speedometer/d3-master/src/arrays/values.js | 5 + .../speedometer/d3-master/src/arrays/variance.js | 29 + .../old/speedometer/d3-master/src/arrays/zip.js | 15 + .../speedometer/d3-master/src/behavior/behavior.js | 1 + .../old/speedometer/d3-master/src/behavior/drag.js | 88 + .../speedometer/d3-master/src/behavior/index.js | 3 + .../old/speedometer/d3-master/src/behavior/zoom.js | 349 + .../old/speedometer/d3-master/src/color/color.js | 7 + .../old/speedometer/d3-master/src/color/hcl.js | 34 + .../old/speedometer/d3-master/src/color/hsl.js | 56 + .../old/speedometer/d3-master/src/color/index.js | 6 + .../old/speedometer/d3-master/src/color/lab.js | 60 + .../old/speedometer/d3-master/src/color/rgb.js | 301 + .../old/speedometer/d3-master/src/color/xyz.js | 7 + .../old/speedometer/d3-master/src/compat/array.js | 15 + .../old/speedometer/d3-master/src/compat/date.js | 3 + .../old/speedometer/d3-master/src/compat/index.js | 3 + .../old/speedometer/d3-master/src/compat/style.js | 23 + .../old/speedometer/d3-master/src/core/array.js | 2 + .../old/speedometer/d3-master/src/core/class.js | 8 + .../old/speedometer/d3-master/src/core/document.js | 15 + .../old/speedometer/d3-master/src/core/functor.js | 5 + .../old/speedometer/d3-master/src/core/identity.js | 3 + .../old/speedometer/d3-master/src/core/index.js | 3 + .../old/speedometer/d3-master/src/core/noop.js | 1 + .../old/speedometer/d3-master/src/core/ns.js | 22 + .../old/speedometer/d3-master/src/core/rebind.js | 16 + .../old/speedometer/d3-master/src/core/source.js | 3 + .../old/speedometer/d3-master/src/core/subclass.js | 11 + .../old/speedometer/d3-master/src/core/target.js | 3 + .../old/speedometer/d3-master/src/core/true.js | 3 + .../old/speedometer/d3-master/src/core/vendor.js | 10 + .../old/speedometer/d3-master/src/core/zero.js | 3 + .../old/speedometer/d3-master/src/d3.js | 23 + .../old/speedometer/d3-master/src/dsv/csv.js | 3 + .../old/speedometer/d3-master/src/dsv/dsv.js | 136 + .../old/speedometer/d3-master/src/dsv/index.js | 3 + .../old/speedometer/d3-master/src/dsv/tsv.js | 3 + .../old/speedometer/d3-master/src/end.js | 4 + .../speedometer/d3-master/src/event/dispatch.js | 69 + .../old/speedometer/d3-master/src/event/drag.js | 36 + .../old/speedometer/d3-master/src/event/event.js | 50 + .../old/speedometer/d3-master/src/event/index.js | 6 + .../old/speedometer/d3-master/src/event/mouse.js | 39 + .../old/speedometer/d3-master/src/event/timer.js | 77 + .../old/speedometer/d3-master/src/event/touch.js | 11 + .../old/speedometer/d3-master/src/event/touches.js | 12 + .../speedometer/d3-master/src/format/collapse.js | 3 + .../old/speedometer/d3-master/src/format/format.js | 3 + .../d3-master/src/format/formatPrefix.js | 24 + .../old/speedometer/d3-master/src/format/index.js | 4 + .../speedometer/d3-master/src/format/precision.js | 3 + .../speedometer/d3-master/src/format/requote.js | 5 + .../old/speedometer/d3-master/src/format/round.js | 5 + .../speedometer/d3-master/src/geo/albers-usa.js | 129 + .../old/speedometer/d3-master/src/geo/albers.js | 11 + .../old/speedometer/d3-master/src/geo/area.js | 69 + .../d3-master/src/geo/azimuthal-equal-area.js | 12 + .../d3-master/src/geo/azimuthal-equidistant.js | 13 + .../old/speedometer/d3-master/src/geo/azimuthal.js | 25 + .../old/speedometer/d3-master/src/geo/bounds.js | 168 + .../old/speedometer/d3-master/src/geo/cartesian.js | 47 + .../old/speedometer/d3-master/src/geo/centroid.js | 149 + .../old/speedometer/d3-master/src/geo/circle.js | 81 + .../d3-master/src/geo/clip-antimeridian.js | 95 + .../speedometer/d3-master/src/geo/clip-circle.js | 178 + .../speedometer/d3-master/src/geo/clip-extent.js | 196 + .../speedometer/d3-master/src/geo/clip-polygon.js | 104 + .../old/speedometer/d3-master/src/geo/clip.js | 149 + .../old/speedometer/d3-master/src/geo/compose.js | 12 + .../d3-master/src/geo/conic-conformal.js | 39 + .../d3-master/src/geo/conic-equal-area.js | 33 + .../d3-master/src/geo/conic-equidistant.js | 36 + .../old/speedometer/d3-master/src/geo/conic.js | 16 + .../old/speedometer/d3-master/src/geo/distance.js | 13 + .../d3-master/src/geo/equirectangular.js | 10 + .../old/speedometer/d3-master/src/geo/geo.js | 1 + .../old/speedometer/d3-master/src/geo/gnomonic.js | 12 + .../old/speedometer/d3-master/src/geo/graticule.js | 103 + .../old/speedometer/d3-master/src/geo/greatArc.js | 42 + .../old/speedometer/d3-master/src/geo/index.js | 33 + .../speedometer/d3-master/src/geo/interpolate.js | 38 + .../old/speedometer/d3-master/src/geo/length.js | 44 + .../old/speedometer/d3-master/src/geo/mercator.js | 48 + .../speedometer/d3-master/src/geo/orthographic.js | 12 + .../old/speedometer/d3-master/src/geo/path-area.js | 41 + .../speedometer/d3-master/src/geo/path-bounds.js | 21 + .../speedometer/d3-master/src/geo/path-buffer.js | 59 + .../speedometer/d3-master/src/geo/path-centroid.js | 78 + .../speedometer/d3-master/src/geo/path-context.js | 49 + .../old/speedometer/d3-master/src/geo/path.js | 87 + .../d3-master/src/geo/point-in-polygon.js | 71 + .../speedometer/d3-master/src/geo/projection.js | 121 + .../old/speedometer/d3-master/src/geo/resample.js | 109 + .../old/speedometer/d3-master/src/geo/rotation.js | 79 + .../old/speedometer/d3-master/src/geo/spherical.js | 13 + .../speedometer/d3-master/src/geo/stereographic.js | 12 + .../old/speedometer/d3-master/src/geo/stream.js | 71 + .../old/speedometer/d3-master/src/geo/transform.js | 36 + .../d3-master/src/geo/transverse-mercator.js | 31 + .../speedometer/d3-master/src/geom/clip-line.js | 66 + .../old/speedometer/d3-master/src/geom/delaunay.js | 6 + .../old/speedometer/d3-master/src/geom/geom.js | 1 + .../old/speedometer/d3-master/src/geom/hull.js | 91 + .../old/speedometer/d3-master/src/geom/index.js | 6 + .../old/speedometer/d3-master/src/geom/point.js | 7 + .../old/speedometer/d3-master/src/geom/polygon.js | 105 + .../old/speedometer/d3-master/src/geom/quadtree.js | 243 + .../old/speedometer/d3-master/src/geom/voronoi.js | 110 + .../d3-master/src/geom/voronoi/beach.js | 186 + .../speedometer/d3-master/src/geom/voronoi/cell.js | 64 + .../d3-master/src/geom/voronoi/circle.js | 73 + .../speedometer/d3-master/src/geom/voronoi/clip.js | 80 + .../speedometer/d3-master/src/geom/voronoi/edge.js | 50 + .../d3-master/src/geom/voronoi/index.js | 59 + .../d3-master/src/geom/voronoi/red-black.js | 235 + .../speedometer/d3-master/src/interpolate/array.js | 19 + .../speedometer/d3-master/src/interpolate/ease.js | 111 + .../speedometer/d3-master/src/interpolate/hcl.js | 20 + .../speedometer/d3-master/src/interpolate/hsl.js | 20 + .../speedometer/d3-master/src/interpolate/index.js | 14 + .../d3-master/src/interpolate/interpolate.js | 26 + .../speedometer/d3-master/src/interpolate/lab.js | 17 + .../d3-master/src/interpolate/number.js | 6 + .../d3-master/src/interpolate/object.js | 25 + .../speedometer/d3-master/src/interpolate/rgb.js | 20 + .../speedometer/d3-master/src/interpolate/round.js | 6 + .../d3-master/src/interpolate/string.js | 54 + .../d3-master/src/interpolate/transform.js | 56 + .../d3-master/src/interpolate/uninterpolate.js | 9 + .../speedometer/d3-master/src/interpolate/zoom.js | 47 + .../old/speedometer/d3-master/src/layout/bundle.js | 59 + .../old/speedometer/d3-master/src/layout/chord.js | 157 + .../speedometer/d3-master/src/layout/cluster.js | 92 + .../old/speedometer/d3-master/src/layout/force.js | 366 + .../speedometer/d3-master/src/layout/hierarchy.js | 136 + .../speedometer/d3-master/src/layout/histogram.js | 110 + .../old/speedometer/d3-master/src/layout/index.js | 13 + .../old/speedometer/d3-master/src/layout/layout.js | 1 + .../old/speedometer/d3-master/src/layout/pack.js | 211 + .../speedometer/d3-master/src/layout/partition.js | 51 + .../old/speedometer/d3-master/src/layout/pie.js | 77 + .../old/speedometer/d3-master/src/layout/stack.js | 247 + .../old/speedometer/d3-master/src/layout/tree.js | 240 + .../speedometer/d3-master/src/layout/treemap.js | 230 + .../old/speedometer/d3-master/src/locale/ca-ES.js | 16 + .../old/speedometer/d3-master/src/locale/de-DE.js | 16 + .../old/speedometer/d3-master/src/locale/en-CA.js | 16 + .../old/speedometer/d3-master/src/locale/en-GB.js | 16 + .../old/speedometer/d3-master/src/locale/en-US.js | 16 + .../old/speedometer/d3-master/src/locale/es-ES.js | 16 + .../old/speedometer/d3-master/src/locale/fi-FI.js | 16 + .../old/speedometer/d3-master/src/locale/fr-CA.js | 16 + .../old/speedometer/d3-master/src/locale/fr-FR.js | 16 + .../old/speedometer/d3-master/src/locale/he-IL.js | 16 + .../old/speedometer/d3-master/src/locale/it-IT.js | 16 + .../old/speedometer/d3-master/src/locale/locale.js | 9 + .../old/speedometer/d3-master/src/locale/mk-MK.js | 16 + .../old/speedometer/d3-master/src/locale/nl-NL.js | 16 + .../d3-master/src/locale/number-format.js | 155 + .../old/speedometer/d3-master/src/locale/pl-PL.js | 16 + .../old/speedometer/d3-master/src/locale/pt-BR.js | 16 + .../old/speedometer/d3-master/src/locale/ru-RU.js | 16 + .../d3-master/src/locale/time-format.js | 369 + .../speedometer/d3-master/src/locale/time-scale.js | 0 .../old/speedometer/d3-master/src/locale/zh-CN.js | 16 + .../old/speedometer/d3-master/src/math/abs.js | 1 + .../old/speedometer/d3-master/src/math/adder.js | 34 + .../old/speedometer/d3-master/src/math/index.js | 2 + .../old/speedometer/d3-master/src/math/number.js | 7 + .../old/speedometer/d3-master/src/math/random.js | 34 + .../speedometer/d3-master/src/math/transform.js | 64 + .../speedometer/d3-master/src/math/trigonometry.js | 44 + .../speedometer/d3-master/src/scale/bilinear.js | 7 + .../speedometer/d3-master/src/scale/category.js | 58 + .../speedometer/d3-master/src/scale/identity.js | 33 + .../old/speedometer/d3-master/src/scale/index.js | 11 + .../old/speedometer/d3-master/src/scale/linear.js | 158 + .../old/speedometer/d3-master/src/scale/log.js | 92 + .../old/speedometer/d3-master/src/scale/nice.js | 30 + .../old/speedometer/d3-master/src/scale/ordinal.js | 102 + .../speedometer/d3-master/src/scale/polylinear.js | 24 + .../old/speedometer/d3-master/src/scale/pow.js | 57 + .../speedometer/d3-master/src/scale/quantile.js | 55 + .../speedometer/d3-master/src/scale/quantize.js | 44 + .../old/speedometer/d3-master/src/scale/scale.js | 10 + .../old/speedometer/d3-master/src/scale/sqrt.js | 6 + .../speedometer/d3-master/src/scale/threshold.js | 36 + .../speedometer/d3-master/src/selection/append.js | 28 + .../speedometer/d3-master/src/selection/attr.js | 62 + .../speedometer/d3-master/src/selection/call.js | 8 + .../speedometer/d3-master/src/selection/classed.js | 76 + .../speedometer/d3-master/src/selection/data.js | 115 + .../speedometer/d3-master/src/selection/datum.js | 7 + .../speedometer/d3-master/src/selection/each.js | 16 + .../speedometer/d3-master/src/selection/empty.js | 5 + .../d3-master/src/selection/enter-insert.js | 20 + .../d3-master/src/selection/enter-select.js | 27 + .../speedometer/d3-master/src/selection/enter.js | 21 + .../speedometer/d3-master/src/selection/filter.js | 28 + .../speedometer/d3-master/src/selection/html.js | 10 + .../speedometer/d3-master/src/selection/index.js | 1 + .../speedometer/d3-master/src/selection/insert.js | 9 + .../d3-master/src/selection/interrupt.js | 23 + .../speedometer/d3-master/src/selection/node.js | 11 + .../old/speedometer/d3-master/src/selection/on.js | 106 + .../speedometer/d3-master/src/selection/order.js | 13 + .../d3-master/src/selection/property.js | 43 + .../speedometer/d3-master/src/selection/remove.js | 13 + .../speedometer/d3-master/src/selection/select.js | 32 + .../d3-master/src/selection/selectAll.js | 27 + .../d3-master/src/selection/selection.js | 81 + .../speedometer/d3-master/src/selection/size.js | 7 + .../speedometer/d3-master/src/selection/sort.js | 15 + .../speedometer/d3-master/src/selection/style.js | 59 + .../speedometer/d3-master/src/selection/text.js | 10 + .../d3-master/src/selection/transition.js | 21 + .../old/speedometer/d3-master/src/start.js | 2 + .../old/speedometer/d3-master/src/svg/arc.js | 288 + .../speedometer/d3-master/src/svg/area-radial.js | 14 + .../old/speedometer/d3-master/src/svg/area.js | 121 + .../old/speedometer/d3-master/src/svg/axis.js | 159 + .../old/speedometer/d3-master/src/svg/brush.js | 429 + .../old/speedometer/d3-master/src/svg/chord.js | 90 + .../d3-master/src/svg/diagonal-radial.js | 27 + .../old/speedometer/d3-master/src/svg/diagonal.js | 43 + .../old/speedometer/d3-master/src/svg/index.js | 12 + .../speedometer/d3-master/src/svg/line-radial.js | 27 + .../old/speedometer/d3-master/src/svg/line.js | 432 + .../old/speedometer/d3-master/src/svg/svg.js | 1 + .../old/speedometer/d3-master/src/svg/symbol.js | 105 + .../old/speedometer/d3-master/src/time/day.js | 21 + .../speedometer/d3-master/src/time/format-iso.js | 19 + .../speedometer/d3-master/src/time/format-utc.js | 3 + .../old/speedometer/d3-master/src/time/format.js | 4 + .../old/speedometer/d3-master/src/time/hour.js | 14 + .../old/speedometer/d3-master/src/time/index.js | 14 + .../old/speedometer/d3-master/src/time/interval.js | 71 + .../old/speedometer/d3-master/src/time/minute.js | 13 + .../old/speedometer/d3-master/src/time/month.js | 16 + .../speedometer/d3-master/src/time/scale-utc.js | 25 + .../old/speedometer/d3-master/src/time/scale.js | 155 + .../old/speedometer/d3-master/src/time/second.js | 13 + .../old/speedometer/d3-master/src/time/time.js | 33 + .../old/speedometer/d3-master/src/time/week.js | 31 + .../old/speedometer/d3-master/src/time/year.js | 16 + .../speedometer/d3-master/src/transition/attr.js | 58 + .../speedometer/d3-master/src/transition/delay.js | 10 + .../d3-master/src/transition/duration.js | 10 + .../speedometer/d3-master/src/transition/each.js | 26 + .../speedometer/d3-master/src/transition/ease.js | 10 + .../speedometer/d3-master/src/transition/filter.js | 22 + .../speedometer/d3-master/src/transition/index.js | 1 + .../speedometer/d3-master/src/transition/remove.js | 9 + .../speedometer/d3-master/src/transition/select.js | 28 + .../d3-master/src/transition/selectAll.js | 31 + .../speedometer/d3-master/src/transition/style.js | 53 + .../d3-master/src/transition/subtransition.js | 25 + .../speedometer/d3-master/src/transition/text.js | 11 + .../d3-master/src/transition/transition.js | 141 + .../speedometer/d3-master/src/transition/tween.js | 17 + .../old/speedometer/d3-master/src/xhr/html.js | 12 + .../old/speedometer/d3-master/src/xhr/index.js | 5 + .../old/speedometer/d3-master/src/xhr/json.js | 9 + .../old/speedometer/d3-master/src/xhr/text.js | 5 + .../old/speedometer/d3-master/src/xhr/xhr.js | 126 + .../old/speedometer/d3-master/src/xhr/xml.js | 5 + .../speedometer/d3-master/test/XMLHttpRequest.js | 60 + .../d3-master/test/arrays/ascending-test.js | 45 + .../d3-master/test/arrays/bisect-test.js | 384 + .../d3-master/test/arrays/descending-test.js | 45 + .../d3-master/test/arrays/deviation-test.js | 43 + .../d3-master/test/arrays/entries-test.js | 39 + .../d3-master/test/arrays/extent-test.js | 50 + .../speedometer/d3-master/test/arrays/keys-test.js | 27 + .../speedometer/d3-master/test/arrays/map-test.js | 306 + .../speedometer/d3-master/test/arrays/max-test.js | 51 + .../speedometer/d3-master/test/arrays/mean-test.js | 47 + .../d3-master/test/arrays/median-test.js | 53 + .../d3-master/test/arrays/merge-test.js | 50 + .../speedometer/d3-master/test/arrays/min-test.js | 51 + .../speedometer/d3-master/test/arrays/nest-test.js | 256 + .../d3-master/test/arrays/one-time-number.js | 11 + .../d3-master/test/arrays/pairs-test.js | 27 + .../d3-master/test/arrays/permute-test.js | 49 + .../d3-master/test/arrays/quantile-test.js | 56 + .../d3-master/test/arrays/range-test.js | 99 + .../speedometer/d3-master/test/arrays/set-test.js | 209 + .../d3-master/test/arrays/shuffle-test.js | 43 + .../speedometer/d3-master/test/arrays/sum-test.js | 43 + .../d3-master/test/arrays/transpose-test.js | 28 + .../d3-master/test/arrays/values-test.js | 31 + .../d3-master/test/arrays/variance-test.js | 43 + .../speedometer/d3-master/test/arrays/zip-test.js | 28 + .../old/speedometer/d3-master/test/assert.js | 153 + .../speedometer/d3-master/test/color/hcl-test.js | 117 + .../speedometer/d3-master/test/color/hsl-test.js | 120 + .../speedometer/d3-master/test/color/lab-test.js | 86 + .../speedometer/d3-master/test/color/rgb-test.js | 96 + .../d3-master/test/core/document-test.js | 50 + .../d3-master/test/core/functor-test.js | 25 + .../old/speedometer/d3-master/test/core/ns-test.js | 57 + .../speedometer/d3-master/test/core/rebind-test.js | 50 + .../d3-master/test/core/version-test.js | 16 + .../old/speedometer/d3-master/test/data/ocean.json | 1 + .../old/speedometer/d3-master/test/data/sample.csv | 2 + .../speedometer/d3-master/test/data/sample.html | 5 + .../speedometer/d3-master/test/data/sample.json | 1 + .../old/speedometer/d3-master/test/data/sample.tsv | 2 + .../old/speedometer/d3-master/test/data/sample.txt | 1 + .../old/speedometer/d3-master/test/data/sample.xml | 4 + .../d3-master/test/data/us-counties.json | 1 + .../d3-master/test/data/world-countries.json | 1 + .../old/speedometer/d3-master/test/dsv/csv-test.js | 218 + .../old/speedometer/d3-master/test/dsv/tsv-test.js | 209 + .../d3-master/test/event/dispatch-test.js | 163 + .../d3-master/test/event/mouse-test.html | 22 + .../speedometer/d3-master/test/event/timer-test.js | 74 + .../d3-master/test/event/touch-test.html | 61 + .../d3-master/test/format/format-test.js | 436 + .../d3-master/test/format/formatPrefix-test.js | 112 + .../d3-master/test/format/requote-test.js | 49 + .../d3-master/test/format/round-test.js | 66 + .../speedometer/d3-master/test/geo/albers-test.js | 40 + .../d3-master/test/geo/albers-usa-test.js | 33 + .../d3-master/test/geo/area-benchmark.js | 12 + .../speedometer/d3-master/test/geo/area-test.js | 185 + .../test/geo/azimuthal-equal-area-test.js | 38 + .../test/geo/azimuthal-equidistant-test.js | 38 + .../speedometer/d3-master/test/geo/bounds-test.js | 265 + .../d3-master/test/geo/centroid-test.js | 187 + .../speedometer/d3-master/test/geo/circle-test.js | 33 + .../d3-master/test/geo/clip-extent-test.js | 163 + .../d3-master/test/geo/conic-conformal-test.js | 38 + .../d3-master/test/geo/conic-equal-area-test.js | 38 + .../d3-master/test/geo/conic-equidistant-test.js | 38 + .../d3-master/test/geo/distance-test.js | 20 + .../d3-master/test/geo/equirectangular-test.js | 38 + .../d3-master/test/geo/gnomonic-test.js | 38 + .../d3-master/test/geo/graticule-test.js | 188 + .../d3-master/test/geo/greatArc-test.js | 35 + .../d3-master/test/geo/interpolate-test.js | 22 + .../speedometer/d3-master/test/geo/length-test.js | 44 + .../d3-master/test/geo/mercator-test.js | 38 + .../d3-master/test/geo/orthographic-test.js | 34 + .../speedometer/d3-master/test/geo/path-benchmark | 113 + .../speedometer/d3-master/test/geo/path-test.js | 836 ++ .../d3-master/test/geo/point-in-polygon-mock.js | 18 + .../d3-master/test/geo/point-in-polygon-test.js | 382 + .../d3-master/test/geo/projection-test-suite.js | 29 + .../d3-master/test/geo/projection-test.js | 58 + .../d3-master/test/geo/rotation-test.js | 35 + .../d3-master/test/geo/stereographic-test.js | 38 + .../speedometer/d3-master/test/geo/stream-test.js | 214 + .../d3-master/test/geo/transverse-mercator-test.js | 45 + .../speedometer/d3-master/test/geom/hull-test.js | 92 + .../d3-master/test/geom/polygon-test.js | 151 + .../d3-master/test/geom/quadtree-test.js | 157 + .../d3-master/test/geom/voronoi-benchmark | 24 + .../d3-master/test/geom/voronoi-test.js | 269 + .../old/speedometer/d3-master/test/index-test.js | 16 + .../d3-master/test/interpolate/array-test.js | 24 + .../d3-master/test/interpolate/ease-test.js | 135 + .../d3-master/test/interpolate/hcl-test.js | 47 + .../d3-master/test/interpolate/hsl-test.js | 47 + .../test/interpolate/interpolate-string-benchmark | 31 + .../d3-master/test/interpolate/interpolate-test.js | 151 + .../test/interpolate/interpolate-transform-test.js | 60 + .../d3-master/test/interpolate/lab-test.js | 31 + .../d3-master/test/interpolate/number-test.js | 20 + .../d3-master/test/interpolate/object-test.js | 35 + .../d3-master/test/interpolate/rgb-test.js | 31 + .../d3-master/test/interpolate/round-test.js | 17 + .../d3-master/test/interpolate/string-test.js | 53 + .../d3-master/test/layout/chord-test.js | 164 + .../d3-master/test/layout/cluster-test.js | 44 + .../d3-master/test/layout/force-test.js | 119 + .../d3-master/test/layout/hierarchy-test.js | 40 + .../d3-master/test/layout/histogram-test.js | 92 + .../speedometer/d3-master/test/layout/pack-test.js | 129 + .../d3-master/test/layout/partition-test.js | 45 + .../speedometer/d3-master/test/layout/pie-test.js | 24 + .../speedometer/d3-master/test/layout/tree-test.js | 59 + .../d3-master/test/layout/treemap-test.js | 181 + .../old/speedometer/d3-master/test/load.js | 62 + .../d3-master/test/locale/locale-caes-test.js | 120 + .../d3-master/test/locale/locale-fifi-test.js | 120 + .../d3-master/test/locale/locale-ptbr-test.js | 120 + .../d3-master/test/locale/locale-test.js | 120 + .../speedometer/d3-master/test/math/random-test.js | 132 + .../test/math/transform-null-matrix-test.html | 26 + .../d3-master/test/math/transform-null-test.html | 26 + .../test/math/transform-rotate-origin-test.html | 40 + .../d3-master/test/math/transform-rotate-test.html | 138 + .../d3-master/test/math/transform-test.html | 88 + .../d3-master/test/scale/category-test.js | 76 + .../d3-master/test/scale/identity-test.js | 163 + .../d3-master/test/scale/linear-test.js | 328 + .../speedometer/d3-master/test/scale/log-test.js | 387 + .../d3-master/test/scale/ordinal-test.js | 379 + .../speedometer/d3-master/test/scale/pow-test.js | 277 + .../d3-master/test/scale/quantile-test.js | 99 + .../d3-master/test/scale/quantize-test.js | 92 + .../speedometer/d3-master/test/scale/sqrt-test.js | 270 + .../d3-master/test/scale/threshold-test.js | 64 + .../d3-master/test/selection/append-test.js | 153 + .../d3-master/test/selection/attr-test.js | 182 + .../d3-master/test/selection/call-test.js | 75 + .../d3-master/test/selection/classed-test.js | 290 + .../d3-master/test/selection/data-benchmark.js | 29 + .../d3-master/test/selection/data-test.js | 270 + .../d3-master/test/selection/datum-test.js | 87 + .../d3-master/test/selection/each-test.js | 87 + .../d3-master/test/selection/empty-test.js | 53 + .../d3-master/test/selection/enter-test.js | 28 + .../d3-master/test/selection/filter-test.js | 72 + .../d3-master/test/selection/html-test.js | 134 + .../d3-master/test/selection/insert-test.js | 169 + .../d3-master/test/selection/interrupt-test.js | 113 + .../d3-master/test/selection/node-test.js | 55 + .../d3-master/test/selection/on-test.js | 135 + .../d3-master/test/selection/order-test.js | 32 + .../d3-master/test/selection/property-test.js | 117 + .../d3-master/test/selection/remove-test.js | 38 + .../d3-master/test/selection/select-test.js | 94 + .../d3-master/test/selection/selectAll-test.js | 52 + .../test/selection/selection-select-test.js | 128 + .../test/selection/selection-selectAll-test.js | 131 + .../d3-master/test/selection/selection-test.js | 38 + .../d3-master/test/selection/size-test.js | 52 + .../d3-master/test/selection/sort-test.js | 81 + .../d3-master/test/selection/style-test.js | 129 + .../d3-master/test/selection/text-test.js | 115 + .../old/speedometer/d3-master/test/start.js | 1 + .../old/speedometer/d3-master/test/svg/arc-test.js | 146 + .../d3-master/test/svg/area-radial-test.js | 199 + .../speedometer/d3-master/test/svg/area-test.js | 192 + .../speedometer/d3-master/test/svg/axis-test.js | 503 ++ .../speedometer/d3-master/test/svg/brush-test.js | 114 + .../d3-master/test/svg/diagonal-test.js | 62 + .../d3-master/test/svg/line-radial-test.js | 120 + .../speedometer/d3-master/test/svg/line-test.js | 207 + .../speedometer/d3-master/test/svg/symbol-test.js | 91 + .../speedometer/d3-master/test/time/day-test.js | 178 + .../d3-master/test/time/dayOfYear-test.js | 16 + .../speedometer/d3-master/test/time/days-test.js | 95 + .../d3-master/test/time/format-iso-test.js | 33 + .../speedometer/d3-master/test/time/format-test.js | 354 + .../d3-master/test/time/format-utc-test.js | 226 + .../speedometer/d3-master/test/time/hour-test.js | 215 + .../speedometer/d3-master/test/time/hours-test.js | 109 + .../speedometer/d3-master/test/time/minute-test.js | 127 + .../d3-master/test/time/minutes-test.js | 91 + .../speedometer/d3-master/test/time/month-test.js | 150 + .../speedometer/d3-master/test/time/months-test.js | 95 + .../speedometer/d3-master/test/time/scale-test.js | 684 ++ .../speedometer/d3-master/test/time/second-test.js | 143 + .../d3-master/test/time/seconds-test.js | 91 + .../old/speedometer/d3-master/test/time/time.js | 30 + .../speedometer/d3-master/test/time/week-test.js | 162 + .../speedometer/d3-master/test/time/weeks-test.js | 95 + .../speedometer/d3-master/test/time/year-test.js | 137 + .../speedometer/d3-master/test/time/years-test.js | 74 + .../test/transition/transition-test-attr.js | 56 + .../test/transition/transition-test-attrTween.js | 59 + .../test/transition/transition-test-call.js | 30 + .../test/transition/transition-test-delay.js | 56 + .../test/transition/transition-test-duration.js | 62 + .../test/transition/transition-test-each.js | 171 + .../test/transition/transition-test-filter.js | 80 + .../test/transition/transition-test-id.js | 22 + .../test/transition/transition-test-node.js | 39 + .../test/transition/transition-test-remove.js | 57 + .../test/transition/transition-test-select.js | 60 + .../test/transition/transition-test-selectAll.js | 56 + .../test/transition/transition-test-size.js | 37 + .../test/transition/transition-test-style.js | 51 + .../test/transition/transition-test-styleTween.js | 65 + .../test/transition/transition-test-text.js | 27 + .../test/transition/transition-test-time.js | 38 + .../test/transition/transition-test-transition.js | 57 + .../test/transition/transition-test-tween.js | 62 + .../d3-master/test/transition/transition-test.js | 89 + .../speedometer/d3-master/test/xhr/html-test.js | 37 + .../speedometer/d3-master/test/xhr/json-test.js | 51 + .../speedometer/d3-master/test/xhr/text-test.js | 46 + .../old/speedometer/d3-master/test/xhr/xhr-test.js | 79 + .../old/speedometer/d3-master/test/xhr/xml-test.js | 46 + .../old/speedometer/default.css | 53 + .../old/speedometer/index.html | 125 + .../old/speedometer/nms-tmp.js | 156 + web/nms-public.gathering.org/old/sshow.pl | 258 + web/nms-public.gathering.org/old/stempmap.pl | 89 + web/nms-public.gathering.org/old/stromkart.pl | 72 + web/nms-public.gathering.org/old/switches-json.pl | 43 + .../old/uplinkkart-text.pl | 38 + web/nms-public.gathering.org/old/uplinkkart.pl | 72 + .../old/uplinktrafikkart.pl | 92 + 835 files changed, 95125 insertions(+) create mode 100644 web/etc/apache2/nms-public.tg16.gathering.org.conf create mode 100644 web/nms-public.gathering.org/api/API.rst create mode 100755 web/nms-public.gathering.org/api/public/dhcp-summary create mode 100755 web/nms-public.gathering.org/api/public/ping create mode 100755 web/nms-public.gathering.org/api/public/switch-state create mode 100755 web/nms-public.gathering.org/api/public/switches create mode 100644 web/nms-public.gathering.org/css/bootstrap-theme.css create mode 100644 web/nms-public.gathering.org/css/bootstrap-theme.css.map create mode 100644 web/nms-public.gathering.org/css/bootstrap-theme.min.css create mode 100644 web/nms-public.gathering.org/css/bootstrap.css create mode 100644 web/nms-public.gathering.org/css/bootstrap.css.map create mode 100644 web/nms-public.gathering.org/css/bootstrap.min.css create mode 100644 web/nms-public.gathering.org/css/jquery.datetimepicker.css create mode 100644 web/nms-public.gathering.org/css/navbar-static-top.css create mode 100644 web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.eot create mode 100644 web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.svg create mode 100644 web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.ttf create mode 100644 web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff create mode 100644 web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff2 create mode 100644 web/nms-public.gathering.org/img/tg15-salkart-clean-big.png create mode 100644 web/nms-public.gathering.org/img/tg15-salkart-full.png create mode 100644 web/nms-public.gathering.org/img/tg15-salkart.png create mode 100644 web/nms-public.gathering.org/index.html create mode 100644 web/nms-public.gathering.org/js/bootstrap.js create mode 100644 web/nms-public.gathering.org/js/bootstrap.min.js create mode 100644 web/nms-public.gathering.org/js/jquery.datetimepicker.full.js create mode 100644 web/nms-public.gathering.org/js/jquery.min.js create mode 100644 web/nms-public.gathering.org/js/nms-color-util.js create mode 100644 web/nms-public.gathering.org/js/nms-data.js create mode 100644 web/nms-public.gathering.org/js/nms-info-box.js create mode 100644 web/nms-public.gathering.org/js/nms-map-handlers.js create mode 100644 web/nms-public.gathering.org/js/nms-map.js create mode 100644 web/nms-public.gathering.org/js/nms.js create mode 100644 web/nms-public.gathering.org/js/npm.js create mode 100755 web/nms-public.gathering.org/old/change-switch-pos.pl create mode 100755 web/nms-public.gathering.org/old/dhcp-json.pl create mode 100755 web/nms-public.gathering.org/old/dhcpkart.pl create mode 100755 web/nms-public.gathering.org/old/display-rack.html create mode 100755 web/nms-public.gathering.org/old/display.html create mode 100644 web/nms-public.gathering.org/old/edit.html create mode 100644 web/nms-public.gathering.org/old/index.html create mode 100755 web/nms-public.gathering.org/old/led.pl create mode 100755 web/nms-public.gathering.org/old/mygraph.pl create mode 100644 web/nms-public.gathering.org/old/nettkart-continuous.html create mode 100755 web/nms-public.gathering.org/old/nettkart-json.pl create mode 100755 web/nms-public.gathering.org/old/nettkart-text.pl create mode 100755 web/nms-public.gathering.org/old/nettkart-web.pl create mode 100755 web/nms-public.gathering.org/old/nettkart.pl create mode 100755 web/nms-public.gathering.org/old/observium.html create mode 100755 web/nms-public.gathering.org/old/ping-json.pl create mode 100644 web/nms-public.gathering.org/old/ping.css create mode 100644 web/nms-public.gathering.org/old/ping.html create mode 100644 web/nms-public.gathering.org/old/ping.js create mode 100644 web/nms-public.gathering.org/old/ping2.html create mode 100755 web/nms-public.gathering.org/old/portkart.pl create mode 100755 web/nms-public.gathering.org/old/showswitch.pl create mode 100644 web/nms-public.gathering.org/old/slide.html create mode 100755 web/nms-public.gathering.org/old/smanagement.pl create mode 100644 web/nms-public.gathering.org/old/speedometer/Statistikk_bakgrunn_alternate-02.png create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/.editorconfig create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/.gitignore create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/.jshintrc create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/.travis.yml create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/Gruntfile.coffee create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/LICENSE create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/README.md create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/bower.json create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/c3.css create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/c3.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/c3.min.css create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/c3.min.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/component.json create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/extensions/exporter/config.json create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/extensions/exporter/phantom-exporter.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/extensions/exporter/test.png create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/extensions/js/c3ext.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/css/bootstrap.min.css create mode 120000 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/css/c3.css create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/css/index.css create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/css/style.css create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.csv create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.json create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.tsv create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test2.csv create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test2_ts.csv create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test3.csv create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_2.json create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_3.json create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_ts.csv create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/index.html create mode 120000 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/js/c3.js create mode 120000 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/js/c3.min.js create mode 120000 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/js/extensions create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/js/require.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/js/samples/plugin.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/js/samples/requirejs.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/js/samples/zoom_reduction.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_axis_label.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_axis_range.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_category.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_data_colors.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_flow.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_flow_timeseries.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_legend.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_tooltip_show.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_transform.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_xgrid_lines.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/api_ygrid_lines.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/area_zerobased.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_padding.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_range.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_extent.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_localtime.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_range_timeseries.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_culling.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_fit.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_rotate.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_values.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_y2.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_y_default.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/bar_zerobased.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/bindto.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/categorized.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_spline.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_spline_stacked.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_stacked.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_step.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_step_stacked.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_bar.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_bar_stacked.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_combination.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_donut.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_gauge.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_pie.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_pie_sort.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_scatter.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_spline.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_step.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_step_category.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_x_categorized.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_x_scale.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_xs_scale.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_columned.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_hide.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_json.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_label.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_label_format.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_load.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_load_timeseries.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_region.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_region_timeseries.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_rowed.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/data_url.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/domain_y.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/element.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/emptydata.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_focus.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_x_lines.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_x_lines_timeseries.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/grids.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/grids_timeseries.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/interaction_enabled.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/legend.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/padding.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/padding_update.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/plugin.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/point_r.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/regions.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/regions_timeseries.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/requirejs.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/selection.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/simple.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/subchart.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/subchart_onbrush.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_date.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_descendent.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_raw.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/tooltip_grouped.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/tooltip_show.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_category.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_onzoom.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_reduction.html create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/package.json create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/api.axis-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/api.data-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/api.focus-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/api.grid-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/api.load-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/api.zoom-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/arc-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/axis-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/c3-helper.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/c3-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/class-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/core-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/data-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/domain-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/grid-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/interaction-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/legend-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/shape.bar-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/shape.line-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/tooltip-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/type-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/spec/zoom-spec.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.axis.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.category.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.chart.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.color.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.data.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.flow.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.focus.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.grid.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.group.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.legend.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.load.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.region.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.selection.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.show.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.tooltip.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.transform.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.x.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/api.zoom.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/arc.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/axis.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/c3.axis.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/cache.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/category.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/class.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/clip.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/color.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/config.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/core.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/data.convert.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/data.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/data.load.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/domain.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/drag.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/format.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/grid.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/head.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/interaction.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/legend.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/polyfill.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/region.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scale.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/arc.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/area.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/axis.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/bar.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/brush.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/chart.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/focus.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/grid.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/legend.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/line.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/main.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/point.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/region.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/select_drag.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/text.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/scss/tooltip.scss create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/selection.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/shape.bar.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/shape.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/shape.line.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/size.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/subchart.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/tail.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/text.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/tooltip.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/type.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/ua.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/util.js create mode 100644 web/nms-public.gathering.org/old/speedometer/c3-master/src/zoom.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/.gitattributes create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/.gitignore create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/.npmignore create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/.spmignore create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/CONTRIBUTING.md create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/LICENSE create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/Makefile create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/README.md create mode 100755 web/nms-public.gathering.org/old/speedometer/d3-master/bin/bower create mode 100755 web/nms-public.gathering.org/old/speedometer/d3-master/bin/component create mode 100755 web/nms-public.gathering.org/old/speedometer/d3-master/bin/meteor create mode 100755 web/nms-public.gathering.org/old/speedometer/d3-master/bin/start create mode 100755 web/nms-public.gathering.org/old/speedometer/d3-master/bin/uglify create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/bower.json create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/component.json create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/composer.json create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/d3.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/d3.min.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/colorbrewer/LICENSE create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/colorbrewer/colorbrewer.css create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/colorbrewer/colorbrewer.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/geographiclib/LICENSE create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/penner/LICENSE create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/polymaps/LICENSE create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/protovis/LICENSE create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/rhill-voronoi/LICENSE create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/science/LICENSE create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/science/science.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/science/science.lin.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/science/science.lin.min.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/science/science.min.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/science/science.stats.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/lib/science/science.stats.min.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/package.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/package.json create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/ascending.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/bisect.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/descending.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/deviation.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/entries.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/extent.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/keys.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/map.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/max.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/mean.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/median.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/merge.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/min.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/nest.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/pairs.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/permute.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/quantile.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/range.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/set.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/shuffle.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/sum.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/transpose.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/values.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/variance.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/arrays/zip.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/behavior/behavior.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/behavior/drag.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/behavior/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/behavior/zoom.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/color/color.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/color/hcl.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/color/hsl.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/color/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/color/lab.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/color/rgb.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/color/xyz.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/compat/array.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/compat/date.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/compat/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/compat/style.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/array.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/class.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/document.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/functor.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/identity.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/noop.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/ns.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/rebind.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/source.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/subclass.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/target.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/true.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/vendor.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/core/zero.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/d3.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/dsv/csv.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/dsv/dsv.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/dsv/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/dsv/tsv.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/end.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/event/dispatch.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/event/drag.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/event/event.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/event/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/event/mouse.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/event/timer.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/event/touch.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/event/touches.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/format/collapse.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/format/format.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/format/formatPrefix.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/format/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/format/precision.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/format/requote.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/format/round.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/albers-usa.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/albers.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/area.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/azimuthal-equal-area.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/azimuthal-equidistant.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/azimuthal.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/bounds.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/cartesian.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/centroid.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/circle.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/clip-antimeridian.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/clip-circle.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/clip-extent.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/clip-polygon.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/clip.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/compose.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/conic-conformal.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/conic-equal-area.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/conic-equidistant.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/conic.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/distance.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/equirectangular.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/geo.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/gnomonic.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/graticule.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/greatArc.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/interpolate.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/length.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/mercator.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/orthographic.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/path-area.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/path-bounds.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/path-buffer.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/path-centroid.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/path-context.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/path.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/point-in-polygon.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/projection.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/resample.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/rotation.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/spherical.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/stereographic.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/stream.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/transform.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geo/transverse-mercator.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/clip-line.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/delaunay.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/geom.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/hull.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/point.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/polygon.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/quadtree.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/voronoi.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/voronoi/beach.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/voronoi/cell.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/voronoi/circle.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/voronoi/clip.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/voronoi/edge.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/voronoi/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/geom/voronoi/red-black.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/array.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/ease.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/hcl.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/hsl.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/interpolate.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/lab.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/number.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/object.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/rgb.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/round.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/string.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/transform.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/uninterpolate.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/interpolate/zoom.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/bundle.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/chord.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/cluster.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/force.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/hierarchy.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/histogram.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/layout.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/pack.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/partition.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/pie.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/stack.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/tree.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/layout/treemap.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/ca-ES.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/de-DE.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/en-CA.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/en-GB.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/en-US.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/es-ES.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/fi-FI.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/fr-CA.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/fr-FR.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/he-IL.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/it-IT.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/locale.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/mk-MK.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/nl-NL.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/number-format.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/pl-PL.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/pt-BR.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/ru-RU.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/time-format.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/time-scale.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/locale/zh-CN.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/math/abs.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/math/adder.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/math/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/math/number.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/math/random.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/math/transform.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/math/trigonometry.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/bilinear.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/category.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/identity.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/linear.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/log.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/nice.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/ordinal.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/polylinear.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/pow.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/quantile.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/quantize.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/scale.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/sqrt.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/scale/threshold.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/append.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/attr.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/call.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/classed.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/data.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/datum.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/each.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/empty.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/enter-insert.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/enter-select.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/enter.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/filter.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/html.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/insert.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/interrupt.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/node.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/on.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/order.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/property.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/remove.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/select.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/selectAll.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/selection.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/size.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/sort.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/style.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/text.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/selection/transition.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/start.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/arc.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/area-radial.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/area.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/axis.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/brush.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/chord.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/diagonal-radial.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/diagonal.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/line-radial.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/line.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/svg.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/svg/symbol.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/day.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/format-iso.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/format-utc.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/format.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/hour.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/interval.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/minute.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/month.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/scale-utc.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/scale.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/second.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/time.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/week.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/time/year.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/attr.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/delay.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/duration.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/each.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/ease.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/filter.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/remove.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/select.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/selectAll.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/style.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/subtransition.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/text.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/transition.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/transition/tween.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/xhr/html.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/xhr/index.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/xhr/json.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/xhr/text.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/xhr/xhr.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/src/xhr/xml.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/XMLHttpRequest.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/ascending-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/bisect-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/descending-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/deviation-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/entries-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/extent-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/keys-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/map-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/max-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/mean-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/median-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/merge-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/min-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/nest-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/one-time-number.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/pairs-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/permute-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/quantile-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/range-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/set-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/shuffle-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/sum-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/transpose-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/values-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/variance-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/arrays/zip-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/assert.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/color/hcl-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/color/hsl-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/color/lab-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/color/rgb-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/core/document-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/core/functor-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/core/ns-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/core/rebind-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/core/version-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/data/ocean.json create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/data/sample.csv create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/data/sample.html create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/data/sample.json create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/data/sample.tsv create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/data/sample.txt create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/data/sample.xml create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/data/us-counties.json create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/data/world-countries.json create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/dsv/csv-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/dsv/tsv-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/event/dispatch-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/event/mouse-test.html create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/event/timer-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/event/touch-test.html create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/format/format-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/format/formatPrefix-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/format/requote-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/format/round-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/albers-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/albers-usa-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/area-benchmark.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/area-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/azimuthal-equal-area-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/azimuthal-equidistant-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/bounds-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/centroid-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/circle-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/clip-extent-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/conic-conformal-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/conic-equal-area-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/conic-equidistant-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/distance-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/equirectangular-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/gnomonic-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/graticule-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/greatArc-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/interpolate-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/length-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/mercator-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/orthographic-test.js create mode 100755 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/path-benchmark create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/path-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/point-in-polygon-mock.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/point-in-polygon-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/projection-test-suite.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/projection-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/rotation-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/stereographic-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/stream-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geo/transverse-mercator-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geom/hull-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geom/polygon-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geom/quadtree-test.js create mode 100755 web/nms-public.gathering.org/old/speedometer/d3-master/test/geom/voronoi-benchmark create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/geom/voronoi-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/index-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/array-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/ease-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/hcl-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/hsl-test.js create mode 100755 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-string-benchmark create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-transform-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/lab-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/number-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/object-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/rgb-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/round-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/interpolate/string-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/chord-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/cluster-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/force-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/hierarchy-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/histogram-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/pack-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/partition-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/pie-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/tree-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/layout/treemap-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/load.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/locale/locale-caes-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/locale/locale-fifi-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/locale/locale-ptbr-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/locale/locale-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/math/random-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/math/transform-null-matrix-test.html create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/math/transform-null-test.html create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/math/transform-rotate-origin-test.html create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/math/transform-rotate-test.html create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/math/transform-test.html create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/category-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/identity-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/linear-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/log-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/ordinal-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/pow-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/quantile-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/quantize-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/sqrt-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/scale/threshold-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/append-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/attr-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/call-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/classed-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/data-benchmark.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/data-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/datum-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/each-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/empty-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/enter-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/filter-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/html-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/insert-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/interrupt-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/node-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/on-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/order-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/property-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/remove-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/select-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/selectAll-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/selection-select-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/selection-selectAll-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/selection-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/size-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/sort-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/style-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/selection/text-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/start.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/svg/arc-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/svg/area-radial-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/svg/area-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/svg/axis-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/svg/brush-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/svg/diagonal-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/svg/line-radial-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/svg/line-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/svg/symbol-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/day-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/dayOfYear-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/days-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/format-iso-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/format-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/format-utc-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/hour-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/hours-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/minute-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/minutes-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/month-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/months-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/scale-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/second-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/seconds-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/time.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/week-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/weeks-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/year-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/time/years-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-attr.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-attrTween.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-call.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-delay.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-duration.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-each.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-filter.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-id.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-node.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-remove.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-select.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-selectAll.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-size.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-style.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-styleTween.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-text.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-time.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-transition.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test-tween.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/transition/transition-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/xhr/html-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/xhr/json-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/xhr/text-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/xhr/xhr-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/d3-master/test/xhr/xml-test.js create mode 100644 web/nms-public.gathering.org/old/speedometer/default.css create mode 100644 web/nms-public.gathering.org/old/speedometer/index.html create mode 100644 web/nms-public.gathering.org/old/speedometer/nms-tmp.js create mode 100755 web/nms-public.gathering.org/old/sshow.pl create mode 100755 web/nms-public.gathering.org/old/stempmap.pl create mode 100755 web/nms-public.gathering.org/old/stromkart.pl create mode 100755 web/nms-public.gathering.org/old/switches-json.pl create mode 100755 web/nms-public.gathering.org/old/uplinkkart-text.pl create mode 100755 web/nms-public.gathering.org/old/uplinkkart.pl create mode 100755 web/nms-public.gathering.org/old/uplinktrafikkart.pl diff --git a/web/etc/apache2/nms-public.tg16.gathering.org.conf b/web/etc/apache2/nms-public.tg16.gathering.org.conf new file mode 100644 index 0000000..7e24b5c --- /dev/null +++ b/web/etc/apache2/nms-public.tg16.gathering.org.conf @@ -0,0 +1,30 @@ + + ServerAdmin drift@gathering.org + ServerName nms-public.tg16.gathering.org + ServerAlias nms-public.tg16.gathering.org + + DocumentRoot /srv/tgmanage/web/nms-public.gathering.org + ScriptAlias /api/public/ /srv/tgmanage/web/nms-public.gathering.org/api/public/ + + AllowOverride None + Options +ExecCGI -MultiViews +Indexes +SymLinksIfOwnerMatch + Require all granted + + + AllowOverride None + Options Indexes FollowSymLinks MultiViews + Require all granted + + AddDefaultCharset UTF-8 + + + ErrorLog /var/log/apache2/error-nms-public.tg16.gathering.org.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog /var/log/apache2/access-nms-public.tg16.gathering.org.log combined + ServerSignature On + + diff --git a/web/nms-public.gathering.org/api/API.rst b/web/nms-public.gathering.org/api/API.rst new file mode 100644 index 0000000..61fbb5a --- /dev/null +++ b/web/nms-public.gathering.org/api/API.rst @@ -0,0 +1,113 @@ +API-dok +======= + +Work in progress. + +There are two relevant paths: /api/public and /api/private. One requires +user-login in, the other does not. + +General: All end-points that output time-based data accept the "now=
    +
    + + + +
    + + + +
    + +
    +
    + + + +
    + + + + + + + + + + + + +
    +
    +
    + + + + + + + + + + + + diff --git a/web/nms-public.gathering.org/js/bootstrap.js b/web/nms-public.gathering.org/js/bootstrap.js new file mode 100644 index 0000000..1c88b71 --- /dev/null +++ b/web/nms-public.gathering.org/js/bootstrap.js @@ -0,0 +1,2317 @@ +/*! + * Bootstrap v3.3.4 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.4 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.4 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.4' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.4 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.4' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.4 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = null + this.sliding = null + this.interval = null + this.$active = null + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.4' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.4 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.4' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.4 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.4' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(' diff --git a/web/nms.gathering.org/img/tg16-salkart-clean-big.png b/web/nms.gathering.org/img/tg16-salkart-clean-big.png new file mode 100644 index 0000000..400cd64 Binary files /dev/null and b/web/nms.gathering.org/img/tg16-salkart-clean-big.png differ diff --git a/web/nms.gathering.org/img/tg16-salkart-full.png b/web/nms.gathering.org/img/tg16-salkart-full.png new file mode 100644 index 0000000..6fe9d68 Binary files /dev/null and b/web/nms.gathering.org/img/tg16-salkart-full.png differ diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html index b244d1b..081c206 100644 --- a/web/nms.gathering.org/index.html +++ b/web/nms.gathering.org/index.html @@ -246,7 +246,7 @@ -
    +
    -- cgit v1.2.3 From 05fedaa7461c6fd67c402671f0e129b3d1772fbf Mon Sep 17 00:00:00 2001 From: Kristian Lyngstol Date: Tue, 22 Mar 2016 19:53:30 +0100 Subject: NMS: Tweak NMS public API and draw linknets --- web/nms-public.gathering.org/api/API.rst | 113 --------------------- web/nms-public.gathering.org/api/public/dhcp | 20 ++++ .../api/public/switch-state | 8 +- web/nms-public.gathering.org/api/public/switches | 2 +- web/nms.gathering.org/js/nms-map.js | 38 +++++++ 5 files changed, 65 insertions(+), 116 deletions(-) delete mode 100644 web/nms-public.gathering.org/api/API.rst create mode 100755 web/nms-public.gathering.org/api/public/dhcp diff --git a/web/nms-public.gathering.org/api/API.rst b/web/nms-public.gathering.org/api/API.rst deleted file mode 100644 index 61fbb5a..0000000 --- a/web/nms-public.gathering.org/api/API.rst +++ /dev/null @@ -1,113 +0,0 @@ -API-dok -======= - -Work in progress. - -There are two relevant paths: /api/public and /api/private. One requires -user-login in, the other does not. - -General: All end-points that output time-based data accept the "now=