1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#!/usr/bin/perl -w
#
# This file is part of the exilog suite.
#
# http://duncanthrax.net/exilog/
#
# (c) Tom Kistner 2004
#
# See LICENSE for licensing information.
#
package exilog_cgi_servers;
use exilog_config;
use exilog_cgi_html;
use exilog_cgi_param;
use exilog_sql;
use exilog_util;
use strict;
BEGIN {
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
# set the version for version checking
$VERSION = 0.1;
@ISA = qw(Exporter);
@EXPORT = qw(
&servers
);
%EXPORT_TAGS = ();
# your exported package globals go here,
# as well as any optionally exported functions
@EXPORT_OK = qw();
}
sub _get_num_queued {
my $server = shift;
my $h = {};
$h->{queued} = sql_count('queue',{ 'server' => $server });
$h->{frozen} = sql_count('queue',{ 'server' => $server,
'frozen' => '1' } );
$h->{frozen_bounce} = sql_count('queue',{ 'server' => $server,
'mailfrom' => '<>',
'frozen' => '1' } );
my $tmp = sql_count('queue',{ 'server' => $server,
'mailfrom' => '<>' } );
$h->{deferred} = $h->{queued} - $h->{frozen};
$h->{deferred_bounce} = $tmp - $h->{frozen_bounce};
return $h;
}
sub _get_h24_stats {
my $server = shift;
my $now = time();
my $h = {};
$h->{arrivals} = int( sql_count( 'messages',
{ 'server' => $server,
'timestamp' => $now-86400 } ) / 1 );
$h->{deliveries} = int( sql_count( 'deliveries',
{ 'server' => $server,
'timestamp' => $now-86400 } ) / 1 );
$h->{errors} = int( sql_count( 'errors',
{ 'server' => $server,
'timestamp' => $now-86400 } ) / 1 );
my $sizes = sql_select( 'messages', [ 'size' ], { 'server' => $server,
'timestamp' => $now-86400 } );
my $total = 0;
foreach (@{ $sizes }) { $total+=$_->{size}; };
if ((scalar @{ $sizes }) > 0) {
$h->{avg_msg_size} = int($total/(scalar @{ $sizes }));
}
else {
$h->{avg_msg_size} = 0;
};
return $h;
}
sub _get_last_update {
my $server = shift;
my $now = time();
my $timestamp;
my $results = sql_select( 'heartbeats', [ 'timestamp' ], { 'server' => $server } );
foreach (@{ $results }) {
$timestamp = $_->{timestamp};
# if timestamp is older then 5 minutes
if($timestamp + 300 < $now) {
return "<div style='color: #ff5555;'>". stamp_to_date($timestamp) ."</div>";
}
return "<div>". stamp_to_date($timestamp) ."</div>";
}
return "<div style='color: #ff0000;'>no heartbeat signal</div>";
}
sub servers {
#print $q->div({-style=>"font-size: 28px; font-weight: bold;"},"Basic statictics for all servers");
foreach my $server (sort {$a cmp $b} keys %{ $config->{servers} }) {
print render_server($server,_get_num_queued($server),_get_h24_stats($server),_get_last_update($server));
};
}
1;
|