Bool_t resultMetadata = kTRUE;
if(fCurrentDetector == "GRP")
{
- Log("StoreOCDB - SHUTTLE","Storing Run Metadata file ...");
+ Log("SHUTTLE","StoreOCDB - Storing Run Metadata file ...");
resultMetadata = CopyFilesToGrid("metadata");
}
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);
}
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);
}
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!
{
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;
{
// Query DAQ's Shuttle logbook and sends the number of open runs to ML
+ SendAlive();
+
// check connection, in case connect
if (!Connect(3))
return;
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))
{
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;
}
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)
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
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()
{
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
//
// 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)) {
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);
}
if (!fMonaLisa)
fMonaLisa = new TMonaLisaWriter(fConfig->GetMonitorHost(), fConfig->GetMonitorTable());
- SendAlive();
CountOpenRuns();
TString whereClause("where shuttle_done=0");
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()));
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()))
{
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();
+}