]> git.donarmstrong.com Git - infobot.git/blob - src/Modules/Uptime.pl
changed email address
[infobot.git] / src / Modules / Uptime.pl
1 #
2 # Uptime.pl: Uptime daemon for infobot.
3 #    Author: dms
4 #   Version: v0.3 (19991008)
5 #   Created: 19990925.
6 #
7
8 use strict;
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 $infobot_version, ended ". localtime(time());
21   } else {
22     return "$uptimenow running $infobot_version";
23   }
24 }
25
26 sub uptimeGetInfo {
27   my (%uptime,%done,%pid);
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   foreach $uptime (sort {$b <=> $a} keys %uptime) {
53     foreach $pid (keys %{$uptime{$uptime}}) {
54         next if (exists $done{$pid});
55
56         push(@results,"$uptime.$pid $uptime{$uptime}{$pid}");
57         $done{$pid} = 1;
58         last if (scalar @results == $uptimerecords);
59     }
60     last if (scalar @results == $uptimerecords);
61   }
62
63   return @results;
64 }
65
66 sub uptimeWriteFile {
67   my @results = &uptimeGetInfo();
68   my $file = $file{utm};
69
70   if (!open(OUT,">$file")) {
71     &status("error: cannot write to $file.");
72     return;
73   }
74
75   foreach (@results) {
76     print OUT "$_\n";
77   }
78
79   close OUT;
80
81   $conn->schedule(&getRandomInt("1800-3600"), \&uptimeWriteFile, "");
82   return;
83 }
84
85 1;