Index: /trunk/ippMonitor/Makefile.in
===================================================================
--- /trunk/ippMonitor/Makefile.in	(revision 28609)
+++ /trunk/ippMonitor/Makefile.in	(revision 28610)
@@ -17,4 +17,5 @@
 $(DESTBIN)/czartool_checkServer.pl \
 $(DESTBIN)/czartool_getServerStatus.pl \
+$(DESTBIN)/czartool_revert.pl \
 $(DESTBIN)/build_histogram.dvo \
 $(DESTBIN)/helpers.dvo \
Index: /trunk/ippMonitor/raw/czartool_labels.php
===================================================================
--- /trunk/ippMonitor/raw/czartool_labels.php	(revision 28609)
+++ /trunk/ippMonitor/raw/czartool_labels.php	(revision 28610)
@@ -9,4 +9,10 @@
 
 $db = dbconnect($ID['proj']);
+$PATH = getenv("PATH");
+putenv("PATH=$BINDIR:$PATH");
+
+$LD_LIBRARY_PATH = getenv("LD_LIBRARY_PATH");
+putenv("LD_LIBRARY_PATH=$LIBDIR:$LD_LIBRARY_PATH");
+
 
 if ($ID['menu']) {$myMenu = $ID['menu'];}
@@ -20,15 +26,16 @@
 
 $userSelection = $_GET[selection];
-
 if ($userSelection == "") {$userSelection = $_POST['state'];}
 if ($userSelection == "") {$userSelection = "new";}
 
+// anything to revert?
+$revertServer = $_GET[server];
+$revertStage = $_GET[stage];
+$revertMode = $_GET[revert];
+
+if ($revertStage != "" && $revertMode != "" && $revertServer != "" )
+    exec("czartool_revert.pl -s $revertServer -t $revertStage -o $revertMode", $revertOnOff, $status);
+
 $debug = 0;
-
-$PATH = getenv("PATH");
-putenv("PATH=$BINDIR:$PATH");
-
-$LD_LIBRARY_PATH = getenv("LD_LIBRARY_PATH");
-putenv("LD_LIBRARY_PATH=$LIBDIR:$LD_LIBRARY_PATH");
 
 exec("czartool_getLabels.pl -s stdscience", $stdsLabels, $status);
@@ -43,5 +50,5 @@
 
 $states=array("full","new","drop","wait");
-$stages=array("chip","cam","fake","warp","stack","diff","magic","destreak","dist");
+$stages=array("chip","camera","fake","warp","stack","diff","magic","destreak","dist");
 
 // set up the form
@@ -110,5 +117,5 @@
         getStateAndFaults($db, $label,"warpRun", $state, "warp", $str, $anyFaults);
         write_table_cell($class, '%s',  $anyFaults ? $link : "",  $str);
-        
+
         $link = "stackFailedSkyfile.php?pass=" . $pass . "&proj=" . $proj . "&stackRun.label=" . $label . "&stackRun.state=new";
         getStateAndFaults($db, $label,"stackRun", $state, "stack", $str, $anyFaults);
@@ -126,5 +133,5 @@
         getStateAndFaults($db, $label,"magicDSRun", $state, "magicDS", $str, $anyFaults);
         write_table_cell($class, '%s',  $anyFaults ? $link : "", $str);
-       
+
         $link = $defaultlink;
         getStateAndFaults($db, $label,"distRun", $state, "dist", $str, $anyFaults);
@@ -151,20 +158,30 @@
     // set up table columns
     $class = "list";
-    //echo "<table class=$class BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"5\">\n";
     echo "<table class=$class >\n";
+    echo "<tr><td></td>\n";
+
+    write_header_cell($class, "");
+    write_header_cell($class, "");
+    foreach ($stages as &$stage) {
+
+        $revertOnOff=array();
+        if ($stage == "destreak" or $stage == "dist") $server = "distribution";
+        else $server = "stdscience";
+        exec("czartool_revert.pl -s $server -t $stage", $revertOnOff, $status);
+        $link = "czartool_labels.php?pass=" . $pass . "&proj=" . $proj . "&server=" . $server . "&stage=" . $stage . "&revert=";
+        if($revertOnOff[0] == "off") {$label =  "Start reverts";$link = $link . "on";}
+        if($revertOnOff[0] == "on") {$label = "Stop reverts";$link = $link . "off";}
+        unset($revertOnOff);
+        write_table_cell($class, '%s', $link, $label);
+    }
+
+    echo "</tr>\n";
     echo "<tr><td></td>\n";
     write_header_cell($class, "label");
     write_header_cell($class, "distributing?");
