]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - SHUTTLE/AliShuttle.cxx
Changing log/temp/status folder path.
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttle.cxx
index 6b730273a106a7d338827ef17563c8f597908cc2..6e4a73ad38d0f416872eb027ce13ce1bc0fba98d 100644 (file)
@@ -946,8 +946,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,8 +975,10 @@ 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);
@@ -1499,8 +1502,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!
@@ -1638,6 +1642,10 @@ Int_t AliShuttle::ProcessCurrentDetector()
        {
                UpdateShuttleStatus(AliShuttleStatus::kSkipped);
                UpdateShuttleLogbook(fCurrentDetector, "DONE");
+               if (!UpdateTableSkippedCase(fCurrentDetector.Data()))
+               {
+                       AliError(Form("Could not update FXS tables for run %d !", GetCurrentRun()));
+               }
                Log(fCurrentDetector, Form("ProcessCurrentDetector - %s preprocessor is not interested in this run type", fCurrentDetector.Data()));
        
                return 2;
@@ -1688,6 +1696,7 @@ Int_t AliShuttle::ProcessCurrentDetector()
 
                        if (fConfig->GetDCSAliases(fCurrentDetector, iServ)->GetEntries() > 0)
                        {
+                               Log(fCurrentDetector, Form("Querying %d DCS aliases", fConfig->GetDCSAliases(fCurrentDetector, iServ)->GetEntries()));
                                aliasMap = GetValueSet(host, port, 
                                                fConfig->GetDCSAliases(fCurrentDetector, iServ), 
                                                kAlias, multiSplit);
@@ -1710,6 +1719,7 @@ Int_t AliShuttle::ProcessCurrentDetector()
                        
                        if (fConfig->GetDCSDataPoints(fCurrentDetector, iServ)->GetEntries() > 0)
                        {
+                               Log(fCurrentDetector, Form("Querying %d DCS data points", fConfig->GetDCSDataPoints(fCurrentDetector, iServ)->GetEntries()));
                                dpMap = GetValueSet(host, port, 
                                                fConfig->GetDCSDataPoints(fCurrentDetector, iServ), 
                                                kDP, multiSplit);
@@ -1802,6 +1812,8 @@ void AliShuttle::CountOpenRuns()
 {
        // Query DAQ's Shuttle logbook and sends the number of open runs to ML
        
+       SendAlive();
+       
        // check connection, in case connect
        if (!Connect(3)) 
                return;
@@ -1966,7 +1978,7 @@ AliShuttleLogbookEntry* AliShuttle::QueryRunParameters(Int_t run)
        
        UInt_t now = time(0);
        // TODO make this a configuration parameter
-       Int_t dcsDelay = 120;
+       Int_t dcsDelay = fConfig->GetDCSDelay()+fConfig->GetDCSQueryOffset();
        
        // runs are accepted if they have ecsSuccess set or more than 1 event
        if (startTime != 0 && endTime != 0 && endTime > startTime && (totEvents > 1 || ecsSuccess) && (endTime < now - dcsDelay))
@@ -2002,6 +2014,10 @@ AliShuttleLogbookEntry* AliShuttle::QueryRunParameters(Int_t run)
                {
                        AliError(Form("Could not update logbook for run %d !", run));
                }
+               if (!UpdateTableSkippedCase("ALL"))
+               {
+                       AliError(Form("Could not update FXS tables for run %d !", run));
+               }
                fLogbookEntry = 0;
        }
                        
@@ -2024,13 +2040,17 @@ TMap* AliShuttle::GetValueSet(const char* host, Int_t port, const TSeqCollection
        TMap* result = 0;
        if (type == kAlias)
        {
-               result = client.GetAliasValues(entries, GetCurrentStartTime(), 
-                       GetCurrentEndTime());
+               //result = client.GetAliasValues(entries, GetCurrentStartTime()-offset, 
+               //      GetCurrentEndTime()+offset);
+               result = client.GetAliasValues(entries, GetStartTimeDCSQuery(), 
+                       GetEndTimeDCSQuery());
        } 
        else if (type == kDP)
        {
-               result = client.GetDPValues(entries, GetCurrentStartTime(), 
-                       GetCurrentEndTime());
+               //result = client.GetDPValues(entries, GetCurrentStartTime()-offset, 
+               //      GetCurrentEndTime()+offset);
+                       result = client.GetDPValues(entries, GetStartTimeDCSQuery(), 
+                       GetEndTimeDCSQuery());
        }
 
        if (result == 0)
@@ -2157,10 +2177,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
@@ -2595,6 +2617,59 @@ Bool_t AliShuttle::UpdateTable()
        return result;
 }
 
+//_______________________________________________________________________________
+Bool_t AliShuttle::UpdateTableSkippedCase(const char* detector)
+{
+       //
+       // Update FXS table filling time_processed field in all rows corresponding to current run and detector
+       // if detector = "ALL" update all detectors
+       //
+
+       Bool_t result = kTRUE;
+
+       for (UInt_t system=0; system<3; system++)
+       {
+
+               // check connection, in case connect
+               if (!Connect(system))
+               {
+                       Log(fCurrentDetector, Form("UpdateTableSkippedCase - Couldn't connect to %s FXS database", GetSystemName(system)));
+                       result = kFALSE;
+                       continue;
+               }
+
+               TTimeStamp now; // now
+
+               // Loop on FXS list entries
+               TIter iter(&fFXSlist[system]);
+                       
+               TString whereClause;
+               if (detector == "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()));
+
+               TString sqlQuery = Form("update %s set time_processed=%d %s", fConfig->GetFXSdbTable(system),
+                                       now.GetSec(), whereClause.Data());
+
+               AliDebug(2, Form("SQL query: \n%s",sqlQuery.Data()));
+
+               // Query execution
+               TSQLResult* aResult;
+               aResult = dynamic_cast<TSQLResult*> (fServer[system]->Query(sqlQuery));
+               if (!aResult)
+               {
+                       Log("SHUTTLE", Form("UpdateTableSkippedCase - %s db: can't execute SQL query <%s>",
+                                                       GetSystemName(system), sqlQuery.Data()));
+                       result = kFALSE;
+                       continue;
+               }
+               delete aResult;
+               
+       }
+
+       return result;
+}
 //______________________________________________________________________________________________
 Bool_t AliShuttle::UpdateTableFailCase()
 {
@@ -2738,6 +2813,15 @@ 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
@@ -2773,11 +2857,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)) {
@@ -2828,8 +2913,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);
        }
@@ -2871,7 +2957,6 @@ Bool_t AliShuttle::Collect(Int_t run)
        if (!fMonaLisa)
                fMonaLisa = new TMonaLisaWriter(fConfig->GetMonitorHost(), fConfig->GetMonitorTable());
                
-       SendAlive();
        CountOpenRuns();
 
        TString whereClause("where shuttle_done=0");
@@ -3204,9 +3289,9 @@ 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());
+               "\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 10 lines of %s log file are following:\n\n", fCurrentDetector.Data());
 
        AliDebug(2, Form("Body begin: %s", body.Data()));
@@ -3215,8 +3300,8 @@ 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 logFileName = Form("%s/%d/%d/%s.log", GetShuttleLogDir(), 
+               GetCurrentRun()/10000, GetCurrentRun(), fCurrentDetector.Data());
        TString tailCommand = Form("tail -n 10 %s >> %s", logFileName.Data(), bodyFileName.Data());
        if (gSystem->Exec(tailCommand.Data()))
        {
@@ -3441,5 +3526,23 @@ Bool_t AliShuttle::TouchFile()
        Log("SHUTTLE", "Sucessfully touched the file");
        return kTRUE;
 }
+//______________________________________________________________________________________________
+const UInt_t AliShuttle::GetStartTimeDCSQuery()
+{
+       // Return Start Time for the DCS query
+       //
+       // The call is delegated to AliShuttleInterface
+
+       return GetCurrentTimeCreated()-fConfig->GetDCSQueryOffset();
+}
+//______________________________________________________________________________________________
+const UInt_t AliShuttle::GetEndTimeDCSQuery()
+{
+       // Return End Time for the DCS query
+       //
+       // The call is delegated to AliShuttleInterface
+
+       return GetCurrentEndTime()+fConfig->GetDCSQueryOffset();
+}