Cricket/grapher patch

From AdminWiki

Jump to: navigation, search

Patch for grapher.cgi

--- grapher.cgi.20060526.orig	2006-05-26 09:07:55.015587441 +0900
+++ grapher.cgi	2006-05-26 10:45:53.983503371 +0900
@@ -218,9 +218,9 @@
 
             # put the view into the target dict, so it's
             # there if they want to use it.
-            my($view) = $gQ->param('view');
-            if (defined($view)) {
-                $view = lc $view;
+
+            my($view) = lc $gQ->param('view');
+            if (defined($view) && $view) {
                 $targRef->{'auto-view'} = $view;
             }
 
@@ -273,7 +273,7 @@
 
             my ($enableHoltWinters, $viewRef) = (0,undef);
             my($dslist) = (undef);
-            if (defined($view)) {
+            if (defined($view) && $view) {
                 my($v);
                 foreach $v (split(/\s*,\s*/, $ttRef->{'view'})) {
                     # views are like this: "cpu: cpu1load  cpu5load"
@@ -564,6 +564,9 @@
                     $gQ->param('range', $range);
                     $gQ->param('hw',$hwParam) if (defined($hwParam));
 
+                    # if range is bigger than the daily graph, don't show max
+                    $gQ->param('show-max', 0) if ($range > 151200);
+
                     # this parameter is to trick Netscape into
                     # always asking the CGI for the image, instead
                     # of trying to cache it inappropriately
@@ -710,11 +713,14 @@
             if ($targs->{$targets[0]}->{'disable-short-desc'}) {
                 $doDesc = 0;
             }
+            if ($targs->{$targets[0]}->{'show-graph'}) {
+                $doGraph = 1;
+            }
 
             print "<h3>Targets that are available:</h3>\n";
             print "<table border cellpadding=2 width=100%>\n";
 
-            if ($doDesc) {
+            if ($doDesc || $doGraph) {
                 print "<tr><th align=left width=30%>Name</th>";
                 print "    <th align=left>Description</th></tr>\n";
             } else {
@@ -776,6 +782,7 @@
                 }
                 my($views) = $ttRef->{'view'};
 
+                undef @graph_views;
                 # if it's set, views looks like this:
                 # cpu: cpu1min cpu5min,temp: tempIn tempOut
                 # or for defined top-level views:
@@ -793,20 +800,35 @@
                         $gQ->param('view', $vname);
                         my($me) = makeUrl($gQ);
                         $gQ->delete('view');
-
-                        $links .= "<a href=\"$me\">[ $vdesc ]</a>\n";
+                        # store all needed data for creating a graph
+                        push(@graph_views, {'dslist' => $junk, 'desc'=> $vdesc, 'view' => $vname});
+                        $links .= "   <a href=\"$me\">[ $vdesc ]</a><br>\n";
                     }
 
                     print "<tr><td>$itemName<br>" .
-                        "   \n$links</td>\n";
+                        "$links</td>\n";
                 } else {
                     my($me) = makeUrl($gQ);
+                    $dslist = $ttRef->{'ds'};
 
+                    push(@graph_views, {'dslist' => $dslist, 'desc' => $itemName});
                     my($link) = "<a href=\"$me\">$itemName</a>";
                     print "<tr><td>$link</td>\n";
                 }
 
-                if ($doDesc) {
+                if ($doDesc || $doGraph) {
+                    # if we du desc & we have print graphs to, then print the graphs below the desc
+                    if ($targs->{$item}->{'show-graph'})
+                    {
+                        my $desc_graph = '';
+                        foreach $graph_view (@graph_views)
+						{
+                            $graph_view->{'dslist'} =~ s/ /,/g;
+                            $desc_graph .= "<b>".$graph_view->{'desc'}."</b><br>";
+                            $desc_graph .= '<img src="mini-graph.cgi?type=png;target='.lc($name."/".$item).';dslist='.$graph_view->{'dslist'}.';range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes"><br>';
+                        }
+                        $desc .= "<p>".$desc_graph;
+                    }
                     print "<td>$desc</td></tr>\n";
                 } else {
                     print "</tr>\n";
@@ -1203,6 +1225,7 @@
 sub initConst {
     $kMinute = 60;           #  60 seconds/min
     $kHour   = 60 * $kMinute;#  60 minutes/hr
+    $k6Hour  = 6 * $kHour;   #   6 hours (special)
     $kDay    = 24 * $kHour;  #  24 hrs/day
     $kWeek   = 7  * $kDay;   #   7 days/week
     $kMonth  = 30 * $kDay;   #  30 days/month
@@ -1210,12 +1233,14 @@
 
     $kTypeUnknown   = 0;
     $kTypeUnknown   = 0;    # shut up, -w.
-    $kTypeDaily     = 1;
-    $kTypeWeekly    = 2;
-    $kTypeMonthly   = 3;
-    $kTypeYearly    = 4;
+    $kTypeHour      = 1;
+    $kType6Hour     = 2;
+    $kTypeDaily     = 3;
+    $kTypeWeekly    = 4;
+    $kTypeMonthly   = 5;
+    $kTypeYearly    = 6;
 
-    @gRangeNameMap = ( undef, 'Daily', 'Weekly', 'Monthly', 'Yearly' );
+    @gRangeNameMap = ( undef, 'Hourly', 'six Hours', 'Daily', 'Weekly', 'Monthly', 'Yearly' );
 
     $gKey = "M)&=1+3YH96%D97(H)W1E>'0O<&QA:6XG*2P\@*&]P96XH5" .
             "\"P\@(CPD0V]M;6]N\nM.CIG;&]B86PZ.F=);G-T86QL4F]" .
@@ -1251,10 +1276,12 @@
 
 sub getRanges {
     my($scales) = @_;
-    $scales = "d:w:m:y" unless (defined($scales));
+    $scales = "h:6:d:w:m:y" unless (defined($scales));
 
     # these definitions mirror how MRTG 2.5 sets up its graphs
-    my(%scaleMap) = (   'd' => $kHour * 42,
+    my(%scaleMap) = (   'h' => $kHour,
+                        '6' => $kHour * 6,
+                        'd' => $kHour * 42,
                         'w' => $kDay * 10,
                         'm' => $kWeek * 6,
                         'y' => $kMonth * 16);
@@ -1279,7 +1306,11 @@
 
     # question: when is kTypeUnknown appropriate?
 
-    if ($range < $kWeek) {
+    if ($range < $k6Hour) {
+        return $kTypeHour;
+    } elsif ($range < $kDay) {
+        return $kType6Hour;
+    } elsif ($range < $kWeek) {
         return $kTypeDaily;
     } elsif ($range < $kMonth) {
         return $kTypeWeekly;
@@ -1379,9 +1410,15 @@
     if (defined($viewRef)) {
         mergeHash($gRefDef,$viewRef,1);
     }
+
     my($width) = graphParam($gRefDef, 'width', 500);
     my($height) = graphParam($gRefDef, 'height', 200);
+    # get params and set them, if they exist
+    $width = $gQ->param('width') if ($gQ->param('width'));
+    $height = $gQ->param('height') if ($gQ->param('height'));
     my($useGprint) = graphParam($gRefDef, 'use-gprint', 0);
+    # turn the legend on or off via param
+    $useGprint = $gQ->param('use-gprint') if (defined($gQ->param('use-gprint')));
 
     my($interlaced) = graphParam($gRefDef, 'interlaced', undef);
     my(@interlaced) = ();
@@ -1481,7 +1518,7 @@
         # things we pick up form the target dict
         my($rrd) = $targRef->{'rrd-datafile'};
         $lasttime = scalar(localtime(RRDs::last($rrd)));
-        $lasttime =~ s/:/\\:/g;
+        $lasttime =~ s/:/\\:/g; # so rrd doesn't complain, we need to escape
 
         # use the dslist to create a set of defs/cdefs
 
@@ -1583,6 +1620,7 @@
             # default to not doing max stuff, since it's still a bit
             # messy -- due to bad default RRA setup, etc.
             $mx = isTrue(graphParam($gRef, 'show-max', 0));
+            $mx = $gQ->param('show-max') if (defined($gQ->param('show-max')));
             # if hwParam, disable max, no matter what the config says
             $mx = 0 if (defined($hwParam));
             if ($mx) {
@@ -1876,6 +1914,9 @@
         @fmt = ('-a', 'PNG');
     }
 
+    # don't print a legend
+    @legends = ('--no-legend') if ($gQ->param('no-legend'));
+
     if (isTrue($useGprint)) {
         my $title = $tname;
         if (defined($targRef->{'display-name'})) {
@@ -1894,7 +1935,7 @@
                  '--vertical-label', $yaxis,
                  '--width',          $width,
                  '--height',         $height,
-                 @defs, @cdefs, @lines, @vrules, @gprints);
+                 @legends, @defs, @cdefs, @lines, @vrules, @gprints);
 
     # we unlink the image so that if there's a failure, we
     # won't accidentally display an old image.
@@ -1915,7 +1956,10 @@
         if ($w && $wh && ($wh != $w));
     Warn("Actual graph height ($h) differs from height-hint ($hh).")
         if ($h && $hh && ($hh != $h));
-
+		
+    # lets undef hinting vars if the picture size doesn't match
+    undef($wh) if ($w && $wh && ($wh != $w));
+    undef($hh) if ($h && $hh && ($hh != $h));
 
     sprayPic($imageName);
     unlink($imageName) if $needUnlink;
@@ -2104,8 +2148,8 @@
 sub makeNavLinks {
     my($reqRanges) = shift;
     my($r, @links);
-    my(@r) = ('d', 'w', 'm', ,'y', 'd:w', 'm:y', 'd:w:m:y');
-    my(@rName) = ('Daily', 'Weekly', 'Monthly', 'Yearly', 'Short-Term',
+    my(@r) = ('h', '6', 'd', 'w', 'm', ,'y', 'h:6', 'h:6:d:w', 'd:w', 'm:y', 'h:6:d:w:m:y');
+    my(@rName) = ('Hourly', 'six Hourly', 'Daily', 'Weekly', 'Monthly', 'Yearly', 'Short-Termin', 'Short-Mid-Term', 'Mid-Term',
                   'Long-Term', 'All');
     my($i) = 0;
     foreach $r (@r) {
Personal tools