--- db2gantt.cgi 2002/09/12 12:52:38 1.2
+++ db2gantt.cgi 2002/09/13 11:17:20 1.4
@@ -4,41 +4,145 @@
use DBI;
use Data::Dumper;
use Date::Parse;
+use CGI qw/:standard/;
+use POSIX qw(strftime);
-print "Content-type: text/html\n\n";
+my $debug = 1;
+my $width = 600;
+my $use_js = 1;
+
+# status colors
+my %cols = (
+ 'In Progress' => '0,255,0',
+ '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' => '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 $from="2002-09-11 20:00:00";
-my $to="2002-09-13 00:00:00";
+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\nCache-Control: max-age=3600, must-revalidate\n\n";
+ # create picture using GD
+ use GD;
+ my $im = new GD::Image(1,8);
+ my $back = $im->colorAllocate(255,255,255);
+ $im->transparent($back);
+ my ($r,$g,$b) = split(/,/,param('pic'));
+ my $col = $im->colorAllocate($r,$g,$b);
+ $im->fill(0,0,$col);
+ binmode STDOUT;
+ print $im->png;
+ exit;
+}
+
+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);
-my $debug = 1;
-
my $dbh = DBI->connect("DBI:Pg:dbname=gantt","","") || die $DBI::errstr;
+my $q=new CGI;
-#--- no user servicable parts below this line
+
+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 | $from | $to |
";
+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";
-my $width = 900;
+my $fix_d = 0; # used to fix graph len
+my $min_l = 3; # min length;
-sub draw {
+sub bar {
my $l = shift @_; # lenght of event utime
- my $type = 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;
+ }
+
+ print STDERR "l[$status]:$l scale:",($len_t/$width)," size:$size
alt:$alt\n" if ($debug);
- my $size = int($l / ($len_t / $width)) || 1; # dump size (min. size=1)
+ my $html = "url(-relative=>1)."?pic=";
- print STDERR "l[$type]:$l scale:",($len_t/$width)," size:$size
\n" if ($debug);
+ if ($status) {
+ $html .= $cols{$status};
+ $count{$status}++;
+ } else {
+# $html .= '240,240,240';
+ $html .= '220,220,220';
+ }
- print "";
+ $html .= "\" width=\"$size\" height=\"12\"";
+ if ($use_js && $alt) {
+ $html .= " onmouseover=\"T('$alt')\" onmouseout=\"T()\"";
+ } elsif ($alt) {
+ $html .= " alt=\"$alt\"";
+ }
+ $html .= ">";
+
+ return($html);
}
my $sql = "select start,finish,specification,status
@@ -60,10 +164,10 @@
while(my $row = $sth->fetchrow_hashref) {
if ($row->{specification} ne $curr_spec) {
- if ($curr_t < $to_t ) {
+ if ($curr_t < $to_t && $curr_spec) {
my $t = $to_t - $curr_t;
print STDERR "[filler $curr_t:$t]" if ($debug);
- draw($t,"gray",$row->{start}." - ".$row->{finish}." ".$row->{status});
+ print bar($t);
}
print "\n" if ($curr_t != 0);
@@ -80,7 +184,7 @@
if ($start_t > $curr_t) {
my $t = $start_t - $curr_t;
print STDERR "[filler $curr_t:$t]" if ($debug);
- draw($t,"gray",$row->{start}." - ".$row->{finish}." ".$row->{status});
+ print bar($t);
$curr_t = $start_t;
}
@@ -94,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);
@@ -101,7 +208,7 @@
}
print STDERR "[$less",$row->{status}," $curr_t:$len$more]" if ($debug);
- draw($len,"red",$row->{start}." - ".$row->{finish}." ".$row->{status});
+ print bar($len,$row->{status},$row->{start}." - ".$row->{finish}." ".$row->{status});
$curr_t += $len;
@@ -112,11 +219,23 @@
if ($curr_t < $to_t ) {
my $t = $to_t - $curr_t;
print STDERR "[filler $curr_t:$t]" if ($debug);
- draw($t,"gray");
+ print bar($t);
}
undef $sth;
$dbh->disconnect;
-print "
";
+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";