⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manager.pm

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 PM
📖 第 1 页 / 共 3 页
字号:
#!/usr/local/bin/perlpackage NetSNMP::manager;use strict ();use Apache::Constants qw(:common);use CGI qw(:standard delete_all);use SNMP ();use DBI ();use NetSNMP::manager::displaytable qw(displaytable displaygraph);# globals$NetSNMP::manager::hostname = 'localhost';          # Host that serves the mSQL Database$NetSNMP::manager::dbname = 'snmp';                 # mySQL Database name$NetSNMP::manager::user = 'root';# $NetSNMP::manager::pass = "password";$NetSNMP::manager::imagebase = "/home/hardaker/src/snmp/manager";	# <=== CHANGE ME ====$NetSNMP::manager::redimage = "/graphics/red.gif";$NetSNMP::manager::greenimage = "/graphics/green.gif";#$NetSNMP::manager::verbose = 1;$NetSNMP::manager::tableparms  = "border=1 bgcolor=\"#c0c0e0\"";$NetSNMP::manager::headerparms = "border=1 bgcolor=\"#b0e0b0\"";# init the snmp library$SNMP::save_descriptions=1;#SNMP::init_mib();%NetSNMP::manager::myorder = qw(id 0 oidindex 1 host 2 updated 3);sub handler {    my $r = shift;    Apache->request($r);    # get info from handler    my $hostname = $r->dir_config('hostname') || $NetSNMP::manager::hostname;    my $dbname = $r->dir_config('dbname') || $NetSNMP::manager::dbname;    my $sqluser = $r->dir_config('user') || $NetSNMP::manager::user;    my $pass = $r->dir_config('pass') || $NetSNMP::manager::pass;    my $verbose = $r->dir_config('verbose') || $NetSNMP::manager::verbose;#===========================================================================#  Global defines#===========================================================================my ($dbh, $query, $remuser);$remuser = $ENV{'REMOTE_USER'};$remuser = "guest" if (!defined($remuser) || $remuser eq "");#===========================================================================# Connect to the mSQL database with the appropriate driver#===========================================================================($dbh = DBI->connect("DBI:mysql:database=$dbname;host=$hostname", $sqluser, $pass))    or die "\tConnect not ok: $DBI::errstr\n";#===========================================================================# stats Images, for inclusion on another page. (ie, slashdot user box)#===========================================================================if (my $group = param('groupstat')) {    $r->content_type("image/gif");    $r->send_http_header();    my $cur = getcursor($dbh, "select host from usergroups as ug, hostgroups as hg where ug.groupname = '$group' and hg.groupname = '$group' and user = '$remuser'");    while (my $row = $cur->fetchrow_hashref ) {	if (checkhost($dbh, $group, $row->{'host'})) {	    open(I, "$NetSNMP::manager::imagebase$NetSNMP::manager::redimage");	    while(read(I, $_, 4096)) { print; }	    close(I);	}    }    open(I, "$NetSNMP::manager::imagebase$NetSNMP::manager::greenimage");    while(read(I, $_, 4096)) { print; }    close(I);    return OK();}sub date_format {    my $time = shift;    my @out = localtime($time);    my $ret = $out[4] . "-" . $out[3] . "-" . $out[5] . " " . $out[2] . " " . $out[1];#    print STDERR "$time: $ret\n";    return $ret;}## Graphing of historical data#if ((param('displaygraph') || param('dograph')) && param('table')) {    my $host = param('host');    my $group = param('group');    if (!isuser($dbh, $remuser, $group)) {	$r->content_type("image/png");	$r->send_http_header();	print "Unauthorized access to that group ($group)\n";	return Exit($dbh, $group);    }        my $table = param('table');    my @columns;    if (!param('dograph')) {	$r->content_type("text/html");	$r->send_http_header();	print "<body bgcolor=\"#ffffff\">\n";	print "<form>\n";	print "<table border=1><tr><td>\n";	print "<table>\n";	print "<tr align=top><th></th><th>Select indexes<br>to graph</th></tr>\n";	my $handle = getcursor($dbh, "SELECT sql_small_result distinct(oidindex) FROM $table where host = '$host'");	my @cols;	while (  $row = $handle->fetchrow_hashref ) {	    print "<tr><td>$row->{oidindex}</td><td><input type=checkbox value=1 name=" . 'graph_' . displaytable::to_unique_key($row->{'oidindex'}) . "></td></tr>\n";	}	print "</table>\n";	print "</td><td>\n";	print "<table>\n";	print "<tr align=top><th></th><th>Select Columns<br>to graph</th></tr>\n";	my $handle = getcursor($dbh, "SELECT * FROM $table limit 1");	my $row = $handle->fetchrow_hashref;	map { print "<tr><td>$_</td><td><input type=checkbox value=1 name=column_" . displaytable::to_unique_key($_) . "></td></tr>\n"; } keys(%$row);	print "</table>\n";	print "</td></tr></table>\n";	print "<br>Graph as a Rate: <input type=checkbox value=1 name=graph_as_rate><br>\n";	print "<br>Maximum Y Value: <input type=text value=inf name=max_y><br>\n";	print "<br>Minimum Y Value: <input type=text value=-inf name=min_y><br>\n";	print "<input type=hidden name=table value=\"$table\">\n";	print "<input type=hidden name=host value=\"$host\">\n";	print "<input type=hidden name=dograph value=1>\n";	print "<input type=hidden name=group value=\"$group\">\n";	print "<input type=submit name=\"Make Graph\">\n";	print "</form>\n";	my $handle = getcursor($dbh, "SELECT distinct(oidindex) FROM $table where host = '$host' order by oidindex");	return Exit($dbh, $group);    }    if (param('graph_all_data')) {	$clause = "host = '$host'";    } else {	my $handle = getcursor($dbh, "SELECT distinct(oidindex) FROM $table where host = '$host'");	$clause = "where (";	while (  $row = $handle->fetchrow_hashref ) {#	    print STDERR "graph test: " . $row->{'oidindex'} . "=" . "graph_" . displaytable::to_unique_key($row->{'oidindex'}) . "=" . param("graph_" . displaytable::to_unique_key($row->{'oidindex'})) . "\n";	    if (param("graph_" . displaytable::to_unique_key($row->{'oidindex'}))) {		$clause .= " or oidindex = " . $row->{'oidindex'} . "";	    }	}	my $handle = getcursor($dbh, "SELECT * FROM $table limit 1");	my $row = $handle->fetchrow_hashref;	map { push @columns, $_ if (param('column_' . displaytable::to_unique_key($_))) } keys(%$row);	$clause .= ")";	$clause =~ s/\( or /\(/;	if ($clause =~ /\(\)/ || $#columns == -1) {	    $r->content_type("text/html");	    $r->send_http_header();	    print "<body bgcolor=\"#ffffff\">\n";	    print "<h1>No Data to Graph</h1>\n";	    print STDERR "No data to graph: $clause, $#columns\n";	    return Exit($dbh, "$group");	}	$clause .= " and host = '$host'";    }#    print STDERR "graphing clause: $clause\n";    # all is ok, display the graph    $r->content_type("image/png");    $r->send_http_header();    print STDERR "graphing clause: $clause, columns: ", join(", ",@columns), "\n";    my @args;    push (@args, '-rate', '60') if (param('graph_as_rate'));    push (@args, '-max', param('max_y')) if (param('max_y') && param('max_y') =~ /^[-.\d]+$/);    push (@args, '-min', param('min_y')) if (param('min_y') && param('min_y') =~ /^[-.\d]+$/);    my $ret =     displaygraph($dbh, $table,#		 '-xcol', "date_format(updated,'%m-%d-%y %h:%i')",		 '-xcol', "unix_timestamp(updated)",		 '-pngparms', [		     'x_labels_vertical', '1',		     'x_tick_number', 6,		     'x_number_format', \&date_format,		     'y_label', 'Count/Min',		     'title', $table,#		     'y_min_value', 0,		 ],		 '-clauses', "$clause order by updated",		 @args,		 '-columns', \@columns,		 '-indexes', ['oidindex']);    print STDERR "$ret rows graphed\n";    return OK();}#===========================================================================# Start HTML.#===========================================================================$r->content_type("text/html");$r->send_http_header();print "<body bgcolor=\"#ffffff\">\n";print "<h1>UCD-SNMP Management Console</h1>\n";print "<hr>\n";#===========================================================================# Display mib related data information#===========================================================================if (param('displayinfo')) {    makemibtable(param('displayinfo'));    return Exit($dbh, "");}#===========================================================================# Display a generic sql table of any kind (debugging).#===========================================================================# if (my $disptable = param('displaytable')) {#     if (param('editable') == 1) {# 	print "<form submit=dont>\n";# 	displaytable($disptable, -editable, 1);# 	print "</form>\n";#     } else {# 	displaytable($disptable);#     }#     return Exit($dbh,  "");# }#===========================================================================# Get host and group from CGI query.#===========================================================================my $host = param('host');my $group = param('group');#===========================================================================# Editable user information#===========================================================================if (param('setuponcall')) {    print "<title>oncall schedule for user: $remuser</title>\n";    print "<h2>oncall schedule for user: $remuser</h2>\n";    print "<p>Please select your oncall schedule and mailing addresses for your groups below:";    if (!isexpert($remuser)) {	print "<ul>\n";        print "<li>Values for the days/hours fields can be comma seperated lists of hours/days/ranges.  EG: hours: 7-18,0-4.\n";	print "</ul>\n";    }    print "<form method=post><input type=hidden name=setuponcall value=1>\n";    displaytable($dbh, 'oncall',    '-clauses',"where user = '$remuser' order by groupname",    '-select','id, user, groupname, email, pager, days, hours',    '-selectorder', 1,    '-notitle', 1,    '-editable', 1,    '-indexes', ['id','user','groupname'],    '-CGI', $CGI::Q    );    print "<input type=submit value=\"submit changes\">\n";    print "</form>\n";    return Exit($dbh, $group);}#===========================================================================# show the list of groups a user belongs to.#===========================================================================if (!defined($group)) {    my @groups = getgroupsforuser($dbh, $remuser);    print "<title>Net-SNMP Group List</title>\n";    print "<h2>Host groupings you may access:</h2>\n";    if (!isexpert($remuser)) {	print "<ul>\n";	print "<li>Click on a group to operate or view the hosts in that group.\n";	print "<li>Click on a red status light below to list the problems found.\n";	print "</ul>\n";    }	    if ($#groups > 0) {	displaytable($dbh, 'usergroups', 		     '-clauses', "where (user = '$remuser')",		     '-select', 'distinct groupname',		     '-notitle', 1,		     '-printonly', ['groupname'],		     '-datalink', sub { my $q = self_url();					my $key = shift;					my $h = shift;					return if ($key ne "groupname");					return addtoken($q,"group=$h");				    },		     '-beginhook', 		     sub { 			 my $q = self_url();			 my($dbh, $junk, $data) = @_;			 if (!defined($data)) {			     print "<th>Status</th>";			     return;			 }			 my ($cur, $row);			 $cur = getcursor($dbh, "select host from hostgroups where groupname = '$data->{groupname}'");			 while (  $row = $cur->fetchrow_hashref ) {			     if (checkhost($dbh, $data->{'groupname'}, 					   $row->{'host'})) {				 print "<td><a href=\"" . addtoken($q,"group=$data->{groupname}&summarizegroup=1") . "\"><img border=0 src=$NetSNMP::manager::redimage></a></td>\n";				 return;			     }			 }			 print "<td><img src=$NetSNMP::manager::greenimage></td>\n";		     }		     );	$dbh->disconnect();	return Exit($dbh,  $group);    } else {	if ($#groups == -1) {	    print "You are not configured to use the Net-SNMP-manager, please contact your system administrator.";	    return Exit($dbh,  $group);	}	$group = $groups[0];    }}#===========================================================================# reject un-authorized people accessing a certain group#===========================================================================if (!isuser($dbh, $remuser, $group)) {    print "Unauthorized access to that group ($group)\n";    return Exit($dbh, $group);}    #===========================================================================# add a new host to a group#===========================================================================if (defined(my $newhost = param('newhost'))) {    if (isadmin($dbh, $remuser, $group)) {	if ($dbh->do("select * from hostgroups where host = '$newhost' and groupname = '$group'") eq "0E0") {	    $dbh->do("insert into hostgroups(host,groupname) values('$newhost','$group')") ;	} else {	    print "<b>ERROR: host $newhost already in $group</b>\n";	}	CGI::delete('newhost');    }}#===========================================================================# display setup configuration for a group

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -