Changeset d75bc41ea17e2fac447a58bb98a98fcf5a465160
- Timestamp:
- 01/02/09 19:30:32
(4 years ago)
- Author:
- Mark Harrison <mark@omniti.com>
- git-committer:
- Mark Harrison <mark@omniti.com> 1230924632 +0000
- git-parent:
[ac12e51369119edd57d0699062ab00ae200ac562]
- git-author:
- Mark Harrison <mark@omniti.com> 1230924632 +0000
- Message:
Implement a timeout for sluggish checks
git-svn-id: https://labs.omniti.com/resmon/trunk@153 8c0face9-b7db-6ec6-c4b3-d5f7145c7d55
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r7b9e8bc |
rd75bc41 |
|
| 8 | 8 | my $self = bless { |
|---|
| 9 | 9 | configfile => $filename, |
|---|
| 10 | | modstatus => '' |
|---|
| | 10 | modstatus => '', |
|---|
| | 11 | # Defaults |
|---|
| | 12 | timeout => 10 |
|---|
| 11 | 13 | }, $class; |
|---|
| 12 | 14 | open(CONF, "<$filename") || return undef; |
|---|
| … | … | |
| 75 | 77 | next; |
|---|
| 76 | 78 | } |
|---|
| | 79 | elsif(/\s*TIMEOUT\s+(\d+)\s*;\s*/) { |
|---|
| | 80 | $self->{timeout} = $1; |
|---|
| | 81 | next; |
|---|
| | 82 | } |
|---|
| 77 | 83 | else { |
|---|
| 78 | 84 | die "Syntax Error on line $line\n"; |
|---|
| r021df69 |
rd75bc41 |
|
| 126 | 126 | # Otherwise, run the check |
|---|
| 127 | 127 | if (!$check_rv) { |
|---|
| | 128 | eval { |
|---|
| | 129 | local $SIG{ALRM} = sub { die "alarm\n" }; |
|---|
| | 130 | local $SIG{CHLD} = 'IGNORE'; |
|---|
| | 131 | alarm $config->{timeout}; |
|---|
| 128 | 132 | if($coderef) { |
|---|
| 129 | | eval { ($check_rv, $check_mess) = $coderef->($monobj); }; |
|---|
| | 133 | ($check_rv, $check_mess) = $coderef->($monobj); |
|---|
| 130 | 134 | } else { |
|---|
| 131 | | eval { ($check_rv, $check_mess) = $monobj->handler(); }; |
|---|
| | 135 | ($check_rv, $check_mess) = $monobj->handler(); |
|---|
| 132 | 136 | } |
|---|
| 133 | | # Store the last status for use by fresh_status_msg later |
|---|
| 134 | | # Also converts old style status messages |
|---|
| 135 | | ($check_rv, $check_mess) = |
|---|
| 136 | | Resmon::Module::set_status($monobj, $check_rv, $check_mess); |
|---|
| | 137 | alarm 0; |
|---|
| | 138 | }; |
|---|
| | 139 | # Store the last status for use by fresh_status_msg later |
|---|
| | 140 | # Also converts old style status messages |
|---|
| | 141 | ($check_rv, $check_mess) = |
|---|
| | 142 | Resmon::Module::set_status($monobj, $check_rv, $check_mess); |
|---|
| 137 | 143 | } |
|---|
| 138 | 144 | my $checkstat = $@; |
|---|
| … | … | |
| 146 | 152 | $results->{state} = 'BAD'; |
|---|
| 147 | 153 | $results->{message} = "Bad module or problem running handler code."; |
|---|
| | 154 | if ($checkstat eq "alarm\n") { |
|---|
| | 155 | $results->{message} = "Check timeout"; |
|---|
| | 156 | } |
|---|
| 148 | 157 | } else { |
|---|
| 149 | 158 | $results->{state} = $check_rv; |
|---|
| r9e46345 |
rd75bc41 |
|
| 2 | 2 | PORT 81; |
|---|
| 3 | 3 | STATUSFILE /var/run/resmon-status.txt; |
|---|
| | 4 | TIMEOUT 10; |
|---|
| 4 | 5 | |
|---|
| 5 | 6 | # Resmon health check. Shows the hostname, svn revision, and any problems with |
|---|