/*
$Log$
+Revision 1.13 2006/12/07 08:51:26 jgrosseo
+update (alberto):
+table, db names in ldap configuration
+added GRP preprocessor
+DCS data can also be retrieved by data point
+
+Revision 1.12 2006/11/16 16:16:48 jgrosseo
+introducing strict run ordering flag
+removed giving preprocessor name to preprocessor, they have to know their name themselves ;-)
+
+Revision 1.11 2006/11/06 14:23:04 jgrosseo
+major update (Alberto)
+o) reading of run parameters from the logbook
+o) online offline naming conversion
+o) standalone DCSclient package
+
+Revision 1.10 2006/10/20 15:22:59 jgrosseo
+o) Adding time out to the execution of the preprocessors: The Shuttle forks and the parent process monitors the child
+o) Merging Collect, CollectAll, CollectNew function
+o) Removing implementation of empty copy constructors (declaration still there!)
+
+Revision 1.9 2006/10/02 16:38:39 jgrosseo
+update (alberto):
+fixed memory leaks
+storing of objects that failed to be stored to the grid before
+interfacing of shuttle status table in daq system
+
Revision 1.8 2006/08/15 10:50:00 jgrosseo
effc++ corrections (alberto)
fDetector(""),
fDCSHost(""),
fDCSPort(0),
+fDCSAliases(0),
+fDCSDataPoints(0),
fIsValid(kFALSE),
-fSkipDCSQuery(kFALSE)
+fSkipDCSQuery(kFALSE),
+fStrictRunOrder(kFALSE)
{
// constructor of the shuttle configuration holder
TLDAPAttribute* anAttribute;
fDCSAliases = new TObjArray();
fDCSAliases->SetOwner(1);
+ fDCSDataPoints = new TObjArray();
+ fDCSDataPoints->SetOwner(1);
anAttribute = entry->GetAttribute("det"); // MUST
+ if (!anAttribute)
+ {
+ AliError(Form("Invalid configuration! No \"det\" attribute!"));
+ return;
+ }
fDetector = anAttribute->GetValue();
+ anAttribute = entry->GetAttribute("StrictRunOrder"); // MAY
+ if (!anAttribute)
+ {
+ AliWarning(Form("%s did not set StrictRunOrder flag - the default is FALSE",
+ fDetector.Data()));
+ } else {
+ TString strictRunStr = anAttribute->GetValue();
+ if (!(strictRunStr == "0" || strictRunStr == "1"))
+ {
+ AliError("Invalid configuration! StrictRunOrder flag must be 0 or 1!");
+ return;
+ }
+ fStrictRunOrder = (Bool_t) strictRunStr.Atoi();
+ }
+
anAttribute = entry->GetAttribute("DCSHost"); // MAY
- if (!anAttribute) {
+ if (!anAttribute)
+ {
AliWarning(
Form("%s has not DCS host entry - Shuttle will skip DCS data query!",
fDetector.Data()));
fDCSHost = anAttribute->GetValue();
anAttribute = entry->GetAttribute("DCSPort"); // MAY
- if (!anAttribute) {
+ if (!anAttribute)
+ {
AliError(Form("Invalid configuration! %s has DCS Host but no port number!",
fDetector.Data()));
return;
TString portStr = anAttribute->GetValue();
fDCSPort = portStr.Atoi();
- anAttribute = entry->GetAttribute("DCSAlias"); // MAY
- if (!anAttribute) {
- AliError(Form("Invalid configuration! %s has DCS host settings but no DCSAlias entries!",
- fDetector.Data()));
- return;
+ anAttribute = entry->GetAttribute("DCSalias"); // MAY
+ if (anAttribute)
+ {
+ const char* anAlias;
+ while ((anAlias = anAttribute->GetValue()))
+ {
+ fDCSAliases->AddLast(new TObjString(anAlias));
+ }
}
- const char* anAlias;
- while ((anAlias = anAttribute->GetValue())) {
- fDCSAliases->AddLast(new TObjString(anAlias));
+ anAttribute = entry->GetAttribute("DCSdatapoint"); // MAY
+ if (anAttribute)
+ {
+ const char* aDataPoint;
+ while ((aDataPoint = anAttribute->GetValue()))
+ {
+ fDCSDataPoints->AddLast(new TObjString(aDataPoint));
+ }
}
fIsValid = kTRUE;
// destructor of the shuttle configuration holder
delete fDCSAliases;
+ delete fDCSDataPoints;
}
ClassImp(AliShuttleConfig)
AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
const char* binddn, const char* password, const char* basedn):
fIsValid(kFALSE),
- fDAQlbHost(""), fDAQlbUser(""), fDAQlbPass(""),
- fMaxPPRetries(0), fMaxRetries(0), fDetectorMap(), fDetectorList(),
+ fDAQlbHost(""), fDAQlbPort(), fDAQlbUser(""), fDAQlbPass(""),
+ fDAQlbDB(""), fDAQlbTable(""),
+ fMaxRetries(0), fPPTimeOut(0), fDetectorMap(), fDetectorList(),
fShuttleInstanceHost(""), fProcessedDetectors(), fProcessAll(kFALSE)
{
//
}
fDAQlbHost = anAttribute->GetValue();
+ anAttribute = anEntry->GetAttribute("DAQLogbookPort"); // MAY
+ if (anAttribute)
+ {
+ fDAQlbPort = ((TString) anAttribute->GetValue()).Atoi();
+ } else {
+ fDAQlbPort = 3306; // mysql
+ }
+
anAttribute = anEntry->GetAttribute("DAQLogbookUser");
if (!anAttribute) {
AliError("Can't find DAQLogbookUser attribute!");
}
fDAQlbPass = anAttribute->GetValue();
- anAttribute = anEntry->GetAttribute("MaxPPRetries");
+ anAttribute = anEntry->GetAttribute("DAQLogbookDB");
if (!anAttribute) {
- AliError("Can't find MaxPPRetries attribute!");
+ AliError("Can't find DAQLogbookDB attribute!");
delete aResult; delete anEntry;
return;
}
- TString tmpStr = anAttribute->GetValue();
- fMaxPPRetries = tmpStr.Atoi();
+ fDAQlbDB = anAttribute->GetValue();
+
+ anAttribute = anEntry->GetAttribute("DAQLogbookTable");
+ if (!anAttribute) {
+ AliError("Can't find DAQLogbookTable attribute!");
+ delete aResult; delete anEntry;
+ return;
+ }
+ fDAQlbTable = anAttribute->GetValue();
+
anAttribute = anEntry->GetAttribute("MaxRetries");
if (!anAttribute) {
delete aResult; delete anEntry;
return;
}
- tmpStr = anAttribute->GetValue();
+ TString tmpStr = anAttribute->GetValue();
fMaxRetries = tmpStr.Atoi();
+ anAttribute = anEntry->GetAttribute("PPTimeOut");
+ if (!anAttribute) {
+ AliError("Can't find PPTimeOut attribute!");
+ delete aResult; delete anEntry;
+ return;
+ }
+ tmpStr = anAttribute->GetValue();
+ fPPTimeOut = tmpStr.Atoi();
+
delete aResult; delete anEntry;
- // FES configuration (FES logbook and hosts)
+ // FXS configuration (FXS logbook and hosts)
for(int iSys=0;iSys<3;iSys++){
- queryFilter = Form("(system=%s)", AliShuttleInterface::fkSystemNames[iSys]);
+ queryFilter = Form("(system=%s)", AliShuttleInterface::GetSystemName(iSys));
aResult = aServer.Search(basedn, LDAP_SCOPE_ONELEVEL, queryFilter.Data());
if (!aResult) {
AliError(Form("Can't find configuration for system: %s",
- AliShuttleInterface::fkSystemNames[iSys]));
+ AliShuttleInterface::GetSystemName(iSys)));
return;
}
if (aResult->GetCount() != 1 ) {
- AliError("Error in FES configuration!");
+ AliError("Error in FXS configuration!");
delete aResult;
return;
}
anEntry = aResult->GetNext();
- anAttribute = anEntry->GetAttribute("LogbookHost");
+ anAttribute = anEntry->GetAttribute("DBHost");
+ if (!anAttribute) {
+ AliError(Form ("Can't find DBHost attribute for %s!!",
+ AliShuttleInterface::GetSystemName(iSys)));
+ delete aResult; delete anEntry;
+ return;
+ }
+ fFXSdbHost[iSys] = anAttribute->GetValue();
+
+ anAttribute = anEntry->GetAttribute("DBPort"); // MAY
+ if (anAttribute)
+ {
+ fFXSdbPort[iSys] = ((TString) anAttribute->GetValue()).Atoi();
+ } else {
+ fFXSdbPort[iSys] = 3306; // mysql
+ }
+
+ anAttribute = anEntry->GetAttribute("DBUser");
if (!anAttribute) {
- AliError(Form ("Can't find LogbookHost attribute for %s!!",
- AliShuttleInterface::fkSystemNames[iSys]));
+ AliError(Form ("Can't find DBUser attribute for %s!!",
+ AliShuttleInterface::GetSystemName(iSys)));
delete aResult; delete anEntry;
return;
}
- fFESlbHost[iSys] = anAttribute->GetValue();
+ fFXSdbUser[iSys] = anAttribute->GetValue();
- anAttribute = anEntry->GetAttribute("LogbookUser");
+ anAttribute = anEntry->GetAttribute("DBPassword");
if (!anAttribute) {
- AliError(Form ("Can't find LogbookUser attribute for %s!!",
- AliShuttleInterface::fkSystemNames[iSys]));
+ AliError(Form ("Can't find DBPassword attribute for %s!!",
+ AliShuttleInterface::GetSystemName(iSys)));
delete aResult; delete anEntry;
return;
}
- fFESlbUser[iSys] = anAttribute->GetValue();
+ fFXSdbPass[iSys] = anAttribute->GetValue();
- anAttribute = anEntry->GetAttribute("LogbookPassword");
+ anAttribute = anEntry->GetAttribute("DBName");
if (!anAttribute) {
- AliError(Form ("Can't find LogbookPassword attribute for %s!!",
- AliShuttleInterface::fkSystemNames[iSys]));
+ AliError(Form ("Can't find DBName attribute for %s!!",
+ AliShuttleInterface::GetSystemName(iSys)));
delete aResult; delete anEntry;
return;
}
- fFESlbPass[iSys] = anAttribute->GetValue();
+
+ fFXSdbName[iSys] = anAttribute->GetValue();
+ anAttribute = anEntry->GetAttribute("DBTable");
+ if (!anAttribute) {
+ AliError(Form ("Can't find DBTable attribute for %s!!",
+ AliShuttleInterface::GetSystemName(iSys)));
+ delete aResult; delete anEntry;
+ return;
+ }
+ fFXSdbTable[iSys] = anAttribute->GetValue();
anAttribute = anEntry->GetAttribute("FSHost");
if (!anAttribute) {
AliError(Form ("Can't find FSHost attribute for %s!!",
- AliShuttleInterface::fkSystemNames[iSys]));
+ AliShuttleInterface::GetSystemName(iSys)));
delete aResult; delete anEntry;
return;
}
- fFESHost[iSys] = anAttribute->GetValue();
+ fFXSHost[iSys] = anAttribute->GetValue();
+
+ anAttribute = anEntry->GetAttribute("FSPort"); // MAY
+ if (anAttribute)
+ {
+ fFXSPort[iSys] = ((TString) anAttribute->GetValue()).Atoi();
+ } else {
+ fFXSPort[iSys] = 22; // scp port number
+ }
anAttribute = anEntry->GetAttribute("FSUser");
if (!anAttribute) {
AliError(Form ("Can't find FSUser attribute for %s!!",
- AliShuttleInterface::fkSystemNames[iSys]));
+ AliShuttleInterface::GetSystemName(iSys)));
delete aResult; delete anEntry;
return;
}
- fFESUser[iSys] = anAttribute->GetValue();
+ fFXSUser[iSys] = anAttribute->GetValue();
anAttribute = anEntry->GetAttribute("FSPassword");
- if (anAttribute) fFESPass[iSys] = anAttribute->GetValue();
+ if (anAttribute) fFXSPass[iSys] = anAttribute->GetValue();
delete aResult; delete anEntry;
}
return aHolder->GetDCSAliases();
}
+//______________________________________________________________________________________________
+const TObjArray* AliShuttleConfig::GetDCSDataPoints(const char* detector) const
+{
+ //
+ // returns collection of TObjString which represents the set of aliases
+ // which used for data retrieval for particular detector
+ //
+
+ AliShuttleConfigHolder* aHolder = (AliShuttleConfigHolder*) fDetectorMap.GetValue(detector);
+ if (!aHolder) {
+ AliError(Form("There isn't configuration for detector: %s",
+ detector));
+ return NULL;
+ }
+
+ return aHolder->GetDCSDataPoints();
+}
+
//______________________________________________________________________________________________
Bool_t AliShuttleConfig::HostProcessDetector(const char* detector) const
{
return kFALSE;
}
+//______________________________________________________________________________________________
+Bool_t AliShuttleConfig::StrictRunOrder(const char* detector) const
+{
+ // return TRUE if detector wants strict run ordering of stored data
+
+ AliShuttleConfigHolder* aHolder = (AliShuttleConfigHolder*) fDetectorMap.GetValue(detector);
+ if (!aHolder)
+ {
+ AliError(Form("There isn't configuration for detector: %s",
+ detector));
+ return kTRUE;
+ }
+
+ return aHolder->StrictRunOrder();
+}
+
//______________________________________________________________________________________________
void AliShuttleConfig::Print(Option_t* /*option*/) const
{
result += "\n\n";
}
- result += Form("Max PP retries = %d - Max total retries = %d\n\n", fMaxPPRetries, fMaxRetries);
+ result += Form("PP time out = %d - Max total retries = %d\n\n", fPPTimeOut, fMaxRetries);
- result += Form("DAQ Logbook Configuration \n \tHost: %s - User: %s - ",
- fDAQlbHost.Data(), fDAQlbUser.Data());
+ result += Form("DAQ Logbook Configuration \n \tHost: %s:%d; \tUser: %s; ",
+ fDAQlbHost.Data(), fDAQlbPort, fDAQlbUser.Data());
+
+// result += "Password: ";
+// result.Append('*', fDAQlbPass.Length());
+ result += Form("\tDB: %s; \tTable: %s",
+ fDAQlbDB.Data(), fDAQlbTable.Data());
- result += "Password: ";
- result.Append('*', fDAQlbPass.Length());
result += "\n\n";
for(int iSys=0;iSys<3;iSys++){
- result += Form("FES Configuration for %s system\n", AliShuttleInterface::fkSystemNames[iSys]);
- result += Form("\tLogbook host: \t%s - \tUser: %s\n",
- fFESlbHost[iSys].Data(), fFESlbUser[iSys].Data());
- // result += Form("Logbook Password:",fFESlbPass[iSys].Data());
- result += Form("\tFES host: \t%s - \tUser: %s\n\n", fFESHost[iSys].Data(), fFESUser[iSys].Data());
- // result += Form("FES Password:",fFESPass[iSys].Data());
+ result += Form("FXS Configuration for %s system\n", AliShuttleInterface::GetSystemName(iSys));
+ result += Form("\tDB host: %s:%d; \tUser: %s; \tName: %s; \tTable: %s\n",
+ fFXSdbHost[iSys].Data(), fFXSdbPort[iSys], fFXSdbUser[iSys].Data(),
+ fFXSdbName[iSys].Data(), fFXSdbTable[iSys].Data());
+ // result += Form("DB Password:",fFXSdbPass[iSys].Data());
+ result += Form("\tFXS host: %s:%d; \tUser: %s\n\n", fFXSHost[iSys].Data(), fFXSPort[iSys],
+ fFXSUser[iSys].Data());
+ // result += Form("FXS Password:",fFXSPass[iSys].Data());
}
TIter iter(fDetectorMap.GetTable());
TPair* aPair;
while ((aPair = (TPair*) iter.Next())) {
AliShuttleConfigHolder* aHolder = (AliShuttleConfigHolder*) aPair->Value();
- if(aHolder->SkipDCSQuery()) continue;
- result += Form("DCS archive DB configuration for *** %s *** \n", aHolder->GetDetector());
+ result += Form("Detector-specific configuration: *** %s *** \n", aHolder->GetDetector());
+ result += Form("\tStrict run ordering flag: %s \n", aHolder->StrictRunOrder() ? "TRUE" : "FALSE");
+ if(aHolder->SkipDCSQuery())
+ {
+ result += "\n";
+ continue;
+ }
result += Form("\tAmanda server: %s:%d \n", aHolder->GetDCSHost(), aHolder->GetDCSPort());
- result += "\tDCS Aliases: ";
const TObjArray* aliases = aHolder->GetDCSAliases();
- TIter it(aliases);
- TObjString* anAlias;
- while ((anAlias = (TObjString*) it.Next())) {
- result += Form("%s ", anAlias->String().Data());
+ if (aliases->GetEntries() != 0)
+ {
+ result += "\tDCS Aliases: ";
+ TIter it(aliases);
+ TObjString* anAlias;
+ while ((anAlias = (TObjString*) it.Next()))
+ {
+ result += Form("%s ", anAlias->String().Data());
+ }
+ result += "\n";
}
- result += "\n\n";
+ const TObjArray* dataPoints = aHolder->GetDCSDataPoints();
+ if (dataPoints->GetEntries() != 0)
+ {
+ result += "\tDCS Data Points: ";
+ TIter it(dataPoints);
+ TObjString* aDataPoint;
+ while ((aDataPoint = (TObjString*) it.Next())) {
+ result += Form("%s ", aDataPoint->String().Data());
+ }
+ result += "\n";
+ }
+ result += "\n";
+
}
if(!fIsValid) result += "\n\n********** !!!!! Configuration is INVALID !!!!! **********\n";