]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - SHUTTLE/AliShuttleConfig.cxx
added port numbers to ldap schema and config classes (alberto)
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttleConfig.cxx
index bbdb821e53f39db9415b94dbce22bbeb77f29f8d..f147632454bcb781d3c15c075052a150cb376353 100644 (file)
 
 /*
 $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)
 
@@ -91,20 +118,46 @@ AliShuttleConfig::AliShuttleConfigHolder::AliShuttleConfigHolder(const TLDAPEntr
 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()));
@@ -116,7 +169,8 @@ fSkipDCSQuery(kFALSE)
        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;
@@ -124,16 +178,24 @@ fSkipDCSQuery(kFALSE)
        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;
@@ -147,6 +209,7 @@ AliShuttleConfig::AliShuttleConfigHolder::~AliShuttleConfigHolder()
 // destructor of the shuttle configuration holder
 
        delete fDCSAliases;
+       delete fDCSDataPoints;
 }
 
 ClassImp(AliShuttleConfig)
@@ -155,8 +218,9 @@ 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)
 {
        //
@@ -281,6 +345,14 @@ AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
        }
        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!");
@@ -297,14 +369,22 @@ AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
        }
        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) {
@@ -312,77 +392,120 @@ AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
                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;
        }
@@ -473,6 +596,24 @@ const TObjArray* AliShuttleConfig::GetDCSAliases(const char* detector) const
        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
 {
@@ -487,6 +628,22 @@ 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
 {
@@ -509,42 +666,69 @@ 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";