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