Index: trunk/tools/czartool.pl
===================================================================
--- trunk/tools/czartool.pl	(revision 28261)
+++ trunk/tools/czartool.pl	(revision 28704)
@@ -3,26 +3,35 @@
 use warnings;
 use strict;
-use PS::IPP::Config 1.01 qw( :standard );
 use Getopt::Long qw( GetOptions :config auto_help auto_version gnu_getopt );
-use Pod::Usage qw( pod2usage );
-use IPC::Cmd 0.36 qw( can_run run );
-use DBI;
-use constant DB_SOCKET => '/var/run/mysqld/mysqld.sock';
-use File::Temp qw(tempfile);
+
+# local classes
+use czartool::CzarDb;
+use czartool::Gpc1Db;
+use czartool::Pantasks;
+
+
+my $czarDbName = "czardb";
+my $save_temps = 1;
+my $interval = undef;
+
+GetOptions ( 
+        "dbname|d=s" => \$czarDbName,
+        "interval|i=s" => \$interval,
+        );
+
 
 my @states = ("full", "new", "drop", "wait");
-my $db = connectToDb();
-
-if (!$db) {die;}
-
-my @stdscienceLabels = `czartool_getLabels.pl -s stdscience`;
-my @distributionLabels = `czartool_getLabels.pl -s distribution`;
-my @publishingLabels = `czartool_getLabels.pl -s publishing`;
-
-checkAllLabels("new");
-printInstructions();
-
-poll();
-$db->disconnect();
+my $czarDb = new czartool::CzarDb($czarDbName, "ippdb01", "ipp", "ipp");
+my $gpc1Db = new czartool::Gpc1Db("gpc1", "ippdb01", "ippuser", "ippuser");
+my $pantasks = new czartool::Pantasks();
+$czarDb->setDateFormat("%Y%m%d-%H%i%s");
+
+my @stdscienceLabels = undef;
+my @distributionLabels = undef;
+my @publishingLabels = undef;
+
+my @stages = ("chip", "cam", "fake", "warp", "stack", "diff", "magic", "magicDS", "dist"); 
+promptPoll();
+
 
 ###########################################################################
@@ -41,5 +50,11 @@
 #
 ###########################################################################
