/*
$Log$
+Revision 1.27 2007/12/17 03:23:32 jgrosseo
+several bugfixes
+added "empty preprocessor" as placeholder for Acorde in FDR
+
+Revision 1.26 2007/12/07 19:14:36 acolla
+in AliShuttleTrigger:
+
+Added automatic collection of new runs on a regular time basis (settable from the configuration)
+
+in AliShuttleConfig: new members
+
+- triggerWait: time to wait for DIM trigger (s) before starting automatic collection of new runs
+- mode: run mode (test, prod) -> used to build log folder (logs or logs_PROD)
+
+in AliShuttle:
+
+- logs now stored in logs/#RUN/DET_#RUN.log
+
+Revision 1.25 2007/11/26 16:58:37 acolla
+Monalisa configuration added: host and table name
+
+Revision 1.24 2007/10/24 10:44:08 acolla
+
+debug AliInfo removed
+
+Revision 1.23 2007/09/28 15:27:40 acolla
+
+AliDCSClient "multiSplit" option added in the DCS configuration
+in AliDCSMessage: variable MAX_BODY_SIZE set to 500000
+
Revision 1.22 2007/09/27 16:53:13 acolla
Detectors can have more than one AMANDA server. SHUTTLE queries the servers sequentially,
merges the dcs aliases/DPs in one TMap and sends it to the preprocessor.
#include <TLDAPResult.h>
#include <TLDAPEntry.h>
#include <TLDAPAttribute.h>
+#include <TKey.h>
AliShuttleConfig::AliShuttleDCSConfigHolder::AliShuttleDCSConfigHolder(const TLDAPEntry* entry):
ExpandAndAdd(fDCSDataPoints, aDataPoint);
}
}
-
+
fIsValid = kTRUE;
}
+//______________________________________________________________________________________________
+AliShuttleConfig::AliShuttleConfig(const AliShuttleConfig & other):
+ TObject(),
+ fConfigHost(other.fConfigHost),
+ fDAQlbHost(other.fDAQlbHost),
+ fDAQlbPort(other.fDAQlbPort),
+ fDAQlbUser(other.fDAQlbUser),
+ fDAQlbPass(other.fDAQlbPass),
+ fDAQlbDB(other.fDAQlbDB),
+ fDAQlbTable(other.fDAQlbTable),
+ fShuttlelbTable(other.fShuttlelbTable),
+ fRunTypelbTable(other.fRunTypelbTable),
+ fMaxRetries(other.fMaxRetries),
+ fPPTimeOut(other.fPPTimeOut),
+ fDCSTimeOut(other.fDCSTimeOut),
+ fDCSRetries(other.fDCSRetries),
+ fPPMaxMem(other.fPPMaxMem),
+ fMonitorHost(other.fMonitorHost),
+ fMonitorTable(other.fMonitorTable),
+ fTriggerWait(other.fTriggerWait),
+ fRunMode(other.fRunMode),
+ fDetectorMap(),
+ fDetectorList(other.fDetectorList),
+ fShuttleInstanceHost(other.fShuttleInstanceHost),
+ fProcessedDetectors(other.fProcessedDetectors),
+ fKeepDCSMap(other.fKeepDCSMap),
+ fKeepTempFolder(other.fKeepTempFolder),
+ fSendMail(other.fSendMail),
+ fProcessAll(other.fProcessAll),
+ fIsValid(other.fIsValid)
+{
+ //
+ // copy ctor
+ //
+ for (Int_t i = 0; i<3; i++){
+ fFXSHost[i]=other.fFXSHost[i];
+ fFXSPort[i]=other.fFXSPort[i];
+ fFXSUser[i]=other.fFXSUser[i];
+ fFXSPass[i]=other.fFXSPass[i];
+ fFXSdbHost[i]=other.fFXSdbHost[i];
+ fFXSdbPort[i]=other.fFXSdbPort[i];
+ fFXSdbUser[i]=other.fFXSdbUser[i];
+ fFXSdbPass[i]=other.fFXSdbPass[i];
+ fFXSdbName[i]=other.fFXSdbName[i];
+ fFXSdbTable[i]=other.fFXSdbTable[i];
+ }
+ for (Int_t i = 0; i<5; i++){
+ fAdmin[i] = new TObjArray();
+ fAdmin[i]->AddAt(other.fAdmin[i]->At(i),i);
+ }
+
+ TIter iter((other.fDetectorMap).GetTable());
+ TPair* aPair = 0;
+
+ while ((aPair = (TPair*) iter.Next())) {
+ AliShuttleDetConfigHolder *holder =(AliShuttleDetConfigHolder *)aPair->Value();
+ TKey *key = (TKey*)aPair->Key();
+ fDetectorMap.Add(key,holder);
+ }
+
+
+}
+//_____________________________________________________________________________________________
+AliShuttleConfig& AliShuttleConfig::operator=(const AliShuttleConfig &other)
+{
+ //
+ //assignment operator
+ //
+ this->fConfigHost=other.fConfigHost;
+ this->fDAQlbHost=other.fDAQlbHost;
+ this->fDAQlbPort=other.fDAQlbPort;
+ this->fDAQlbUser=other.fDAQlbUser;
+ this->fDAQlbPass=other.fDAQlbPass;
+ this->fDAQlbDB=other.fDAQlbDB;
+ this->fDAQlbTable=other.fDAQlbTable;
+ this->fShuttlelbTable=other.fShuttlelbTable;
+ this->fRunTypelbTable=other.fRunTypelbTable;
+ this->fMaxRetries=other.fMaxRetries;
+ this->fPPTimeOut=other.fPPTimeOut;
+ this->fDCSTimeOut=other.fDCSTimeOut;
+ this->fDCSRetries=other.fDCSRetries;
+ this->fPPMaxMem=other.fPPMaxMem;
+ this->fMonitorHost=other.fMonitorHost;
+ this->fMonitorTable=other.fMonitorTable;
+ this->fTriggerWait=other.fTriggerWait;
+ this->fRunMode=other.fRunMode;
+ this->fDetectorList=other.fDetectorList;
+ this->fShuttleInstanceHost=other.fShuttleInstanceHost;
+ this->fProcessedDetectors=other.fProcessedDetectors;
+ this->fKeepDCSMap=other.fKeepDCSMap;
+ this->fKeepTempFolder=other.fKeepTempFolder;
+ this->fSendMail=other.fSendMail;
+ this->fProcessAll=other.fProcessAll;
+ this->fIsValid=other.fIsValid;
+ for (Int_t i = 0; i<3; i++){
+ this->fFXSHost[i]=other.fFXSHost[i];
+ this->fFXSPort[i]=other.fFXSPort[i];
+ this->fFXSUser[i]=other.fFXSUser[i];
+ this->fFXSPass[i]=other.fFXSPass[i];
+ this->fFXSdbHost[i]=other.fFXSdbHost[i];
+ this->fFXSdbPort[i]=other.fFXSdbPort[i];
+ this->fFXSdbUser[i]=other.fFXSdbUser[i];
+ this->fFXSdbPass[i]=other.fFXSdbPass[i];
+ this->fFXSdbName[i]=other.fFXSdbName[i];
+ this->fFXSdbTable[i]=other.fFXSdbTable[i];
+ }
+ for (Int_t i = 0; i<5; i++){
+ this->fAdmin[i] = new TObjArray();
+ this->fAdmin[i]->AddAt(other.fAdmin[i]->At(i),i);
+ }
+
+ TIter iter((other.fDetectorMap).GetTable());
+ TPair* aPair = 0;
+
+ while ((aPair = (TPair*) iter.Next())) {
+ AliShuttleDetConfigHolder *holder =(AliShuttleDetConfigHolder *)aPair->Value();
+ TKey *key = (TKey*)aPair->Key();
+ this->fDetectorMap.Add(key,holder);
+ }
+ return *this;
+}
//______________________________________________________________________________________________
void AliShuttleConfig::AliShuttleDCSConfigHolder::ExpandAndAdd(TObjArray* target, const char* entry)
{
fRunTypelbTable(""),
fMaxRetries(0),
fPPTimeOut(0),
+ fDCSTimeOut(0),
+ fDCSRetries(0),
fPPMaxMem(0),
+ fMonitorHost(""),
+ fMonitorTable(""),
+ fTriggerWait(3600),
+ fRunMode(kTest),
fDetectorMap(),
fDetectorList(),
+ fAdmin(),
fShuttleInstanceHost(""),
fProcessedDetectors(),
+ fKeepDCSMap(kFALSE),
+ fKeepTempFolder(kFALSE),
+ fSendMail(kFALSE),
fProcessAll(kFALSE),
fIsValid(kFALSE)
+
{
//
// host: ldap server host
fDetectorMap.SetOwner(1);
fDetectorList.SetOwner(0); //fDetectorList and fDetectorMap share the same object!
fProcessedDetectors.SetOwner();
+
+ for (int i=0; i<5; i++)
+ {
+ fAdmin[i] = new TObjArray();
+ fAdmin[i]->SetOwner();
+ }
TLDAPServer aServer(host, port, binddn, password, 3);
fDetectorMap.DeleteAll();
fDetectorList.Clear();
fProcessedDetectors.Delete();
+
+ delete[] fAdmin;
+
}
//______________________________________________________________________________________________
return aHolder->GetResponsibles();
}
+//______________________________________________________________________________________________
+const TObjArray* AliShuttleConfig::GetAdmins(Int_t sys) const
+{
+ //
+ // returns collection of TObjString which represents the list of mail addresses
+ // of the system's administrator(s) (DAQ, DCS, HLT, Global, Amanda)
+ //
+
+ if (sys < 0 || sys > 4) return 0;
+ return fAdmin[sys];
+}
+
//______________________________________________________________________________________________
Bool_t AliShuttleConfig::HostProcessDetector(const char* detector) const
{
tmpStr = anAttribute->GetValue();
fPPTimeOut = tmpStr.Atoi();
+ anAttribute = anEntry->GetAttribute("dcsTimeOut");
+ if (!anAttribute) {
+ AliError("Can't find dcsTimeOut attribute!");
+ return 4;
+ }
+ tmpStr = anAttribute->GetValue();
+ fDCSTimeOut = tmpStr.Atoi();
+
+ anAttribute = anEntry->GetAttribute("nDCSretries");
+ if (!anAttribute) {
+ AliError("Can't find dcsTimeOut attribute!");
+ return 4;
+ }
+ tmpStr = anAttribute->GetValue();
+ fDCSRetries = tmpStr.Atoi();
+
anAttribute = anEntry->GetAttribute("ppMaxMem");
if (!anAttribute) {
AliError("Can't find ppMaxMem attribute!");
tmpStr = anAttribute->GetValue();
fPPMaxMem = tmpStr.Atoi();
- return 0;
+ anAttribute = anEntry->GetAttribute("monitorHost");
+ if (!anAttribute) {
+ AliError("Can't find monitorHost attribute!");
+ return 4;
+ }
+ fMonitorHost = anAttribute->GetValue();
+
+ anAttribute = anEntry->GetAttribute("monitorTable");
+ if (!anAttribute) {
+ AliError("Can't find monitorTable attribute!");
+ return 4;
+ }
+ fMonitorTable = anAttribute->GetValue();
+
+ anAttribute = anEntry->GetAttribute("triggerWait"); // MAY
+ if (!anAttribute) {
+ AliWarning(Form("triggerWait not set! default = ", fTriggerWait));
+ }
+ tmpStr = anAttribute->GetValue();
+ fTriggerWait = tmpStr.Atoi();
+ anAttribute = anEntry->GetAttribute("mode");
+ if (!anAttribute) {
+ AliWarning("Run mode not set! Running in test mode.");
+ } else {
+ tmpStr = anAttribute->GetValue();
+ if (tmpStr == "test")
+ {
+ fRunMode = kTest;
+ } else if (tmpStr == "prod") {
+ fRunMode = kProd;
+ } else {
+ AliWarning(Form("Not a valid run mode: %s", tmpStr.Data()));
+ AliWarning("Valid run modes are \"test\" and \"prod\". Running in test mode.");
+ }
+ }
+
+ anAttribute = anEntry->GetAttribute("keepDCSMap"); // MAY
+ if (!anAttribute)
+ {
+ AliWarning("keepDCSMap flag not set - default is FALSE");
+ } else {
+ TString keepDCSMapStr = anAttribute->GetValue();
+ if (!(keepDCSMapStr == "0" || keepDCSMapStr == "1"))
+ {
+ AliError("keepDCSMap flag must be 0 or 1!");
+ return 4;
+ }
+ fKeepDCSMap = (Bool_t) keepDCSMapStr.Atoi();
+ }
+ anAttribute = anEntry->GetAttribute("keepTempFolder"); // MAY
+ if (!anAttribute)
+ {
+ AliWarning("keepTempFolder flag not set - default is FALSE");
+ } else {
+ TString keepTempFolderStr = anAttribute->GetValue();
+ if (!(keepTempFolderStr == "0" || keepTempFolderStr == "1"))
+ {
+ AliError("keepTempFolder flag must be 0 or 1!");
+ return 4;
+ }
+ fKeepTempFolder = (Bool_t) keepTempFolderStr.Atoi();
+ }
+
+
+ anAttribute = anEntry->GetAttribute("shuttleAdmin"); // MAY
+ if (!anAttribute)
+ {
+ AliDebug(2, "Warning! No \"shuttleAdmin\" attribute!");
+ }
+ else
+ {
+ const char* anAdmin;
+ while ((anAdmin = anAttribute->GetValue()))
+ {
+ fAdmin[kGlobal]->AddLast(new TObjString(anAdmin));
+ }
+ }
+
+ anAttribute = anEntry->GetAttribute("amandaAdmin"); // MAY
+ if (!anAttribute)
+ {
+ AliDebug(2, "Warning! No \"amandaAdmin\" attribute!");
+ }
+ else
+ {
+ const char* anAdmin;
+ while ((anAdmin = anAttribute->GetValue()))
+ {
+ fAdmin[kAmanda]->AddLast(new TObjString(anAdmin));
+ }
+ }
+
+ anAttribute = anEntry->GetAttribute("sendMail"); // MAY
+ if (!anAttribute)
+ {
+ AliWarning("sendMail flag not set - default is FALSE");
+ } else {
+ TString sendMailStr = anAttribute->GetValue();
+ if (!(sendMailStr == "0" || sendMailStr == "1"))
+ {
+ AliError("sendMail flag must be 0 or 1!");
+ return 4;
+ }
+ fSendMail = (Bool_t) sendMailStr.Atoi();
+ }
+
+ return 0;
}
//______________________________________________________________________________________________
}
TIter iter(list);
- Int_t iSys=0, count = 0;
+ Int_t count = 0;
+ SystemCode iSys=kDAQ;
+
while ((anEntry = dynamic_cast<TLDAPEntry*> (iter.Next())))
{
anAttribute = anEntry->GetAttribute("system");
if (sysName == "DAQ")
{
- iSys = 0;
+ iSys = kDAQ;
count += 1;
}
else if (sysName == "DCS")
{
- iSys = 1;
+ iSys = kDCS;
count += 10;
}
else if (sysName == "HLT")
{
- iSys = 2;
+ iSys = kHLT;
count += 100;
}
anAttribute = anEntry->GetAttribute("fxsPasswd");
if (anAttribute) fFXSPass[iSys] = anAttribute->GetValue();
+
+ anAttribute = anEntry->GetAttribute("fxsAdmin"); // MAY
+ if (!anAttribute)
+ {
+ AliDebug(2, "Warning! No \"fxsAdmin\" attribute!");
+ }
+ else
+ {
+ const char* anAdmin;
+ while ((anAdmin = anAttribute->GetValue()))
+ {
+ fAdmin[iSys]->AddLast(new TObjString(anAdmin));
+ }
+ }
+
}
if(count != 111) {
TString result;
result += '\n';
+
+ TString mode = "test";
+ if (fRunMode == kProd) mode = "production";
- result += "####################################################\n";
- result += Form(" Shuttle configuration from %s \n", fConfigHost.Data());
- result += "####################################################\n";
+ result += "########################################################################\n";
+ result += Form(" Shuttle configuration from %s - Run Mode: <%s> \n",
+ fConfigHost.Data(), mode.Data());
+ result += "########################################################################\n";
result += Form("\nShuttle running on %s \n", fShuttleInstanceHost.Data());
if(fProcessAll) {
result += "\n";
}
- result += Form("PP time out = %d - max PP mem size = %d KB - max retries = %d\n\n",
- fPPTimeOut, fPPMaxMem, fMaxRetries);
+ result += Form("PP time out = %d - DCS time out = %d - max PP mem size = %d KB - max retries = %d "
+ "- DIM trigger waiting timeout = %d\n",
+ fPPTimeOut, fDCSTimeOut, fPPMaxMem, fMaxRetries, fTriggerWait);
+ result += Form("FLAGS: keepDCSMap = %d - keepTempFolder = %d - SendMail = %d \n",
+ fKeepDCSMap, fKeepTempFolder, fSendMail);
+ const TObjArray* shuttleAdmins = GetAdmins(kGlobal);
+ if (shuttleAdmins->GetEntries() != 0)
+ {
+ result += "SHUTTLE administrator(s): ";
+ TIter it(shuttleAdmins);
+ TObjString* anAdmin;
+ while ((anAdmin = (TObjString*) it.Next()))
+ {
+ result += Form("%s ", anAdmin->String().Data());
+ }
+ result += "\n";
+ }
+ const TObjArray* amandaAdmins = GetAdmins(kAmanda);
+ if (amandaAdmins->GetEntries() != 0)
+ {
+ result += "Amanda server administrator(s): ";
+ TIter it(amandaAdmins);
+ TObjString* anAdmin;
+ while ((anAdmin = (TObjString*) it.Next()))
+ {
+ result += Form("%s ", anAdmin->String().Data());
+ }
+ result += "\n\n";
+ }
result += "------------------------------------------------------\n";
result += Form("Logbook Configuration \n\n \tHost: %s:%d; \tUser: %s; ",
// result += "Password: ";
// result.Append('*', fDAQlbPass.Length());
- result += Form("\tDB: %s; \tTables: %s, %s, %s",
+ result += Form("\tDB: %s; \tTables: %s, %s, %s\n",
fDAQlbDB.Data(), fDAQlbTable.Data(), fShuttlelbTable.Data(), fRunTypelbTable.Data());
result += "\n\n";
-
+
result += "------------------------------------------------------\n";
result += "FXS configuration\n\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],
+ result += Form("\tFXS host: %s:%d; \tUser: %s\n", fFXSHost[iSys].Data(), fFXSPort[iSys],
fFXSUser[iSys].Data());
// result += Form("FXS Password:",fFXSPass[iSys].Data());
+ const TObjArray* fxsAdmins = GetAdmins(iSys);
+ if (fxsAdmins->GetEntries() != 0)
+ {
+ result += "\tAdministrator(s): ";
+ TIter it(fxsAdmins);
+ TObjString* anAdmin;
+ while ((anAdmin = (TObjString*) it.Next()))
+ {
+ result += Form("%s ", anAdmin->String().Data());
+ }
+ result += "\n\n";
+ }
}
+ result += "------------------------------------------------------\n";
+ result += "MonaLisa configuration\n\n";
+
+ result += Form("\tHost: %s; \tTable name: %s",
+ fMonitorHost.Data(), fMonitorTable.Data());
+
+ result += "\n\n";
+
TString optStr(option);
result += "------------------------------------------------------\n";
TIter iter(fDetectorMap.GetTable());
TPair* aPair = 0;
- AliInfo(Form("Option = %s", option));
-
while ((aPair = (TPair*) iter.Next())) {
AliShuttleDetConfigHolder* aHolder = (AliShuttleDetConfigHolder*) aPair->Value();
if (optStr != "" && !optStr.Contains(aHolder->GetDetector()) &&