several bugfixes
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttle.cxx
index b53b2396250d94e55929e101155dd380981cf9a0..df9b23b978d7bc40c80aa50746862a597f820f15 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");
        }