X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=SHUTTLE%2FAliShuttle.cxx;h=3673410d503697fd173b34538489fcaf05ca273a;hb=a04d1d77d00e1f1538b2de830121c4cb0e3db077;hp=6116bf4cd2a5234ed1c81b706def495536db8bb2;hpb=ff0191c7c7df1e8ed524a99126766d0a06853e07;p=u%2Fmrichter%2FAliRoot.git diff --git a/SHUTTLE/AliShuttle.cxx b/SHUTTLE/AliShuttle.cxx index 6116bf4cd2a..3673410d503 100644 --- a/SHUTTLE/AliShuttle.cxx +++ b/SHUTTLE/AliShuttle.cxx @@ -28,6 +28,7 @@ // For detSpec is used the alias name. // +#include #include "AliShuttle.h" #include "AliCDBManager.h" @@ -67,6 +68,7 @@ #include #include +using namespace std; ClassImp(AliShuttle) @@ -96,9 +98,9 @@ fOutputRedirected(kFALSE) // if (!fConfig->IsValid()) AliFatal("********** !!!!! Invalid configuration !!!!! **********"); - for(int iSys=0;iSys<4;iSys++) { + for(int iSys=0;iSys<5;iSys++) { fServer[iSys]=0; - if (iSys < 3) + if (iSys < 4) fFXSlist[iSys].SetOwner(kTRUE); } fPreprocessorMap.SetOwner(kTRUE); @@ -117,7 +119,7 @@ AliShuttle::~AliShuttle() // fPreprocessorMap.DeleteAll(); - for(int iSys=0;iSys<4;iSys++) + for(int iSys=0;iSys<5;iSys++) if(fServer[iSys]) { fServer[iSys]->Close(); delete fServer[iSys]; @@ -357,6 +359,7 @@ Int_t AliShuttle::StoreOCDB(const TString& gridURI) Form("StoreOCDB - cannot activate main %s storage", type)); return -2; } + gridSto->SetMirrorSEs(fgkMirrorSEs.Data()); gridIds = gridSto->GetQueryCDBList(); @@ -489,7 +492,7 @@ Bool_t AliShuttle::CleanReferenceStorage(const char* detector) if (!dirList) return kTRUE; - if (dirList->GetEntries() < 3) + if (dirList->GetEntries() < 3) // to be changed to 4? { delete dirList; return kTRUE; @@ -950,8 +953,12 @@ AliShuttleStatus* AliShuttle::ReadShuttleStatus() } Int_t path1 = GetCurrentRun()/10000; - fStatusEntry = AliCDBManager::Instance()->GetStorage(GetLocalCDB()) - ->Get(Form("/SHUTTLE/%s/%d", fCurrentDetector.Data(), path1), GetCurrentRun()); + try{ + fStatusEntry = AliCDBManager::Instance()->GetStorage(GetLocalCDB()) + ->Get(Form("/SHUTTLE/%s/%d", fCurrentDetector.Data(), path1), GetCurrentRun()); + } catch(std::exception& x) { + AliInfo(TString::Format("%s",x.what())); + } if (!fStatusEntry) return 0; fStatusEntry->SetOwner(1); @@ -1083,8 +1090,8 @@ Bool_t AliShuttle::ContinueProcessing() dynamic_cast (fPreprocessorMap.GetValue(fCurrentDetector)); if (!aPreprocessor) { - Log("SHUTTLE", Form("ContinueProcessing - %s: no preprocessor registered", fCurrentDetector.Data())); - return kFALSE; + Log("SHUTTLE", Form("ContinueProcessing - %s: no preprocessor registered", fCurrentDetector.Data())); + return kFALSE; } AliShuttleLogbookEntry::Status entryStatus = @@ -1106,7 +1113,7 @@ Bool_t AliShuttle::ContinueProcessing() if (fTestMode == kNone) { Log("SHUTTLE", Form("ContinueProcessing - %s requires strict run ordering" - " but this is not the first unprocessed run!")); + " but this is not the first unprocessed run!",fCurrentDetector.Data())); return kFALSE; } else @@ -1114,7 +1121,7 @@ Bool_t AliShuttle::ContinueProcessing() Log("SHUTTLE", Form("ContinueProcessing - In TESTMODE - " "Although %s requires strict run ordering " "and this is not the first unprocessed run, " - "the SHUTTLE continues")); + "the SHUTTLE continues",fCurrentDetector.Data())); } } @@ -1215,7 +1222,8 @@ Bool_t AliShuttle::ContinueProcessing() Bool_t increaseCount = kTRUE; if (status->GetStatus() == AliShuttleStatus::kDCSError || status->GetStatus() == AliShuttleStatus::kDCSStarted || - status->GetStatus() == AliShuttleStatus::kFXSError) + status->GetStatus() == AliShuttleStatus::kFXSError || + status->GetStatus() == AliShuttleStatus::kOCDBError) increaseCount = kFALSE; UpdateShuttleStatus(AliShuttleStatus::kStarted, increaseCount); @@ -1405,7 +1413,7 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry) Log("SHUTTLE", Form("\t\t\t****** run %d - %s: START ******", GetCurrentRun(), aDetector->GetName())); - for(Int_t iSys=0;iSys<3;iSys++) fFXSCalled[iSys]=kFALSE; + for(Int_t iSys=0;iSys<4;iSys++) fFXSCalled[iSys]=kFALSE; Int_t initialMem = GetMem(getpid()); Log("SHUTTLE", Form("Memory consumption before forking is %d", initialMem)); @@ -1431,17 +1439,29 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry) { Long_t expiredTime = time(0) - begin; - if (expiredTime > fConfig->GetPPTimeOut()) + // the run-dependent timeout is the timeout from the configuration plus a twentieth of + // the run duration, e.g. 3 additional minutes for 1h run or 1/2h for a 10h run + Int_t runDepTimeOut = fConfig->GetPPTimeOut() + (GetCurrentEndTime() - GetCurrentStartTime()) * 0.05; + if (expiredTime > runDepTimeOut) { TString logMsg; AliShuttleStatus *currentStatus = ReadShuttleStatus(); AliShuttleStatus::Status newStatus = AliShuttleStatus::kInvalid; - if (currentStatus->GetStatus() <= AliShuttleStatus::kPPDone) + if (currentStatus->GetStatus() == AliShuttleStatus::kDCSStarted) + { + // in case the pp goes in TimeOut while retrieving the DCS DPs + // set status to kDCSError + + logMsg.Form("Process - Process of %s timed out while retrieving the DCS DataPoints. Run time: %ld seconds. Killing... and setting status to DCSError.", + fCurrentDetector.Data(), expiredTime); + newStatus = AliShuttleStatus::kDCSError; + } + else if (currentStatus->GetStatus() <= AliShuttleStatus::kPPDone) { // in case pp not yet done set status to kPPTimeOut - logMsg.Form("Process - Process of %s timed out. Run time: %d seconds. Killing...", + logMsg.Form("Process - Process of %s timed out. Run time: %ld seconds. Killing...", fCurrentDetector.Data(), expiredTime); newStatus = AliShuttleStatus::kPPTimeOut; } @@ -1450,7 +1470,7 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry) // in case the pp goes in TimeOut while storing the objects in the OCDB // set status to kStoreError - logMsg.Form("Process - Process of %s timed out while storing the OCDB object. Run time: %d seconds. Killing... and setting status to StoreError.", + logMsg.Form("Process - Process of %s timed out while storing the OCDB object. Run time: %ld seconds. Killing... and setting status to StoreError.", fCurrentDetector.Data(), expiredTime); newStatus = AliShuttleStatus::kStoreError; } @@ -1458,7 +1478,7 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry) { // in other cases don't change the status - logMsg.Form("Process - Process of %s timed out in status = %s. Run time: %d seconds. Killing... without changing the status", + logMsg.Form("Process - Process of %s timed out in status = %s. Run time: %ld seconds. Killing... without changing the status", fCurrentDetector.Data(), currentStatus->GetStatusName(), expiredTime); } @@ -1489,7 +1509,7 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry) if (expiredTime % 60 == 0) { Log("SHUTTLE", Form("Process - %s: Checking process. " - "Run time: %d seconds - Memory consumption: %d KB", + "Run time: %ld seconds - Memory consumption: %d KB", fCurrentDetector.Data(), expiredTime, mem)); SendAlive(); } @@ -1545,6 +1565,9 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry) Log("SHUTTLE", "Process - Could not redirect stderr"); } + + Log("SHUTTLE", "Executing TGrid::Connect"); + TGrid::Connect("alien://"); TString wd = gSystem->WorkingDirectory(); Int_t dir_lev1 = GetCurrentRun()/10000; @@ -1598,11 +1621,11 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry) else if (success == 0) { Log("SHUTTLE", - Form("\t\t\t****** run %d - %s: PP ERROR ******", + Form("\t\t\t****** run %d - %s: ERROR ******", GetCurrentRun(), aDetector->GetName())); } - for (UInt_t iSys=0; iSys<3; iSys++) + for (UInt_t iSys=0; iSys<4; iSys++) { if (fFXSCalled[iSys]) fFXSlist[iSys].Clear(); } @@ -1696,6 +1719,15 @@ Int_t AliShuttle::ProcessCurrentDetector() return 2; } + // checking if OCDB is reachable + AliCDBEntry* testEntry = GetFromOCDB("SHUTTLE","GRP/CTP/DummyConfig"); + if (!testEntry){ + // OCDB is not accessible, going in OCDBError for current detector + AliError("OCDB Test entry not accessible"); + UpdateShuttleStatus(AliShuttleStatus::kOCDBError); + return 0; + } + TMap* dcsMap = new TMap(); aPreprocessor->Initialize(GetCurrentRun(), GetCurrentStartTime(), GetCurrentEndTime()); @@ -1860,13 +1892,13 @@ void AliShuttle::CountOpenRuns() SendAlive(); // check connection, in case connect - if (!Connect(3)) + if (!Connect(4)) return; TString sqlQuery; sqlQuery = Form("select count(*) from %s where shuttle_done=0", fConfig->GetShuttlelbTable()); - TSQLResult* aResult = fServer[3]->Query(sqlQuery); + TSQLResult* aResult = fServer[4]->Query(sqlQuery); if (!aResult) { AliError(Form("Can't execute query <%s>!", sqlQuery.Data())); return; @@ -1917,12 +1949,12 @@ Bool_t AliShuttle::QueryShuttleLogbook(const char* whereClause, entries.SetOwner(1); // check connection, in case connect - if (!Connect(3)) return kFALSE; + if (!Connect(4)) return kFALSE; TString sqlQuery; sqlQuery = Form("select * from %s %s order by run", fConfig->GetShuttlelbTable(), whereClause); - TSQLResult* aResult = fServer[3]->Query(sqlQuery); + TSQLResult* aResult = fServer[4]->Query(sqlQuery); if (!aResult) { AliError(Form("Can't execute query <%s>!", sqlQuery.Data())); return kFALSE; @@ -1978,13 +2010,13 @@ AliShuttleLogbookEntry* AliShuttle::QueryRunParameters(Int_t run) // // check connection, in case connect - if (!Connect(3)) + if (!Connect(4)) return 0; TString sqlQuery; sqlQuery.Form("select * from %s where run=%d", fConfig->GetDAQlbTable(), run); - TSQLResult* aResult = fServer[3]->Query(sqlQuery); + TSQLResult* aResult = fServer[4]->Query(sqlQuery); if (!aResult) { Log("SHUTTLE", Form("Can't execute query <%s>!", sqlQuery.Data())); return 0; @@ -2022,38 +2054,58 @@ AliShuttleLogbookEntry* AliShuttle::QueryRunParameters(Int_t run) UInt_t startTime = entry->GetStartTime(); UInt_t endTime = entry->GetEndTime(); Bool_t ecsSuccess = entry->GetECSSuccess(); - - TString totEventsStr = entry->GetRunParameter("totalEvents"); - Int_t totEvents = totEventsStr.Atoi(); + TString runType = entry->GetRunType(); + TString tmpdaqstartTime = entry->GetRunParameter("DAQ_time_start"); + TString recordingFlagString = entry->GetRunParameter("GDCmStreamRecording"); + UInt_t recordingFlag = recordingFlagString.Atoi(); + UInt_t daqstartTime = tmpdaqstartTime.Atoi(); UInt_t now = time(0); - // TODO make this a configuration parameter 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)) - { - if (ecsSuccess == kFALSE) - Log("SHUTTLE", Form("Processing run %d although in status ECS failure, Reason: %s", run, entry->GetRunParameter("eor_reason"))); - return entry; - } Bool_t skip = kFALSE; - if (endTime != 0 && endTime >= now - dcsDelay) - { - Log("SHUTTLE", Form("Skipping run %d for now, because DCS buffer time is not yet expired", run)); - } - else if (totEvents <= 1) - { - Log("SHUTTLE", Form("QueryRunParameters - Run %d has 1 event or less - Skipping!", run)); - skip = kTRUE; - } - else - { - Log("SHUTTLE", Form("QueryRunParameters - Invalid parameters for Run %d: " - "startTime = %d, endTime = %d. Skipping (Shuttle won't be marked as DONE)!", - run, startTime, endTime)); + // runs are processed if + // a) runType is PHYSICS and ecsSuccess is set + // b) runType is not PHYSICS and (ecsSuccess is set or DAQ_time_start is non-0) + // effectively this means that all runs are processed that started properly (ecsSucess behaviour is different for PHYSICS and non-PHYSICS runs (check with ECS!) + if (startTime != 0 && endTime != 0) { + if (endTime > startTime) { + if (endTime >= now - dcsDelay) { + Log("SHUTTLE", Form("Skipping run %d for now, because DCS buffer time is not yet expired", run)); + } else { + if ((runType == "PHYSICS" || runType == "STANDALONE") && recordingFlag == 0){ + Log("SHUTTLE", Form("QueryRunParameters - Run type for run %d is %s but the recording is OFF - Skipping!", run, runType.Data())); + skip = kTRUE; + } + else { + if (runType == "PHYSICS") { + if (ecsSuccess) { + return entry; + } else { + Log("SHUTTLE", Form("QueryRunParameters - Run type for run %d is PHYSICS but ECS success flag not set (Reason = %s) - Skipping!", run, entry->GetRunParameter("eor_reason"))); + skip = kTRUE; + } + } else { + if (ecsSuccess || daqstartTime > 0) { + if (ecsSuccess == kFALSE) + Log("SHUTTLE", Form("Processing run %d although in status ECS failure (Reason: %s), since run type != PHYSICS and DAQ_time_start != 0", run, entry->GetRunParameter("eor_reason"))); + return entry; + } else { + Log("SHUTTLE", Form("QueryRunParameters - Run type for run %d is %s, ECS success flag was not set (Reason = %s) and DAQ_time_start was NULL - Skipping!", run, runType.Data(), entry->GetRunParameter("eor_reason"))); + skip = kTRUE; + } + } + } + } + } else { + Log("SHUTTLE", Form("QueryRunParameters - Invalid parameters for run %d: startTime equal to endTime: %d %d - Skipping!", run, startTime, endTime)); + skip = kTRUE; + } + } else { + Log("SHUTTLE", Form("QueryRunParameters - Invalid parameters for Run %d: " + "startTime = %d, endTime = %d. Skipping (Shuttle won't be marked as DONE)!", + run, startTime, endTime)); } if (skip) @@ -2152,7 +2204,7 @@ const char* AliShuttle::GetFile(Int_t system, const char* detector, TString whereClause = Form("run=%d and detector=\"%s\" and fileId=\"%s\"", GetCurrentRun(), detector, id); - if (system == kDAQ) + if (system == kDAQ || system == kDQM) { whereClause += Form(" and DAQsource=\"%s\"", source); } @@ -2391,7 +2443,7 @@ TList* AliShuttle::GetFileSources(Int_t system, const char* detector, const char } TString sourceName = ""; - if (system == kDAQ) + if (system == kDAQ || system == kDQM) { sourceName = "DAQsource"; } else if (system == kHLT) @@ -2550,7 +2602,7 @@ Bool_t AliShuttle::Connect(Int_t system) TString dbHost, dbUser, dbPass, dbName; - if (system < 3) // FXS db servers + if (system < 4) // FXS db servers { dbHost = Form("mysql://%s:%d", fConfig->GetFXSdbHost(system), fConfig->GetFXSdbPort(system)); dbUser = fConfig->GetFXSdbUser(system); @@ -2565,8 +2617,8 @@ Bool_t AliShuttle::Connect(Int_t system) } fServer[system] = TSQLServer::Connect(dbHost.Data(), dbUser.Data(), dbPass.Data()); - if (!fServer[system] || !fServer[system]->IsConnected()) { - if(system < 3) + if (!fServer[system] || !fServer[system]->IsConnected()) { + if(system < 4) { AliError(Form("Can't establish connection to FXS database for %s", AliShuttleInterface::GetSystemName(system))); @@ -2589,8 +2641,11 @@ Bool_t AliShuttle::Connect(Int_t system) case kHLT: aResult = fServer[kHLT]->GetTables(dbName.Data()); break; + case kDQM: + aResult = fServer[kDQM]->GetTables(dbName.Data()); + break; default: - aResult = fServer[3]->GetTables(dbName.Data()); + aResult = fServer[4]->GetTables(dbName.Data()); break; } @@ -2607,7 +2662,7 @@ Bool_t AliShuttle::UpdateTable() Bool_t result = kTRUE; - for (UInt_t system=0; system<3; system++) + for (UInt_t system=0; system<4; system++) { if(!fFXSCalled[system]) continue; @@ -2640,7 +2695,7 @@ Bool_t AliShuttle::UpdateTable() const char* source = ((TObjString*) aFXSarray->At(1))->GetName(); TString whereClause; - if (system == kDAQ) + if (system == kDAQ || system == kDQM) { whereClause = Form("where run=%d and detector=\"%s\" and fileId=\"%s\" and DAQsource=\"%s\";", GetCurrentRun(), fCurrentDetector.Data(), fileId, source); @@ -2658,8 +2713,8 @@ Bool_t AliShuttle::UpdateTable() delete aFXSarray; - TString sqlQuery = Form("update %s set time_processed=%d %s", fConfig->GetFXSdbTable(system), - now.GetSec(), whereClause.Data()); + TString sqlQuery = Form("update %s set time_processed=%ld %s", fConfig->GetFXSdbTable(system), + (ULong_t)now.GetSec(), whereClause.Data()); AliDebug(2, Form("SQL query: \n%s",sqlQuery.Data())); @@ -2692,7 +2747,7 @@ Bool_t AliShuttle::UpdateTableSkippedCase(const char* detector) TString detName(detector); - for (UInt_t system=0; system<3; system++) + for (UInt_t system=0; system<4; system++) { // check connection, in case connect @@ -2714,8 +2769,8 @@ Bool_t AliShuttle::UpdateTableSkippedCase(const char* 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()); + TString sqlQuery = Form("update %s set time_processed=%ld %s", fConfig->GetFXSdbTable(system), + (ULong_t)now.GetSec(), whereClause.Data()); AliDebug(2, Form("SQL query: \n%s",sqlQuery.Data())); @@ -2744,7 +2799,7 @@ Bool_t AliShuttle::UpdateTableFailCase() Bool_t result = kTRUE; - for (UInt_t system=0; system<3; system++) + for (UInt_t system=0; system<4; system++) { // check connection, in case connect if (!Connect(system)) @@ -2763,8 +2818,8 @@ Bool_t AliShuttle::UpdateTableFailCase() GetCurrentRun(), fCurrentDetector.Data()); - TString sqlQuery = Form("update %s set time_processed=%d %s", fConfig->GetFXSdbTable(system), - now.GetSec(), whereClause.Data()); + TString sqlQuery = Form("update %s set time_processed=%ld %s", fConfig->GetFXSdbTable(system), + (ULong_t)now.GetSec(), whereClause.Data()); AliDebug(2, Form("SQL query: \n%s",sqlQuery.Data())); @@ -2793,7 +2848,7 @@ Bool_t AliShuttle::UpdateShuttleLogbook(const char* detector, const char* status // // check connection, in case connect - if(!Connect(3)){ + if(!Connect(4)){ Log("SHUTTLE", "UpdateShuttleLogbook - Couldn't connect to DAQ Logbook."); return kFALSE; } @@ -2839,7 +2894,7 @@ Bool_t AliShuttle::UpdateShuttleLogbook(const char* detector, const char* status // Query execution TSQLResult* aResult; - aResult = dynamic_cast (fServer[3]->Query(sqlQuery)); + aResult = dynamic_cast (fServer[4]->Query(sqlQuery)); if (!aResult) { Log("SHUTTLE", Form("UpdateShuttleLogbook - Can't execute query <%s>", sqlQuery.Data())); return kFALSE; @@ -2907,7 +2962,7 @@ const char* AliShuttle::GetLHCPeriod() const } //______________________________________________________________________________________________ -void AliShuttle::Log(const char* detector, const char* message) +void AliShuttle::Log(const char* detector, const char* message, UInt_t level) { // // Fill log string with a message @@ -2934,7 +2989,7 @@ void AliShuttle::Log(const char* detector, const char* message) toLog += Form("run %d - ", GetCurrentRun()); toLog += Form("%s", message); - AliInfo(toLog.Data()); + AliLog::Message(level, toLog, MODULENAME(), ClassName(), FUNCTIONNAME(), __FILE__, __LINE__); // if we redirect the log output already to the file, leave here if (fOutputRedirected && strcmp(detector, "SHUTTLE") != 0) @@ -3312,6 +3367,7 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system) if (system == kDAQ) sys="DAQ"; else if (system == kDCS) sys="DCS"; else if (system == kHLT) sys="HLT"; + else if (system == kDQM) sys="DQM"; else return kFALSE; body = Form("Dear %s FXS experts, \n\n",sys.Data()); body += Form("SHUTTLE couldn\'t retrieve data from the FXS for detector %s " @@ -3435,12 +3491,12 @@ const char* AliShuttle::GetTriggerConfiguration() // Receives the trigger configuration from the DAQ logbook for the current run // check connection, if needed reconnect - if (!Connect(3)) + if (!Connect(4)) return 0; TString sqlQuery; sqlQuery.Form("SELECT configFile FROM logbook_trigger_config WHERE run = %d", GetCurrentRun()); - TSQLResult* result = fServer[3]->Query(sqlQuery); + TSQLResult* result = fServer[4]->Query(sqlQuery); if (!result) { Log("SHUTTLE", Form("ERROR: Can't execute query <%s>!", sqlQuery.Data())); @@ -3482,12 +3538,12 @@ const char* AliShuttle::GetCTPTimeParams() // Receives the CTP time parameters from the DAQ logbook for the current run // check connection, if needed reconnect - if (!Connect(3)) + if (!Connect(4)) return 0; TString sqlQuery; sqlQuery.Form("SELECT alignmentFile FROM logbook_trigger_config WHERE run = %d", GetCurrentRun()); - TSQLResult* result = fServer[3]->Query(sqlQuery); + TSQLResult* result = fServer[4]->Query(sqlQuery); if (!result) { Log("SHUTTLE", Form("ERROR: Can't execute query <%s>!", sqlQuery.Data())); @@ -3529,12 +3585,12 @@ const char* AliShuttle::GetTriggerDetectorMask() // Receives the trigger detector mask from DAQ logbook // check connection, if needed reconnect - if (!Connect(3)) + if (!Connect(4)) return 0; TString sqlQuery; sqlQuery.Form("SELECT BIN(BIT_OR(inputDetectorMask)) from logbook_trigger_clusters WHERE run = %d;", GetCurrentRun()); - TSQLResult* result = fServer[3]->Query(sqlQuery); + TSQLResult* result = fServer[4]->Query(sqlQuery); if (!result) { Log("SHUTTLE", Form("ERROR: Can't execute query <%s>!", sqlQuery.Data())); @@ -3693,4 +3749,64 @@ UInt_t AliShuttle::GetEndTimeDCSQuery() return GetCurrentEndTime()+fConfig->GetDCSQueryOffset(); } +//______________________________________________________________________________________________ +void AliShuttle::SendMLFromDet(const char* value) +{ + // + // Sending an information coming from the current detector to ML + // + + TMonaLisaText mlText(Form("%s_RunCondition", fCurrentDetector.Data()), value); + + TList mlList; + mlList.Add(&mlText); + + TString mlID; + mlID.Form("%d", GetCurrentRun()); + fMonaLisa->SendParameters(&mlList, mlID); + return; +} +//______________________________________________________________________________________________ +TString* AliShuttle::GetLTUConfig(const char* det) +{ + // + // Getting ltuFineDelay1, ltuFineDelay2, ltuBCDelay for detector det from logbook_detectors table in logbook + // + + if (!Connect(4)) + return 0; + + TString sqlQuery; + sqlQuery.Form("select LTUFineDelay1, LTUFineDelay2, LTUBCDelayAdd from logbook_detectors WHERE run_number = %d and detector = \"%s\";", GetCurrentRun(),det); + + TSQLResult* result = fServer[4]->Query(sqlQuery); + if (!result){ + Log("SHUTTLE","ERROR: No result found for the LTU configuration query"); + return 0x0; + } + if (result->GetRowCount() == 0){ + Log("SHUTTLE",Form("ERROR: LTU configuration not found in logbook_detectors for detector %s, returning null pointer",det)); + delete result; + return 0x0; + } + if (result->GetFieldCount() != 3){ + Log("SHUTTLE",Form("ERROR: not all the required fields are there for the LTU configuration for detector %s (only %d found), returning a null pointer",det, result->GetFieldCount())); + delete result; + return 0x0; + } + TSQLRow* row = result->Next(); + if (!row){ + Printf("ERROR: Could not receive logbook_detectors data, returning null pointer"); + delete result; + return 0x0; + } + TString* ltuConfigString = new TString[3]; + + ltuConfigString[0] = row->GetField(0); + ltuConfigString[1] = row->GetField(1); + ltuConfigString[2] = row->GetField(2); + + return ltuConfigString; + +}