Changeset 29038
- Timestamp:
- Aug 24, 2010, 1:01:00 PM (16 years ago)
- File:
-
- 1 edited
-
trunk/tools/czartool/CzarDb.pm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/czartool/CzarDb.pm
r29022 r29038 489 489 490 490 return scalar $query->fetchrow_array(); 491 } 492 493 494 ########################################################################### 495 # 496 # Deletes all but one row per interval from all stage tables for all labels between the two dates 497 # 498 ########################################################################### 499 sub cleanupDateRange { 500 my ($self, $startDay, $endDay, $interval) = @_; 501 502 my $thisDay = $startDay; 503 my $quit = 0; 504 while(!$quit) { 505 506 if (!$self->isBefore($thisDay, $endDay)) { 507 508 $quit = 1; 509 } 510 511 print "* Running cleanup for $thisDay with an interval of $interval\n"; 512 $self->cleanupADay($thisDay, $interval); 513 $thisDay = $self->addInterval($thisDay, "1 DAY"); 514 515 } 516 } 517 ########################################################################### 518 # 519 # Deletes all but one row per interval from all stage tables for all labels between the provided day 520 # 521 ########################################################################### 522 sub cleanupADay { 523 my ($self, $startDay, $interval) = @_; 524 525 my $endDay = $self->addInterval($startDay, "1 DAY"); 526 527 my $labels = undef; 528 my $fromTime = $startDay; 529 my $toTime = undef; 530 my $totalDeleted = undef; 531 my $quit = 0; 532 while(!$quit) { 533 534 $toTime = $self->addInterval($fromTime, $interval); 535 if (!$self->isBefore($toTime, $endDay)) { 536 537 $toTime = $endDay; 538 $quit = 1; 539 } 540 541 my $stage = undef; 542 $totalDeleted = 0; 543 foreach $stage (@stages) { 544 545 if (!$self->getLabelsInThisTimePeriod($stage, $fromTime, $toTime, \$labels)) {next;} 546 547 my $label = undef; 548 my $row = undef; 549 foreach $row ( @{$labels} ) { 550 my ($label) = @{$row}; 551 552 my $query = $self->{_db}->prepare(<<SQL); 553 SELECT COUNT(*) 554 FROM $stage 555 WHERE timestamp > '$fromTime' 556 AND timestamp <= '$toTime' 557 AND label = '$label' 558 SQL 559 560 $query->execute; 561 562 my $toDelete = scalar $query->fetchrow_array() - 1; 563 if ($toDelete < 1) {next;} 564 565 $query = $self->{_db}->prepare(<<SQL); 566 DELETE FROM $stage 567 WHERE timestamp > '$fromTime' 568 AND timestamp <= '$toTime' 569 AND label = '$label' ORDER BY timestamp DESC LIMIT $toDelete 570 SQL 571 $query->execute; 572 573 $totalDeleted += $toDelete; 574 } 575 } 576 print " * Deleted $totalDeleted between $fromTime and $toTime\n"; 577 $fromTime = $toTime; 578 } 579 } 580 581 ########################################################################### 582 # 583 # Returns an array of labels present during the provided time frame 584 # 585 ########################################################################### 586 sub getLabelsInThisTimePeriod { 587 my ($self, $stage, $fromTime, $toTime, $labels) = @_; 588 589 my $query = $self->{_db}->prepare(<<SQL); 590 SELECT DISTINCT label 591 FROM $stage 592 WHERE timestamp > '$fromTime' 593 AND timestamp <= '$toTime'; 594 SQL 595 596 if (!$query->execute) { 597 598 return 0; 599 } 600 601 ${$labels} = $query->fetchall_arrayref(); 602 603 return 1; 491 604 } 492 605 … … 843 956 844 957 845 ###########################################################################846 #847 # Deletes all but one row per interval from all stage tables for all labels between the two dates848 #849 ###########################################################################850 sub cleanupDateRange {851 my ($self, $startDay, $endDay, $interval) = @_;852 853 my $thisDay = $startDay;854 my $quit = 0;855 while(!$quit) {856 857 if (!$self->isBefore($thisDay, $endDay)) {858 859 $quit = 1;860 }861 862 print "* Running cleanup for $thisDay with an interval of $interval\n";863 $self->cleanupADay($thisDay, $interval);864 $thisDay = $self->addInterval($thisDay, "1 DAY");865 866 }867 }868 ###########################################################################869 #870 # Deletes all but one row per interval from all stage tables for all labels between the provided day871 #872 ###########################################################################873 sub cleanupADay {874 my ($self, $startDay, $interval) = @_;875 876 my $endDay = $self->addInterval($startDay, "1 DAY");877 878 my $labels = undef;879 my $fromTime = $startDay;880 my $toTime = undef;881 my $totalDeleted = undef;882 my $quit = 0;883 while(!$quit) {884 885 $toTime = $self->addInterval($fromTime, $interval);886 if (!$self->isBefore($toTime, $endDay)) {887 888 $toTime = $endDay;889 $quit = 1;890 }891 892 my $stage = undef;893 $totalDeleted = 0;894 foreach $stage (@stages) {895 896 if (!$self->getLabelsInThisTimePeriod($stage, $fromTime, $toTime, \$labels)) {next;}897 898 my $label = undef;899 my $row = undef;900 foreach $row ( @{$labels} ) {901 my ($label) = @{$row};902 903 my $query = $self->{_db}->prepare(<<SQL);904 SELECT COUNT(*)905 FROM $stage906 WHERE timestamp > '$fromTime'907 AND timestamp <= '$toTime'908 AND label = '$label'909 SQL910 911 $query->execute;912 913 my $toDelete = scalar $query->fetchrow_array() - 1;914 if ($toDelete < 1) {next;}915 916 $query = $self->{_db}->prepare(<<SQL);917 DELETE FROM $stage918 WHERE timestamp > '$fromTime'919 AND timestamp <= '$toTime'920 AND label = '$label' ORDER BY timestamp DESC LIMIT $toDelete921 SQL922 $query->execute;923 924 $totalDeleted += $toDelete;925 }926 }927 print " * Deleted $totalDeleted between $fromTime and $toTime\n";928 $fromTime = $toTime;929 }930 }931 932 ###########################################################################933 #934 # Returns an array of labels present during the provided time frame935 #936 ###########################################################################937 sub getLabelsInThisTimePeriod {938 my ($self, $stage, $fromTime, $toTime, $labels) = @_;939 940 my $query = $self->{_db}->prepare(<<SQL);941 SELECT DISTINCT label942 FROM $stage943 WHERE timestamp > '$fromTime'944 AND timestamp <= '$toTime';945 SQL946 947 if (!$query->execute) {948 949 return 0;950 }951 952 ${$labels} = $query->fetchall_arrayref();953 954 return 1;955 }956 957 958 1; 958 959
Note:
See TracChangeset
for help on using the changeset viewer.
