diff options
Diffstat (limited to 'web')
-rwxr-xr-x | web/api/public/dhcp | 10 | ||||
-rwxr-xr-x | web/api/public/switch-state | 8 | ||||
-rwxr-xr-x | web/api/write/network-update | 57 | ||||
-rwxr-xr-x | web/api/write/switch-update | 2 | ||||
-rw-r--r-- | web/index.html | 5 | ||||
-rw-r--r-- | web/js/nms-info-box.js | 8 | ||||
-rw-r--r-- | web/js/nms-map-handlers.js | 21 | ||||
-rw-r--r-- | web/js/nms.js | 2 |
8 files changed, 36 insertions, 77 deletions
diff --git a/web/api/public/dhcp b/web/api/public/dhcp index 0b0bb49..f153a49 100755 --- a/web/api/public/dhcp +++ b/web/api/public/dhcp @@ -8,16 +8,16 @@ use warnings; use Data::Dumper; nms::web::setwhen('60m'); -my $q = $nms::web::dbh->prepare('select distinct on (sysname) extract(epoch from date_trunc(\'second\',time)) as time,sysname from dhcp join switches on dhcp.switch = switches.switch where ' . $nms::web::when . ' and switches.deleted = false order by sysname,time desc;'); +my $q = $nms::web::dbh->prepare('select distinct on (name) extract(epoch from date_trunc(\'second\',time)) as time,name from dhcp join networks on dhcp.network = networks.network where ' . $nms::web::when . ' order by name,time desc;'); $q->execute(); while ( my $ref = $q->fetchrow_hashref() ) { - my $sysname = $ref->{'sysname'}; - $json{'dhcp'}{$ref->{'sysname'}} = $ref->{'time'}; + my $sysname = $ref->{'sname'}; + $json{'dhcp'}{$ref->{'name'}} = $ref->{'time'}; } -my $q2 = $nms::web::dbh->prepare("select sysname,count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp natural join switches where $nms::web::when and switches.deleted = false group by switches.sysname;"); +my $q2 = $nms::web::dbh->prepare("select name,count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp natural join networks where $nms::web::when group by networks.name;"); $q2->execute(); while (my $ref = $q2->fetchrow_hashref()) { - $nms::web::json{'switches'}{$ref->{sysname}} = $ref; + $nms::web::json{'networks'}{$ref->{name}} = $ref; } $nms::web::cc{'max-age'} = "10"; diff --git a/web/api/public/switch-state b/web/api/public/switch-state index 965e881..19bd771 100755 --- a/web/api/public/switch-state +++ b/web/api/public/switch-state @@ -14,9 +14,9 @@ my ($switch, $port) = split(/\//,$target,2); my $q; if (!defined($switch)) { - $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 . ' and switches.deleted = false group by switch);'); + $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 . ' and switches.deleted = false group by switch) and switches.deleted = false and not switches.tags \?& array[\'switchstateignore\'];'); } else { - $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) and sysname = ' . $nms::web::dbh->quote($switch) . ' and switches.deleted = false;'); + $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) and sysname = ' . $nms::web::dbh->quote($switch) . ' and switches.deleted = false and not switches.tags \?& array[\'switchstateignore\'];'); } $q->execute(); @@ -83,9 +83,9 @@ while ( my $ref = $q->fetchrow_hashref() ) { nms::web::setwhen('15m','10m'); my $q2; if (!defined($switch)) { - $q2 = $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);'); + $q2 = $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 . ' and switches.deleted = false group by switch) and switches.deleted = false and not switches.tags \?& array[\'switchstateignore\'];'); } else { - $q2 = $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) and sysname = ' . $nms::web::dbh->quote($switch) . ';'); + $q2 = $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) and sysname = ' . $nms::web::dbh->quote($switch) . ' and switches.deleted = false and not switches.tags \?& array[\'switchstateignore\'];'); } $q2->execute(); diff --git a/web/api/write/network-update b/web/api/write/network-update index f6684c5..6344c37 100755 --- a/web/api/write/network-update +++ b/web/api/write/network-update @@ -23,51 +23,23 @@ my @dups; my $sth = $nms::web::dbh->prepare("SELECT name FROM networks WHERE name=?"); -my @fields = ('name','last_updated','placement','subnet4','subnet6','gw4','gw6','routing_point','vlan','tags'); - -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; -} +my @fields = ('name','last_updated','subnet4','subnet6','gw4','gw6','routing_point','vlan','tags'); foreach my $tmp2 (@tmp) { my %network = %{$tmp2}; my $affected = 0; my %template = (); map { $template{$_} = 'DEFAULT' } @fields; - if (not defined($network{'sysname'})) { + if (not defined($network{'name'})) { next; } - $sth->execute( $network{'sysname'}); + $sth->execute( $network{'name'}); while ( my @row = $sth->fetchrow_array ) { $affected += 1; } if ($affected == 0) { - my %placement; - if (not defined ($network{'placement'})) { - %placement = guess_placement($network{'sysname'}); - } else { - %placement = %{convertplace($network{'sysname'})}; - } - my ($x1,$x2,$y1,$y2); - $x1 = $placement{'x1'}; - $y1 = $placement{'y1'}; - $x2 = $placement{'xx'}; - $y2 = $placement{'yy'}; - $network{'placement'} = "(($x1,$y1),($x2,$y2))"; map { if (defined ($template{$_})) { @@ -76,24 +48,9 @@ foreach my $tmp2 (@tmp) { } keys %network; - $nms::web::dbh->do("INSERT INTO NETWORKS (name, last_updated, placement, subnet4, subnet6, routing_point, gw4, gw6, vlan, tags) VALUES ($template{'sysname'}, $template{'last_updated'}, $template{'placement'}, $template{'subnet4'}, $template{'subnet6'}, $template{'routing_point'}, $template{'gw4'}, $template{'gw6'}, $template{'vlan'}, $template{'tags'});"); - push @added, $network{'sysname'}; + $nms::web::dbh->do("INSERT INTO NETWORKS (name, last_updated, subnet4, subnet6, routing_point, gw4, gw6, vlan, tags) VALUES ($template{'name'}, $template{'last_updated'}, $template{'subnet4'}, $template{'subnet6'}, $template{'routing_point'}, $template{'gw4'}, $template{'gw6'}, $template{'vlan'}, $template{'tags'});"); + push @added, $network{'name'}; } else { - if (defined($network{'placement'})) { - my %placement; - if ($network{'placement'} eq "reset") { - %placement = guess_placement($network{'sysname'}); - } else { - %placement = %{convertplace($network{'placement'})}; - } - my ($x1,$x2,$y1,$y2); - $x1 = $placement{'x1'}; - $y1 = $placement{'y1'}; - $x2 = $placement{'xx'}; - $y2 = $placement{'yy'}; - $network{'placement'} = "(($x1,$y1),($x2,$y2))"; - push @dups, "not really, but: " . $network{'placement'}; - } if (defined($network{'tags'})) { $network{'tags'} =~ s/'/"/g; } @@ -103,8 +60,8 @@ foreach my $tmp2 (@tmp) { push @set, "$_=" . $dbh->quote($network{$_}); } } keys %network; - $nms::web::dbh->do("UPDATE NETWORKS SET " . join(", ", @set) . "WHERE name=" . $dbh->quote($network{'sysname'}) . ";"); - push @dups, $network{'sysname'}; + $nms::web::dbh->do("UPDATE networks SET " . join(", ", @set) . "WHERE name=" . $dbh->quote($network{'name'}) . ";"); + push @dups, $network{'name'}; } } $json{'networks_addded'} = \@added; diff --git a/web/api/write/switch-update b/web/api/write/switch-update index b71548b..bcf69e1 100755 --- a/web/api/write/switch-update +++ b/web/api/write/switch-update @@ -23,7 +23,7 @@ my @dups; my $sth = $nms::web::dbh->prepare("SELECT sysname FROM switches WHERE sysname=?"); -my @fields = ( 'community', 'tags', 'distro_name', 'distro_phy_port', 'mgmt_v4_addr', 'mgmt_v4_gw', 'mgmt_v4_netsize', 'mgmt_v6_addr', 'mgmt_v6_gw', 'mgmt_v6_netsize', 'mgmt_vlan', 'placement', 'poll_frequency', 'subnet4', 'subnet6', 'sysname', 'traffic_vlan', 'deleted'); +my @fields = ( 'community', 'tags', 'distro_name', 'distro_phy_port', 'mgmt_v4_addr', 'mgmt_v6_addr', 'mgmt_vlan', 'placement', 'poll_frequency', 'sysname', 'traffic_vlan', 'deleted'); sub convertplace { diff --git a/web/index.html b/web/index.html index 2fee54f..7b07f09 100644 --- a/web/index.html +++ b/web/index.html @@ -143,6 +143,7 @@ <div class="span3 col-lg-6"> <textarea id="template-input" class="form-control" cols="80" rows="25"></textarea> <div class="form-inline"> + https://gondul.tg.lol/api/templates/ <div class="form-group"> <select onchange="nmsTemplate.fromFile(this.value)" class="form-control" id="nmsTemplate-select"> <option value="">Select template</option> @@ -150,7 +151,7 @@ </div> <div class="form-group"> <label for="template-query-params">Query parameters</label> - <input type="text" class="form-control" id="template-query-params" value="?switch=e13-1&foo=bar" /> + <input type="text" class="form-control" id="template-query-params" value="?a=r1.ring:ge-1/0/2.0:mgmt+irb.666" /> </div> <div class="form-group"> <button onclick="nmsTemplate.test()" class="btn btn-primary">Test</button> @@ -158,7 +159,7 @@ </div> </div> <div class="span3 col-lg-6"> - <textarea id="template-output" class="form-control" disabled cols="80" rows="25"></textarea> + <textarea id="template-output" class="form-control" readonly cols="80" rows="25"></textarea> </div> </div> </div> diff --git a/web/js/nms-info-box.js b/web/js/nms-info-box.js index 8f34031..4e8b18d 100644 --- a/web/js/nms-info-box.js +++ b/web/js/nms-info-box.js @@ -686,7 +686,7 @@ var switchPortsPanel = function () { } } catch(e) {}; - groupObj.innerHTML = '<span class="panel-heading" style="display:block;"><a class="collapse-controller" role="button" data-toggle="collapse" href="#'+cleanObj+'-group">' + snmpJson[obj].ifDescr + ' </a><small>' + snmpJson[obj].ifAlias + '</small><span class="pull-right">' + traffic + '<i class="btn-xs ' + button + '"><span class="glyphicon ' + glyphicon + '" title="' + title + '" aria-hidden="true"></span></i></span></span>'; + groupObj.innerHTML = '<span class="panel-heading" style="display:block;"><a class="collapse-controller" role="button" data-toggle="collapse" href="#'+cleanObj+'-group">' + snmpJson[obj].ifDescr + ' </a><small>' + snmpJson[obj].ifName + '</small><span class="pull-right">' + traffic + '<i class="btn-xs ' + button + '"><span class="glyphicon ' + glyphicon + '" title="' + title + '" aria-hidden="true"></span></i></span></span>'; var groupObjCollapse = document.createElement("div"); groupObjCollapse.id = cleanObj + "-group"; @@ -1389,7 +1389,7 @@ var networkEditPanel = function() { }; this.save = function () { - var myData = nmsInfoBox._editStringify(this.sw); + var myData = nmsInfoBox._editStringify(this.sw,"name"); $.ajax({ type: "POST", url: "/api/write/network-update", @@ -1505,7 +1505,7 @@ nmsInfoBox._editChange = function(sw, v) { out.value = myData; }; -nmsInfoBox._editStringify = function(sw) { - nmsInfoBox._editValues['sysname'] = sw; +nmsInfoBox._editStringify = function(sw, sysname='sysname') { + nmsInfoBox._editValues[sysname] = sw; return JSON.stringify([nmsInfoBox._editValues]); }; diff --git a/web/js/nms-map-handlers.js b/web/js/nms-map-handlers.js index f9fe52b..7200c60 100644 --- a/web/js/nms-map-handlers.js +++ b/web/js/nms-map-handlers.js @@ -516,13 +516,13 @@ function getDhcpColor(stop) function dhcpUpdater() { - if (!testTree(nmsData,['dhcp','dhcp']) || !testTree(nmsData,['switches','switches'])) { + if (!testTree(nmsData,['dhcp','dhcp']) || !testTree(nmsData,['switches','switches']) || !testTree(nmsData,['smanagement','switches'])) { return } var now = nmsData.dhcp.time; for (var sw in nmsData.switches.switches) { var c = nmsColor.blue; - var s = nmsData.dhcp.dhcp[sw]; + var s = nmsData.dhcp.dhcp[nmsData.smanagement.switches[sw].traffic_vlan]; if (s == undefined) { nmsMap.setSwitchColor(sw,c); continue; @@ -536,9 +536,9 @@ function dhcpInfo(sw) { var ret = new handlerInfo("dhcp","DHCP state"); ret.why = "No DHCP data"; ret.data[0].description = "DHCP age"; - if (testTree(nmsData,['dhcp','dhcp',sw])) { + if (testTree(nmsData,['dhcp','dhcp',nmsData.smanagement.switches[sw].traffic_vlan])) { var now = nmsData.dhcp.time; - var then = nmsData.dhcp.dhcp[sw]; + var then = nmsData.dhcp.dhcp[nmsData.smanagement.switches[sw].traffic_vlan]; var diff = now - then; var divider = 6; if(tagged(sw,'slowdhcp')) { @@ -551,11 +551,11 @@ function dhcpInfo(sw) { } else { ret.data[0].value = "No DHCP data"; if (testTree(nmsData,['smanagement','switches',sw])) { - if (nmsData.smanagement.switches[sw].subnet4 == undefined || - nmsData.smanagement.switches[sw].subnet4 == "") { - ret.data[0].value = "No associated subnets"; + if (nmsData.smanagement.switches[sw].traffic_vlan == undefined || + nmsData.smanagement.switches[sw].traffic_vlan == "") { + ret.data[0].value = "No associated networks"; ret.score = 0; - ret.why = "No subnet registered"; + ret.why = "No network associated"; } else { ret.score = 350; ret.why = "No DHCP data"; @@ -565,9 +565,10 @@ function dhcpInfo(sw) { ret.why = "No management data for DHCP"; } } - if (testTree(nmsData,['dhcp','switches',sw,'clients'])) { + if (testTree(nmsData,['dhcp','networks',nmsData.smanagement.switches[sw].traffic_vlan,'clients'])) { ret.data[1] = {}; - ret.data[1].value = nmsData.dhcp.switches[sw].clients; + ret.data[1].value = nmsData.dhcp.networks[nmsData.smanagement.switches[sw].traffic_vlan].clients; + console.log() ret.data[1].description = "DHCP clients"; } if (testTree(nmsData,['switches','switches',sw, 'tags'])) { diff --git a/web/js/nms.js b/web/js/nms.js index 0caac24..5e2dc22 100644 --- a/web/js/nms.js +++ b/web/js/nms.js @@ -134,7 +134,7 @@ function nmsTimer(handler, interval, name, description) { function byteCount(bytes,precision) { if (precision ==undefined) precision = 1; - var units = ['', 'K', 'M', 'G', 'T', 'P']; + var units = ['', 'K', 'M', 'G', 'T', 'P', 'E','Z']; var i = 0; while (bytes > 1024) { bytes = bytes / 1024; |