- Timestamp:
- Sep 7, 2010, 9:16:10 AM (16 years ago)
- Location:
- branches/eam_branches/ipp-20100823
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
tools/czartool/CzarDb.pm (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20100823
-
branches/eam_branches/ipp-20100823/tools/czartool/CzarDb.pm
r28921 r29124 1 #!/usr/bin/perl i-w1 #!/usr/bin/perl -w 2 2 3 3 package czartool::CzarDb; … … 6 6 use strict; 7 7 8 my @stages = (" chip", "cam", "fake", "warp", "stack", "diff", "magic", "magicDS", "dist"); # TODO put elsewhere8 my @stages = ("burntool", "chip", "cam", "fake", "warp", "stack", "diff", "magic", "magicDS", "dist"); # TODO put elsewhere 9 9 10 10 use base 'czartool::MySQLDb'; … … 119 119 120 120 $query->execute; 121 } 122 123 ########################################################################### 124 # 125 # Updates nightlyscience table 126 # 127 ########################################################################### 128 sub updateNightlyScience { 129 my ($self, $status) = @_; 130 131 my $query = $self->{_db}->prepare(<<SQL); 132 DELETE FROM nightlyscience; 133 SQL 134 135 $query->execute; 136 137 $query = $self->{_db}->prepare(<<SQL); 138 INSERT INTO nightlyscience 139 (status) 140 VALUES 141 ('$status'); 142 SQL 143 144 $query->execute; 121 145 } 122 146 … … 218 242 ########################################################################### 219 243 sub createTimeSeriesData { 220 my ($self, $label, $stage, $fromTime, $toTime, $minX, $maxX, $minY, $maxY, $timeDiff) = @_; 221 222 my $dataFile = "/tmp/czarplot_gnuplot_".$label."_".$stage."_t.dat"; 223 open (GNUDAT, ">$dataFile"); 244 my ($self, $label, $stage, $fromTime, $toTime, $minX, $maxX, $minY, $maxY, $timeDiff, $dataFile, $isLog) = @_; 245 246 ${$dataFile} = "/tmp/czarplot_gnuplot_".$label."_".$stage."_t.dat"; 247 248 open (GNUDAT, ">${$dataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n"; 224 249 225 250 my $query = $self->{_db}->prepare(<<SQL); … … 235 260 SQL 236 261 237 if (!$query->execute) {return undef;}262 if (!$query->execute) {return 0;} 238 263 239 264 my $minProcessed = undef; 240 241 ($minProcessed, ${$maxY}, ${$minY}, ${$maxX}, ${$minX}, ${$timeDiff}) = $query->fetchrow_array(); 242 243 if (!defined $minProcessed) {return undef;} 265 my ($_maxY, $_minY, $_timeDiff); 266 ($minProcessed, $_maxY, $_minY, ${$maxX}, ${$minX}, $_timeDiff) = $query->fetchrow_array(); 267 268 if ($_maxY > ${$maxY}) {${$maxY} = $_maxY;} 269 if ($_minY < ${$minY}) {${$minY} = $_minY;} 270 if ($_timeDiff > ${$timeDiff}) {${$timeDiff} = $_timeDiff;} 271 272 if (!defined $minProcessed) {return 0;} 244 273 245 274 $query = $self->{_db}->prepare(<<SQL); … … 256 285 # loop round results 257 286 while (my @row = $query->fetchrow_array()) { 258 259 287 my ($timestamp, $pending, $faults, $processed) = @row; 260 # print "'$timestamp' '$pending' '$faults' '$processed'\n"; 288 289 if ($isLog) { 290 291 $processed = log($processed + 1); 292 $pending = log($pending + 1); 293 $faults = log($faults + 1); 294 } 295 261 296 print GNUDAT "$timestamp $pending $faults $processed\n"; 262 297 } 263 close(GNUDAT); 264 265 return $dataFile; 298 299 close(GNUDAT) or print "* Problem closing gnuplot data file for plot for '$label' '$stage'\n"; 300 301 return 1; 266 302 } 267 303 … … 491 527 } 492 528 529 530 ########################################################################### 531 # 532 # Deletes all but one row per interval from all stage tables for all labels between the two dates 533 # 534 ########################################################################### 535 sub cleanupDateRange { 536 my ($self, $startDay, $endDay, $interval) = @_; 537 538 my $thisDay = $startDay; 539 my $quit = 0; 540 while(!$quit) { 541 542 if (!$self->isBefore($thisDay, $endDay)) { 543 544 $quit = 1; 545 } 546 547 print "* Running cleanup for $thisDay with an interval of $interval\n"; 548 $self->cleanupADay($thisDay, $interval); 549 $thisDay = $self->addInterval($thisDay, "1 DAY"); 550 551 } 552 } 553 ########################################################################### 554 # 555 # Deletes all but one row per interval from all stage tables for all labels between the provided day 556 # 557 ########################################################################### 558 sub cleanupADay { 559 my ($self, $startDay, $interval) = @_; 560 561 my $endDay = $self->addInterval($startDay, "1 DAY"); 562 563 my $labels = undef; 564 my $fromTime = $startDay; 565 my $toTime = undef; 566 my $totalDeleted = undef; 567 my $quit = 0; 568 while(!$quit) { 569 570 $toTime = $self->addInterval($fromTime, $interval); 571 if (!$self->isBefore($toTime, $endDay)) { 572 573 $toTime = $endDay; 574 $quit = 1; 575 } 576 577 my $stage = undef; 578 $totalDeleted = 0; 579 foreach $stage (@stages) { 580 581 if (!$self->getLabelsInThisTimePeriod($stage, $fromTime, $toTime, \$labels)) {next;} 582 583 my $label = undef; 584 my $row = undef; 585 foreach $row ( @{$labels} ) { 586 my ($label) = @{$row}; 587 588 my $query = $self->{_db}->prepare(<<SQL); 589 SELECT COUNT(*) 590 FROM $stage 591 WHERE timestamp > '$fromTime' 592 AND timestamp <= '$toTime' 593 AND label = '$label' 594 SQL 595 596 $query->execute; 597 598 my $toDelete = scalar $query->fetchrow_array() - 1; 599 if ($toDelete < 1) {next;} 600 601 $query = $self->{_db}->prepare(<<SQL); 602 DELETE FROM $stage 603 WHERE timestamp > '$fromTime' 604 AND timestamp <= '$toTime' 605 AND label = '$label' ORDER BY timestamp DESC LIMIT $toDelete 606 SQL 607 $query->execute; 608 609 $totalDeleted += $toDelete; 610 } 611 } 612 print " * Deleted $totalDeleted between $fromTime and $toTime\n"; 613 $fromTime = $toTime; 614 } 615 } 616 617 ########################################################################### 618 # 619 # Returns an array of labels present during the provided time frame 620 # 621 ########################################################################### 622 sub getLabelsInThisTimePeriod { 623 my ($self, $stage, $fromTime, $toTime, $labels) = @_; 624 625 my $query = $self->{_db}->prepare(<<SQL); 626 SELECT DISTINCT label 627 FROM $stage 628 WHERE timestamp > '$fromTime' 629 AND timestamp <= '$toTime'; 630 SQL 631 632 if (!$query->execute) { 633 634 return 0; 635 } 636 637 ${$labels} = $query->fetchall_arrayref(); 638 639 return 1; 640 } 641 493 642 ########################################################################### 494 643 # … … 500 649 501 650 my $currentRevision = -1; 502 my $latestRevision = 10; 503 504 while ($currentRevision != $latestRevision) { 651 652 while (1) { 505 653 506 654 $currentRevision = $self->getRevision(); … … 517 665 elsif ($currentRevision == 8) {$self->createRevision_9();} 518 666 elsif ($currentRevision == 9) {$self->createRevision_10();} 667 elsif ($currentRevision == 10) {$self->createRevision_11();} 668 elsif ($currentRevision == 11) {$self->createRevision_12();} 669 else {last;} 519 670 } 520 671 } … … 841 992 } 842 993 994 ####################################################################################### 995 # 996 # Create revision 11 of the database 997 # 998 ####################################################################################### 999 sub createRevision_11 { 1000 my ($self) = @_; 1001 1002 print "* Creating revision 11 of '$self->{_dbName}'\n"; 1003 1004 # same shape as other stage tables to enable easy update 1005 my $query = $self->{_db}->prepare(<<SQL); 1006 CREATE TABLE burntool ( 1007 timestamp TIMESTAMP DEFAULT NOW(), 1008 label VARCHAR(128) DEFAULT "NONE", 1009 pending BIGINT NOT NULL, 1010 processed BIGINT NOT NULL, 1011 faults BIGINT NOT NULL); 1012 SQL 1013 1014 $query->execute; 1015 $query = $self->{_db}->prepare(<<SQL); 1016 CREATE INDEX burntoolIndex ON burntool (timestamp, label); 1017 SQL 1018 1019 $query->execute; 1020 1021 $self->setRevision(11); 1022 } 1023 1024 ####################################################################################### 1025 # 1026 # Create revision 12 of the database 1027 # 1028 ####################################################################################### 1029 sub createRevision_12 { 1030 my ($self) = @_; 1031 1032 print "* Creating revision 12 of '$self->{_dbName}'\n"; 1033 1034 # same shape as other stage tables to enable easy update 1035 my $query = $self->{_db}->prepare(<<SQL); 1036 CREATE TABLE nightlyscience ( 1037 timestamp TIMESTAMP DEFAULT NOW(), 1038 status VARCHAR(128) DEFAULT "NONE"); 1039 SQL 1040 1041 $query->execute; 1042 1043 $self->setRevision(12); 1044 } 1045 843 1046 1; 844 1047
Note:
See TracChangeset
for help on using the changeset viewer.
