//
// returns 0 if fail, 1 otherwise
+
if (fTestMode & kErrorStorage)
{
Log(fCurrentDetector, "StoreLocally - In TESTMODE - Simulating error while storing locally");
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) {
Log(fCurrentDetector, Form("StoreLocally - Can't store object <%s>!", id.ToString().Data()));
}
+
return result;
}
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;
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();
}
// 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()));
runType += fLogbookEntry->GetRunParameter("log");
runType += ")";
}
+ if (fLogbookEntry->GetDATestMode()){
+ runType += " (DATest)";
+ }
TMonaLisaText mlRunType("SHUTTLE_runtype", runType);
TList mlList;
// 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;
}
// 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;
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));
return NULL;
}
- TString sourceName = 0;
+ TString sourceName = "";
if (system == kDAQ)
{
sourceName = "DAQsource";
return NULL;
}
- TString sourceName = 0;
+ TString sourceName = "";
if (system == kDAQ)
{
sourceName = "DAQsource";
//
// 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;
Bool_t result = kTRUE;
+ TString detName(detector);
+
for (UInt_t system=0; system<3; system++)
{
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()));
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
{
if (target == kDCSEMail || target == kFXSEMail) {
if (!fFirstProcessing)
- return kTRUE;
+ return kTRUE;
}
Int_t runMode = (Int_t)fConfig->GetRunMode();
"\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());
+ body += Form("The last 15 lines of %s log file are following:\n\n", fCurrentDetector.Data());
AliDebug(2, Form("Body begin: %s", body.Data()));
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());
+ 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());
return result == 0;
}
-
//______________________________________________________________________________________________
const char* AliShuttle::GetRunType()
{
}
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());
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
//
// The call is delegated to AliShuttleInterface
- return GetCurrentTimeCreated()-fConfig->GetDCSQueryOffset();
+ return GetCurrentStartTime()-fConfig->GetDCSQueryOffset();
}
//______________________________________________________________________________________________
UInt_t AliShuttle::GetEndTimeDCSQuery()
return GetCurrentEndTime()+fConfig->GetDCSQueryOffset();
}
-