--- db2gantt.cgi 2002/09/12 16:35:35 1.3
+++ db2gantt.cgi 2002/09/13 11:59:08 1.5
@@ -5,31 +5,46 @@
use Data::Dumper;
use Date::Parse;
use CGI qw/:standard/;
-
-# default range
-my $from="2002-09-11 18:00";
-my $to="2002-09-13 00:00:00";
+use POSIX qw(strftime);
my $debug = 1;
-my $width = 800;
-
-#--- no user servicable parts below this line
+my $width = 600;
+my $use_js = 1;
+# status colors
my %cols = (
'In Progress' => '0,255,0',
- 'In Progress/Failure' => '255,128,128',
- 'In Progress/Errors' => '255,128,128',
+ 'In Progress/Failure' => '255,64,255',
+ 'In Progress/Errors' => '255,64,0',
'Queuing' => '255,255,0',
- 'Aborted', => '255,0,0',
- 'Failed', => '255,0,0',
- 'Completed', => '0,255,0',
- 'Completed/Errors' => '0,255,255',
- 'Completed/Failure', => '0,255,255'
+ 'Aborted' => '255,0,0',
+ 'Failed' => '255,0,0',
+ 'Completed' => '64,255,64',
+ 'Completed/Errors' => '255,128,0',
+ 'Completed/Failure' => '128,0,128',
+ 'Mount Request' => '128,128,255',
);
+#--- no user servicable parts below this line
+
+# time range
+
+my $day_t = (24 * 60 * 60); # 24h interval
+
+my ($from_t,$to_t) = (time()-$day_t,time());
+
+$to_t = param('to_t') if (param('to_t'));
+$from_t = param('from_t') if (param('from_t'));
+
+my $to=strftime("%Y-%m-%d %H:%M:%S",localtime ($to_t));
+my $from=strftime("%Y-%m-%d %H:%M:%S",localtime ($from_t));
+
+
+# keep count of each status
+my %count;
if (param('pic')) {
- print "Content-type: image/png\n\n";
+ print "Content-type: image/png\nCache-Control: max-age=3600, must-revalidate\n\n";
# create picture using GD
use GD;
my $im = new GD::Image(1,8);
@@ -43,12 +58,28 @@
exit;
}
-print "Content-type: text/html\n\n";
+print "Content-type: text/html
+
+
+
+OmniBack Gantt: $from - $to";
+if ($use_js) {
+print '
+
+
+
+';
+}
+print "";
# all vars ending in *_t have utime in them.
#
-my $from_t = str2time($from);
-my $to_t = str2time($to);
my $len_t = $to_t - $from_t;
die "interval must be positive and bigger than 1 sec !" if ($len_t < 1);
@@ -57,25 +88,64 @@
my $q=new CGI;
-print "";
-print "Specification | $from | $to |
\n";
+sub mknav {
+ my $f = shift @_; # from_t
+ my $t = shift @_; # to_t
+ my $ch = shift @_; # char
+ return "url(-relative=>1)."?from_t=${f}&to_t=${t}\">$ch";
+}
+print "";
+print "Specification | ";
+print mknav(($from_t-$day_t),$to_t,'<<'),$from;
+print mknav(($from_t+$day_t),$to_t,'>>') if ($from_t+$day_t < $to_t);
+print " | ";
+print mknav($from_t,($to_t-$day_t),'<<') if ($to_t-$day_t > $from_t);
+print $to,mknav($from_t,($to_t+$day_t),'>>')," |
\n";
-sub draw {
+my $fix_d = 0; # used to fix graph len
+my $min_l = 3; # min length;
+
+sub bar {
my $l = shift @_; # lenght of event utime
- my $status = shift @_; # what to draw
- my $alt = shift @_;
+ my $status = shift @_ || undef; # what to draw
+ my $alt = shift @_ || undef;
+
+ my $size = int($l / ($len_t / $width));
+ if ($size < $min_l) {
+ $size = $min_l;
+ $fix_d += $min_l;
+ }
+ if ($fix_d && $size > $fix_d+$min_l) {
+ $size -= $fix_d;
+ $fix_d = 0;
+ }
- my $size = int($l / ($len_t / $width)) || 1; # dump size (min. size=1)
+ print STDERR "l[$status]:$l scale:",($len_t/$width)," size:$size
alt:$alt\n" if ($debug);
- print STDERR "l[$status]:$l scale:",($len_t/$width)," size:$size
\n" if ($debug);
+ my $html = "url(-relative=>1)."?pic=";
+
+ if ($status) {
+ $html .= $cols{$status};
+ $count{$status}++;
+ } else {
+# $html .= '240,240,240';
+ $html .= '220,220,220';
+ }
+
+ $html .= "\" width=\"$size\" height=\"12\"";
+ if ($use_js && $alt) {
+ $html .= " onmouseover=\"T('$alt')\" onmouseout=\"T()\"";
+ } elsif ($alt) {
+ $html .= " alt=\"$alt\"";
+ }
+ $html .= ">";
- my $col = $cols{$status} || '240,240,240';
- print "";
+ return($html);
}
-my $sql = "select start,finish,specification,status
+my $sql = "select start,finish,specification,status,user_group_host,type,sessionid
from gantt
where (start < '$from' and finish > '$from') or
(start > '$from' and start < '$to')
@@ -97,7 +167,7 @@
if ($curr_t < $to_t && $curr_spec) {
my $t = $to_t - $curr_t;
print STDERR "[filler $curr_t:$t]" if ($debug);
- draw($t,undef,$row->{start}." - ".$row->{finish}." ".$row->{status});
+ print bar($t);
}
print "\n" if ($curr_t != 0);
@@ -114,7 +184,7 @@
if ($start_t > $curr_t) {
my $t = $start_t - $curr_t;
print STDERR "[filler $curr_t:$t]" if ($debug);
- draw($t,undef,$row->{start}." - ".$row->{finish}." ".$row->{status});
+ print bar($t);
$curr_t = $start_t;
}
@@ -128,6 +198,9 @@
$len = ($fin_t - $curr_t);
$less = "<<";
}
+
+ next if ($fin_t > $to_t);
+
if ($fin_t > $to_t) {
# $len -= ($fin_t - $to_t);
$len = ($to_t - $curr_t);
@@ -135,7 +208,12 @@
}
print STDERR "[$less",$row->{status}," $curr_t:$len$more]" if ($debug);
- draw($len,$row->{status},$row->{start}." - ".$row->{finish}." ".$row->{status});
+
+ my $alt = $row->{start}." - ".$row->{finish}."
".
+ $row->{type}." ".$row->{status}."
".
+ $row->{user_group_host}." ".$row->{sessionid}."";
+ $alt =~ s/:\d\d\.\d+//g;
+ print bar($len,$row->{status},$alt);
$curr_t += $len;
@@ -146,7 +224,7 @@
if ($curr_t < $to_t ) {
my $t = $to_t - $curr_t;
print STDERR "[filler $curr_t:$t]" if ($debug);
- draw($t);
+ print bar($t);
}
undef $sth;
@@ -154,3 +232,15 @@
print "\n
";
+
+# label and usage
+$len_t = 50; # disable bar scaling
+
+print "
\nColors for statuses and usage (#):\n";
+print "status | # | color |
\n";
+foreach my $status (keys %count) {
+#foreach my $status (keys %cols) {
+ print "$status | ",$count{$status}," | ",bar($count{$status},$status)," |
\n" if ($status ne "");
+}
+print "
\n";
+