Changeset b3c640775d36906eb2e9f8a2b1cbf1bbb0ba8fd4
- Timestamp:
- 03/22/07 02:34:40
(6 years ago)
- Author:
- Theo Schlossnagle <jesus@omniti.com>
- git-committer:
- Theo Schlossnagle <jesus@omniti.com> 1174530880 +0000
- git-parent:
[1ba116e5b141130d922830f5316992432db538d7]
- git-author:
- Theo Schlossnagle <jesus@omniti.com> 1174530880 +0000
- Message:
make this stuff object oriented.. but Resmon::Modules should really by Resmon::Module
git-svn-id: https://labs.omniti.com/resmon/trunk@20 8c0face9-b7db-6ec6-c4b3-d5f7145c7d55
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r9adf5e8 |
rb3c6407 |
|
| 1 | 1 | #!/usr/bin/perl |
|---|
| 2 | 2 | |
|---|
| 3 | | push @INC, '/opt/resmon'; |
|---|
| | 3 | use lib '/opt/resmon/lib'; |
|---|
| 4 | 4 | |
|---|
| 5 | 5 | use strict; |
|---|
| 6 | 6 | use Time::HiRes qw( gettimeofday tv_interval sleep ); |
|---|
| | 7 | use Data::Dumper; |
|---|
| 7 | 8 | use POSIX qw( setsid ); |
|---|
| 8 | | use vars qw($opt_c $opt_d $opt_f $list); |
|---|
| | 9 | use Getopt::Long; |
|---|
| | 10 | use vars qw($config_file $debug $status_file $config); |
|---|
| 9 | 11 | |
|---|
| 10 | | require 'getopts.pl'; |
|---|
| 11 | | require 'resmon_conf.pl'; |
|---|
| 12 | | require 'resmon_code.pl'; |
|---|
| | 12 | use Resmon::Config; |
|---|
| | 13 | use Resmon::ExtComm; |
|---|
| | 14 | use Resmon::Status; |
|---|
| | 15 | use Resmon::Modules; |
|---|
| 13 | 16 | |
|---|
| 14 | | Getopts('c:df:'); |
|---|
| | 17 | GetOptions( |
|---|
| | 18 | "c=s" => \$config_file, |
|---|
| | 19 | "d" => \$debug, |
|---|
| | 20 | "f=s" => \$status_file, |
|---|
| | 21 | ); |
|---|
| 15 | 22 | |
|---|
| 16 | | $opt_c ||= 'resmon.conf'; |
|---|
| 17 | | die "Cannot open configuration file: $opt_c" unless (-r $opt_c); |
|---|
| | 23 | $config_file ||= 'resmon.conf'; |
|---|
| | 24 | die "Cannot open configuration file: $config_file" unless (-r $config_file); |
|---|
| 18 | 25 | |
|---|
| 19 | 26 | sub configure { |
|---|
| 20 | | $list = parse_config($opt_c); |
|---|
| 21 | | set_statusfile($opt_f) if($opt_f); |
|---|
| | 27 | $config = Resmon::Config->new($config_file); |
|---|
| | 28 | $config->{statusfile} = $status_file if($status_file); |
|---|
| | 29 | print Dumper($config) if($debug); |
|---|
| 22 | 30 | } |
|---|
| 23 | | unless($opt_d) { |
|---|
| | 31 | unless($debug) { |
|---|
| 24 | 32 | fork && exit; |
|---|
| 25 | 33 | setsid; |
|---|
| … | … | |
| 27 | 35 | configure(); |
|---|
| 28 | 36 | $SIG{'HUP'} = \&configure; |
|---|
| | 37 | |
|---|
| | 38 | use Time::HiRes qw( gettimeofday tv_interval sleep ); |
|---|
| | 39 | |
|---|
| | 40 | my $rmlast = undef; |
|---|
| | 41 | sub wait_interval { |
|---|
| | 42 | $rmlast = [gettimeofday] unless defined($rmlast); |
|---|
| | 43 | my $elapsed = $config->{interval} - tv_interval($rmlast); |
|---|
| | 44 | if($elapsed > 0) { |
|---|
| | 45 | sleep($elapsed); |
|---|
| | 46 | } |
|---|
| | 47 | $rmlast = [gettimeofday]; |
|---|
| | 48 | } |
|---|
| | 49 | |
|---|
| | 50 | my $list = []; |
|---|
| | 51 | my $status = Resmon::Status->new($config->{statusfile}); |
|---|
| 29 | 52 | while(1) { |
|---|
| 30 | | foreach my $monobj (@$list) { |
|---|
| 31 | | my $coderef = fetch_monitor($monobj->{'type'}); |
|---|
| 32 | | unless($coderef) { |
|---|
| 33 | | $coderef = fetch_monitor($monobj->{'type'}); |
|---|
| 34 | | } |
|---|
| 35 | | if($coderef) { |
|---|
| 36 | | print_statusfile($monobj->{'object'}."(".$monobj->{'type'} |
|---|
| 37 | | .") :: ".$coderef->($monobj)."\n"); |
|---|
| 38 | | } else { |
|---|
| 39 | | print_statusfile($monobj->{'object'}."(".$monobj->{'type'} |
|---|
| 40 | | .") :: BAD(no monitor available)\n"); |
|---|
| | 53 | while(my($module_name, $mod_configs) = each %{$config->{Modules}}) { |
|---|
| | 54 | my $coderef = Resmon::Modules::fetch_monitor($module_name); |
|---|
| | 55 | foreach my $monobj (@$mod_configs) { |
|---|
| | 56 | my $check_rv = 'BAD', |
|---|
| | 57 | my $check_mess = 'no data'; |
|---|
| | 58 | if($coderef) { |
|---|
| | 59 | eval { ($check_rv, $check_mess) = $coderef->($monobj); }; |
|---|
| | 60 | } else { |
|---|
| | 61 | eval { ($check_rv, $check_mess) = $monobj->handler(); }; |
|---|
| | 62 | } |
|---|
| | 63 | if($@) { |
|---|
| | 64 | $status->store($module_name,$monobj->{'object'},'BAD',$@); |
|---|
| | 65 | } else { |
|---|
| | 66 | $status->store($module_name,$monobj->{'object'},$check_rv,$check_mess); |
|---|
| | 67 | } |
|---|
| 41 | 68 | } |
|---|
| 42 | 69 | } |
|---|
| 43 | | close_statusfile(); |
|---|
| | 70 | $status->close(); |
|---|
| 44 | 71 | wait_interval(); |
|---|
| 45 | 72 | print "\n---- ".localtime(time)."----------\n" |
|---|
| 46 | | unless open_statusfile(); |
|---|
| | 73 | unless $status->open(); |
|---|
| 47 | 74 | } |
|---|
| 48 | 75 | |
|---|