/[cricket]/generate-overview.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /generate-overview.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide annotations)
Fri Jun 28 09:28:36 2002 UTC (17 years, 5 months ago) by dpavlin
Branch: MAIN
Changes since 1.2: +4 -1 lines
File MIME type: text/plain
generate title of html page

1 dpavlin 1.1 #!/usr/bin/perl -w
2     # -*- perl -*-
3    
4     # Generate overview-[Daily|Monthly|Weekly|Yearly].html files
5     # with links to latest graphs produced by cricket
6     #
7     # Maintained by Dobrica Pavlinusic <dpavlin@rot13.org>
8     #
9     # Based on generate-statics.franky from
10     # Copyright (C) 1999 Noam Freedman <noam@noam.com>
11     #
12     #
13     #
14     # This program is free software; you can redistribute it and/or modify
15     # it under the terms of the GNU General Public License as published by
16     # the Free Software Foundation; either version 2 of the License, or
17     # (at your option) any later version.
18     #
19     # This program is distributed in the hope that it will be useful,
20     # but WITHOUT ANY WARRANTY; without even the implied warranty of
21     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22     # GNU General Public License for more details.
23     #
24     # You should have received a copy of the GNU General Public License
25     # along with this program; if not, write to the Free Software
26     # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27    
28     # Target can be skipped in overview report with skip-overview
29    
30     BEGIN {
31     # $gInstallRoot = (($0 =~ m:^(.*/):)[0] || "./") . ".";
32     require '/etc/cricket/cricket-conf.pl';
33    
34     # You need to update this to point to the URL
35     # you use to access Cricket.
36     # $gBaseURL = "http://localhost/~cricket/grapher.cgi";
37     $gBaseURL = "http://romul.pliva.hr/cgi-bin/cricket/grapher.cgi";
38    
39     # change this to destination directory
40     $path = "/home/dpavlin/public_html";
41     # this is basename of all html files
42     $name = "overview";
43     }
44    
45     #use lib "$gInstallRoot/../lib";
46     use lib "$Common::global::gInstallRoot/lib";
47    
48     use File::Basename;
49     use LWP::UserAgent;
50     use HTTP::Request;
51     use HTTP::Response;
52    
53     use ConfigTree::Cache;
54    
55     use Common::HandleTarget;
56     use Common::Map;
57     use Common::Options;
58     use Common::Log;
59    
60     Common::Options::commonOptions( 'baseURL=s' => \$gBaseURL );
61     initConst();
62    
63     $Common::global::gCT = new ConfigTree::Cache;
64     $gCT = $Common::global::gCT;
65     $gCT->Base($Common::global::gConfigRoot);
66     $gCT->Warn(\&Warn);
67    
68     if (! $Common::global::gCT->init()) {
69     Die("Failed to open compiled config tree from " .
70     "$Common::global::gConfigRoot/config.db: $!");
71     }
72    
73     # if they gave us no subtrees to focus on, use the root of the config tree
74     if ($#ARGV+1 == 0) {
75     push @ARGV, '/';
76     }
77    
78     my %html; # this will store created html
79    
80     my($subtree);
81     foreach $subtree (@ARGV) {
82     if ($gCT->nodeExists($subtree)) {
83     $gCT->visitLeafs($subtree, \&handleTarget,
84     \&handleTargetInstance, \&localHandleTargetInstance);
85     } else {
86     Warn("Unknown subtree $subtree.");
87     }
88     }
89    
90     foreach my $filename (keys %html) {
91     open(OUT,"> $filename") || die "can't open output html '$filename': $!";
92 dpavlin 1.3 print OUT $html{$filename},"</body></html>";
93 dpavlin 1.1 close(OUT);
94     }
95    
96     exit;
97    
98     sub localHandleTargetInstance {
99     my($Name, $target) = @_;
100    
101     $targetpath = $target->{'auto-target-path'};
102     $targetname = $target->{'auto-target-name'};
103    
104     if (! defined($target->{'skip-overview'}))
105     {
106     Info("Working on target $targetname.");
107     my($reqRanges,@ranges);
108    
109     $reqRanges = $target->{'static-ranges'};
110    
111     # if (defined($target->{'static-path'}) &&
112     # defined($target->{'static-name'}))
113     # {
114     # $path = $target->{'static-path'};
115     # $name = $target->{'static-name'};
116    
117     if (1) {
118    
119     my($range, @ranges);
120     @ranges = getRanges($reqRanges);
121    
122     foreach $range (@ranges)
123     {
124     $rangeLabel = rangeToLabel($range);
125    
126     my($paramtarget) = "$targetpath/$targetname";
127    
128     my($paraminst);
129    
130     if (defined($target->{'inst'}))
131     {
132     $paraminst = $target->{'inst'};
133     }
134    
135     my($paramrange) = $range;
136    
137     # DO DSLIST STUFF
138    
139     # find the ds names based on the target type
140     my($ttype) = lc($target->{'target-type'});
141     my($ttRef) = $main::gCT->configHash($Name, 'targettype', $ttype, $target);
142    
143     # If there are views defined, then we generate graphs
144     # for each view.
145    
146     my($dslist);
147    
148     my($filename)="$path/$name-$rangeLabel.html";
149 dpavlin 1.3 if (! defined $html{$filename}) {
150     $html{$filename}="<html><head><title>$rangeLabel</title></head><body>";
151     }
152 dpavlin 1.1 my($dir) = dirname($filename);
153     if (! -d $dir) {
154     Info("Making directory $dir to hold file $filename.");
155     Common::Util::MkDir($dir);
156     }
157    
158     if (defined($ttRef->{'view'}))
159     {
160     my($v);
161     foreach $v (split(/\s*,\s*/, $ttRef->{'view'}))
162     {
163     # views are like this: "cpu: cpu1load cpu5load"
164     my($vname, $dss) = split(/\s*:\s*/, $v, 2);
165    
166     $dslist = $dss;
167     $dslist =~ s/\s*$//;
168     $dslist =~ s/\s+/,/g;
169    
170     $URL = "$gBaseURL?type=png&target=$paramtarget";
171     $URL .= "&dslist=$dslist&range=$paramrange";
172     my $desc = "view: ";
173     if ($paraminst ne "") {
174     $URL .= "&inst=$paraminst";
175 dpavlin 1.2 $desc.="$paraminst $paramtarget $vname";
176 dpavlin 1.1 } else {
177     $desc.="$paramtarget $vname";
178     }
179    
180     Info("Retrieving graph for $desc");
181     # getURL($URL,"$path/$name-$vname-$rangeLabel.png");
182     $tmp_URL = "$gBaseURL?target=$paramtarget&range=d:w:m:y&view=$vname";
183     $html{$filename}.="$desc<br><a href=\"$tmp_URL\"><img src=$URL></a><br>";
184     }
185     } else {
186     $dslist = $ttRef->{'ds'};
187     # squeeze out any extra spaces
188     $dslist = join(',', split(/\s*,\s*/, $dslist));
189    
190     $URL = "$gBaseURL?type=png&target=$paramtarget";
191     $URL .= "&dslist=$dslist&range=$paramrange";
192     my $desc = "ds: ";
193     if ($paraminst ne "") {
194     $URL .= "&inst=$paraminst";
195     $desc.="$paraminst $rangeLabel"
196     } else {
197     $desc.="$paramtarget $rangeLabel";
198     }
199    
200     Info("Retrieving graph for $desc");
201    
202     # getURL($URL,"$path/$name-$rangeLabel.png");
203     $tmp_URL = "$gBaseURL?target=$paramtarget&range=d:w:m:y";
204     $html{$filename}.="$desc:<br><a href=\"$tmp_URL\"><img src=$URL><a/><br>";
205     }
206     }
207     }
208     }
209    
210     return;
211     }
212    
213    
214     sub getRanges {
215     my($scales) = @_;
216     $scales = "d:w:m:y" unless (defined($scales));
217    
218     # these definitions mirror how MRTG 2.5 sets up its graphs
219     my(%scaleMap) = ( 'd' => $main::kHour * 42,
220     'w' => $main::kDay * 10,
221     'm' => $main::kWeek * 6,
222     'y' => $main::kMonth * 16);
223    
224     my($scale, @res);
225     foreach $scale (split(/\s*:\s*/, $scales)) {
226     # later, we might do more sophisticated scale specification
227     $scale = $scaleMap{$scale};
228     push @res, $scale;
229     }
230     return @res;
231     }
232    
233    
234     sub initConst {
235     $main::kMinute = 60; # 60 seconds/min
236     $main::kHour = 60 * $main::kMinute;# 60 minutes/hr
237     $main::kDay = 24 * $main::kHour; # 24 hrs/day
238     $main::kWeek = 7 * $main::kDay; # 7 days/week
239     $main::kMonth = 30 * $main::kDay; # 30 days/month
240     $main::kYear = 365 * $main::kDay; # 365 days/year
241    
242     $main::kTypeUnknown = 0;
243     $main::kTypeUnknown = 0; # shut up, -w.
244     $main::kTypeDaily = 1;
245     $main::kTypeWeekly = 2;
246     $main::kTypeMonthly = 3;
247     $main::kTypeYearly = 4;
248    
249     @main::gRangeNameMap = ( undef, 'Daily', 'Weekly', 'Monthly', 'Yearly' );
250    
251     }
252    
253     sub rangeToLabel {
254     my($range) = @_;
255     return $main::gRangeNameMap[rangeType($range)];
256     }
257    
258     sub rangeType {
259     my($range) = @_;
260     my($rangeHours) = $range / 3600;
261    
262     # question: when is kTypeUnknown appropriate?
263    
264     if ($range < $main::kWeek) {
265     return $main::kTypeDaily;
266     } elsif ($range < $main::kMonth) {
267     return $main::kTypeWeekly;
268     } elsif ($range < $main::kYear) {
269     return $main::kTypeMonthly;
270     } else {
271     return $main::kTypeYearly;
272     }
273     }
274    
275    
276     sub getURL
277     {
278     my($url,$filename) = @_;
279    
280     Debug("Fetching url: $url");
281    
282     my $ua = new LWP::UserAgent;
283     my $request = new HTTP::Request('GET', $url);
284     my $response = $ua->request($request);
285    
286     if ($response->is_success) {
287     my($dir) = dirname($filename);
288     if (! -d $dir) {
289     Info("Making directory $dir to hold file $filename.");
290     Common::Util::MkDir($dir);
291     }
292    
293     if (!open(URL,">$filename"))
294     {
295     Error("Error writing to $filename: $!");
296     return;
297     }
298     print URL $response->content;
299     close(URL);
300     }
301     else
302     {
303     Error("Error retrieving target graph: " . $response->message());
304     }
305     }

  ViewVC Help
Powered by ViewVC 1.1.26