📄 manager.pm
字号:
displaytable($dbh, $tablelist->{'tablename'}, '-clauses', "where (host = '$host') order by oidindex", '-dontdisplaycol', "select * from userprefs where user = '$remuser' and groupname = '$group' and tablename = ? and columnname = ? and displayit = 'N'", '-sort', \&mykeysort, '-dolink', \&linktodisplayinfo, '-beginhook', \&printredgreen); if ($tablelist->{'keephistory'}) { my $q = self_url(); $q =~ s/\?.*//; print "history: "; print "<a href=\"" . addtoken($q, "displayhistory=1&host=$host&group=$group&table=$tablelist->{'tablename'}hist") . "\">[table]</a>\n"; print "<a href=\"" . addtoken($q, "displaygraph=1&host=$host&group=$group&table=$tablelist->{'tablename'}hist") . "\">[graph]</a>\n"; print "<br>\n"; } }}## linktodisplayinfo(STRING):## returns a url to the appropriate displayinfo link if STRING is a# mib node.#sub linktodisplayinfo { return if (exists($NetSNMP::manager::myorder{shift})); return self_url() . "&displayinfo=" . shift;}# printredgreen(TABLENAME, DATA):## display a red or a green dot in a table dependent on the table's# values and associated expression## DATA is NULL when in a header row (displaying header names).#sub printredgreen { my $dbh = shift; my $tablename = shift; my $data = shift; my ($exprs, $expr, $img); if (!defined($data)) { #doing header; print "<td></td>"; return; } my $cmd = "SELECT * FROM errorexpressions where (tablename = '$tablename')"; print " $cmd\n" if ($NetSNMP::manager::verbose); ( $exprs = $dbh->prepare( $cmd ) ) or die "\nnot ok: $DBI::errstr\n"; ( $exprs->execute ) or print( "\tnot ok: $DBI::errstr\n" ); $img = $NetSNMP::manager::greenimage; while($expr = $exprs->fetchrow_hashref) { if ($dbh->do("select oidindex from $tablename where host = '$data->{host}' and oidindex = '$data->{oidindex}' and $expr->{expression}") ne "0E0") { $img = $NetSNMP::manager::redimage; } } print "<td><img src=$img></td>";}## display information about a given mib node as a table.#sub makemibtable { my $dispinfo = shift; # display information about a data type in a table my $mib = $SNMP::MIB{SNMP::translateObj($dispinfo)}; print "<table $NetSNMP::manager::tableparms><tr><td>\n"; foreach my $i (qw(label type access status units hint moduleID description enums)) {# foreach my $i (keys(%$mib)) { next if (!defined($$mib{$i}) || $$mib{$i} eq ""); next if (ref($$mib{$i}) eq "HASH" && $#{keys(%{$$mib{$i}})} == -1); print "<tr><td>$i</td><td>"; if (ref($$mib{$i}) eq "HASH") { print "<table $NetSNMP::manager::tableparms><tr><td>\n"; foreach my $j (sort { $$mib{$i}{$a} <=> $$mib{$i}{$b} } keys(%{$$mib{$i}})) { print "<tr><td>$$mib{$i}{$j}</td><td>$j</td></tr>"; } print "</table>\n"; } else { print "$$mib{$i}"; } print "</td></tr>\n"; } print "</table>\n";}# given a user, get all the groups he belongs to.sub getgroupsforuser { my (@ret, $cursor, $row); my ($dbh, $remuser) = @_; ( $cursor = $dbh->prepare( "SELECT * FROM usergroups where (user = '$remuser')")) or die "\nnot ok: $DBI::errstr\n"; ( $cursor->execute ) or print( "\tnot ok: $DBI::errstr\n" ); while ( $row = $cursor->fetchrow_hashref ) { push(@ret, $row->{'groupname'}); } @ret;}# given a host, get all the groups it belongs to.sub gethostsforgroup { my (@ret, $cursor, $row); my ($dbh, $group) = @_; ( $cursor = $dbh->prepare( "SELECT * FROM hostgroups where (groupname = '$group')")) or die "\nnot ok: $DBI::errstr\n"; ( $cursor->execute ) or print( "\tnot ok: $DBI::errstr\n" ); while ( $row = $cursor->fetchrow_hashref ) { push(@ret, $row->{'host'}); } @ret;}# display the host add entry boxsub addhostentryform { my $group = shift; print "<form method=\"get\" action=\"" . self_url() . "\">\n"; print "Add a new host to the group \"$group\": <input type=\"text\" name=\"newhost\"><br>"; print "<input type=\"hidden\" name=\"group\" value=\"$group\">"; print "<input type=submit value=\"Add Hosts\">\n"; print "</form>";}#is an expert user?sub isexpert { return 0;}#is remuser a admin?sub isadmin { my ($dbh, $remuser, $group) = @_; return 0 if (!defined($remuser) || !defined($group)); return 1 if ($dbh->do("select * from usergroups where user = '$remuser' and groupname = '$group' and isadmin = 'Y'") ne "0E0"); return 0;}#is user a member of this group?sub isuser { my ($dbh, $remuser, $group) = @_; return 0 if (!defined($remuser) || !defined($group)); return 1 if ($dbh->do("select * from usergroups where user = '$remuser' and groupname = '$group'") ne "0E0"); return 0;}# displayconfigarray(HOSTS, NAMES, CONFIG):## displays an array of generic check buttons to turn on/off certain# variables.sub displayconfigarray { my $dbh = shift; my $hosts = shift; my $names = shift; my %config = @_; my $cmd; if ($config{'-check'}) { ( $cmd = $dbh->prepare( $config{'-check'} ) ) or die "\nnot ok: $DBI::errstr\n"; } print "<table $NetSNMP::manager::tableparms>\n"; print "<tr><td></td>"; my ($i, $j); foreach $j (@$names) { my $nj = $j; $nj = $j->[0] if ($config{'-arrayrefs'} || $config{'-arrayref2'}); print "<td>$nj</td>"; } foreach my $i (@$hosts) { my $ni = $i; $ni = $i->[0] if ($config{'-arrayrefs'} || $config{'-arrayref1'}); print "<tr><td>$ni</td>"; foreach $j (@$names) { my $nj = $j; $nj = $j->[0] if ($config{'-arrayrefs'} || $config{'-arrayref2'}); my $checked = "checked" if (defined($cmd) && $cmd->execute($ni,$nj) ne "0E0"); print "<td><input type=checkbox $checked value=y name=" . $config{prefix} . $ni . $nj . "></td>\n"; } print "</tr>\n"; } print "</tr>"; print "</table>";}sub adddefaulttables { my ($dbh, $names) = @_; my $row; # add in known expression tables. my $handle = getcursor($dbh, "SELECT * FROM errorexpressions"); expr: while($row = $handle->fetchrow_hashref) { foreach $i (@$names) { if ($i->[0] eq $row->{tablename}) { next expr; } } push @$names, [$row->{tablename}]; }}## display the setup information page for a given group.#sub setupgroup { my $dbh = shift; my $group = shift; my ($hosts, $names) = gethostandgroups($dbh, $group); adddefaulttables($dbh, $names); print "<form method=\"post\" action=\"" . self_url() . "\">\n"; print "<input type=hidden text=\"setupgroupsubmit\" value=\"y\">"; displayconfigarray($dbh, $hosts, $names, -arrayrefs, 1, -check, "select * from hosttables where (host = ? and tablename = ? and groupname = '$group')"); print "<input type=hidden name=group value=\"$group\">\n"; print "<input type=submit value=submit name=\"setupgroupsubmit\">\n"; print "</form>";}# a wrapper around fetching arrays of everything in a table.sub getarrays { my $dbh = shift; my $table = shift; my %config = @_; my $selectwhat = $config{'-select'} || "*"; my $handle; $handle = getcursor($dbh, "SELECT $selectwhat FROM $table $config{-clauses}"); return $handle->fetchall_arrayref;}## get a list of all tablenames and hostnames for a given group.#sub gethostandgroups { my $dbh = shift; my $group = shift; my ($tbnms); my $names = getarrays($dbh, 'hosttables', "-select", 'distinct tablename', "-clauses", "where groupname = '$group'"); my $hosts = getarrays($dbh, 'hostgroups', "-select", 'distinct host', "-clauses", "where groupname = '$group'"); return ($hosts, $names);}sub setupgroupsubmit { my $dbh = shift; my $group = shift; my ($hosts, $names) = gethostandgroups($dbh, $group); adddefaulttables($dbh, $names); foreach my $i (@$hosts) { $dbh->do("delete from hosttables where host = '${$i}[0]' and groupname = '$group'"); } my $rep = $dbh->prepare("insert into hosttables(host,tablename,groupname) values(?,?,'$group')"); foreach my $i (@$hosts) { foreach my $j (@$names) { if (param("${$i}[0]" . "${$j}[0]")) { print "test: ","${$i}[0] : ${$j}[0]<br>\n"; $rep->execute("${$i}[0]", "${$j}[0]") || print "$! $DBI::errstr<br>\n"; } } } }## save user pref data submitted by the user#sub setupusersubmit { my ($dbh, $remuser, $group) = @_; my $tables = getarrays($dbh, 'hosttables', "-select", 'distinct tablename', "-clauses", "where groupname = '$group'"); $dbh->do("delete from userprefs where user = '$remuser' and groupname = '$group'"); my $rep = $dbh->prepare("insert into userprefs(user, groupname, tablename, columnname, displayit) values('$remuser', '$group', ?, ?, 'N')"); my ($i, $j); foreach my $i (@$tables) { my $sth = $dbh->prepare("select * from ${$i}[0] where 1 = 0"); $sth->execute(); foreach $j (@{$sth->{NAME}}) { if (param("${$i}[0]" . "$j")) { $rep->execute("${$i}[0]", "$j"); } } }}sub Exit { my ($dbh, $group) = @_; my $tq = self_url(); $tq =~ s/\?.*//; print "<hr>\n"; print "<a href=\"$tq\">[TOP]</a>\n"; print "<a href=\"$tq?userprefs=1&group=$group\">[display options]</a>\n"; print "<a href=\"$tq?setuponcall=1\">[setup oncall schedule]</a>\n"; if (defined($group)) { print "<a href=\"$tq?group=$group\">[group: $group]</a>\n"; print "<a href=\"$tq?group=$group&summarizegroup=1\">[summarize errors]</a>\n"; } $dbh->disconnect() if (defined($dbh)); return OK();# exit shift;}## setup user preferences by displaying a configuration array of# checkbuttons for each table.#sub setupuserpreferences { my ($dbh, $remuser, $group) = @_; my $tables = getarrays($dbh, 'hosttables', "-select", 'distinct tablename', "-clauses", "where groupname = '$group'"); print "<h3>Select the columns from the tables that you want to <b>hide</b> below and click on submit:</h3>\n"; print "<form method=\"post\" action=\"" . self_url() . "\">\n"; my ($i, $j); foreach my $i (@$tables) { my $sth = $dbh->prepare("select * from ${$i}[0] where 1 = 0"); $sth->execute(); displayconfigarray($dbh, [${$i}[0]], $sth->{NAME}, -check, "select * from userprefs where (tablename = ? and columnname = ? and user = '$remuser' and groupname = '$group' and displayit = 'N')"); print "<br>\n"; } print "<input type=hidden name=group value=\"$group\">\n"; print "<input type=submit value=submit name=\"setupuserprefssubmit\">\n"; print "</form>";}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -