several bugfixes
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 17 Dec 2007 03:23:32 +0000 (03:23 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 17 Dec 2007 03:23:32 +0000 (03:23 +0000)
added "empty preprocessor" as placeholder for Acorde in FDR

SHUTTLE/AliEmptyPreprocessor.cxx [new file with mode: 0644]
SHUTTLE/AliEmptyPreprocessor.h [new file with mode: 0644]
SHUTTLE/AliShuttle.cxx
SHUTTLE/AliShuttleConfig.cxx
SHUTTLE/SHUTTLELinkDef.h
SHUTTLE/libSHUTTLE.pkg

diff --git a/SHUTTLE/AliEmptyPreprocessor.cxx b/SHUTTLE/AliEmptyPreprocessor.cxx
new file mode 100644 (file)
index 0000000..f22ae7a
--- /dev/null
@@ -0,0 +1,21 @@
+#include "AliEmptyPreprocessor.h"
+
+// This preprocessor is used as a placeholder for non-existing preprocessors
+// during the FDR. Its task is just to fail, so that the run does not stay
+// in processing state forever.
+
+ClassImp(AliEmptyPreprocessor)
+
+//______________________________________________________________________________________________
+AliEmptyPreprocessor::AliEmptyPreprocessor(AliShuttleInterface* shuttle, const char* detector) :
+  AliPreprocessor(detector, shuttle)
+{
+  // constructor
+}
+
+//______________________________________________________________________________________________
+AliEmptyPreprocessor::~AliEmptyPreprocessor()
+{
+  // destructor
+}
+
diff --git a/SHUTTLE/AliEmptyPreprocessor.h b/SHUTTLE/AliEmptyPreprocessor.h
new file mode 100644 (file)
index 0000000..79d874a
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef ALIEMPTYPREPROCESSOR_H
+#define ALIEMPTYPREPROCESSOR_H
+
+#include "AliPreprocessor.h"
+
+// This preprocessor is used as a placeholder for non-existing preprocessors
+// during the FDR. Its task is just to fail, so that the run does not stay
+// in processing state forever.
+
+class AliEmptyPreprocessor : public AliPreprocessor
+{
+  public:
+    AliEmptyPreprocessor(AliShuttleInterface* shuttle, const char* detector);
+    virtual ~AliEmptyPreprocessor();
+
+  protected:
+    virtual UInt_t Process(TMap* dcsAliasMap) { return 1; }
+    virtual Bool_t ProcessDCS() { return kFALSE; }
+
+  private:
+    ClassDef(AliEmptyPreprocessor, 0);
+};
+
+#endif
index b53b239..df9b23b 100644 (file)
@@ -15,6 +15,9 @@
 
 /*
 $Log$
+Revision 1.73  2007/12/14 19:31:36  acolla
+Sending email to DCS experts is temporarily commented
+
 Revision 1.72  2007/12/13 15:44:28  acolla
 Run type added in mail sent to detector expert (eases understanding)
 
@@ -654,6 +657,7 @@ Bool_t AliShuttle::StoreOCDB(const TString& gridURI)
                        Log("SHUTTLE", Form("StoreOCDB - %s: object %s has validity infinite but "
                                                "there are previous unprocessed runs!",
                                                fCurrentDetector.Data(), aLocId.GetPath().Data()));
+                       result = kFALSE;
                        continue;
                }
 
@@ -1506,20 +1510,27 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
                fgkMainRefStorage = Form("alien://folder=/alice/data/%d/%s/Reference?user=alidaq?cacheFold=/tmp/OCDBCache", 
                                        GetCurrentYear(), lhcPeriod.Data());
        
-       AliCDBStorage *mainCDBSto = AliCDBManager::Instance()->GetStorage(fgkMainCDB);
-       if(mainCDBSto) mainCDBSto->QueryCDB(GetCurrentRun());
-       AliCDBStorage *mainRefSto = AliCDBManager::Instance()->GetStorage(fgkMainRefStorage);
-       if(mainRefSto) mainRefSto->QueryCDB(GetCurrentRun());
-
        // Loop on detectors in the configuration
        TIter iter(fConfig->GetDetectors());
        TObjString* aDetector = 0;
 
+       Bool_t first = kTRUE;
+
        while ((aDetector = (TObjString*) iter.Next()))
        {
                fCurrentDetector = aDetector->String();
 
                if (ContinueProcessing() == kFALSE) continue;
+               
+               if (first)
+               {
+                 // only read QueryCDB when needed and only once
+                 AliCDBStorage *mainCDBSto = AliCDBManager::Instance()->GetStorage(fgkMainCDB);
+                 if(mainCDBSto) mainCDBSto->QueryCDB(GetCurrentRun());
+                 AliCDBStorage *mainRefSto = AliCDBManager::Instance()->GetStorage(fgkMainRefStorage);
+                 if(mainRefSto) mainRefSto->QueryCDB(GetCurrentRun());
+                 first = kFALSE;
+               }
 
                Log("SHUTTLE", Form("\t\t\t****** run %d - %s: START  ******",
                                                GetCurrentRun(), aDetector->GetName()));
@@ -1905,11 +1916,11 @@ Bool_t AliShuttle::ProcessCurrentDetector()
        }
        
        // save map into file, to help debugging in case of preprocessor error
-       TFile* f = TFile::Open("DCSMap.root","recreate");
+       /*TFile* f = TFile::Open("DCSMap.root","recreate");
        f->cd();
        dcsMap->Write("DCSMap", TObject::kSingleKey);
        f->Close();
-       delete f;
+       delete f;*/
        
        // DCS Archive DB processing successful. Call Preprocessor!
        UpdateShuttleStatus(AliShuttleStatus::kPPStarted);
@@ -3202,19 +3213,6 @@ Bool_t AliShuttle::SendMail()
                gSystem->FreeDirectory(dir);
        }
 
-       TString bodyFileName;
-       bodyFileName.Form("%s/mail.body", GetShuttleLogDir());
-       gSystem->ExpandPathName(bodyFileName);
-
-       ofstream mailBody;
-       mailBody.open(bodyFileName, ofstream::out);
-
-       if (!mailBody.is_open())
-       {
-               Log("SHUTTLE", Form("Could not open mail body file %s", bodyFileName.Data()));
-               return kFALSE;
-       }
-
        TString to="";
        TIter iterExperts(fConfig->GetResponsibles(fCurrentDetector));
        TObjString *anExpert=0;
@@ -3222,7 +3220,8 @@ Bool_t AliShuttle::SendMail()
        {
                to += Form("%s,", anExpert->GetName());
        }
-       to.Remove(to.Length()-1);
+       if (to.Length() > 0)
+         to.Remove(to.Length()-1);
        AliDebug(2, Form("to: %s",to.Data()));
 
        if (to.IsNull()) {
@@ -3230,6 +3229,19 @@ Bool_t AliShuttle::SendMail()
                return kFALSE;
        }
 
+       TString bodyFileName;
+       bodyFileName.Form("%s/mail.body", GetShuttleLogDir());
+       gSystem->ExpandPathName(bodyFileName);
+
+       ofstream mailBody;
+       mailBody.open(bodyFileName, ofstream::out);
+
+       if (!mailBody.is_open())
+       {
+               Log("SHUTTLE", Form("Could not open mail body file %s", bodyFileName.Data()));
+               return kFALSE;
+       }
+
        TString cc="alberto.colla@cern.ch";
 
        TString subject = Form("%s Shuttle preprocessor FAILED in run %d (run type = %s)!",
@@ -3246,7 +3258,7 @@ Bool_t AliShuttle::SendMail()
        {
                body += Form("\thttp://pcalimonitor.cern.ch:8889/shuttle.jsp?time=168 \n\n");
        } else {
-               body += Form("\thttp://pcalimonitor.cern.ch/shuttle.jsp?instance=PROD?time=168 \n\n");
+               body += Form("\thttp://pcalimonitor.cern.ch/shuttle.jsp?instance=PROD&time=168 \n\n");
        }
        
        
index d621351..dcdad71 100644 (file)
 
 /*
 $Log$
+Revision 1.26  2007/12/07 19:14:36  acolla
+in AliShuttleTrigger:
+
+Added automatic collection of new runs on a regular time basis (settable from the configuration)
+
+in AliShuttleConfig: new members
+
+- triggerWait: time to wait for DIM trigger (s) before starting automatic collection of new runs
+- mode: run mode (test, prod) -> used to build log folder (logs or logs_PROD)
+
+in AliShuttle:
+
+- logs now stored in logs/#RUN/DET_#RUN.log
+
 Revision 1.25  2007/11/26 16:58:37  acolla
 Monalisa configuration added: host and table name
 
@@ -978,21 +992,20 @@ UInt_t AliShuttleConfig::SetGlobalConfig(TList* list)
        anAttribute = anEntry->GetAttribute("mode");
        if (!anAttribute) {
                AliWarning("Run mode not set! Running in test mode.");
-       }
-       tmpStr = anAttribute->GetValue();
-       if (tmpStr == "test")
-       {
-               fRunMode = kTest;
-       } else if (tmpStr == "prod") {
-               fRunMode = kProd;
        } else {
-               AliWarning(Form("Not a valid run mode: %s", tmpStr.Data()));            
-               AliWarning("Valid run modes are \"test\" and \"prod\". Running in test mode.");
+         tmpStr = anAttribute->GetValue();
+         if (tmpStr == "test")
+         {
+           fRunMode = kTest;
+         } else if (tmpStr == "prod") {
+           fRunMode = kProd;
+         } else {
+           AliWarning(Form("Not a valid run mode: %s", tmpStr.Data()));                
+           AliWarning("Valid run modes are \"test\" and \"prod\". Running in test mode.");
+         }
        }
                
        return 0;
-       
-       
 }
 
 //______________________________________________________________________________________________
index 2d32c4b..6f6eb13 100644 (file)
@@ -24,5 +24,6 @@
 #pragma link C++ class  TerminateSignalHandler;
 #pragma link C++ class  AliShuttleStatus;
 #pragma link C++ class  AliShuttleLogbookEntry;
+#pragma link C++ class  AliEmptyPreprocessor;
 
 #endif
index 5c09ac2..5256154 100644 (file)
@@ -1,6 +1,7 @@
 SRCS = DCSClient/AliDCSClient.cxx DCSClient/AliDCSMessage.cxx \
        AliShuttle.cxx AliShuttleConfig.cxx \
-       AliShuttleTrigger.cxx AliShuttleStatus.cxx AliShuttleLogbookEntry.cxx
+       AliShuttleTrigger.cxx AliShuttleStatus.cxx AliShuttleLogbookEntry.cxx \
+       AliEmptyPreprocessor.cxx 
 
 CINTHDRS:= $(SRCS:.cxx=.h)
 #CINTHDRS:= $(patsubst %,$(MODDIR)/%,$(SRCS:.cxx=.h))