//
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);
//
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];
if (!dirList) return kTRUE;
- if (dirList->GetEntries() < 3)
+ if (dirList->GetEntries() < 3) // to be changed to 4?
{
delete dirList;
return kTRUE;
dynamic_cast<AliPreprocessor*> (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()));
+ if(fCurrentDetector==TString("HLT")){
+ Log("SHUTTLE", "ContinueProcessing: Fake processing HLT, to avoid pending runs! => temporary, till an HLT preprocessor is made available.");
+ UpdateShuttleLogbook("HLT","DONE");
+ Log(fCurrentDetector, "ContinueProcessing - skipping HLT preprocessor.");
+
+ AliShuttleStatus* status = ReadShuttleStatus();
+ if (!status) {
+ status = new AliShuttleStatus(AliShuttleStatus::kDone);
+ WriteShuttleStatus(status);
+ }
+ }
+ return kFALSE;
}
AliShuttleLogbookEntry::Status entryStatus =
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
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()));
}
}
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));
// 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: %d seconds. Killing... and setting status to DCSError.",
+ 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;
}
{
// 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;
}
// 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;
}
{
// 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);
}
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();
}
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;
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();
}
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;
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;
//
// 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;
Bool_t ecsSuccess = entry->GetECSSuccess();
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);
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") {
- if (ecsSuccess) {
- return entry;
+ 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 {
- 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;
+ 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;
+ }
}
}
}
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);
}
}
TString sourceName = "";
- if (system == kDAQ)
+ if (system == kDAQ || system == kDQM)
{
sourceName = "DAQsource";
} else if (system == kHLT)
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);
}
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)));
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;
}
Bool_t result = kTRUE;
- for (UInt_t system=0; system<3; system++)
+ for (UInt_t system=0; system<4; system++)
{
if(!fFXSCalled[system]) continue;
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);
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()));
TString detName(detector);
- for (UInt_t system=0; system<3; system++)
+ for (UInt_t system=0; system<4; system++)
{
// check connection, in case connect
//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()));
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))
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()));
//
// check connection, in case connect
- if(!Connect(3)){
+ if(!Connect(4)){
Log("SHUTTLE", "UpdateShuttleLogbook - Couldn't connect to DAQ Logbook.");
return kFALSE;
}
// Query execution
TSQLResult* aResult;
- aResult = dynamic_cast<TSQLResult*> (fServer[3]->Query(sqlQuery));
+ aResult = dynamic_cast<TSQLResult*> (fServer[4]->Query(sqlQuery));
if (!aResult) {
Log("SHUTTLE", Form("UpdateShuttleLogbook - Can't execute query <%s>", sqlQuery.Data()));
return kFALSE;
}
//______________________________________________________________________________________________
-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
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)
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 "
// 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()));
// 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()));
// 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()));
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;
+
+}