aboutsummaryrefslogtreecommitdiffstats
path: root/examples/historical/tools
diff options
context:
space:
mode:
authorKristian Lyngstol <kly@kly.no>2016-02-26 13:05:31 +0000
committerKristian Lyngstol <kly@kly.no>2016-02-26 13:05:31 +0000
commit885156ee6a26ed047bba3f90541eaab92b65d758 (patch)
treee8a70cd6bca09641efac0c64c4c20d27efab2bda /examples/historical/tools
parentc6997a4810e09619e9018c91d163f3f38b17212c (diff)
parent3dae75bde90aecc0cef2e3496f3565dcb3eeec0c (diff)
Merge branch 'master' of github.com:tech-server/tgmanage
Diffstat (limited to 'examples/historical/tools')
-rwxr-xr-xexamples/historical/tools/fetch-portlist.sh42
-rwxr-xr-xexamples/historical/tools/make-dummy-placement.sh12
-rwxr-xr-xexamples/historical/tools/make-switch-placements.pl86
-rwxr-xr-xexamples/historical/tools/ping-graph.pl62
4 files changed, 202 insertions, 0 deletions
diff --git a/examples/historical/tools/fetch-portlist.sh b/examples/historical/tools/fetch-portlist.sh
new file mode 100755
index 0000000..978b590
--- /dev/null
+++ b/examples/historical/tools/fetch-portlist.sh
@@ -0,0 +1,42 @@
+print_range() {
+ FIRST=$1
+ LAST=$2
+ if [ "$1" = "$2" ]; then
+ echo $FIRST
+ else
+ echo $FIRST-$LAST
+ fi
+}
+
+walk_ports() {
+ IP=$1
+ COMMUNITY=$2
+
+ FIRST_PORT=
+ LAST_PORT=
+
+ for PORT in $( snmpwalk -Os -m IF-MIB -v 2c -c $COMMUNITY $IP ifDescr 2>/dev/null | grep -E ' ge|et|xe' | cut -d. -f2 | cut -d" " -f1 ); do
+ if ! snmpget -m IF-MIB -v 2c -c $COMMUNITY $IP ifHCInOctets.$PORT 2>/dev/null | grep -q 'No Such Instance'; then
+ if [ "$LAST_PORT" ] && [ `expr $LAST_PORT + 1` = $PORT ]; then
+ LAST_PORT=$PORT
+ else
+ if [ "$LAST_PORT" ]; then
+ print_range $FIRST_PORT $LAST_PORT
+ fi
+ FIRST_PORT=$PORT
+ LAST_PORT=$PORT
+ fi
+ fi
+ done
+
+ print_range $FIRST_PORT $LAST_PORT
+}
+
+COMMUNITY=$1
+IP=$2
+SYSNAME=$3
+PORTS=$( walk_ports $IP $COMMUNITY | tr "\n" "," | sed 's/,$//' )
+
+echo "insert into switchtypes values ('$SYSNAME','$PORTS',true);"
+echo "insert into switches values (default,'$IP','$SYSNAME','$SYSNAME',null,default, default, '1 minute', '$COMMUNITY');"
+
diff --git a/examples/historical/tools/make-dummy-placement.sh b/examples/historical/tools/make-dummy-placement.sh
new file mode 100755
index 0000000..192e3d3
--- /dev/null
+++ b/examples/historical/tools/make-dummy-placement.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# Generate a random placement-entry insert for a named switch (convenient
+# if you manually add a switch with no placement)
+
+for a in $* ; do
+X=$(( $RANDOM % 500 ))
+Y=$(( $RANDOM % 500 ))
+X1=$(( $X + 20 ))
+Y1=$(( $Y + 130 ))
+echo "insert into placements select switch, box '(($X,$Y),($X1,$Y1))' from switches where sysname = '$a';"
+done
diff --git a/examples/historical/tools/make-switch-placements.pl b/examples/historical/tools/make-switch-placements.pl
new file mode 100755
index 0000000..efacfcc
--- /dev/null
+++ b/examples/historical/tools/make-switch-placements.pl
@@ -0,0 +1,86 @@
+#! /usr/bin/perl
+use strict;
+use warnings;
+
+my $switchtype = "ex2200";
+
+print "begin;\n";
+print "delete from placements where switch in (select switch from switches where switchtype = '$switchtype' and (sysname like 'e%') or sysname like '%creativia%');\n";
+
+my %ip;
+my $i = 1;
+while (<STDIN>) {
+ chomp;
+ my @info = split(/ /);
+
+ if (scalar @info < 5) {
+ die "Unknown line: $_";
+ }
+ my ($x, $y, $xx, $yy);
+
+ my $name = $info[0];
+ if ($name =~ /^e\d+-\d+$/) {
+ $name =~ /e(\d+)-(\d+)/;
+ my ($e, $s) = ($1, $2);
+
+ $x = int(232 + (($e-1)/2) * 31.1);
+ $y = undef;
+
+ $x += 14 if ($e >= 17);
+ $x += 14 if ($e >= 29);
+ $x += 14 if ($e >= 45);
+ $x += 14 if ($e >= 63);
+
+ if ($s > 2) {
+ $y = 405 - 120 * ($s-2);
+ } else {
+ $y = 689 - 120 * ($s);
+ }
+
+ $xx = $x + 16;
+ $yy = $y + 120;
+
+ # Justeringer
+ $y += 45 if $name eq "e1-4";
+ $y += 20 if $name eq "e3-4";
+ $y += 15 if $name eq "e5-4";
+ $yy -= 25 if $name eq "e11-1";
+
+ #$yy -= 14 if $name eq "e77-1";
+ #$yy -= 28 if $name eq "e79-1";
+ #$yy -= 15 if $name eq "e81-1";
+ #$yy -= 56 if $name eq "e83-1";
+ } elsif ($name =~ /^sw(\d+)-creativia$/) {
+ my ($s) = ($1);
+ $x = 1535;
+ $y = int(130 + 32.2 * $s);
+ $yy = $y + 20;
+ if ($s == 1) {
+ $xx = $x + 70;
+ } elsif ($s == 2) {
+ $xx = $x + 90;
+ } elsif ($s == 3) {
+ $xx = $x + 102;
+ } else {
+ $xx = $x + 142;
+ }
+
+ } elsif ($name =~ /^crew(\d+)-(\d+)$/) {
+ my ($s, $n) = ($1, $2);
+ $x = 1023 + 45 * $n;
+ $y = int(329 + 20.5 * $s);
+ $xx = $x + 45;
+ $yy = $y + 14;
+
+ if ($s == 1 && $n == 1) {
+ $xx += 25;
+ }
+ } else {
+ next;
+ }
+
+ print "insert into placements select switch, box '(($x,$y),($xx,$yy))' from switches where sysname = '$name';\n";
+ $i++;
+}
+
+print "end;\n";
diff --git a/examples/historical/tools/ping-graph.pl b/examples/historical/tools/ping-graph.pl
new file mode 100755
index 0000000..2cd6996
--- /dev/null
+++ b/examples/historical/tools/ping-graph.pl
@@ -0,0 +1,62 @@
+#! /usr/bin/perl
+
+# Makes latency-against-time graphs, one per switch.
+
+use warnings;
+use strict;
+use DBI;
+use lib '../include';
+use nms;
+
+BEGIN {
+ require "../include/config.pm";
+ eval {
+ require "../include/config.local.pm";
+ };
+}
+
+my $dbh = db_connect();
+my $switches = $dbh->selectall_hashref('SELECT sysname,switch FROM switches ORDER BY sysname', 'sysname');
+if (1) {
+ my %switchfds = ();
+ while (my ($sysname, $switch) = each %$switches) {
+ print "$sysname -> $switch->{switch}\n";
+ open my $fh, ">", "$sysname.txt"
+ or die "$sysname.txt: $!";
+ $switchfds{$switch->{'switch'}} = $fh;
+ }
+
+ my $q = $dbh->prepare('SELECT switch,EXTRACT(EPOCH FROM updated),latency_ms FROM ping');
+ $q->execute;
+
+ my $i = 0;
+ while (my $ref = $q->fetchrow_arrayref) {
+ next if (!defined($ref->[2]));
+ my $fh = $switchfds{$ref->[0]};
+ next if (!defined($fh));
+ print $fh $ref->[1], " ", $ref->[2], "\n";
+ if (++$i % 1000000 == 0) {
+ printf "%dM records...\n", int($i / 1000000);
+ }
+ }
+
+ while (my ($sysname, $switch) = each %$switches) {
+ close $switchfds{$switch->{'switch'}};
+ }
+}
+
+while (my ($sysname, $switch) = each %$switches) {
+ print "$sysname -> $switch->{switch}\n";
+ open my $gnuplot, "|-", "gnuplot"
+ or die "gnuplot: $!";
+ print $gnuplot <<"EOF";
+set timefmt "%s"
+set xdata time
+set format x "%d/%m %H:%M"
+set term png size 1280,720
+set output '$sysname.png'
+set yrange [0:200]
+plot "$sysname.txt" using (int(\$1)):2 ps 0.1
+EOF
+ close $gnuplot;
+}