]> git.donarmstrong.com Git - infobot.git/blob - src/Modules/Uptime.pl
* Missed DebianBugs.pl in the previous merge
[infobot.git] / src / Modules / Uptime.pl
1 #
2 # Uptime.pl: Uptime daemon.
3 #    Author: dms
4 #   Version: v0.3 (19991008)
5 #   Created: 19990925.
6 #
7
8 # use strict;   # TODO
9
10 my $uptimerecords       = 3;
11
12 sub uptimeNow {
13     return time() - $^T;
14 }
15
16 sub uptimeStr {
17     my $uptimenow = &uptimeNow();
18
19     if ( defined $_[0] ) {
20         return "$uptimenow.$$ running $bot_version, ended " . gmtime( time() );
21     }
22     else {
23         return "$uptimenow running $bot_version";
24     }
25 }
26
27 sub uptimeGetInfo {
28     my ( %uptime, %done );
29     my ( $uptime, $pid );
30     my @results;
31     my $file = $file{utm};
32
33     if ( !open( IN, $file ) ) {
34         &status("Writing uptime file for first time usage (nothing special).");
35         open( OUT, ">$file" );
36         close OUT;
37     }
38     else {
39         while (<IN>) {
40             chop;
41
42             if (/^(\d+)\.(\d+) (.*)/) {
43                 $uptime{$1}{$2} = $3;
44             }
45         }
46         close IN;
47     }
48
49     &uptimeStr(1) =~ /^(\d+)\.(\d+) (.*)/;
50     $uptime{$1}{$2} = $3;
51
52     # fixed up bad implementation :)
53     # should be no problems, even if uptime or pid is duplicated.
54     ## WARN: run away forks may get through here, have to fix.
55     foreach $uptime ( sort { $b <=> $a } keys %uptime ) {
56         foreach $pid ( keys %{ $uptime{$uptime} } ) {
57             next if ( exists $done{$pid} );
58
59             push( @results, "$uptime.$pid $uptime{$uptime}{$pid}" );
60             $done{$pid} = 1;
61             last if ( scalar @results == $uptimerecords );
62         }
63         last if ( scalar @results == $uptimerecords );
64     }
65
66     return @results;
67 }
68
69 sub uptimeWriteFile {
70     my @results = &uptimeGetInfo();
71     my $file    = $file{utm};
72
73     if ( $$ != $bot_pid ) {
74         &FIXME('uptime: forked process doing weird things!');
75         exit 0;
76     }
77
78     if ( !open( OUT, ">$file" ) ) {
79         &status("error: cannot write to $file.");
80         return;
81     }
82
83     foreach (@results) {
84         print OUT "$_\n";
85     }
86
87     close OUT;
88     &status('--- Saved uptime records.');
89 }
90
91 1;
92
93 # vim:ts=4:sw=4:expandtab:tw=80