diff options
Diffstat (limited to 'examples/historical/web/nms.gathering.org/sshow.pl')
-rwxr-xr-x | examples/historical/web/nms.gathering.org/sshow.pl | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/examples/historical/web/nms.gathering.org/sshow.pl b/examples/historical/web/nms.gathering.org/sshow.pl new file mode 100755 index 0000000..64663a2 --- /dev/null +++ b/examples/historical/web/nms.gathering.org/sshow.pl @@ -0,0 +1,258 @@ +#!/usr/bin/perl +use lib '../../include'; +use nms; + +use warnings; +use strict; +use Switch; +use CGI; +use DBI; +use HTML::Entities; + +# Grab from .htaccess-authentication +my $user = $ENV{'REMOTE_USER'}; + +my $dbh = nms::db_connect(); +$dbh->{AutoCommit} = 0; + +my $sgetdone = $dbh->prepare( +"SELECT * +FROM squeue +WHERE processed = 't' +ORDER BY updated DESC, sysname +LIMIT ?::text::int") + or die "Could not prepare sgetdone"; + +my $sgetdonegid = $dbh->prepare( +"SELECT * +FROM squeue +WHERE processed = 't' AND gid = ?::text::int +ORDER BY updated DESC, sysname") + or die "Could not prepare sgetdonegid"; + +my $slistdonegid = $dbh->prepare( +"SELECT DISTINCT gid, cmd, author, added +FROM squeue +WHERE processed = 't' +ORDER BY gid DESC +LIMIT ?::text::int") + or die "Could not prepare slistdonegid"; + +my $slistprocgid = $dbh->prepare( +"SELECT DISTINCT gid, cmd, author, added +FROM squeue +WHERE processed = 'f' +ORDER BY gid") + or die "Could not prepare slistprocgid"; + +my $sgetgid = $dbh->prepare( +"SELECT * +FROM squeue +WHERE gid = ?") + or die "Could not prepare sgetgid"; + +my $sgetprocessing = $dbh->prepare( +"SELECT * +FROM squeue +WHERE processed = 'f' +ORDER BY updated DESC, gid, sysname") + or die "Could not prepare sgetprocessing"; + +my $sgetnoconnect = $dbh->prepare( +"SELECT * +FROM squeue +WHERE result = 'Could not connect to switch, delaying...'") + or die "Could not prepare sgetnoconnect"; + +my $sdisablegid = $dbh->prepare(" +UPDATE squeue SET disabled = 't' +WHERE gid = ?::text::int") + or die "Could not prepare sdisablegid"; +my $senablegid = $dbh->prepare(" +UPDATE squeue SET disabled = 'f' +WHERE gid = ?::text::int") + or die "Could not prepare sdisablegid"; + + +my $cgi = new CGI; + +print $cgi->header(-type=>'text/html; charset=utf-8'); + +print << "EOF"; +<html> + <head> + <title>Switch managment</title> + </head> + <body> + <p>Du er logget inn som: $user</p> + <form method="POST" action="sshow.pl"> + <p> + Vis <input type="text" name="count" size="4" value="10" /> siste<br /> + Vis: <select name="action" /> + <option value="listgid">Grupper</option> + <option value="done">Ferdige</option> + <option value="processing">I kø</option> + </select> + <input type="submit" value="Vis" /><br /> + </p> + </form> + <br /> +EOF + +my $limit = $cgi->param('count'); +if (!defined($limit)) { + $limit = 10; +} +my $action = $cgi->param('action'); +if (!defined($action)) { + $action = 'listgid'; +} + +if (defined($cgi->param('agid'))) { + my $gid = $cgi->param('gid'); + if (!defined($gid)) { + print "<font color=\"red\">Du har ikke valgt en gid å slette.</font>\n"; + print "<p>gid: ".$cgi->param('gid')." har blitt disablet.\n"; + } + else { + $senablegid->execute($gid); + print "<p>gid: ".$cgi->param('gid')." har blitt enablet.\n"; + } + $dbh->commit(); +} + +if ($action eq 'noconnect') { + print "<h3>Kunne ikke koble til disse switchene:</h3>\n"; + $sgetnoconnect->execute(); + print "<pre>\n"; + while ((my $row = $sgetnoconnect->fetchrow_hashref())) { + print "$row->{'sysname'} : $row->{'cmd'} : Added: $row->{'added'} : Updated: $row->{'updated'}\n"; + } + print "</pre>\n"; +} + +if ($action eq 'listgid') { + print "<pre>\n"; + print "<a href=\"sshow.pl?action=noconnect\" />Kunne ikke koble til</a>\n\n\n"; + print "<b>Ferdige:</b>\n"; + $slistdonegid->execute($limit); + my ($gid, $author); + $gid = -1; + while ((my $row = $slistdonegid->fetchrow_hashref())) { + $author = $row->{author}; + if ($gid != $row->{gid}) { + $gid = $row->{gid}; + print "GID: <a href=\"sshow.pl?action=showgid&gid=$gid\">$gid</a>\n"; + print "Author: $author\n"; + print "Added: ".$row->{added}."\n"; + } + my $cmd = $row->{cmd}; + print "$cmd\n\n"; + } + print "\n\n"; + print "<b>I kø:</b>\n"; + $slistprocgid->execute(); + $gid = -1; + while ((my $row = $slistprocgid->fetchrow_hashref())) { + $author = $row->{author}; + if ($gid != $row->{gid}) { + $gid = $row->{gid}; + print "GID: <a href=\"sshow.pl?action=showgid&gid=$gid\">$gid</a>\n"; + print "Author: $author\n"; + print "Added: ".$row->{added}."\n"; + } + my $cmd = $row->{cmd}; + print "$cmd\n\n"; + } + $dbh->commit(); + print "</pre>\n"; +} + +if ($action eq 'showgid') { + print "<pre>\n"; + $sgetgid->execute($cgi->param('gid')); + my $row = $sgetgid->fetchrow_hashref(); + print "GID: ".$row->{gid}."\n"; + print "Author: ".$row->{author}."\n"; + do { + print " <b>Name: ".$row->{sysname}." Addr: ".$row->{addr}."</b>\n"; + print " `<b>".$row->{cmd}."`</b>\n"; + print " <i>Added: ".$row->{added}." executed ".$row->{updated}."</i>\n"; + my $data = $row->{result}; + if (!defined($data)) { + $data = "Not executed yet!"; + } + my @lines = split(/[\n\r]+/, $data); + foreach my $line (@lines) { + print "\t", encode_entities($line), "\n"; + } + } while (($row = $sgetgid->fetchrow_hashref())); + print "</pre>\n"; +} + +if ($action eq 'done') { + print "<h3>Done</h3>\n"; + print "<pre>\n"; + + my $squery; + if (defined($cgi->param('gid'))) { + my $gid = $cgi->param('gid'); + $sgetdonegid->execute($gid); + $squery = $sgetdonegid; + } else { + $sgetdone->execute($limit); + $squery = $sgetdone; + } + my $sysname = ''; + while (my $row = $squery->fetchrow_hashref()) { + if ($sysname ne $row->{'sysname'}) { + $sysname = $row->{'sysname'}; + print "$sysname (".$row->{addr}."):\n"; + } + print " Author: ".$row->{author}."\n"; + print " Cmd: ".$row->{cmd}."\n"; + print " Added: ".$row->{added}." Updated: ".$row->{updated}."\n"; + print " GID: ".$row->{gid}."\n"; + my @result = split(/[\n\r]+/, $row->{result}); + foreach (@result) { + print "\t", encode_entities($_), "\n"; + } + print "\n"; + } + $dbh->commit(); + print "</pre>\n"; +} +elsif ($action eq 'processing') { + print "<h3>Processing</h3>\n"; + print "<pre>\n"; + $sgetprocessing->execute(); + while (my $row = $sgetprocessing->fetchrow_hashref()) { + my $sysname = $row->{'sysname'}; + print "$sysname (".$row->{addr}."):\n"; + print " Author: ".$row->{author}."\n"; + print " Cmd: ".$row->{cmd}."\n"; + my $updated; + if (defined($row->{updated})) { $updated = $row->{updated}; } + else { $updated = 'never'; } + print " Added: ".$row->{added}." Updated: ".$updated."\n"; + print " Disabled: ".$row->{disabled}."\n"; + print " Locked: ".$row->{locked}."\n"; + print " gID: ".$row->{gid}; + print " <form action=\"sshow.pl\" methos=\"POST\">"; + print "<input type=\"hidden\" name=\"gid\" value=\"".$row->{gid}."\">"; + print "<input type=\"hidden\" name=\"action\" value=\"processing\">"; + if ($row->{disabled} == 0) { + print "<input type=\"submit\" name=\"agid\" value=\"Disable\">\n"; + } + else { + print "<input type=\"submit\" name=\"agid\" value=\"Enable\">\n"; + } + } + $dbh->commit(); + print "</pre>\n"; +} + +print << "EOF"; + </body> +</html> +EOF |