aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rwxr-xr-xweb/nms.gathering.org/comment-add.pl (renamed from web/nms.gathering.org/switch-comment.pl)0
-rw-r--r--web/nms.gathering.org/css/bootstrap-theme.css (renamed from web/nms.gathering.org/nms2/css/bootstrap-theme.css)0
-rw-r--r--web/nms.gathering.org/css/bootstrap-theme.css.map (renamed from web/nms.gathering.org/nms2/css/bootstrap-theme.css.map)0
-rw-r--r--web/nms.gathering.org/css/bootstrap-theme.min.css (renamed from web/nms.gathering.org/nms2/css/bootstrap-theme.min.css)0
-rw-r--r--web/nms.gathering.org/css/bootstrap.css (renamed from web/nms.gathering.org/nms2/css/bootstrap.css)0
-rw-r--r--web/nms.gathering.org/css/bootstrap.css.map (renamed from web/nms.gathering.org/nms2/css/bootstrap.css.map)0
-rw-r--r--web/nms.gathering.org/css/bootstrap.min.css (renamed from web/nms.gathering.org/nms2/css/bootstrap.min.css)0
-rw-r--r--web/nms.gathering.org/css/navbar-static-top.css (renamed from web/nms.gathering.org/nms2/css/navbar-static-top.css)0
-rwxr-xr-xweb/nms.gathering.org/display.html.bak46
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.eot (renamed from web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.eot)bin20127 -> 20127 bytes
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.svg (renamed from web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.svg)0
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.ttf (renamed from web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.ttf)bin45404 -> 45404 bytes
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff (renamed from web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.woff)bin23424 -> 23424 bytes
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff2 (renamed from web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.woff2)bin18028 -> 18028 bytes
-rw-r--r--web/nms.gathering.org/img/tg15-salkart-clean-big.png (renamed from web/nms.gathering.org/nms2/img/tg15-salkart-clean-big.png)bin84362 -> 84362 bytes
-rw-r--r--web/nms.gathering.org/img/tg15-salkart-full.png (renamed from web/nms.gathering.org/nms2/img/tg15-salkart-full.png)bin167427 -> 167427 bytes
-rw-r--r--web/nms.gathering.org/img/tg15-salkart.png (renamed from web/nms.gathering.org/nms2/img/tg15-salkart.png)bin141073 -> 141073 bytes
-rw-r--r--web/nms.gathering.org/index.html618
-rw-r--r--web/nms.gathering.org/js/bootstrap.js (renamed from web/nms.gathering.org/nms2/js/bootstrap.js)0
-rw-r--r--web/nms.gathering.org/js/bootstrap.min.js (renamed from web/nms.gathering.org/nms2/js/bootstrap.min.js)0
-rw-r--r--web/nms.gathering.org/js/jquery.min.js (renamed from web/nms.gathering.org/nms2/js/jquery.min.js)0
-rw-r--r--web/nms.gathering.org/js/nms-color-util.js (renamed from web/nms.gathering.org/nms2/js/nms-color-util.js)0
-rw-r--r--web/nms.gathering.org/js/nms-map-handlers.js (renamed from web/nms.gathering.org/nms2/js/nms-map-handlers.js)0
-rw-r--r--web/nms.gathering.org/js/nms.js (renamed from web/nms.gathering.org/nms2/js/nms.js)15
-rw-r--r--web/nms.gathering.org/js/npm.js (renamed from web/nms.gathering.org/nms2/js/npm.js)0
-rw-r--r--web/nms.gathering.org/nms2/index.html527
-rwxr-xr-xweb/nms.gathering.org/old/change-switch-pos.pl (renamed from web/nms.gathering.org/change-switch-pos.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/dhcp-json.pl (renamed from web/nms.gathering.org/dhcp-json.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/dhcpkart.pl (renamed from web/nms.gathering.org/dhcpkart.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/display-rack.html (renamed from web/nms.gathering.org/display-rack.html)0
-rwxr-xr-xweb/nms.gathering.org/old/display.html (renamed from web/nms.gathering.org/display.html)0
-rw-r--r--web/nms.gathering.org/old/edit.html (renamed from web/nms.gathering.org/edit.html)0
-rw-r--r--web/nms.gathering.org/old/index.html115
-rwxr-xr-xweb/nms.gathering.org/old/led.pl (renamed from web/nms.gathering.org/led.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/mygraph.pl (renamed from web/nms.gathering.org/mygraph.pl)0
-rw-r--r--web/nms.gathering.org/old/nettkart-continuous.html (renamed from web/nms.gathering.org/nettkart-continuous.html)0
-rwxr-xr-xweb/nms.gathering.org/old/nettkart-json.pl (renamed from web/nms.gathering.org/nettkart-json.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/nettkart-text.pl (renamed from web/nms.gathering.org/nettkart-text.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/nettkart-web.pl (renamed from web/nms.gathering.org/nettkart-web.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/nettkart.pl (renamed from web/nms.gathering.org/nettkart.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/observium.html (renamed from web/nms.gathering.org/observium.html)0
-rwxr-xr-xweb/nms.gathering.org/old/ping-json.pl (renamed from web/nms.gathering.org/ping-json.pl)0
-rw-r--r--web/nms.gathering.org/old/ping.css (renamed from web/nms.gathering.org/ping.css)0
-rw-r--r--web/nms.gathering.org/old/ping.html (renamed from web/nms.gathering.org/ping.html)0
-rw-r--r--web/nms.gathering.org/old/ping.js (renamed from web/nms.gathering.org/ping.js)0
-rw-r--r--web/nms.gathering.org/old/ping2.html (renamed from web/nms.gathering.org/ping2.html)0
-rwxr-xr-xweb/nms.gathering.org/old/portkart.pl (renamed from web/nms.gathering.org/portkart.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/showswitch.pl (renamed from web/nms.gathering.org/showswitch.pl)0
-rw-r--r--web/nms.gathering.org/old/slide.html (renamed from web/nms.gathering.org/slide.html)0
-rwxr-xr-xweb/nms.gathering.org/old/smanagement.pl (renamed from web/nms.gathering.org/smanagement.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/sshow.pl (renamed from web/nms.gathering.org/sshow.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/stempmap.pl (renamed from web/nms.gathering.org/stempmap.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/stromkart.pl (renamed from web/nms.gathering.org/stromkart.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/switches-json.pl (renamed from web/nms.gathering.org/switches-json.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/uplinkkart-text.pl (renamed from web/nms.gathering.org/uplinkkart-text.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/uplinkkart.pl (renamed from web/nms.gathering.org/uplinkkart.pl)0
-rwxr-xr-xweb/nms.gathering.org/old/uplinktrafikkart.pl (renamed from web/nms.gathering.org/uplinktrafikkart.pl)0
-rwxr-xr-xweb/nms.gathering.org/ping.pl (renamed from web/nms.gathering.org/ping-json2.pl)0
59 files changed, 640 insertions, 682 deletions
diff --git a/.gitignore b/.gitignore
index 1dbc2ab..9737e06 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,6 @@ web/nms-public.gathering.org/ping.json
web/nms-public.gathering.org/speedometer.json
web/nms-public.gathering.org/switches.json
web/nms.gathering.org/.htaccess
-web/nms.gathering.org/img/
working-area/
include/config.pm
include/tgmanage.cfg.sh
diff --git a/web/nms.gathering.org/switch-comment.pl b/web/nms.gathering.org/comment-add.pl
index 262d625..262d625 100755
--- a/web/nms.gathering.org/switch-comment.pl
+++ b/web/nms.gathering.org/comment-add.pl
diff --git a/web/nms.gathering.org/nms2/css/bootstrap-theme.css b/web/nms.gathering.org/css/bootstrap-theme.css
index b0fdfcb..b0fdfcb 100644
--- a/web/nms.gathering.org/nms2/css/bootstrap-theme.css
+++ b/web/nms.gathering.org/css/bootstrap-theme.css
diff --git a/web/nms.gathering.org/nms2/css/bootstrap-theme.css.map b/web/nms.gathering.org/css/bootstrap-theme.css.map
index 5a12d63..5a12d63 100644
--- a/web/nms.gathering.org/nms2/css/bootstrap-theme.css.map
+++ b/web/nms.gathering.org/css/bootstrap-theme.css.map
diff --git a/web/nms.gathering.org/nms2/css/bootstrap-theme.min.css b/web/nms.gathering.org/css/bootstrap-theme.min.css
index cefa3d1..cefa3d1 100644
--- a/web/nms.gathering.org/nms2/css/bootstrap-theme.min.css
+++ b/web/nms.gathering.org/css/bootstrap-theme.min.css
diff --git a/web/nms.gathering.org/nms2/css/bootstrap.css b/web/nms.gathering.org/css/bootstrap.css
index fb15e3d..fb15e3d 100644
--- a/web/nms.gathering.org/nms2/css/bootstrap.css
+++ b/web/nms.gathering.org/css/bootstrap.css
diff --git a/web/nms.gathering.org/nms2/css/bootstrap.css.map b/web/nms.gathering.org/css/bootstrap.css.map
index 2fd84f3..2fd84f3 100644
--- a/web/nms.gathering.org/nms2/css/bootstrap.css.map
+++ b/web/nms.gathering.org/css/bootstrap.css.map
diff --git a/web/nms.gathering.org/nms2/css/bootstrap.min.css b/web/nms.gathering.org/css/bootstrap.min.css
index cd1c616..cd1c616 100644
--- a/web/nms.gathering.org/nms2/css/bootstrap.min.css
+++ b/web/nms.gathering.org/css/bootstrap.min.css
diff --git a/web/nms.gathering.org/nms2/css/navbar-static-top.css b/web/nms.gathering.org/css/navbar-static-top.css
index bf6b28e..bf6b28e 100644
--- a/web/nms.gathering.org/nms2/css/navbar-static-top.css
+++ b/web/nms.gathering.org/css/navbar-static-top.css
diff --git a/web/nms.gathering.org/display.html.bak b/web/nms.gathering.org/display.html.bak
deleted file mode 100755
index f74d941..0000000
--- a/web/nms.gathering.org/display.html.bak
+++ /dev/null
@@ -1,46 +0,0 @@
-<html>
- <head>
- <title>TG15 - The Future Is Back</title>
- <style type="text/css">
- .frames {
- position: absolute;
- bottom: 0px;
- left: 0px;
- visibility: hidden;
- margin: 0px;
- overflow-y: hidden;
- overflow-x: hidden;
- }
- </style>
- <script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
- <script type="text/javascript">
- var page = 0;
- var iframes = 3;
- var delay = 10;
-
- function rotate() {
- $('body').delay(delay*1000).queue(function(next) {
- $('iframe').each(function(i, obj) {
- if (i == page) {
- this.style.visibility = 'visible';
- } else {
- this.style.visibility = 'hidden';
- }
- });
- next();
- rotate();
- });
- page = (page + 1) % iframes;
- }
-
- $(document).ready(function(){
- rotate();
- });
- </script>
- </head>
- <body style="background-image: url('http://funfact.tg15.gathering.org/background.png'); background-size: cover; background-repeat: no-repeat; overflow: hidden;">
- <iframe height="1080" class="frames" width="1920" id="observium" frameborder="0" src="http://nms.tg15.gathering.org/ping.html" scrolling="no"></iframe>
- <iframe height="1080" class="frames" width="1920" id="observium" frameborder="0" src="http://nms.tg15.gathering.org/dhcpkart.pl" scrolling="no"></iframe>
- <iframe height="600" class="frames" width="92%" id="observium" frameborder="0" src="http://observium.tg15.gathering.org/graph-realtime.php?type=bits&id=447&interval=30" scrolling="no" style="visibility: visible;"></iframe>
- </body>
-</html>
diff --git a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.eot b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.eot
index b93a495..b93a495 100644
--- a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.eot
+++ b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.eot
Binary files differ
diff --git a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.svg b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.svg
index 94fb549..94fb549 100644
--- a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.svg
+++ b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.svg
diff --git a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.ttf b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.ttf
index 1413fc6..1413fc6 100644
--- a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.ttf
+++ b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.ttf
Binary files differ
diff --git a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.woff b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff
index 9e61285..9e61285 100644
--- a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.woff
+++ b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff
Binary files differ
diff --git a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.woff2 b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff2
index 64539b5..64539b5 100644
--- a/web/nms.gathering.org/nms2/fonts/glyphicons-halflings-regular.woff2
+++ b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff2
Binary files differ
diff --git a/web/nms.gathering.org/nms2/img/tg15-salkart-clean-big.png b/web/nms.gathering.org/img/tg15-salkart-clean-big.png
index 8d647a3..8d647a3 100644
--- a/web/nms.gathering.org/nms2/img/tg15-salkart-clean-big.png
+++ b/web/nms.gathering.org/img/tg15-salkart-clean-big.png
Binary files differ
diff --git a/web/nms.gathering.org/nms2/img/tg15-salkart-full.png b/web/nms.gathering.org/img/tg15-salkart-full.png
index 9e22d40..9e22d40 100644
--- a/web/nms.gathering.org/nms2/img/tg15-salkart-full.png
+++ b/web/nms.gathering.org/img/tg15-salkart-full.png
Binary files differ
diff --git a/web/nms.gathering.org/nms2/img/tg15-salkart.png b/web/nms.gathering.org/img/tg15-salkart.png
index dce49b5..dce49b5 100644
--- a/web/nms.gathering.org/nms2/img/tg15-salkart.png
+++ b/web/nms.gathering.org/img/tg15-salkart.png
Binary files differ
diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html
index 8043c7d..111dd52 100644
--- a/web/nms.gathering.org/index.html
+++ b/web/nms.gathering.org/index.html
@@ -1,115 +1,527 @@
-<html>
+<!DOCTYPE html>
+<html lang="en">
<head>
- <title>snmp</title>
- </head>
- <body>
- <p>tg light &amp; magic. :-)</p>
-
- <ul>
- <li><a href="nms2/">NMS 2 NG (Ping, Temp, Uplink, Trafikk, Info)</a>
- <br /><i>Trykk på svitsjene (Work in progress)</i>
- </li>
- <br />
- <li><a href="dhcpkart.pl">DHCP-kart</a>
- <br /><i>Oversikt over DHCP-lease etter switch</i>
- </li>
-
- <br />
-
- <li><a href="nettkart-text.pl">Nettkart</a>
- <br /><i>Trafikkoversikt</i>
- </li>
-
- <br />
-<!--
-
- <li><a href="nettkart-telnet.pl">Nettkart</a>
- <br /><i>Trafikkoversikt /m telnetlink</i>
- </li>
-
- <br />
--->
-<!-- Kun moderat nyttig når vi har disablet alle webinterfacene...
- <li><a href="nettkart-web.pl">Nettkart</a>
- <br /><i>Trafikkoversikt /m weblink</i>
- </li>
-
- <br />
--->
- <li><a href="portkart.pl">Nettkart, per port</a>
- <br /><i>Trafikkoversikt per port</i>
- </li>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
+ <meta name="description" content="">
+ <meta name="author" content="">
+ <link rel="icon" href="../../favicon.ico">
- <br />
-
- <li><a href="uplinkkart.pl">Uplink-kart</a>
- <br /><i>Hvilke switcher har ikke to uplinker</i>
- </li>
+ <title>NMS2</title>
- <br />
-<!--
- <li><a href="uplinktrafikkart.pl">Uplink-trafikkart</a>
- <br /><i>Hvem burde hatt mer enn to uplinker</i>
- </li>
+ <!-- Bootstrap core CSS -->
+ <link href="css/bootstrap.min.css" rel="stylesheet">
- <br />
--->
- <li><a href="stromkart.pl">Strømkart</a>
- <br /><i>Hvilke switcher har færre enn fem tilkoblede klienter</i>
- </li>
+ <!-- Custom styles for this template -->
+ <link href="css/navbar-static-top.css" rel="stylesheet">
- <br />
-<!--
- <li><a href="apkart.pl">Aksesspunkt-kart</a>
- <br /><i>Hvilke aksesspunkter er plugget i</i>
- </li>
-
- <br />
--->
- <!--<li><a href="overlay.pl">Overlay-nettkart</a>
- <br /><i>Teh magic 3D!</i>
- </li>
-
- <br /> -->
-
- <li><a href="smanagement.pl">Kommander switcher</a>
- <br /><i>Konfigurer switchene</i>
- </li>
-
- <br />
-
- <li><a href="sshow.pl">Utførte og køede kommandoer</a>
- <br /><i>Se og håndter kommandoer som er utført og fortsatt i køen</i>
- </li>
-
- <br />
-
- <li><a href="stempmap.pl">Temperaturkart</a>
- <br /><i>Temperaturkart for switchene</i>
- </li>
-<!--
- <br />
- <li><a href="mbd-status.pl">MBD-status</a>
- <br /><i>Hva spiller folk mest?</i>
- </li>
--->
- <br />
+ <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+ <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ <style type="text/css">
+ canvas {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ outline: none;
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0); /* mobile webkit */
+ }
+ </style>
+ </head>
- <li><a href="ping.html">Ping-kart</a>
- <br /><i>Pinger alle bokser hvert sekund</i>
- </li>
+ <body id="body">
+ <nav class="navbar navbar-default navbar-static-top">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ </div>
+ <div id="navbar" class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Menu
+ <span class="caret"></span>
+ </a>
+ <ul class="dropdown-menu" role="menu">
+ <li><a href="#ping" onclick="setUpdater(handler_ping)">Ping map</a></li>
+ <li><a href="#uplink" onclick="setUpdater(handler_uplinks)">Uplink map</a></li>
+ <li><a href="#temp" onclick="setUpdater(handler_temp)">Temperature map</a></li>
+ <li><a href="#traffic" onclick="setUpdater(handler_traffic)">Traffic map</a></li>
+ <li><a href="#comment" onclick="setUpdater(handler_comment)">Comment spotter</a></li>
+ <li><a href="#traffictot" onclick="setUpdater(handler_traffic_tot)">Total switch traffic</a></li>
+ <li><a href="#disco" onclick="setUpdater(handler_disco)">DISCO</a></li>
+ <li class="divider"> </li>
+ <li><a href="#" onclick="toggleLayer('nowPickerBox');document.getElementById('nowPicker').focus();">Travel in time</a></li>
+ <li><a href="#" onclick="startReplay();" title="Replay from opening 120 minutes per second">Replay TG</a></li>
+ <li class="divider"> </li>
+ <li class="dropdown-header">View</li>
+ <li><a href="#" onclick="toggleNightMode()">Toggle Night Mode</a></li>
+ <li><a href="#" onclick="showBlurBox()">Tweak Night Mode blur</a></li>
+ <li><a href="#" onclick='showLayer("layerVisibility");'>Set layer visibility</a></li>
+ <li class="divider"> </li>
+ <li class="dropdown-header">Map scale</li>
+ <li><a href="#"><label id="scaler-text" for='scaler'></label><input type="range" id="scaler" name="points" min="0.2" max="3" step="0.01" onchange="scaleChange()" /></a></li>
+ <li class="divider"> </li>
+ <li class="dropdown-header">Help</li>
+ <li><a href="#" onclick="toggleLayer('aboutData');">About TG15 data</a></li>
+ <li><a href="#" onclick="toggleLayer('aboutBox');" >About NMS</a></li>
+ <li><a href="#" onclick="toggleLayer('aboutPerformance');" >About Performance</a></li>
+ <li><a href="#" onclick="toggleLayer('aboutKeybindings');" >Keyboard Shortcuts</a></li>
+ <li><a onclick="showTimerDebug(); hideSwitch();" style="cursor: pointer;" >Debug timers</a></li>
+ </ul>
+ </li>
+ <li><p id="updater_name" class="navbar-text"></p></li>
+ <div class="navbar-form navbar-left">
+ <div class="form-group">
+ <button class="btn btn-default btn-xs" id="legend-1"></button>
+ <button class="btn btn-default btn-xs" id="legend-2"></button>
+ <button class="btn btn-default btn-xs" id="legend-3"></button>
+ <button class="btn btn-default btn-xs" id="legend-4"></button>
+ <button class="btn btn-default btn-xs" id="legend-5"></button>
+ </div>
+ </div>
+ </li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li><p id="speed" class="navbar-text" title="Client port speed / Total port speed"></p></li>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div>
+ </nav>
- <br />
+ <div class="container-fluid">
- <li><a href="ping2.html">Realtime trafikkart</a>
- <br /><i>Som nettkartet, men oppdateres hele tiden</i>
- </li>
+ <div class="row-fluid">
+ <div class="span12">
+ <div id="aboutData" class="col-md-4" style="position: absolute; display:none; z-index: 130;">
+ <div id="abotData" class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">About the TG15 data
+ <button type="button" class="close" aria-label="Close" onclick="document.getElementById('aboutData').style.display = 'none';" style="float: right">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h3>
+ </div>
+ <div class="panel-body">
+ <p>The data you see from The Gathering 2015 will seem
+ "broken up". This is not because we don't have data from
+ the first day, but because the backend was re-written on
+ day 1/2 and this web app only uses the new API.</p>
+ <p>NMS was set up on March 30th (Monday). Data started
+ pouring in on the same day. </p>
+ <p>Ping data is available for the entire event with 1
+ second resolution. We "lost" data from the 30th because we
+ re-inserted the switches (We have the ping data, but not
+ the mapping between switch ID number and actual
+ switch).</p>
+ <p>DHCP data is available only for the last detected DHCP
+ ack (no history, except extensive text-based logs)</p>
+ <p>Uplink status is available for most of the event, but
+ not exposed here. We only expose traffic-based uplink state
+ here, which, again, is based on the new API.</p>
+ <p>Traffic status was temporarily bugged, but is available
+ from late on day 2.</p>
+ <p>Temperature data is available from day 2.</p>
+ <p>Plans are being made to ensure that we don't have gaps
+ like these in the future.</p>
+ <p>It is also worth mentioning that things like switch
+ positions are not logged historically, so you see the final
+ position on the map.</p>
+ </div>
+ </div>
+ </div>
+ <div id="aboutPerformance" class="col-md-4" style="position: absolute; display:none; z-index: 130;">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Performance
+ <button type="button" class="close" aria-label="Close" onclick="document.getElementById('aboutPerformance').style.display = 'none';" style="float: right">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h3>
+ </div>
+ <table class="table">
+ <tr>
+ <td>Outstanding AJAX requests</td>
+ <td id="outstandingAJAX"></td>
+ </tr>
+ <tr>
+ <td>Overflowed AJAX requests</td>
+ <td id="overflowAJAX"></td>
+ </tr>
+ </table>
+ <div class="panel-body">
+ <p>NMS performance is surprisingly complex. It's split into
+ several parts and dealt with differently.</p>
+ <p>Poller performance is a matter of efficiently collecting
+ data and is mostly handled in the Perl code (and ensuring
+ we use sensible database schemas).</p>
+ <p>Backend performance for the GUI is mostly about not
+ killing the database server. We do NOT try to protect
+ against malicious clients directly, since this is a
+ management system not public-facing, but Varnish is used to
+ cache requests. To be able to do that properly, we need use
+ absolute time when reviewing past events (so "2015-04-02
+ 17:30:00", not "2 hours ago"). We've also tried to minimize
+ the stupidity in the queries. There's still work to be done
+ here, though, as we need to split up a few large backend
+ requests (port-state.pl).</p>
+ <p>Front-end performance is mostly about drawing things
+ sensibly and not completely bombing the memory usage. And
+ about gracefully handling slow backends This will affect
+ you. For example, if you are reviewing past events and the
+ DB is struggling, we'll simply skip a backend request if we
+ have too many outstanding requests, that means you may jump
+ from "17:00" to "18:30" instead of going through
+ "17:30" and "18:00" too. This is working as intended. It
+ also means that you can happily spam the forward/backward
+ keyboard bindings to jump 18 hours forward: You'll overflow
+ the extra AJAX requests for individual requests, but you'll
+ land at the right time when you let go. But there could be
+ a 1 second delay (or more if the backend really struggles)
+ since you'll have to rely on the periodic backend requests
+ instead of the explicit ones triggered on hitting a
+ button.</p>
+ <p>Note that the counters on top are updated on a timer,
+ but this timer is set up at the same time as everything
+ else, which means that it's likely to update at the same
+ time as we fire off AJAX requests, so the 'outstanding ajax
+ requests' counter might either show almost constantly 3 or
+ 0 depending on what timer happens to fire first. This does
+ NOT mean that NMS has 3 requests all the time, just that
+ we're checking right after we fire off AJAX requests every
+ time.</p>
+ <p>NMS also tries to handle drawing OK, which is why things
+ are split into different HTML5 canvases. Blur and text are
+ particularly expensive, but there's no reason to re-paint
+ that all the time, etc).</p>
+ <p>The basic performance experiments are done on TG15 data
+ using a laptop and a VM with 6GB of memory, so it should
+ hold up quite well on "proper" hardware.</p>
+ </div>
+ </div>
+ </div>
+ <div id="aboutKeybindings" class="col-md-4" style="position: absolute; display:none; z-index: 130;">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Keyboard Shortcuts
+ <button type="button" class="close" aria-label="Close" onclick="document.getElementById('aboutKeybindings').style.display = 'none';" style="float: right">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h3>
+ </div>
+ <table class="table table-condensed">
+ <tr>
+ <th>Key</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>?</td>
+ <td>Toggle navigation bar</td>
+ </tr>
+ <tr>
+ <td>n</td>
+ <td>Toggle night mode</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>View Ping map</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>View uplink map</td>
+ </tr>
+ <tr>
+ <td>3</td>
+ <td>View temperature map</td>
+ </tr>
+ <tr>
+ <td>4</td>
+ <td>View uplink traffic map</td>
+ </tr>
+ <tr>
+ <td>5</td>
+ <td>View comment spotter map</td>
+ </tr>
+ <tr>
+ <td>6</td>
+ <td>View total switch traffic map</td>
+ </tr>
+ <tr>
+ <td>7</td>
+ <td>View Disco map</td>
+ </tr>
+ <tr>
+ <td>h</td>
+ <td>Step 1 hour back in time</td>
+ </tr>
+ <tr>
+ <td>j</td>
+ <td>Step 5 minutes back in time</td>
+ </tr>
+ <tr>
+ <td>k</td>
+ <td>Step 5 minutes forward in time</td>
+ </tr>
+ <tr>
+ <td>l</td>
+ <td>Step 1 hour forward in time</td>
+ </tr>
+ <tr>
+ <td>p</td>
+ <td>Toggle playback (1 hour per second)</td>
+ </tr>
+ <tr>
+ <td>r</td>
+ <td>Return to real time</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div id="nowPickerBox" style="position: absolute; display: none; z-index: 130;" class="col-md-4">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Time travel
+ <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('nowPickerBox').style.display = 'none';" style="float: right;">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h3>
+ </div>
+ <div class="panel-body">
+ <p>Some features do not have time travel support (comment
+ spotting and DHCP map at the moment). We also lack
+ compatible SNMP data for the first day or so, so you'll
+ only have ping data for the first day of TG15.</p>
+ <p>It could take some time to load a specific point in time
+ for the first time. See "About performance" under the help
+ menu for more information.</p>
+ <p>You can also step backwards and forwards in time, stop
+ and start replay and go back to real time using keyboard
+ shortcuts. See the help menu for an overview of keyboard
+ shortcuts.</p>
+ <div class="input-group">
+ <input type="text" class="form-control" placeholder="YYYY-MM-DDThh:mm:ss" id="nowPicker">
+ <span class="input-group-btn">
+ <button class="btn btn-default" onclick="changeNow();">Travel</button>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div style="position: absolute; z-index: 120;" class="col-md-4">
+ <div id="info-switch-parent" class="panel panel-default col-d-6" style="display: none; backgroun:silver; position: absolute; z-index: 120;">
+ <div class="panel-heading">
+ <h3 class="panel-title" id="info-switch-title"></h3>
+ </div>
+ <div id="info-switch-panel-body">
+ <table class="table" id="info-switch-table"></table>
+ </div>
+ </div>
+ </div>
+ <div id="aboutBox" class="col-md-4" style="display: none; position: absolute; z-index: 100;">
+ <div id="abotBox" class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Welcome to NMS
+ <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('aboutBox').style.display = 'none';" style="float: right;">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h3>
+ </div>
+ <div class="panel-body">
+ <h3>Cool stuff:</h3>
+ <ul>
+ <li>Click a switch for more info</li>
+ <li>Rewind: You can check out state at a specific time or
+ replay from the beginning of the event. Only works for
+ data where we keep time-series (so not for
+ comments)</li>
+ <li>Press '?' to toggle the menu.</li>
+ <li>Auto-scaling the viewport/canvas</li>
+ <li>Total client speed (up right)</li>
+ <li>Generic(-ish) map handlers: provide a name, init-function
+ and an update-function and the nms lib does the rest as far as
+ integration goes.</li>
+ </ul>
+ <h3>Todo list front end:</h3>
+ <ul>
+ <li>Polish time travel UI (Allow playing from a given time at a given speed, play/pause buttons, etc)</li>
+ <li>Better "popup" boxes: It's growing out of control.</li>
+ <li>Toggle auto-scale on/off</li>
+ <li>Clean up various global variables</li>
+ <li>Create name spaces in nms.*: It's just barely better
+ than global stuff now.</li>
+ <li>Add DHCP map</li>
+ <li>More info on switches: Port state, possibly link time
+ trends</li>
+ <li>Moving switches around (like ping.html + edit)</li>
+ <li>Split nms.js into multiple components to unclutter the
+ code</li>
+ <li>Comments: Fix UTF8 garbligash caused by $dbh-&gt;quote()</li>
+ </ul>
+ <h3>Todo for backend:</h3>
+ <ul>
+ <li>IPv6 support</li>
+ <li>Provide public API's</li>
+ <li>Investigate a json tree filter/massager</li>
+ <li>Close SQL injections (IT'S WIDE OPEN BECAUSE WHY NOT THAT'S NEVER A PROBLEM)</li>
+ <li>Split port-state.pl into multiple appropriate pieces. Right
+ it mixes heavy time-critical data with less time-critical and
+ cheap computation.</li>
+ <li>Rip comments out of port-state.pl completely so it's not
+ bound by the same cache issues and can be reliably
+ refreshed.</li>
+ <li>Consider time log of DHCP (right now it just stores the
+ most recent timestamp, making time travel impossible)</li>
+ <li>Fix SNMP-fetcher so it gets ifXTable and at least
+ ifOperStatus from ifTable. Don't request the entire
+ ifXTable if we can avoid it. Possibly other
+ tweaks.</li>
+ <li>Support for adding switches through an API, not just pure SQL.</li>
+ <li>Integrate with FAP</li>
+ <li>Clean up old interfaces</li>
+ <li>Review various agents/tools</li>
+ <li>Improve cache headers</li>
+ <li>Cache invalidation of comments? (Probably not needed)</li>
+ <li>Re-test the SQL schema. It's been modified and works fine
+ on my laptop, but I need to dump it, commit it and test it.</li>
+ <li>Munin plugin for ports.</li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div id="blurManic" class="panel panel-default" style="display: none; position: absolute; z-index: 100;">
+ <div class="panel-heading">
+ <h1 class="panel-title">Blur tweaks
+ <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('blurManic').style.display = 'none';" style="float: right;">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h1>
+ </div>
+ <div class="panel-body">
+ <div class="form">
+ <div class="form-group">
+ <label for="shadowBlur">Blur strength</label>
+ <input type="number" id="shadowBlur" class="form-control">
+ </div>
+ <div class="form-group">
+ <label for="shadowColor">Blur color</label>
+ <input type="color" id="shadowColor" class="form-control">
+ </div>
+ <button type="button" class="btn btn-default" onclick="applyBlur();">Apply</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="debugTimers" class="panel panel-default" style="display: none; position: absolute; z-index: 100;">
+ <div class="panel-heading">
+ <h1 class="panel-title">Debug timers (e.g.: Break stuff! FAST!)
+ <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('debugTimers').style.display = 'none';" style="float: right;">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h1>
+ </div>
+ <div id="timerTableTop" class="panel-body">
+ <p>These are internal timers for the NMS frontend. They are
+ provided mainly to debug the frontend. Setting AJAX-triggering
+ counters to ridiculous numbers is not advised (mainly because
+ it causes server load).</p>
+ </div>
+ <table id="timerTable"> </table>
+ </div>
+ <div id="layerVisibility" class="panel panel-default" style="display: none; position: absolute; z-index: 100;">
+ <div class="panel-heading">
+ <h1 class="panel-title">Set layer visibility
+ <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('layerVisibility').style.display = 'none';" style="float: right;">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h1>
+ </div>
+ <div class="panel-body">
+ <table id="visibilityTable" class="table">
+ <tr>
+ <td>Background</td>
+ <td>
+ <button onclick='hideLayer("bgCanvas");'>Hide</button>
+ <button onclick='showLayer("bgCanvas");'>Show</button>
+ </td>
+ </tr>
+ <tr>
+ <td>Linknets</td>
+ <td>
+ <button onclick='hideLayer("linkCanvas");'>Hide</button>
+ <button onclick='showLayer("linkCanvas");'>Show</button>
+ </td>
+ </tr>
+ <tr>
+ <td>Blur</td>
+ <td>
+ <button onclick='hideLayer("blurCanvas");'>Hide</button>
+ <button onclick='showLayer("blurCanvas");'>Show</button>
+ </td>
+ </tr>
+ <tr>
+ <td>Switches</td>
+ <td>
+ <button onclick='hideLayer("switchCanvas");'>Hide</button>
+ <button onclick='showLayer("switchCanvas");'>Show</button>
+ </td>
+ </tr>
+ <tr>
+ <td>Text</td>
+ <td>
+ <button onclick='hideLayer("textCanvas");'>Hide</button>
+ <button onclick='showLayer("textCanvas");'>Show</button>
+ </td>
+ </tr>
+ <tr>
+ <td>TextInfo</td>
+ <td>
+ <button onclick='hideLayer("textInfoCanvas");'>Hide</button>
+ <button onclick='showLayer("textInfoCanvas");'>Show</button>
+ </td>
+ </tr>
+ <tr>
+ <td>Timestamp</td>
+ <td>
+ <button onclick='hideLayer("topCanvas");'>Hide</button>
+ <button onclick='showLayer("topCanvas");'>Show</button>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
- <br />
+ <canvas id="bgCanvas" width="1920" height="1032" style="position: absolute; z-index: 1;"> </canvas>
+ <canvas id="linkCanvas" width="1920" height="1032" style="position: absolute; z-index: 10;"> </canvas>
+ <canvas id="blurCanvas" width="1920" height="1032" style="position: absolute; z-index: 20;"> </canvas>
+ <canvas id="switchCanvas" width="1920" height="1032" style="position: absolute; z-index: 30;"> </canvas>
+ <canvas id="textCanvas" width="1920" height="1032" style="position: absolute; z-index: 40;"> </canvas>
+ <canvas id="textInfoCanvas" width="1920" height="1032" style="position: absolute; z-index: 45;"> </canvas>
+ <canvas id="topCanvas" width="1920" height="1032" style="position: absolute; z-index: 50;"> </canvas>
+ <canvas id="inputCanvas" width="1920" height="1032" style="position: absolute; z-index: 60; cursor: pointer;" onclick="canvasClick(event)">
+ </canvas>
+ <canvas id="hiddenCanvas" width="1000" height="10" style="display: none; position: absolute; z-index: 1000 "></canvas>
- <li><a href="edit.html">Rediger kartet</a>
- <br /><i>Dra rundt på switcher. Wheeee!</i>
- </li>
- </ul>
+ <div style="display:none;"><img id="source" src="img/tg15-salkart-clean-big.png" ></div>
+ </div>
+ </div><!--/.fluid-container-->
+ <script src="js/jquery.min.js" type="text/javascript"></script>
+ <script src="js/bootstrap.min.js" type="text/javascript"></script>
+ <script type="text/javascript" src="js/nms.js"></script>
+ <script type="text/javascript" src="js/nms-color-util.js"></script>
+ <script type="text/javascript" src="js/nms-map-handlers.js"></script>
+ <script type="text/javascript">
+initNMS();
+ </script>
</body>
</html>
diff --git a/web/nms.gathering.org/nms2/js/bootstrap.js b/web/nms.gathering.org/js/bootstrap.js
index 1c88b71..1c88b71 100644
--- a/web/nms.gathering.org/nms2/js/bootstrap.js
+++ b/web/nms.gathering.org/js/bootstrap.js
diff --git a/web/nms.gathering.org/nms2/js/bootstrap.min.js b/web/nms.gathering.org/js/bootstrap.min.js
index c8f82e5..c8f82e5 100644
--- a/web/nms.gathering.org/nms2/js/bootstrap.min.js
+++ b/web/nms.gathering.org/js/bootstrap.min.js
diff --git a/web/nms.gathering.org/nms2/js/jquery.min.js b/web/nms.gathering.org/js/jquery.min.js
index e6a051d..e6a051d 100644
--- a/web/nms.gathering.org/nms2/js/jquery.min.js
+++ b/web/nms.gathering.org/js/jquery.min.js
diff --git a/web/nms.gathering.org/nms2/js/nms-color-util.js b/web/nms.gathering.org/js/nms-color-util.js
index 72d6f61..72d6f61 100644
--- a/web/nms.gathering.org/nms2/js/nms-color-util.js
+++ b/web/nms.gathering.org/js/nms-color-util.js
diff --git a/web/nms.gathering.org/nms2/js/nms-map-handlers.js b/web/nms.gathering.org/js/nms-map-handlers.js
index ddb50a1..ddb50a1 100644
--- a/web/nms.gathering.org/nms2/js/nms-map-handlers.js
+++ b/web/nms.gathering.org/js/nms-map-handlers.js
diff --git a/web/nms.gathering.org/nms2/js/nms.js b/web/nms.gathering.org/js/nms.js
index 27e4684..90532e6 100644
--- a/web/nms.gathering.org/nms2/js/nms.js
+++ b/web/nms.gathering.org/js/nms.js
@@ -725,7 +725,7 @@ function updatePing()
nms.outstandingAjaxRequests++;
$.ajax({
type: "GET",
- url: "/ping-json2.pl" + now,
+ url: "/ping.pl" + now,
dataType: "text",
success: function (data, textStatus, jqXHR) {
nms.ping_data = JSON.parse(data);
@@ -791,7 +791,7 @@ function addComment(sw,comment)
};
$.ajax({
type: "POST",
- url: "/switch-comment.pl",
+ url: "/comment-add.pl",
dataType: "text",
data:myData,
success: function (data, textStatus, jqXHR) {
@@ -839,12 +839,12 @@ function updatePorts()
});
now="";
if (nms.now != false)
- now = "&now=" + nms.now;
+ now = "?now=" + nms.now;
nms.outstandingAjaxRequests++;
updateAjaxInfo();
$.ajax({
type: "GET",
- url: "/port-state.pl?time=5m" + now,
+ url: "/port-state.pl" + now,
dataType: "text",
success: function (data, textStatus, jqXHR) {
var switchdata = JSON.parse(data);
@@ -1688,7 +1688,12 @@ function saveSettings()
function restoreSettings()
{
- var retrieve = JSON.parse(atob(getCookie("nms")));
+ try {
+ var retrieve = JSON.parse(atob(getCookie("nms")));
+ } catch(e) {
+ console.log("nothing saved");
+ }
+
for (var v in retrieve) {
nms[v] = retrieve[v];
}
diff --git a/web/nms.gathering.org/nms2/js/npm.js b/web/nms.gathering.org/js/npm.js
index bf6aa80..bf6aa80 100644
--- a/web/nms.gathering.org/nms2/js/npm.js
+++ b/web/nms.gathering.org/js/npm.js
diff --git a/web/nms.gathering.org/nms2/index.html b/web/nms.gathering.org/nms2/index.html
deleted file mode 100644
index 111dd52..0000000
--- a/web/nms.gathering.org/nms2/index.html
+++ /dev/null
@@ -1,527 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
- <meta name="description" content="">
- <meta name="author" content="">
- <link rel="icon" href="../../favicon.ico">
-
- <title>NMS2</title>
-
- <!-- Bootstrap core CSS -->
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <!-- Custom styles for this template -->
- <link href="css/navbar-static-top.css" rel="stylesheet">
-
- <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
- <!--[if lt IE 9]>
- <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
- <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
- <![endif]-->
- <style type="text/css">
- canvas {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- outline: none;
- -webkit-tap-highlight-color: rgba(255, 255, 255, 0); /* mobile webkit */
- }
- </style>
- </head>
-
- <body id="body">
- <nav class="navbar navbar-default navbar-static-top">
- <div class="container-fluid">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- </div>
- <div id="navbar" class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Menu
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu">
- <li><a href="#ping" onclick="setUpdater(handler_ping)">Ping map</a></li>
- <li><a href="#uplink" onclick="setUpdater(handler_uplinks)">Uplink map</a></li>
- <li><a href="#temp" onclick="setUpdater(handler_temp)">Temperature map</a></li>
- <li><a href="#traffic" onclick="setUpdater(handler_traffic)">Traffic map</a></li>
- <li><a href="#comment" onclick="setUpdater(handler_comment)">Comment spotter</a></li>
- <li><a href="#traffictot" onclick="setUpdater(handler_traffic_tot)">Total switch traffic</a></li>
- <li><a href="#disco" onclick="setUpdater(handler_disco)">DISCO</a></li>
- <li class="divider"> </li>
- <li><a href="#" onclick="toggleLayer('nowPickerBox');document.getElementById('nowPicker').focus();">Travel in time</a></li>
- <li><a href="#" onclick="startReplay();" title="Replay from opening 120 minutes per second">Replay TG</a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">View</li>
- <li><a href="#" onclick="toggleNightMode()">Toggle Night Mode</a></li>
- <li><a href="#" onclick="showBlurBox()">Tweak Night Mode blur</a></li>
- <li><a href="#" onclick='showLayer("layerVisibility");'>Set layer visibility</a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">Map scale</li>
- <li><a href="#"><label id="scaler-text" for='scaler'></label><input type="range" id="scaler" name="points" min="0.2" max="3" step="0.01" onchange="scaleChange()" /></a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">Help</li>
- <li><a href="#" onclick="toggleLayer('aboutData');">About TG15 data</a></li>
- <li><a href="#" onclick="toggleLayer('aboutBox');" >About NMS</a></li>
- <li><a href="#" onclick="toggleLayer('aboutPerformance');" >About Performance</a></li>
- <li><a href="#" onclick="toggleLayer('aboutKeybindings');" >Keyboard Shortcuts</a></li>
- <li><a onclick="showTimerDebug(); hideSwitch();" style="cursor: pointer;" >Debug timers</a></li>
- </ul>
- </li>
- <li><p id="updater_name" class="navbar-text"></p></li>
- <div class="navbar-form navbar-left">
- <div class="form-group">
- <button class="btn btn-default btn-xs" id="legend-1"></button>
- <button class="btn btn-default btn-xs" id="legend-2"></button>
- <button class="btn btn-default btn-xs" id="legend-3"></button>
- <button class="btn btn-default btn-xs" id="legend-4"></button>
- <button class="btn btn-default btn-xs" id="legend-5"></button>
- </div>
- </div>
- </li>
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li><p id="speed" class="navbar-text" title="Client port speed / Total port speed"></p></li>
- </ul>
- </div><!--/.nav-collapse -->
- </div>
- </nav>
-
- <div class="container-fluid">
-
- <div class="row-fluid">
- <div class="span12">
- <div id="aboutData" class="col-md-4" style="position: absolute; display:none; z-index: 130;">
- <div id="abotData" class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">About the TG15 data
- <button type="button" class="close" aria-label="Close" onclick="document.getElementById('aboutData').style.display = 'none';" style="float: right">
- <span aria-hidden="true">&times;</span>
- </button>
- </h3>
- </div>
- <div class="panel-body">
- <p>The data you see from The Gathering 2015 will seem
- "broken up". This is not because we don't have data from
- the first day, but because the backend was re-written on
- day 1/2 and this web app only uses the new API.</p>
- <p>NMS was set up on March 30th (Monday). Data started
- pouring in on the same day. </p>
- <p>Ping data is available for the entire event with 1
- second resolution. We "lost" data from the 30th because we
- re-inserted the switches (We have the ping data, but not
- the mapping between switch ID number and actual
- switch).</p>
- <p>DHCP data is available only for the last detected DHCP
- ack (no history, except extensive text-based logs)</p>
- <p>Uplink status is available for most of the event, but
- not exposed here. We only expose traffic-based uplink state
- here, which, again, is based on the new API.</p>
- <p>Traffic status was temporarily bugged, but is available
- from late on day 2.</p>
- <p>Temperature data is available from day 2.</p>
- <p>Plans are being made to ensure that we don't have gaps
- like these in the future.</p>
- <p>It is also worth mentioning that things like switch
- positions are not logged historically, so you see the final
- position on the map.</p>
- </div>
- </div>
- </div>
- <div id="aboutPerformance" class="col-md-4" style="position: absolute; display:none; z-index: 130;">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Performance
- <button type="button" class="close" aria-label="Close" onclick="document.getElementById('aboutPerformance').style.display = 'none';" style="float: right">
- <span aria-hidden="true">&times;</span>
- </button>
- </h3>
- </div>
- <table class="table">
- <tr>
- <td>Outstanding AJAX requests</td>
- <td id="outstandingAJAX"></td>
- </tr>
- <tr>
- <td>Overflowed AJAX requests</td>
- <td id="overflowAJAX"></td>
- </tr>
- </table>
- <div class="panel-body">
- <p>NMS performance is surprisingly complex. It's split into
- several parts and dealt with differently.</p>
- <p>Poller performance is a matter of efficiently collecting
- data and is mostly handled in the Perl code (and ensuring
- we use sensible database schemas).</p>
- <p>Backend performance for the GUI is mostly about not
- killing the database server. We do NOT try to protect
- against malicious clients directly, since this is a
- management system not public-facing, but Varnish is used to
- cache requests. To be able to do that properly, we need use
- absolute time when reviewing past events (so "2015-04-02
- 17:30:00", not "2 hours ago"). We've also tried to minimize
- the stupidity in the queries. There's still work to be done
- here, though, as we need to split up a few large backend
- requests (port-state.pl).</p>
- <p>Front-end performance is mostly about drawing things
- sensibly and not completely bombing the memory usage. And
- about gracefully handling slow backends This will affect
- you. For example, if you are reviewing past events and the
- DB is struggling, we'll simply skip a backend request if we
- have too many outstanding requests, that means you may jump
- from "17:00" to "18:30" instead of going through
- "17:30" and "18:00" too. This is working as intended. It
- also means that you can happily spam the forward/backward
- keyboard bindings to jump 18 hours forward: You'll overflow
- the extra AJAX requests for individual requests, but you'll
- land at the right time when you let go. But there could be
- a 1 second delay (or more if the backend really struggles)
- since you'll have to rely on the periodic backend requests
- instead of the explicit ones triggered on hitting a
- button.</p>
- <p>Note that the counters on top are updated on a timer,
- but this timer is set up at the same time as everything
- else, which means that it's likely to update at the same
- time as we fire off AJAX requests, so the 'outstanding ajax
- requests' counter might either show almost constantly 3 or
- 0 depending on what timer happens to fire first. This does
- NOT mean that NMS has 3 requests all the time, just that
- we're checking right after we fire off AJAX requests every
- time.</p>
- <p>NMS also tries to handle drawing OK, which is why things
- are split into different HTML5 canvases. Blur and text are
- particularly expensive, but there's no reason to re-paint
- that all the time, etc).</p>
- <p>The basic performance experiments are done on TG15 data
- using a laptop and a VM with 6GB of memory, so it should
- hold up quite well on "proper" hardware.</p>
- </div>
- </div>
- </div>
- <div id="aboutKeybindings" class="col-md-4" style="position: absolute; display:none; z-index: 130;">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Keyboard Shortcuts
- <button type="button" class="close" aria-label="Close" onclick="document.getElementById('aboutKeybindings').style.display = 'none';" style="float: right">
- <span aria-hidden="true">&times;</span>
- </button>
- </h3>
- </div>
- <table class="table table-condensed">
- <tr>
- <th>Key</th>
- <th>Description</th>
- </tr>
- <tr>
- <td>?</td>
- <td>Toggle navigation bar</td>
- </tr>
- <tr>
- <td>n</td>
- <td>Toggle night mode</td>
- </tr>
- <tr>
- <td>1</td>
- <td>View Ping map</td>
- </tr>
- <tr>
- <td>2</td>
- <td>View uplink map</td>
- </tr>
- <tr>
- <td>3</td>
- <td>View temperature map</td>
- </tr>
- <tr>
- <td>4</td>
- <td>View uplink traffic map</td>
- </tr>
- <tr>
- <td>5</td>
- <td>View comment spotter map</td>
- </tr>
- <tr>
- <td>6</td>
- <td>View total switch traffic map</td>
- </tr>
- <tr>
- <td>7</td>
- <td>View Disco map</td>
- </tr>
- <tr>
- <td>h</td>
- <td>Step 1 hour back in time</td>
- </tr>
- <tr>
- <td>j</td>
- <td>Step 5 minutes back in time</td>
- </tr>
- <tr>
- <td>k</td>
- <td>Step 5 minutes forward in time</td>
- </tr>
- <tr>
- <td>l</td>
- <td>Step 1 hour forward in time</td>
- </tr>
- <tr>
- <td>p</td>
- <td>Toggle playback (1 hour per second)</td>
- </tr>
- <tr>
- <td>r</td>
- <td>Return to real time</td>
- </tr>
- </table>
- </div>
- </div>
- <div id="nowPickerBox" style="position: absolute; display: none; z-index: 130;" class="col-md-4">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Time travel
- <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('nowPickerBox').style.display = 'none';" style="float: right;">
- <span aria-hidden="true">&times;</span>
- </button>
- </h3>
- </div>
- <div class="panel-body">
- <p>Some features do not have time travel support (comment
- spotting and DHCP map at the moment). We also lack
- compatible SNMP data for the first day or so, so you'll
- only have ping data for the first day of TG15.</p>
- <p>It could take some time to load a specific point in time
- for the first time. See "About performance" under the help
- menu for more information.</p>
- <p>You can also step backwards and forwards in time, stop
- and start replay and go back to real time using keyboard
- shortcuts. See the help menu for an overview of keyboard
- shortcuts.</p>
- <div class="input-group">
- <input type="text" class="form-control" placeholder="YYYY-MM-DDThh:mm:ss" id="nowPicker">
- <span class="input-group-btn">
- <button class="btn btn-default" onclick="changeNow();">Travel</button>
- </span>
- </div>
- </div>
- </div>
- </div>
- <div style="position: absolute; z-index: 120;" class="col-md-4">
- <div id="info-switch-parent" class="panel panel-default col-d-6" style="display: none; backgroun:silver; position: absolute; z-index: 120;">
- <div class="panel-heading">
- <h3 class="panel-title" id="info-switch-title"></h3>
- </div>
- <div id="info-switch-panel-body">
- <table class="table" id="info-switch-table"></table>
- </div>
- </div>
- </div>
- <div id="aboutBox" class="col-md-4" style="display: none; position: absolute; z-index: 100;">
- <div id="abotBox" class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Welcome to NMS
- <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('aboutBox').style.display = 'none';" style="float: right;">
- <span aria-hidden="true">&times;</span>
- </button>
- </h3>
- </div>
- <div class="panel-body">
- <h3>Cool stuff:</h3>
- <ul>
- <li>Click a switch for more info</li>
- <li>Rewind: You can check out state at a specific time or
- replay from the beginning of the event. Only works for
- data where we keep time-series (so not for
- comments)</li>
- <li>Press '?' to toggle the menu.</li>
- <li>Auto-scaling the viewport/canvas</li>
- <li>Total client speed (up right)</li>
- <li>Generic(-ish) map handlers: provide a name, init-function
- and an update-function and the nms lib does the rest as far as
- integration goes.</li>
- </ul>
- <h3>Todo list front end:</h3>
- <ul>
- <li>Polish time travel UI (Allow playing from a given time at a given speed, play/pause buttons, etc)</li>
- <li>Better "popup" boxes: It's growing out of control.</li>
- <li>Toggle auto-scale on/off</li>
- <li>Clean up various global variables</li>
- <li>Create name spaces in nms.*: It's just barely better
- than global stuff now.</li>
- <li>Add DHCP map</li>
- <li>More info on switches: Port state, possibly link time
- trends</li>
- <li>Moving switches around (like ping.html + edit)</li>
- <li>Split nms.js into multiple components to unclutter the
- code</li>
- <li>Comments: Fix UTF8 garbligash caused by $dbh-&gt;quote()</li>
- </ul>
- <h3>Todo for backend:</h3>
- <ul>
- <li>IPv6 support</li>
- <li>Provide public API's</li>
- <li>Investigate a json tree filter/massager</li>
- <li>Close SQL injections (IT'S WIDE OPEN BECAUSE WHY NOT THAT'S NEVER A PROBLEM)</li>
- <li>Split port-state.pl into multiple appropriate pieces. Right
- it mixes heavy time-critical data with less time-critical and
- cheap computation.</li>
- <li>Rip comments out of port-state.pl completely so it's not
- bound by the same cache issues and can be reliably
- refreshed.</li>
- <li>Consider time log of DHCP (right now it just stores the
- most recent timestamp, making time travel impossible)</li>
- <li>Fix SNMP-fetcher so it gets ifXTable and at least
- ifOperStatus from ifTable. Don't request the entire
- ifXTable if we can avoid it. Possibly other
- tweaks.</li>
- <li>Support for adding switches through an API, not just pure SQL.</li>
- <li>Integrate with FAP</li>
- <li>Clean up old interfaces</li>
- <li>Review various agents/tools</li>
- <li>Improve cache headers</li>
- <li>Cache invalidation of comments? (Probably not needed)</li>
- <li>Re-test the SQL schema. It's been modified and works fine
- on my laptop, but I need to dump it, commit it and test it.</li>
- <li>Munin plugin for ports.</li>
- </ul>
- </div>
- </div>
- </div>
- <div id="blurManic" class="panel panel-default" style="display: none; position: absolute; z-index: 100;">
- <div class="panel-heading">
- <h1 class="panel-title">Blur tweaks
- <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('blurManic').style.display = 'none';" style="float: right;">
- <span aria-hidden="true">&times;</span>
- </button>
- </h1>
- </div>
- <div class="panel-body">
- <div class="form">
- <div class="form-group">
- <label for="shadowBlur">Blur strength</label>
- <input type="number" id="shadowBlur" class="form-control">
- </div>
- <div class="form-group">
- <label for="shadowColor">Blur color</label>
- <input type="color" id="shadowColor" class="form-control">
- </div>
- <button type="button" class="btn btn-default" onclick="applyBlur();">Apply</button>
- </div>
- </div>
- </div>
- </div>
- <div id="debugTimers" class="panel panel-default" style="display: none; position: absolute; z-index: 100;">
- <div class="panel-heading">
- <h1 class="panel-title">Debug timers (e.g.: Break stuff! FAST!)
- <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('debugTimers').style.display = 'none';" style="float: right;">
- <span aria-hidden="true">&times;</span>
- </button>
- </h1>
- </div>
- <div id="timerTableTop" class="panel-body">
- <p>These are internal timers for the NMS frontend. They are
- provided mainly to debug the frontend. Setting AJAX-triggering
- counters to ridiculous numbers is not advised (mainly because
- it causes server load).</p>
- </div>
- <table id="timerTable"> </table>
- </div>
- <div id="layerVisibility" class="panel panel-default" style="display: none; position: absolute; z-index: 100;">
- <div class="panel-heading">
- <h1 class="panel-title">Set layer visibility
- <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('layerVisibility').style.display = 'none';" style="float: right;">
- <span aria-hidden="true">&times;</span>
- </button>
- </h1>
- </div>
- <div class="panel-body">
- <table id="visibilityTable" class="table">
- <tr>
- <td>Background</td>
- <td>
- <button onclick='hideLayer("bgCanvas");'>Hide</button>
- <button onclick='showLayer("bgCanvas");'>Show</button>
- </td>
- </tr>
- <tr>
- <td>Linknets</td>
- <td>
- <button onclick='hideLayer("linkCanvas");'>Hide</button>
- <button onclick='showLayer("linkCanvas");'>Show</button>
- </td>
- </tr>
- <tr>
- <td>Blur</td>
- <td>
- <button onclick='hideLayer("blurCanvas");'>Hide</button>
- <button onclick='showLayer("blurCanvas");'>Show</button>
- </td>
- </tr>
- <tr>
- <td>Switches</td>
- <td>
- <button onclick='hideLayer("switchCanvas");'>Hide</button>
- <button onclick='showLayer("switchCanvas");'>Show</button>
- </td>
- </tr>
- <tr>
- <td>Text</td>
- <td>
- <button onclick='hideLayer("textCanvas");'>Hide</button>
- <button onclick='showLayer("textCanvas");'>Show</button>
- </td>
- </tr>
- <tr>
- <td>TextInfo</td>
- <td>
- <button onclick='hideLayer("textInfoCanvas");'>Hide</button>
- <button onclick='showLayer("textInfoCanvas");'>Show</button>
- </td>
- </tr>
- <tr>
- <td>Timestamp</td>
- <td>
- <button onclick='hideLayer("topCanvas");'>Hide</button>
- <button onclick='showLayer("topCanvas");'>Show</button>
- </td>
- </tr>
- </table>
- </div>
- </div>
-
- <canvas id="bgCanvas" width="1920" height="1032" style="position: absolute; z-index: 1;"> </canvas>
- <canvas id="linkCanvas" width="1920" height="1032" style="position: absolute; z-index: 10;"> </canvas>
- <canvas id="blurCanvas" width="1920" height="1032" style="position: absolute; z-index: 20;"> </canvas>
- <canvas id="switchCanvas" width="1920" height="1032" style="position: absolute; z-index: 30;"> </canvas>
- <canvas id="textCanvas" width="1920" height="1032" style="position: absolute; z-index: 40;"> </canvas>
- <canvas id="textInfoCanvas" width="1920" height="1032" style="position: absolute; z-index: 45;"> </canvas>
- <canvas id="topCanvas" width="1920" height="1032" style="position: absolute; z-index: 50;"> </canvas>
- <canvas id="inputCanvas" width="1920" height="1032" style="position: absolute; z-index: 60; cursor: pointer;" onclick="canvasClick(event)">
- </canvas>
- <canvas id="hiddenCanvas" width="1000" height="10" style="display: none; position: absolute; z-index: 1000 "></canvas>
-
- <div style="display:none;"><img id="source" src="img/tg15-salkart-clean-big.png" ></div>
- </div>
- </div><!--/.fluid-container-->
- <script src="js/jquery.min.js" type="text/javascript"></script>
- <script src="js/bootstrap.min.js" type="text/javascript"></script>
- <script type="text/javascript" src="js/nms.js"></script>
- <script type="text/javascript" src="js/nms-color-util.js"></script>
- <script type="text/javascript" src="js/nms-map-handlers.js"></script>
- <script type="text/javascript">
-initNMS();
- </script>
- </body>
-</html>
diff --git a/web/nms.gathering.org/change-switch-pos.pl b/web/nms.gathering.org/old/change-switch-pos.pl
index 70d12f4..70d12f4 100755
--- a/web/nms.gathering.org/change-switch-pos.pl
+++ b/web/nms.gathering.org/old/change-switch-pos.pl
diff --git a/web/nms.gathering.org/dhcp-json.pl b/web/nms.gathering.org/old/dhcp-json.pl
index 210c434..210c434 100755
--- a/web/nms.gathering.org/dhcp-json.pl
+++ b/web/nms.gathering.org/old/dhcp-json.pl
diff --git a/web/nms.gathering.org/dhcpkart.pl b/web/nms.gathering.org/old/dhcpkart.pl
index ace4a4e..ace4a4e 100755
--- a/web/nms.gathering.org/dhcpkart.pl
+++ b/web/nms.gathering.org/old/dhcpkart.pl
diff --git a/web/nms.gathering.org/display-rack.html b/web/nms.gathering.org/old/display-rack.html
index 694bf11..694bf11 100755
--- a/web/nms.gathering.org/display-rack.html
+++ b/web/nms.gathering.org/old/display-rack.html
diff --git a/web/nms.gathering.org/display.html b/web/nms.gathering.org/old/display.html
index bb7c174..bb7c174 100755
--- a/web/nms.gathering.org/display.html
+++ b/web/nms.gathering.org/old/display.html
diff --git a/web/nms.gathering.org/edit.html b/web/nms.gathering.org/old/edit.html
index dff76c7..dff76c7 100644
--- a/web/nms.gathering.org/edit.html
+++ b/web/nms.gathering.org/old/edit.html
diff --git a/web/nms.gathering.org/old/index.html b/web/nms.gathering.org/old/index.html
new file mode 100644
index 0000000..8043c7d
--- /dev/null
+++ b/web/nms.gathering.org/old/index.html
@@ -0,0 +1,115 @@
+<html>
+ <head>
+ <title>snmp</title>
+ </head>
+ <body>
+ <p>tg light &amp; magic. :-)</p>
+
+ <ul>
+ <li><a href="nms2/">NMS 2 NG (Ping, Temp, Uplink, Trafikk, Info)</a>
+ <br /><i>Trykk på svitsjene (Work in progress)</i>
+ </li>
+ <br />
+ <li><a href="dhcpkart.pl">DHCP-kart</a>
+ <br /><i>Oversikt over DHCP-lease etter switch</i>
+ </li>
+
+ <br />
+
+ <li><a href="nettkart-text.pl">Nettkart</a>
+ <br /><i>Trafikkoversikt</i>
+ </li>
+
+ <br />
+<!--
+
+ <li><a href="nettkart-telnet.pl">Nettkart</a>
+ <br /><i>Trafikkoversikt /m telnetlink</i>
+ </li>
+
+ <br />
+-->
+<!-- Kun moderat nyttig når vi har disablet alle webinterfacene...
+ <li><a href="nettkart-web.pl">Nettkart</a>
+ <br /><i>Trafikkoversikt /m weblink</i>
+ </li>
+
+ <br />
+-->
+ <li><a href="portkart.pl">Nettkart, per port</a>
+ <br /><i>Trafikkoversikt per port</i>
+ </li>
+
+ <br />
+
+ <li><a href="uplinkkart.pl">Uplink-kart</a>
+ <br /><i>Hvilke switcher har ikke to uplinker</i>
+ </li>
+
+ <br />
+<!--
+ <li><a href="uplinktrafikkart.pl">Uplink-trafikkart</a>
+ <br /><i>Hvem burde hatt mer enn to uplinker</i>
+ </li>
+
+ <br />
+-->
+ <li><a href="stromkart.pl">Strømkart</a>
+ <br /><i>Hvilke switcher har færre enn fem tilkoblede klienter</i>
+ </li>
+
+ <br />
+<!--
+ <li><a href="apkart.pl">Aksesspunkt-kart</a>
+ <br /><i>Hvilke aksesspunkter er plugget i</i>
+ </li>
+
+ <br />
+-->
+ <!--<li><a href="overlay.pl">Overlay-nettkart</a>
+ <br /><i>Teh magic 3D!</i>
+ </li>
+
+ <br /> -->
+
+ <li><a href="smanagement.pl">Kommander switcher</a>
+ <br /><i>Konfigurer switchene</i>
+ </li>
+
+ <br />
+
+ <li><a href="sshow.pl">Utførte og køede kommandoer</a>
+ <br /><i>Se og håndter kommandoer som er utført og fortsatt i køen</i>
+ </li>
+
+ <br />
+
+ <li><a href="stempmap.pl">Temperaturkart</a>
+ <br /><i>Temperaturkart for switchene</i>
+ </li>
+<!--
+ <br />
+ <li><a href="mbd-status.pl">MBD-status</a>
+ <br /><i>Hva spiller folk mest?</i>
+ </li>
+-->
+ <br />
+
+ <li><a href="ping.html">Ping-kart</a>
+ <br /><i>Pinger alle bokser hvert sekund</i>
+ </li>
+
+ <br />
+
+ <li><a href="ping2.html">Realtime trafikkart</a>
+ <br /><i>Som nettkartet, men oppdateres hele tiden</i>
+ </li>
+
+ <br />
+
+ <li><a href="edit.html">Rediger kartet</a>
+ <br /><i>Dra rundt på switcher. Wheeee!</i>
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/web/nms.gathering.org/led.pl b/web/nms.gathering.org/old/led.pl
index a05041d..a05041d 100755
--- a/web/nms.gathering.org/led.pl
+++ b/web/nms.gathering.org/old/led.pl
diff --git a/web/nms.gathering.org/mygraph.pl b/web/nms.gathering.org/old/mygraph.pl
index 64104aa..64104aa 100755
--- a/web/nms.gathering.org/mygraph.pl
+++ b/web/nms.gathering.org/old/mygraph.pl
diff --git a/web/nms.gathering.org/nettkart-continuous.html b/web/nms.gathering.org/old/nettkart-continuous.html
index e51eea0..e51eea0 100644
--- a/web/nms.gathering.org/nettkart-continuous.html
+++ b/web/nms.gathering.org/old/nettkart-continuous.html
diff --git a/web/nms.gathering.org/nettkart-json.pl b/web/nms.gathering.org/old/nettkart-json.pl
index e95920e..e95920e 100755
--- a/web/nms.gathering.org/nettkart-json.pl
+++ b/web/nms.gathering.org/old/nettkart-json.pl
diff --git a/web/nms.gathering.org/nettkart-text.pl b/web/nms.gathering.org/old/nettkart-text.pl
index 673ade5..673ade5 100755
--- a/web/nms.gathering.org/nettkart-text.pl
+++ b/web/nms.gathering.org/old/nettkart-text.pl
diff --git a/web/nms.gathering.org/nettkart-web.pl b/web/nms.gathering.org/old/nettkart-web.pl
index ce76c35..ce76c35 100755
--- a/web/nms.gathering.org/nettkart-web.pl
+++ b/web/nms.gathering.org/old/nettkart-web.pl
diff --git a/web/nms.gathering.org/nettkart.pl b/web/nms.gathering.org/old/nettkart.pl
index bf3bf74..bf3bf74 100755
--- a/web/nms.gathering.org/nettkart.pl
+++ b/web/nms.gathering.org/old/nettkart.pl
diff --git a/web/nms.gathering.org/observium.html b/web/nms.gathering.org/old/observium.html
index a4acd16..a4acd16 100755
--- a/web/nms.gathering.org/observium.html
+++ b/web/nms.gathering.org/old/observium.html
diff --git a/web/nms.gathering.org/ping-json.pl b/web/nms.gathering.org/old/ping-json.pl
index e661e8f..e661e8f 100755
--- a/web/nms.gathering.org/ping-json.pl
+++ b/web/nms.gathering.org/old/ping-json.pl
diff --git a/web/nms.gathering.org/ping.css b/web/nms.gathering.org/old/ping.css
index 1045a4a..1045a4a 100644
--- a/web/nms.gathering.org/ping.css
+++ b/web/nms.gathering.org/old/ping.css
diff --git a/web/nms.gathering.org/ping.html b/web/nms.gathering.org/old/ping.html
index 1c3c3e0..1c3c3e0 100644
--- a/web/nms.gathering.org/ping.html
+++ b/web/nms.gathering.org/old/ping.html
diff --git a/web/nms.gathering.org/ping.js b/web/nms.gathering.org/old/ping.js
index 7c5de57..7c5de57 100644
--- a/web/nms.gathering.org/ping.js
+++ b/web/nms.gathering.org/old/ping.js
diff --git a/web/nms.gathering.org/ping2.html b/web/nms.gathering.org/old/ping2.html
index 05ed129..05ed129 100644
--- a/web/nms.gathering.org/ping2.html
+++ b/web/nms.gathering.org/old/ping2.html
diff --git a/web/nms.gathering.org/portkart.pl b/web/nms.gathering.org/old/portkart.pl
index ce7dcdd..ce7dcdd 100755
--- a/web/nms.gathering.org/portkart.pl
+++ b/web/nms.gathering.org/old/portkart.pl
diff --git a/web/nms.gathering.org/showswitch.pl b/web/nms.gathering.org/old/showswitch.pl
index e585841..e585841 100755
--- a/web/nms.gathering.org/showswitch.pl
+++ b/web/nms.gathering.org/old/showswitch.pl
diff --git a/web/nms.gathering.org/slide.html b/web/nms.gathering.org/old/slide.html
index 046020d..046020d 100644
--- a/web/nms.gathering.org/slide.html
+++ b/web/nms.gathering.org/old/slide.html
diff --git a/web/nms.gathering.org/smanagement.pl b/web/nms.gathering.org/old/smanagement.pl
index 485e2b0..485e2b0 100755
--- a/web/nms.gathering.org/smanagement.pl
+++ b/web/nms.gathering.org/old/smanagement.pl
diff --git a/web/nms.gathering.org/sshow.pl b/web/nms.gathering.org/old/sshow.pl
index 64663a2..64663a2 100755
--- a/web/nms.gathering.org/sshow.pl
+++ b/web/nms.gathering.org/old/sshow.pl
diff --git a/web/nms.gathering.org/stempmap.pl b/web/nms.gathering.org/old/stempmap.pl
index ccd44fd..ccd44fd 100755
--- a/web/nms.gathering.org/stempmap.pl
+++ b/web/nms.gathering.org/old/stempmap.pl
diff --git a/web/nms.gathering.org/stromkart.pl b/web/nms.gathering.org/old/stromkart.pl
index c0e4a3d..c0e4a3d 100755
--- a/web/nms.gathering.org/stromkart.pl
+++ b/web/nms.gathering.org/old/stromkart.pl
diff --git a/web/nms.gathering.org/switches-json.pl b/web/nms.gathering.org/old/switches-json.pl
index 74f4e5f..74f4e5f 100755
--- a/web/nms.gathering.org/switches-json.pl
+++ b/web/nms.gathering.org/old/switches-json.pl
diff --git a/web/nms.gathering.org/uplinkkart-text.pl b/web/nms.gathering.org/old/uplinkkart-text.pl
index c4b31a9..c4b31a9 100755
--- a/web/nms.gathering.org/uplinkkart-text.pl
+++ b/web/nms.gathering.org/old/uplinkkart-text.pl
diff --git a/web/nms.gathering.org/uplinkkart.pl b/web/nms.gathering.org/old/uplinkkart.pl
index 052fe9c..052fe9c 100755
--- a/web/nms.gathering.org/uplinkkart.pl
+++ b/web/nms.gathering.org/old/uplinkkart.pl
diff --git a/web/nms.gathering.org/uplinktrafikkart.pl b/web/nms.gathering.org/old/uplinktrafikkart.pl
index 97000cf..97000cf 100755
--- a/web/nms.gathering.org/uplinktrafikkart.pl
+++ b/web/nms.gathering.org/old/uplinktrafikkart.pl
diff --git a/web/nms.gathering.org/ping-json2.pl b/web/nms.gathering.org/ping.pl
index 2ffe650..2ffe650 100755
--- a/web/nms.gathering.org/ping-json2.pl
+++ b/web/nms.gathering.org/ping.pl