summaryrefslogtreecommitdiffstats
path: root/cgi/exilog_cgi_servers.pm
blob: ffe5357452bb1a0c45abe2f67c58053fe0e61512 (plain)
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;