]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - SHUTTLE/AliShuttle.cxx
Changes in TRD configuration for data taking.
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttle.cxx
index a0a979fa5fbbfa1f1dd00649003c8b0fca64e18c..8dfd749614509d639294ce72e33148d159a7f31c 100644 (file)
@@ -200,6 +200,7 @@ Bool_t AliShuttle::StoreLocally(const TString& localUri,
        //
        // returns 0 if fail, 1 otherwise
 
+
        if (fTestMode & kErrorStorage)
        {
                Log(fCurrentDetector, "StoreLocally - In TESTMODE - Simulating error while storing locally");
@@ -234,8 +235,11 @@ Bool_t AliShuttle::StoreLocally(const TString& localUri,
        if (!(AliCDBManager::Instance()->GetStorage(localUri))) {
                Log("SHUTTLE", Form("StoreLocally - Cannot activate local %s storage", cdbType));
        } else {
+               Int_t logLevel = AliLog::GetGlobalLogLevel();
+               AliLog::SetGlobalLogLevel(AliLog::kError);
                result = AliCDBManager::Instance()->GetStorage(localUri)
                                        ->Put(object, id, metaData);
+                AliLog::SetGlobalLogLevel((AliLog::EType_t)logLevel);
        }
 
        if(!result) {
@@ -243,6 +247,7 @@ Bool_t AliShuttle::StoreLocally(const TString& localUri,
                Log(fCurrentDetector, Form("StoreLocally - Can't store object <%s>!", id.ToString().Data()));
        }
 
+
        return result;
 }
 
@@ -276,7 +281,7 @@ Bool_t AliShuttle::StoreOCDB()
        Bool_t resultMetadata = kTRUE;
        if(fCurrentDetector == "GRP") 
        {
-               Log("StoreOCDB - SHUTTLE","Storing Run Metadata file ...");
+               Log("SHUTTLE","StoreOCDB - Storing Run Metadata file ...");
                resultMetadata = CopyFilesToGrid("metadata");
        }
        
@@ -946,8 +951,9 @@ AliShuttleStatus* AliShuttle::ReadShuttleStatus()
                fStatusEntry = 0;
        }
 
+       Int_t path1 = GetCurrentRun()/10000;
        fStatusEntry = AliCDBManager::Instance()->GetStorage(GetLocalCDB())
-               ->Get(Form("/SHUTTLE/STATUS/%s", fCurrentDetector.Data()), GetCurrentRun());
+               ->Get(Form("/SHUTTLE/%s/%d", fCurrentDetector.Data(), path1), GetCurrentRun());
 
        if (!fStatusEntry) return 0;
        fStatusEntry->SetOwner(1);
@@ -974,15 +980,22 @@ Bool_t AliShuttle::WriteShuttleStatus(AliShuttleStatus* status)
        }
 
        Int_t run = GetCurrentRun();
+       Int_t path1 = run/10000;
+       TString path1_string = Form("%d",path1);
 
-       AliCDBId id(AliCDBPath("SHUTTLE", "STATUS", fCurrentDetector), run, run);
+       AliCDBId id(AliCDBPath("SHUTTLE", fCurrentDetector, path1_string), run, run);
 
        fStatusEntry = new AliCDBEntry(status, id, new AliCDBMetaData);
        fStatusEntry->SetOwner(1);
 
+       Int_t logLevel = AliLog::GetGlobalLogLevel();
+        AliLog::SetGlobalLogLevel(AliLog::kError);
+
        UInt_t result = AliCDBManager::Instance()->GetStorage(fgkLocalCDB)->Put(fStatusEntry);
 
-       if (!result) {
+        AliLog::SetGlobalLogLevel((AliLog::EType_t)logLevel);
+
+       if (!result) {
                Log("SHUTTLE", Form("WriteShuttleStatus - Failed for %s, run %d",
                                                fCurrentDetector.Data(), run));
                return kFALSE;
@@ -1022,8 +1035,13 @@ void AliShuttle::UpdateShuttleStatus(AliShuttleStatus::Status newStatus, Bool_t
        status->SetStatus(newStatus);
        if (increaseCount) status->IncreaseCount();
 
+       Int_t logLevel = AliLog::GetGlobalLogLevel();
+        AliLog::SetGlobalLogLevel(AliLog::kError);
+
        AliCDBManager::Instance()->GetStorage(fgkLocalCDB)->Put(fStatusEntry);
 
+        AliLog::SetGlobalLogLevel((AliLog::EType_t)logLevel);
+
        SendMLDetInfo();
 }
 
@@ -1165,6 +1183,29 @@ Bool_t AliShuttle::ContinueProcessing()
                // Send mail to detector expert!
                Log("SHUTTLE", Form("ContinueProcessing - Sending mail to %s expert...", 
                                    fCurrentDetector.Data()));
+               // det experts in to
+               TString to="";
+               TIter *iterExperts = 0;
+               iterExperts = new TIter(fConfig->GetResponsibles(fCurrentDetector));
+               TObjString *anExpert=0;
+               while ((anExpert = (TObjString*) iterExperts->Next()))
+                       {
+                               to += Form("%s, \n", anExpert->GetName());
+                       }
+               delete iterExperts;
+               
+               if (to.Length() > 0)
+                       to.Remove(to.Length()-3);
+               AliDebug(2, Form("to: %s",to.Data()));
+
+               if (to.IsNull()) {
+                       Log("SHUTTLE", Form("List of %s responsibles not set!", fCurrentDetector.Data()));
+                       return kFALSE;
+               }
+
+               Log(fCurrentDetector.Data(), Form("ContinueProcessing - Sending mail to %s expert(s):", 
+                                   fCurrentDetector.Data()));
+               Log(fCurrentDetector.Data(), Form("\n%s", to.Data()));
                if (!SendMail(kPPEMail))
                        Log("SHUTTLE", Form("ContinueProcessing - Could not send mail to %s expert",
                                            fCurrentDetector.Data()));
@@ -1200,6 +1241,9 @@ void AliShuttle::SendMLRunInfo(const char* status)
                runType += fLogbookEntry->GetRunParameter("log");
                runType += ")";
        }
+       if (fLogbookEntry->GetDATestMode()){
+               runType += " (DATest)";
+       }
        TMonaLisaText  mlRunType("SHUTTLE_runtype", runType);
 
        TList mlList;
@@ -1316,21 +1360,27 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
        // Initialization
        Bool_t hasError = kFALSE;
 
-       // Set the CDB and Reference folders according to the year and LHC period
-       TString lhcPeriod(GetLHCPeriod());
-       if (lhcPeriod.Length() == 0) 
-       {
-               Log("SHUTTLE","Process - LHCPeriod not found in logbook!");
-               return 0; 
-       }       
-       
-       // build cdb paths (repeat each time, LHCperiod might have changed)
-       fgkMainCDB.Form("alien://folder=%s%d/%s/OCDB?user=alidaq?cacheFold=/tmp/OCDBCache", 
-                                       fConfig->GetAlienPath(), GetCurrentYear(), lhcPeriod.Data());
-       
-       fgkMainRefStorage.Form("alien://folder=%s%d/%s/Reference?user=alidaq?cacheFold=/tmp/OCDBCache", 
-                                       fConfig->GetAlienPath(), GetCurrentYear(), lhcPeriod.Data());
-       
+       // Set the CDB and Reference folders according to the year
+
+       // build cdb paths (repeat each time, run might be a DATest run)
+       if (!fLogbookEntry->GetDATestMode()){
+               fgkMainCDB.Form("alien://folder=%s%d/OCDB?user=alidaq?cacheFold=/tmp/OCDBCache", 
+                               fConfig->GetAlienPath(), GetCurrentYear());
+               
+               fgkMainRefStorage.Form("alien://folder=%s%d/Reference?user=alidaq?cacheFold=/tmp/OCDBCache", 
+                                      fConfig->GetAlienPath(), GetCurrentYear());
+       }
+       else {
+               fgkMainCDB.Form("alien://folder=%s%d/DATest/OCDB?user=alidaq?cacheFold=/tmp/OCDBCache",
+                               fConfig->GetAlienPath(), GetCurrentYear());
+               
+               fgkMainRefStorage.Form("alien://folder=%s%d/DATest/Reference?user=alidaq?cacheFold=/tmp/OCDBCache",
+                                      fConfig->GetAlienPath(), GetCurrentYear());
+       }
+
+       AliDebug(2,Form("Main CDB storage = %s",fgkMainCDB.Data()));
+       AliDebug(2,Form("Main Reference storage = %s",fgkMainRefStorage.Data()));
+
        // Loop on detectors in the configuration
        TIter iter(fConfig->GetDetectors());
        TObjString* aDetector = 0;
@@ -1499,8 +1549,9 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
                        }
                        
                        TString wd = gSystem->WorkingDirectory();
-                       TString tmpDir = Form("%s/%s_%d_process", GetShuttleTempDir(), 
-                               fCurrentDetector.Data(), GetCurrentRun());
+                       Int_t dir_lev1 = GetCurrentRun()/10000;
+                       TString tmpDir = Form("%s/%d/%d/%s_process", GetShuttleTempDir(), 
+                               dir_lev1, GetCurrentRun(), fCurrentDetector.Data());
                        
                        Int_t result = gSystem->GetPathInfo(tmpDir.Data(), 0, (Long64_t*) 0, 0, 0);
                        if (!result) // temp dir already exists!
@@ -1888,7 +1939,7 @@ Bool_t AliShuttle::QueryShuttleLogbook(const char* whereClause,
        }
 
        // TODO Check field count!
-       const UInt_t nCols = 23;
+       const UInt_t nCols = 25;
        if (aResult->GetFieldCount() != (Int_t) nCols) {
                Log("SHUTTLE", "Invalid SQL result field number!");
                delete aResult;
@@ -1904,6 +1955,11 @@ Bool_t AliShuttle::QueryShuttleLogbook(const char* whereClause,
                if (!entry)
                        continue;
 
+               // DA test mode flag
+               TString daTestModeString(aRow->GetField(2), aRow->GetFieldLength(2)); // field 2 = DA test mode flag 
+               Bool_t daTestMode = (Bool_t)daTestModeString.Atoi();
+               entry->SetDATestMode(daTestMode);
+
                // loop on detectors
                for(UInt_t ii = 0; ii < nCols; ii++)
                        entry->SetDetectorStatus(aResult->GetFieldName(ii), aRow->GetField(ii));
@@ -2173,10 +2229,12 @@ const char* AliShuttle::GetFile(Int_t system, const char* detector,
                                filePath.Data(), fileSize.Data(), fileChecksum.Data()));
 
        // retrieved file is renamed to make it unique
-       TString localFileName = Form("%s/%s_%d_process/%s_%s_%d_%s_%s.shuttle",
-                                       GetShuttleTempDir(), detector, GetCurrentRun(),
+       Int_t dir_lev1 = GetCurrentRun()/10000;
+       TString localFileName = Form("%s/%d/%d/%s_process/%s_%s_%d_%s_%s.shuttle",
+                                    GetShuttleTempDir(), dir_lev1, GetCurrentRun(), detector,
                                        GetSystemName(system), detector, GetCurrentRun(), 
                                        id, sourceName.Data());
+       Log("SHUTTLE",Form("file from FXS = %s",localFileName.Data())); 
 
 
        // file retrieval from FXS
@@ -2334,7 +2392,7 @@ TList* AliShuttle::GetFileSources(Int_t system, const char* detector, const char
                return NULL;
        }
 
-       TString sourceName = 0;
+       TString sourceName = "";
        if (system == kDAQ)
        {
                sourceName = "DAQsource";
@@ -2413,7 +2471,7 @@ TList* AliShuttle::GetFileIDs(Int_t system, const char* detector, const char* so
                return NULL;
        }
 
-       TString sourceName = 0;
+       TString sourceName = "";
        if (system == kDAQ)
        {
                sourceName = "DAQsource";
@@ -2477,7 +2535,12 @@ Bool_t AliShuttle::Connect(Int_t system)
        //
 
        // check connection: if already connected return
-       if(fServer[system] && fServer[system]->IsConnected()) return kTRUE;
+       if(fServer[system] && fServer[system]->IsConnected()) {
+               // ping the server --> automatic reconnection should occur if it was broken but the
+               // server is still alive
+               fServer[system]->Ping();
+               return kTRUE;
+       }
 
        TString dbHost, dbUser, dbPass, dbName;
 
@@ -2621,6 +2684,8 @@ Bool_t AliShuttle::UpdateTableSkippedCase(const char* detector)
 
        Bool_t result = kTRUE;
 
+       TString detName(detector);
+
        for (UInt_t system=0; system<3; system++)
        {
 
@@ -2638,7 +2703,7 @@ Bool_t AliShuttle::UpdateTableSkippedCase(const char* detector)
                TIter iter(&fFXSlist[system]);
                        
                TString whereClause;
-               if (detector == "ALL") whereClause = Form("where run=%d and time_processed IS NULL;",GetCurrentRun());
+               if (detName == "ALL") whereClause = Form("where run=%d and time_processed IS NULL;",GetCurrentRun());
                else whereClause = Form("where run=%d and detector=\"%s\" and time_processed IS NULL;",GetCurrentRun(), detector);
 
                Log("SHUTTLE",Form(" whereClause = %s ",whereClause.Data()));
@@ -2807,16 +2872,6 @@ UInt_t AliShuttle::GetCurrentEndTime() const
 
        return fLogbookEntry ? fLogbookEntry->GetEndTime() : 0;
 }
-//______________________________________________________________________________________________
-UInt_t AliShuttle::GetCurrentTimeCreated() const
-{
-       //
-       // get current end time from logbook entry
-       //
-
-       return fLogbookEntry ? fLogbookEntry->GetTimeCreated() : 0;
-}
-
 //______________________________________________________________________________________________
 UInt_t AliShuttle::GetCurrentYear() const
 {
@@ -2851,11 +2906,12 @@ void AliShuttle::Log(const char* detector, const char* message)
        //
        // Fill log string with a message
        //
-
-       TString logRunDir = GetShuttleLogDir();
-       if (GetCurrentRun() >=0)
-               logRunDir += Form("/%d", GetCurrentRun());
        
+       TString logRunDir = GetShuttleLogDir();
+       if (GetCurrentRun() >=0) {
+               Int_t logDir_lev1 = GetCurrentRun()/10000;
+               logRunDir += Form("/%d/%d", logDir_lev1, GetCurrentRun());
+       }               
        void* dir = gSystem->OpenDirectory(logRunDir.Data());
        if (dir == NULL) {
                if (gSystem->mkdir(logRunDir.Data(), kTRUE)) {
@@ -2906,8 +2962,9 @@ TString AliShuttle::GetLogFileName(const char* detector) const
        
        if (GetCurrentRun() >= 0) 
        {
-               fileName.Form("%s/%d/%s_%d.log", GetShuttleLogDir(), GetCurrentRun(), 
-                       detector, GetCurrentRun());
+               Int_t logDir_lev1 = GetCurrentRun()/10000;
+               fileName.Form("%s/%d/%d/%s.log", GetShuttleLogDir(), logDir_lev1, GetCurrentRun(), 
+                       detector);
        } else {
                fileName.Form("%s/%s.log", GetShuttleLogDir(), detector);
        }
@@ -3146,7 +3203,7 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
 
        if (target == kDCSEMail || target == kFXSEMail) {
                if (!fFirstProcessing)
-               return kTRUE;
+                       return kTRUE;
        }
 
        Int_t runMode = (Int_t)fConfig->GetRunMode();
@@ -3281,10 +3338,10 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
        
        
        body += Form("Find the %s log for the current run on \n\n"
-               "\thttp://pcalishuttle01.cern.ch:8880/%s/%d/%s_%d.log \n\n", 
-               fCurrentDetector.Data(), logFolder.Data(), GetCurrentRun(), 
-                               fCurrentDetector.Data(), GetCurrentRun());
-       body += Form("The last 10 lines of %s log file are following:\n\n", fCurrentDetector.Data());
+               "\thttp://pcalishuttle01.cern.ch:8880/%s/%d/%d/%s.log \n\n", 
+                    fCurrentDetector.Data(), logFolder.Data(), GetCurrentRun()/10000,  
+                               GetCurrentRun(), fCurrentDetector.Data());
+       body += Form("The last 15 lines of %s log file are following:\n\n", fCurrentDetector.Data());
 
        AliDebug(2, Form("Body begin: %s", body.Data()));
 
@@ -3292,9 +3349,9 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
        mailBody.close();
        mailBody.open(bodyFileName, ofstream::out | ofstream::app);
 
-       TString logFileName = Form("%s/%d/%s_%d.log", GetShuttleLogDir(), 
-               GetCurrentRun(), fCurrentDetector.Data(), GetCurrentRun());
-       TString tailCommand = Form("tail -n 10 %s >> %s", logFileName.Data(), bodyFileName.Data());
+       TString logFileName = Form("%s/%d/%d/%s.log", GetShuttleLogDir(), 
+               GetCurrentRun()/10000, GetCurrentRun(), fCurrentDetector.Data());
+       TString tailCommand = Form("tail -n 15 %s >> %s", logFileName.Data(), bodyFileName.Data());
        if (gSystem->Exec(tailCommand.Data()))
        {
                mailBody << Form("%s log file not found ...\n\n", fCurrentDetector.Data());
@@ -3323,7 +3380,6 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
 
        return result == 0;
 }
-
 //______________________________________________________________________________________________
 const char* AliShuttle::GetRunType()
 {
@@ -3447,7 +3503,7 @@ Bool_t AliShuttle::TouchFile()
        }
 
        TString dir;
-       dir.Form("%s%d/%s/SHUTTLE_DONE", fConfig->GetAlienPath(), GetCurrentYear(), GetLHCPeriod());
+       dir.Form("%s%d/SHUTTLE_DONE", fConfig->GetAlienPath(), GetCurrentYear());
        // checking whether directory for touch command exists
        TString commandLs;
        commandLs.Form("ls %s",dir.Data());
@@ -3464,7 +3520,7 @@ Bool_t AliShuttle::TouchFile()
                return kFALSE;
        }
        TObjString *valueLsPath = dynamic_cast<TObjString*>(mapLs->GetValue("path"));
-       if (!valueLsPath || (TString)(valueLsPath->GetString()).CompareTo(dir)!=1){ 
+       if (!valueLsPath || (valueLsPath->GetString()).CompareTo(dir)!=1){ 
                Log("SHUTTLE",Form("No directory %s found, creating it",dir.Data()));
 
                // creating the directory
@@ -3519,16 +3575,16 @@ Bool_t AliShuttle::TouchFile()
        return kTRUE;
 }
 //______________________________________________________________________________________________
-const UInt_t AliShuttle::GetStartTimeDCSQuery()
+UInt_t AliShuttle::GetStartTimeDCSQuery()
 {
        // Return Start Time for the DCS query
        //
        // The call is delegated to AliShuttleInterface
 
-       return GetCurrentTimeCreated()-fConfig->GetDCSQueryOffset();
+       return GetCurrentStartTime()-fConfig->GetDCSQueryOffset();
 }
 //______________________________________________________________________________________________
-const UInt_t AliShuttle::GetEndTimeDCSQuery()
+UInt_t AliShuttle::GetEndTimeDCSQuery()
 {
        // Return End Time for the DCS query
        //
@@ -3537,4 +3593,3 @@ const UInt_t AliShuttle::GetEndTimeDCSQuery()
        return GetCurrentEndTime()+fConfig->GetDCSQueryOffset();
 }
 
-