| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Bio::GMOD::Admin::Monitor; |
|
2
|
|
|
|
|
|
|
|
|
3
|
3
|
|
|
3
|
|
21
|
use strict; |
|
|
3
|
|
|
|
|
8
|
|
|
|
3
|
|
|
|
|
112
|
|
|
4
|
3
|
|
|
3
|
|
17
|
use vars qw/@ISA/; |
|
|
3
|
|
|
|
|
5
|
|
|
|
3
|
|
|
|
|
117
|
|
|
5
|
3
|
|
|
3
|
|
3083
|
use Bio::GMOD; |
|
|
3
|
|
|
|
|
9
|
|
|
|
3
|
|
|
|
|
84
|
|
|
6
|
|
|
|
|
|
|
#use Bio::GMOD::Util::Email; |
|
7
|
3
|
|
|
3
|
|
19
|
use Bio::GMOD::Util::Rearrange; |
|
|
3
|
|
|
|
|
6
|
|
|
|
3
|
|
|
|
|
3026
|
|
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
@ISA = qw/Bio::GMOD Bio::GMOD::Util::Email/; |
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
# A simple generic new method - no need to reload a MOD adaptor |
|
12
|
|
|
|
|
|
|
# since most monitoring options are site-specific |
|
13
|
|
|
|
|
|
|
sub new { |
|
14
|
0
|
|
|
0
|
1
|
|
my ($class,@p) = @_; |
|
15
|
0
|
|
|
|
|
|
my ($mod) = rearrange([qw/MOD/],@p); |
|
16
|
0
|
0
|
|
|
|
|
if ($mod) { |
|
17
|
0
|
|
|
|
|
|
my $gmod = Bio::GMOD->new(-mod=>$mod,-class=>$class); |
|
18
|
0
|
|
|
|
|
|
return $gmod; |
|
19
|
|
|
|
|
|
|
} else { |
|
20
|
0
|
|
|
|
|
|
my $this = bless {},$class; |
|
21
|
0
|
|
|
|
|
|
return $this; |
|
22
|
|
|
|
|
|
|
} |
|
23
|
|
|
|
|
|
|
} |
|
24
|
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
sub generate_report { |
|
26
|
0
|
|
|
0
|
1
|
|
my ($self,@p) = @_; |
|
27
|
0
|
|
|
|
|
|
my ($email_report,$log_report,$components,$email_to_ok,$email_to_warn,$email_from,$email_subject) |
|
28
|
|
|
|
|
|
|
= rearrange([qw/EMAIL_REPORT LOG_REPORT COMPONENTS EMAIL_TO_OK EMAIL_TO_WARN EMAIL_FROM EMAIL_SUBJECT/],@p); |
|
29
|
|
|
|
|
|
|
|
|
30
|
0
|
|
0
|
|
|
|
$email_report ||= 'none'; |
|
31
|
0
|
|
0
|
|
|
|
$log_report ||= 'all'; |
|
32
|
|
|
|
|
|
|
|
|
33
|
0
|
|
|
|
|
|
my $date = $self->fetch_date; |
|
34
|
0
|
|
|
|
|
|
my $msg = <
|
|
35
|
|
|
|
|
|
|
$email_subject |
|
36
|
|
|
|
|
|
|
DATE: $date |
|
37
|
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
END |
|
39
|
|
|
|
|
|
|
|
|
40
|
0
|
|
|
|
|
|
my $failed_flag; # Track whether any of the tests failed |
|
41
|
0
|
|
|
|
|
|
foreach my $component (@$components) { |
|
42
|
0
|
|
|
|
|
|
$msg .= $component->initial_status_string. "\n"; |
|
43
|
0
|
0
|
|
|
|
|
$msg .= $component->final_status_string . "\n" if ($component->final_status_string); |
|
44
|
0
|
|
|
|
|
|
$msg .= "\n"; |
|
45
|
0
|
0
|
|
|
|
|
$failed_flag++ if $component->final_status_string; |
|
46
|
|
|
|
|
|
|
} |
|
47
|
|
|
|
|
|
|
|
|
48
|
0
|
0
|
|
|
|
|
unless ($email_report eq 'none') { |
|
49
|
0
|
|
|
|
|
|
my @to; |
|
50
|
0
|
0
|
|
|
|
|
push (@to,$email_to_ok) if $email_to_ok; |
|
51
|
0
|
0
|
0
|
|
|
|
push (@to,$email_to_warn) if $email_to_warn && $email_to_ok && ($email_to_warn ne $email_to_ok); |
|
|
|
|
0
|
|
|
|
|
|
52
|
|
|
|
|
|
|
|
|
53
|
0
|
0
|
0
|
|
|
|
unless ($email_report eq 'failures' && !$failed_flag) { |
|
54
|
|
|
|
|
|
|
# Bio::GMOD::Util::Email->send_email(-to => \@to, |
|
55
|
|
|
|
|
|
|
# -from => $email_from, |
|
56
|
|
|
|
|
|
|
# -subject => $email_subject, |
|
57
|
|
|
|
|
|
|
# -content => $msg |
|
58
|
|
|
|
|
|
|
# ); |
|
59
|
|
|
|
|
|
|
} |
|
60
|
|
|
|
|
|
|
} |
|
61
|
0
|
|
|
|
|
|
print $msg; |
|
62
|
|
|
|
|
|
|
} |
|
63
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
# Generic accessors |
|
66
|
0
|
|
|
0
|
1
|
|
sub status { return shift->{status}; } |
|
67
|
0
|
|
|
0
|
1
|
|
sub tested_at { return shift->{tested_at}; } |
|
68
|
0
|
|
|
0
|
1
|
|
sub testing { return shift->{testing}; } |
|
69
|
|
|
|
|
|
|
|
|
70
|
0
|
|
|
0
|
1
|
|
sub is_up { return shift->{is_up}; } |
|
71
|
0
|
|
|
0
|
1
|
|
sub is_down { return shift->{is_down} } |
|
72
|
|
|
|
|
|
|
|
|
73
|
0
|
|
|
0
|
1
|
|
sub initial_status_string { return shift->{initial_status_string}; } |
|
74
|
0
|
|
|
0
|
1
|
|
sub final_status_string { return shift->{final_status_string}; } |
|
75
|
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
# Create a formatted string - useful for emails and such |
|
78
|
|
|
|
|
|
|
sub build_status_string { |
|
79
|
0
|
|
|
0
|
0
|
|
my ($self,@p) = @_; |
|
80
|
0
|
|
|
|
|
|
my ($timing,$msg) = rearrange([qw/TIMING MSG/],@p); |
|
81
|
0
|
|
|
|
|
|
my $status = $self->{$timing}->{status}; |
|
82
|
|
|
|
|
|
|
|
|
83
|
0
|
|
|
|
|
|
my $MAX_LENGTH = 60; |
|
84
|
|
|
|
|
|
|
|
|
85
|
0
|
|
|
|
|
|
my $date = $self->fetch_date; |
|
86
|
|
|
|
|
|
|
# Pad the string with '.' up to MAX_LENGTH in length; |
|
87
|
0
|
|
|
|
|
|
my $string = sprintf("%-*s %*s [%s]", |
|
88
|
|
|
|
|
|
|
(length $msg) + 1,$msg, |
|
89
|
|
|
|
|
|
|
$MAX_LENGTH - ((length $msg) + 2), |
|
90
|
|
|
|
|
|
|
("." x ($MAX_LENGTH - ((length $msg) + 2))), |
|
91
|
|
|
|
|
|
|
$status); |
|
92
|
0
|
|
|
|
|
|
my $full_string = "[$date] $string"; |
|
93
|
0
|
|
|
|
|
|
$self->{$timing . "_status_string"} = $full_string; |
|
94
|
0
|
|
|
|
|
|
return $full_string; |
|
95
|
|
|
|
|
|
|
} |
|
96
|
|
|
|
|
|
|
|
|
97
|
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
# Status flags are used for testing various services like acedb, |
|
99
|
|
|
|
|
|
|
# mysqld, httpd or whatever |
|
100
|
|
|
|
|
|
|
sub set_status { |
|
101
|
0
|
|
|
0
|
0
|
|
my ($self,@p) = @_; |
|
102
|
0
|
|
|
|
|
|
my ($timing,$msg,$status) = rearrange([qw/TIMING MSG STATUS/],@p); |
|
103
|
|
|
|
|
|
|
# Timing is one of initial or final |
|
104
|
|
|
|
|
|
|
# Status is true or false if the service is available |
|
105
|
|
|
|
|
|
|
|
|
106
|
0
|
|
|
|
|
|
$self->{$timing}->{status} = $status; |
|
107
|
0
|
|
|
|
|
|
$self->{$timing}->{msg} = $msg; |
|
108
|
|
|
|
|
|
|
|
|
109
|
|
|
|
|
|
|
# Set up some redundant flags, provided as a convenience |
|
110
|
0
|
0
|
0
|
|
|
|
if ($status eq 'up' || $status eq 'succeeded') { |
|
111
|
0
|
|
|
|
|
|
$self->{is_up}++; |
|
112
|
0
|
|
|
|
|
|
$self->{is_down} = undef; |
|
113
|
|
|
|
|
|
|
} |
|
114
|
|
|
|
|
|
|
|
|
115
|
0
|
|
|
|
|
|
my $string = $self->build_status_string(-timing=>$timing,-msg=>$msg); |
|
116
|
|
|
|
|
|
|
|
|
117
|
|
|
|
|
|
|
# Return a boolean for status for easy testing |
|
118
|
0
|
0
|
|
|
|
|
return ($string,$self->is_up ? 1 : 0); |
|
119
|
|
|
|
|
|
|
} |
|
120
|
|
|
|
|
|
|
|
|
121
|
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
__END__ |