]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - SHUTTLE/AliShuttleConfig.cxx
Corrected the list of bus patches with reverted manus
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttleConfig.cxx
index 46dfae951a040e3d63e94614d1aa4d4054cb0fab..b707e9efd5082153c2f592259962f67459cf3596 100644 (file)
 
 /*
 $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
@@ -165,6 +186,7 @@ some docs added
 #include <TLDAPResult.h>
 #include <TLDAPEntry.h>
 #include <TLDAPAttribute.h>
+#include <TKey.h>
 
 
 AliShuttleConfig::AliShuttleDCSConfigHolder::AliShuttleDCSConfigHolder(const TLDAPEntry* entry):
@@ -241,10 +263,131 @@ fIsValid(kFALSE)
                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)
 {
@@ -516,15 +659,24 @@ AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
        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
@@ -537,6 +689,12 @@ AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
        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);
 
@@ -627,6 +785,9 @@ AliShuttleConfig::~AliShuttleConfig()
        fDetectorMap.DeleteAll();
        fDetectorList.Clear();
        fProcessedDetectors.Delete();
+       
+       delete[] fAdmin;
+       
 }
 
 //______________________________________________________________________________________________
@@ -810,6 +971,18 @@ const TObjArray* AliShuttleConfig::GetResponsibles(const char* detector) const
        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
 {
@@ -941,6 +1114,22 @@ UInt_t AliShuttleConfig::SetGlobalConfig(TList* list)
        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!");
@@ -962,10 +1151,102 @@ UInt_t AliShuttleConfig::SetGlobalConfig(TList* list)
                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();
        
-       return 0;
+       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;
 }
 
 //______________________________________________________________________________________________
@@ -983,7 +1264,9 @@ UInt_t AliShuttleConfig::SetSysConfig(TList* list)
        } 
 
        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");
@@ -991,17 +1274,17 @@ UInt_t AliShuttleConfig::SetSysConfig(TList* list)
                
                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;
                }
                
@@ -1079,6 +1362,21 @@ UInt_t AliShuttleConfig::SetSysConfig(TList* list)
 
                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) {
@@ -1180,10 +1478,14 @@ void AliShuttleConfig::Print(Option_t* option) const
 
        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) {
@@ -1198,8 +1500,35 @@ void AliShuttleConfig::Print(Option_t* option) const
                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; ",
@@ -1211,7 +1540,7 @@ void AliShuttleConfig::Print(Option_t* option) const
                fDAQlbDB.Data(), fDAQlbTable.Data(), fShuttlelbTable.Data(), fRunTypelbTable.Data());
 
        result += "\n\n";
-
+       
        result += "------------------------------------------------------\n";
        result += "FXS configuration\n\n";
 
@@ -1221,9 +1550,21 @@ void AliShuttleConfig::Print(Option_t* option) const
                                                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";
@@ -1233,7 +1574,7 @@ void AliShuttleConfig::Print(Option_t* option) const
                fMonitorHost.Data(), fMonitorTable.Data());
                
        result += "\n\n";
-       
+               
        TString optStr(option);
 
        result += "------------------------------------------------------\n";