-sub poll {
+sub promptPoll {
+
+    @stdscienceLabels = @{$pantasks->getLabels("stdscience")};
+    @distributionLabels = @{$pantasks->getLabels("distribution")};
+    @publishingLabels = @{$pantasks->getLabels("publishing")};
+    checkAllLabels("new");
+    printInstructions();
 
     my $key;
@@ -60,25 +75,4 @@
 ###########################################################################
 #
-# Connects to the database
-#
-###########################################################################
-sub connectToDb {
-
-    my $dbname = 'gpc1';
-    my $dbserver = 'ippdb01';
-    my $dbuser = 'ippuser';
-    my $dbpass = 'ippuser';
-    my $db = DBI->connect(
-            "DBI:mysql:database=${dbname};host=${dbserver};mysql_socket=" .
-            DB_SOCKET(),${dbuser},${dbpass},
-            {
-            RaiseError => 1, AutoCommit => 1}
-            ) or die "Unable to connect to database $DBI::errstr\n";
-
-    return $db;
-}
-
-###########################################################################
-#
 # Compares two arrays and stores the differences
 #
@@ -120,5 +114,5 @@
 
         chomp($line);
-    
+
         print "$line\n";
     }
@@ -163,5 +157,5 @@
     chomp($input);
     if ($input =~ m/^([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$/) {
-       return checkOneLabel($stdscienceLabels[$input]);
+        return checkOneLabel($stdscienceLabels[$input]);
     }
 
@@ -179,11 +173,12 @@
     chomp($label);
 
-    printf("\n+-------------------------------------------------------------------------------------+\n");
-    printf("|                        %32s                             |\n", $label);
-    printf("+------------+-------+-------+-------+-------+-------+-------+-------+--------+-------+\n");
-    printf("|   state    |  chip |  cam  |  fake | warp  | stack |  diff | magic |destreak|  dist |\n");
-    printf("+------------+-------+-------+-------+-------+-------+-------+-------+--------+-------+\n");
+    printf("\n+---------------------------------------------------------------------------------------------------------------------------------+\n");
+    printf("|                                                  %32s                                               |\n", $label);
+    printf("+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+\n");
+    printf("|   state    |    chip    |    cam     |    fake    |    warp    |   stack    |    diff    |   magic    |  destreak  |    dist    |\n");
+    printf("+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+\n");
 
     my $state;
+    my $stage;
     my $i=0;
     foreach $state (@states) {
@@ -191,18 +186,15 @@
         chomp($label);
         printf("| %10s ", $state);
-        printf("| %5s ", getStateAndFaults($label, "chipRun", $state, "chip"));
-        printf("| %5s ", getStateAndFaults($label, "camRun", $state, "cam"));
-        printf("| %5s ", getStateAndFaults($label, "fakeRun", $state, "fake"));
-        printf("| %5s ", getStateAndFaults($label, "warpRun", $state, "warp"));
-        printf("| %5s ", getStateAndFaults($label, "stackRun", $state, "stack"));
-        printf("| %5s ", getStateAndFaults($label, "diffRun", $state, "diff"));
-        printf("| %5s ", getStateAndFaults($label, "magicRun", $state, "magic"));
-        printf("| %6s ", getStateAndFaults($label, "magicDSRun", $state, "magicDS"));
-        printf("| %5s ", getStateAndFaults($label, "distRun", $state, "dist"));
+
+        foreach $stage (@stages) {
+
+            printf("| %10s ", getStateAndFaultsString($label, $state, $stage));
+        }
+
         printf("|\n");
         $i++;
     }
 
-    printf("+------------+-------+-------+-------+-------+-------+-------+-------+--------+-------+\n");
+    printf("+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+\n");
 
 }
@@ -225,7 +217,8 @@
     my $distLabel;
     my $pubLabel;
-    my $i=1;
     my $distributing;
     my $publishing;
+    my $stage;
+    my $i=1;
     foreach $stdsLabel (@stdscienceLabels) {
 
@@ -246,13 +239,10 @@
         printf("| %10s    ", $distributing ? "yes" : "NO" );
         printf("| %10s    ", $publishing ? "yes" : "NO" );
-        printf("| %10s ", getStateAndFaults($stdsLabel, "chipRun", $state, "chip"));
-        printf("| %10s ", getStateAndFaults($stdsLabel, "camRun", $state, "cam"));
-        printf("| %10s ", getStateAndFaults($stdsLabel, "fakeRun", $state, "fake"));
-        printf("| %10s ", getStateAndFaults($stdsLabel, "warpRun", $state, "warp"));
-        printf("| %10s ", getStateAndFaults($stdsLabel, "stackRun", $state, "stack"));
-        printf("| %10s ", getStateAndFaults($stdsLabel, "diffRun", $state, "diff"));
-        printf("| %10s ", getStateAndFaults($stdsLabel, "magicRun", $state, "magic"));
-        printf("| %10s ", getStateAndFaults($stdsLabel, "magicDSRun", $state, "magicDS"));
-        printf("| %10s ", getStateAndFaults($stdsLabel, "distRun", $state, "dist"));
+
+        foreach $stage (@stages) {
+
+            printf("| %10s ", getStateAndFaultsString($stdsLabel, $state, $stage));
+        }
+
         printf("|\n");
         $i++;
@@ -265,15 +255,15 @@
 ###########################################################################
 #
-# Returns state and fault-count (if new) as a string
-#
-###########################################################################
-sub getStateAndFaults {
-    my ($label, $table, $state, $stage) = @_;
-
-    my $new = checkLabel($label, $table, $state, $stage);
+# Returns state and fault-count (if new) as a string TODO untidy
+#
+###########################################################################
+sub getStateAndFaultsString {
+    my ($label, $state, $stage) = @_;
+
+    my $new = $gpc1Db->countExposures($label, $stage, $state);
 
     if ($state ne "new") {return $new;}
 
-    my $faults = countFaults($label,$table,$stage);
+    my $faults = $gpc1Db->countFaults($label, $stage);
 
     if ($faults < 1) {return $new;}
@@ -282,63 +272,3 @@
 }
 
-###########################################################################
-#
-# Returns count of exposures with this state for this label
-#
-###########################################################################
-sub checkLabel {
-    my ($label, $table, $state, $stage) = @_;
-
-    if ($state eq "fault") {return countFaults($label, $table, $stage);}
-
-    my $query = $db->prepare(<<SQL);
-    SELECT count(state)  
-        FROM $table 
-        WHERE label LIKE '$label' 
-        AND state = '$state'
-
-SQL
-
-        $query->execute;
-    return scalar $query->fetchrow_array();
-}
-
-###########################################################################
-#
-# Returns count of faults for this stage and label
-#
-###########################################################################
-sub countFaults {
-    my ($label, $table, $stage) = @_;
-
-    my $joinTable;
-    my $id = $stage."_id";
-
-    if ($stage eq "chip") {$joinTable="chipProcessedImfile";}
-    elsif ($stage eq "cam") {$joinTable="camProcessedExp";}
-    elsif ($stage eq "fake") {$joinTable="fakeProcessedImfile";}
-    elsif ($stage eq "warp") {$joinTable="warpSkyfile";}
-    elsif ($stage eq "stack") {$joinTable="stackSumSkyfile";}
-    elsif ($stage eq "diff") {$joinTable="diffSkyfile";}
-    elsif ($stage eq "magic") {$joinTable="magicNodeResult";}
-    elsif ($stage eq "magicDS") {$id = "magic_ds_id"; $joinTable="magicDSFile";}
-    elsif ($stage eq "dist") {$joinTable="distComponent";}
-    else {return -1;}
-
-    my $faultCol =  $joinTable.".fault";
-    my $stateCol =  $table.".state";
-
-    my $query = $db->prepare(<<SQL);
-    SELECT COUNT(DISTINCT $id) 
-        FROM $table
-        JOIN $joinTable USING ($id)
-        WHERE label LIKE '$label'
-        AND $faultCol != 0
-        AND $stateCol = 'new'
-
-SQL
-
-        $query->execute;
-    return scalar $query->fetchrow_array();
-}
-
+
