[Date Prev] [Date Next] | [Thread Prev] [Thread Next] | [Date Index] [Thread Index] |
[snips-users] https monitor (secmon)
|
simple, yet effective. lwp with ssl capabilities is required. Jerry Wilborn, Operations Engineer FASTNET - Internet Solutions 610-266-6700 www.fast.net #!/usr/bin/perl # jerry wilborn <jerry wilborn at fast.net> # 9 march 2002 # credit: ed landa <elanda at comstar net> for snmpgeneric code # credit: jeremy hough <jeremyh at fast net> ssl code # use strict; use vars qw ( $snipsroot $debug $etcdir $bindir $varunits @deviceip @getpage @expect ); BEGIN { $snipsroot = "/home/snips" unless $snipsroot; # SET_THIS push (@INC, "$snipsroot/etc"); push (@INC, "$snipsroot/bin"); require "snipsperl.conf" ; # local customizations } use SNIPS; use LWP::UserAgent; ############################ ## Variables customization # overrides values in the snipslib.pl library ############################ $etcdir = "$snipsroot/etc" unless $etcdir; # location of config file $bindir = "$snipsroot/bin" unless $bindir; $debug = 0; # set to 1 for debugging output $varunits="HTTPS" ; # the var.units field in EVENT struct $s_pollinterval= 60*5; # Seconds to sleep between tries. ########################## ## # Read the config file. Use '\t' as a separator for 'item' sub readconf { my $lineno = 0; my $count = 0; my $event = new_event(); if ($debug == 0 && $libdebug > 0) { ++$debug ; --$libdebug; } $s_sender = 'secmon' if ($s_sender eq ""); $s_variable = 'HTTPS' if ($s_variable eq ""); open(CONFIG,"<$s_configfile")||die("Couldn't find $s_configfile, exiting"); my $datafd = open_datafile($s_datafile, "w"); # alter_event($event, $s_sender, undef, undef, undef, undef, $varunits); undef @deviceip; while(<CONFIG>) { ++$lineno; chomp; if(/^\s*\#/) {next;} # skip comments if(/^\s*$/) {next;} # skip blank lines if (/^(sleepinterval)\s+(\d+)\s*$/i || /^(pollinterval)\s+(\d+)\s*$/i) { $s_pollinterval = $2; next; } if (/^\s*RRDTOOL\s+ON/i) { print "RRD ENABLED\n" if $debug; $SNIPS::dorrd = 1; next; } if (/^\s*RRDTOOL\s+OFF/i) { $SNIPS::dorrd = 0; next; } if (/^(\S+)\s+(\S+)\s+(\S+)\s+(.+)$/) { # this is a secmon line ++$count; my $ip = $2; ($deviceip[$count], $getpage[$count], $expect[$count]) = ($ip, $3, $4); alter_event($event, $s_sender, $1, $ip, undef, $s_variable, $varunits); write_event($datafd, $event); next; } else { print "Ignoring illegal line: $_\n"; } } # end while(CONFIG) close(CONFIG); if ( $count < 1) { die("Nothing to monitor in $s_configfile, exiting"); } if ($debug) { print "Devices to monitor are: " ; for my $i (1..$count) { print "\t$deviceip[$i]\n"; } } close_datafile($datafd); } # end: sub(readconf) # Return status, value, threshold, maxseverity sub dotest { my ($event, $i) = @_; # $i starts from 1, not 0 my $value = ""; my $cmd = ""; my $pagedata = ""; if ($debug > 2) { print "Checking $deviceip[$i] at $getpage[$i]\n"; } my $ua = new LWP::UserAgent; my $req = new HTTP::Request("GET", "https://$getpage[$i]"); my $timeout = $ua->timeout(5); my $res = $ua->request($req); $pagedata = $res->code . "\n" . $res->content . "\n"; $value = index(lc($pagedata), $expect[$i]); $value = ($value >= 0) ? 0 : 1; if ($debug) { print "$expect[$i] and $value\n"; } my ($status, $threshold, $severity) = calc_status($value, '1', '1', '1'); # status, value, thres, maxseverity return ($status, $value, $threshold, $severity); } # end &dotest() ### ### Main program: ### &snips_main(\&readconf, undef, \&dotest); |