-    //    echo "<td class=\"$class\"><a href=\"$link\"> $myValue </a></td>\n";
-    //    echo "<th class=\"$class\"><a href=\"czartool.php\">label</th>\n";
-
-    foreach ($stages as &$stage) {write_header_cell($class, $stage);}
-    //foreach ($stages as &$stage) {
-
-    //  $link = "czartool.php?pass=" . $pass . "&proj=" . $proj . "&label=" . $stage;
-    // echo "<th class=\"$class\"><a href=\"$link\">$stage</th>\n";
-    // }
+    foreach ($stages as &$stage) write_header_cell($class, $stage);
 
     echo "</tr>\n";
+    echo "<tr><td></td>\n";
 
     // write rows
@@ -176,5 +193,4 @@
             if ($stdsLabel == $distLabel) { $distributing = true; break;}
         }
-
 
         // create link to label summary page for each label
@@ -204,5 +220,5 @@
         getStateAndFaults($db, $stdsLabel,"warpRun", $selectedState, "warp", $str, $anyFaults);
         write_table_cell($class, '%s',  $anyFaults ? $link : "",  $str);
-        
+
         $link = "stackFailedSkyfile.php?pass=" . $pass . "&proj=" . $proj . "&stackRun.label=" . $stdsLabel . "&stackRun.state=new";
         getStateAndFaults($db, $stdsLabel,"stackRun", $selectedState, "stack", $str, $anyFaults);
@@ -220,5 +236,5 @@
         getStateAndFaults($db, $stdsLabel,"magicDSRun", $selectedState, "magicDS", $str, $anyFaults);
         write_table_cell($class, '%s',  $anyFaults ? $link : "", $str);
-       
+
         $link = $defaultlink;
         getStateAndFaults($db, $stdsLabel,"distRun", $selectedState, "dist", $str, $anyFaults);
@@ -228,8 +244,10 @@
     }
 
+    echo "</tr>\n";
     echo "</table>\n";
 
     echo "<p> - Click on a label to see all states for that label (full, new, drop etc)<br>";
     echo "- Click on a fault to find logfile </p>";
+    echo "- Click on column header to turn reverts on or off </p>";
 }
 
Index: /trunk/ippMonitor/raw/ipp.czartool.dat
===================================================================
--- /trunk/ippMonitor/raw/ipp.czartool.dat	(revision 28609)
+++ /trunk/ippMonitor/raw/ipp.czartool.dat	(revision 28610)
@@ -2,5 +2,5 @@
 
 menutop   | menutop      | plain   | &nbsp;                       | 
+menulink  | menuselect 	 | link    | Processing status            | czartool_labels.php  
 menulink  | menuselect 	 | link    | Last night's data         	  | czartool_summit.php  
-menulink  | menuselect 	 | link    | Check labels             	  | czartool_labels.php  
-menulink  | menuselect 	 | link    | Check servers             	  | czartool_servers.php                         
+menulink  | menuselect 	 | link    | Pantasks servers             | czartool_servers.php                         
Index: /trunk/ippMonitor/scripts/czartool_revert.pl
===================================================================
--- /trunk/ippMonitor/scripts/czartool_revert.pl	(revision 28610)
+++ /trunk/ippMonitor/scripts/czartool_revert.pl	(revision 28610)
@@ -0,0 +1,36 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use strict;
+use Getopt::Long;
+
+my $server = undef;
+my $task = undef;
+my $onoff = undef;
+
+GetOptions (
+        "server|s=s" => \$server,
+        "task|t=s" => \$task,
+        "onoff|o=s" => \$onoff);
+
+my $prob = 0;
+if (!$server) {print "ERROR: need to define a server (-s)\n"; $prob=1;}
+if (!$task) {print "ERROR: need to define a task (-t)\n"; $prob=1;}
+if ($prob) {exit;}
+
+my $revert = undef;
+if ($onoff) {$revert = "$task.revert.$onoff;";}
+else {$revert="";}
+
+my @cmdOut = `echo "$revert status;quit" | pantasks_client -c ~ipp/$server/ptolemy.rc 2>&1`;
+
+my $line;
+foreach $line (@cmdOut) {
+
+    chomp($line);
+    if ($line =~ m/\s+([+-])[+-]\s+$task\.revert.*/) {
+
+        if ($1 =~ m/-/) {print "off\n";}
+        elsif ($1 =~ m/\+/) {print "on\n";}
+    }
+}
