1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 Revision 1.6 2006/07/19 10:09:55 jgrosseo
19 new configuration, accesst to DAQ FES (Alberto)
21 Revision 1.5 2006/07/10 13:01:41 jgrosseo
22 enhanced storing of last sucessfully processed run (alberto)
24 Revision 1.4 2006/06/12 09:11:16 jgrosseo
25 coding conventions (Alberto)
27 Revision 1.3 2006/06/06 14:26:40 jgrosseo
28 o) removed files that were moved to STEER
29 o) shuttle updated to follow the new interface (Alberto)
31 Revision 1.7 2006/05/12 09:07:16 colla
33 New configuration complete
35 Revision 1.2 2006/03/07 07:52:34 hristov
36 New version (B.Yordanov)
38 Revision 1.4 2005/11/19 14:20:31 byordano
39 logbook config added to AliShuttleConfig
41 Revision 1.3 2005/11/17 19:24:25 byordano
42 TList changed to TObjArray in AliShuttleConfig
44 Revision 1.2 2005/11/17 14:43:23 byordano
47 Revision 1.1.1.1 2005/10/28 07:33:58 hristov
48 Initial import as subdirectory in AliRoot
50 Revision 1.1.1.1 2005/09/12 22:11:40 byordano
53 Revision 1.3 2005/08/30 09:13:02 byordano
60 // This class keeps the AliShuttle configuration.
61 // It reads the configuration for LDAP server.
62 // For every child entry in basedn which has schema type 'shuttleConfig'
63 // it creates a detector configuration. This configuration includes:
64 // DCS server host and port and the set of aliases for which data from
65 // will be retrieved (used by AliShuttle).
69 #include "AliShuttleConfig.h"
70 #include "AliShuttleInterface.h"
75 #include <TObjString.h>
76 #include <TLDAPResult.h>
77 #include <TLDAPEntry.h>
78 #include <TLDAPAttribute.h>
81 AliShuttleConfig::AliShuttleConfigHolder::AliShuttleConfigHolder(const TLDAPEntry* entry):
89 // constructor of the shuttle configuration holder
91 TLDAPAttribute* anAttribute;
93 anAttribute = entry->GetAttribute("det"); // MUST
94 fDetector = anAttribute->GetValue();
96 anAttribute = entry->GetAttribute("DCSHost"); // MAY
99 Form("%s has not DCS host entry - Shuttle will skip DCS data query!",
102 fSkipDCSQuery = kTRUE;
106 fDCSHost = anAttribute->GetValue();
108 anAttribute = entry->GetAttribute("DCSPort"); // MAY
110 AliError(Form("Invalid configuration! %s has DCS Host but no port number!",
114 TString portStr = anAttribute->GetValue();
115 fDCSPort = portStr.Atoi();
117 anAttribute = entry->GetAttribute("DCSAlias"); // MAY
119 AliError(Form("Invalid configuration! %s has DCS host settings but no DCSAlias entries!",
125 while ((anAlias = anAttribute->GetValue())) {
126 fDCSAliases.AddLast(new TObjString(anAlias));
134 //______________________________________________________________________________________________
135 AliShuttleConfig::AliShuttleConfigHolder::~AliShuttleConfigHolder()
137 // destructor of the shuttle configuration holder
139 fDCSAliases.Delete();
142 ClassImp(AliShuttleConfig)
144 //______________________________________________________________________________________________
145 AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
146 const char* binddn, const char* password, const char* basedn):
151 // host: ldap server host
152 // port: ldap server port
153 // binddn: binddn used for ldap binding (simple bind is used!).
154 // password: password for binddn
155 // basedn: this is basedn whose childeren entries which have
156 // (objectClass=shuttleConfig) will be used as detector configurations.
159 TLDAPServer aServer(host, port, binddn, password, 3);
161 if (!aServer.IsConnected()) {
162 AliError(Form("Can't connect to ldap server %s:%d",
167 // reads configuration for the shuttle running on this machine
169 fShuttleInstanceHost = gSystem->HostName();
170 TString queryFilter = "(ShuttleHost=";
171 queryFilter += fShuttleInstanceHost;
174 TLDAPResult* aResult = aServer.Search(basedn, LDAP_SCOPE_ONELEVEL,
178 AliError(Form("Can't find configuration with base DN: %s",
183 if (aResult->GetCount() == 0) {
184 AliError(Form("No Shuttle instance for host = %s!",
185 fShuttleInstanceHost.Data()));
186 AliError(Form("All detectors will be processed."));
190 if (aResult->GetCount() > 1) {
191 AliError(Form("More than one Shuttle instance for host %s!",
192 fShuttleInstanceHost.Data()));
197 TLDAPAttribute* anAttribute;
200 anEntry = aResult->GetNext();
201 anAttribute = anEntry->GetAttribute("detectors");
203 while((detName = anAttribute->GetValue())){
204 TObjString *objDet= new TObjString(detName);
205 fProcessedDetectors.Add(objDet);
209 // Detector configuration (DCS Archive DB settings)
211 aResult = aServer.Search(basedn, LDAP_SCOPE_ONELEVEL,
212 "(objectClass=AliShuttleDetector)");
214 AliError(Form("Can't find configuration with base DN: %s",
220 while ((anEntry = aResult->GetNext())) {
221 AliShuttleConfigHolder* aHolder = new AliShuttleConfigHolder(anEntry);
224 if (!aHolder->IsValid()) {
225 AliError("Detector configuration error!");
230 TObjString* detStr = new TObjString(aHolder->GetDetector());
231 fDetectorMap.Add(detStr, aHolder);
232 fDetectorList.AddLast(detStr);
237 // Global configuration (DAQ logbook)
239 aResult = aServer.Search(basedn, LDAP_SCOPE_ONELEVEL,
240 "(objectClass=AliShuttleGlobalConfig)");
242 AliError(Form("Can't find configuration with base DN: %s",
247 if (aResult->GetCount() == 0) {
248 AliError("Can't find DAQ logbook configuration!");
252 if (aResult->GetCount() > 1) {
253 AliError("More than one DAQ logbook configuration found!");
257 anEntry = aResult->GetNext();
259 anAttribute = anEntry->GetAttribute("DAQLogbookHost");
261 AliError("Can't find DAQLogbookHost attribute!");
264 fDAQlbHost = anAttribute->GetValue();
266 anAttribute = anEntry->GetAttribute("DAQLogbookUser");
268 AliError("Can't find DAQLogbookUser attribute!");
271 fDAQlbUser = anAttribute->GetValue();
273 anAttribute = anEntry->GetAttribute("DAQLogbookPassword");
275 AliError("Can't find DAQLogbookPassword attribute!");
278 fDAQlbPass = anAttribute->GetValue();
280 anAttribute = anEntry->GetAttribute("MaxPPRetries");
282 AliError("Can't find MaxPPRetries attribute!");
285 TString tmpStr = anAttribute->GetValue();
286 fMaxPPRetries = tmpStr.Atoi();
288 anAttribute = anEntry->GetAttribute("MaxRetries");
290 AliError("Can't find MaxRetries attribute!");
293 tmpStr = anAttribute->GetValue();
294 fMaxRetries = tmpStr.Atoi();
299 // FES configuration (FES logbook and hosts)
302 for(int iSys=0;iSys<3;iSys++){
303 queryFilter = Form("(system=%s)", AliShuttleInterface::fkSystemNames[iSys]);
304 aResult = aServer.Search(basedn, LDAP_SCOPE_ONELEVEL, queryFilter.Data());
306 AliError(Form("Can't find configuration for system: %s",
307 AliShuttleInterface::fkSystemNames[iSys]));
311 if (aResult->GetCount() != 1 ) {
312 AliError("Error in FES configuration!");
316 anEntry = aResult->GetNext();
318 anAttribute = anEntry->GetAttribute("LogbookHost");
320 AliError(Form ("Can't find LogbookHost attribute for %s!!",
321 AliShuttleInterface::fkSystemNames[iSys]));
324 fFESlbHost[iSys] = anAttribute->GetValue();
326 anAttribute = anEntry->GetAttribute("LogbookUser");
328 AliError(Form ("Can't find LogbookUser attribute for %s!!",
329 AliShuttleInterface::fkSystemNames[iSys]));
332 fFESlbUser[iSys] = anAttribute->GetValue();
334 anAttribute = anEntry->GetAttribute("LogbookPassword");
336 AliError(Form ("Can't find LogbookPassword attribute for %s!!",
337 AliShuttleInterface::fkSystemNames[iSys]));
340 fFESlbPass[iSys] = anAttribute->GetValue();
342 anAttribute = anEntry->GetAttribute("FSHost");
344 AliError(Form ("Can't find FSHost attribute for %s!!",
345 AliShuttleInterface::fkSystemNames[iSys]));
348 fFESHost[iSys] = anAttribute->GetValue();
350 anAttribute = anEntry->GetAttribute("FSUser");
352 AliError(Form ("Can't find FSUser attribute for %s!!",
353 AliShuttleInterface::fkSystemNames[iSys]));
356 fFESUser[iSys] = anAttribute->GetValue();
358 anAttribute = anEntry->GetAttribute("FSPassword");
359 if (anAttribute) fFESPass[iSys] = anAttribute->GetValue();
368 //______________________________________________________________________________________________
369 AliShuttleConfig::~AliShuttleConfig()
373 fDetectorMap.DeleteAll();
376 //______________________________________________________________________________________________
377 const TObjArray* AliShuttleConfig::GetDetectors() const
380 // returns collection of TObjString which contains the name
381 // of every detector which is in the configuration.
384 return &fDetectorList;
387 //______________________________________________________________________________________________
388 Bool_t AliShuttleConfig::HasDetector(const char* detector) const
391 // checks for paricular detector in the configuration.
393 return fDetectorMap.GetValue(detector) != NULL;
396 //______________________________________________________________________________________________
397 const char* AliShuttleConfig::GetDCSHost(const char* detector) const
400 // returns DCS server host used by particular detector
403 AliShuttleConfigHolder* aHolder = (AliShuttleConfigHolder*) fDetectorMap.GetValue(detector);
405 AliError(Form("There isn't configuration for detector: %s",
410 return aHolder->GetDCSHost();
413 //______________________________________________________________________________________________
414 Int_t AliShuttleConfig::GetDCSPort(const char* detector) const
417 // returns DCS server port used by particular detector
421 AliShuttleConfigHolder* aHolder = (AliShuttleConfigHolder*) fDetectorMap.GetValue(detector);
423 AliError(Form("There isn't configuration for detector: %s",
428 return aHolder->GetDCSPort();
431 //______________________________________________________________________________________________
432 const TObjArray* AliShuttleConfig::GetDCSAliases(const char* detector) const
435 // returns collection of TObjString which represents the set of aliases
436 // which used for data retrieval for particular detector
439 AliShuttleConfigHolder* aHolder = (AliShuttleConfigHolder*) fDetectorMap.GetValue(detector);
441 AliError(Form("There isn't configuration for detector: %s",
446 return aHolder->GetDCSAliases();
449 //______________________________________________________________________________________________
450 Bool_t AliShuttleConfig::HostProcessDetector(const char* detector) const
452 // return TRUE if detector is handled by host or if fProcessAll is TRUE
454 if(fProcessAll) return kTRUE;
455 TIter iter(&fProcessedDetectors);
457 while((detName = (TObjString*) iter.Next())){
458 if(detName->String() == detector) return kTRUE;
463 //______________________________________________________________________________________________
464 void AliShuttleConfig::Print(Option_t* /*option*/) const
466 // print configuration
471 result += Form("\nShuttle running on %s \n\n", fShuttleInstanceHost.Data());
474 result += Form("All detectors will be processed! \n\n");
476 result += "Detectors processed by this host: ";
477 TIter it(&fProcessedDetectors);
479 while ((aDet = (TObjString*) it.Next())) {
480 result += Form("%s ", aDet->String().Data());
485 result += Form("DAQ Logbook Configuration \n \tHost: %s - User: %s - ",
486 fDAQlbHost.Data(), fDAQlbUser.Data());
488 result += "Password: ";
489 result.Append('*', fDAQlbPass.Length());
492 for(int iSys=0;iSys<3;iSys++){
493 result += Form("FES Configuration for %s system\n", AliShuttleInterface::fkSystemNames[iSys]);
494 result += Form("\tLogbook host: \t%s - \tUser: %s\n",
495 fFESlbHost[iSys].Data(), fFESlbUser[iSys].Data());
496 // result += Form("Logbook Password:",fFESlbPass[iSys].Data());
497 result += Form("\tFES host: \t%s - \tUser: %s\n\n", fFESHost[iSys].Data(), fFESUser[iSys].Data());
498 // result += Form("FES Password:",fFESPass[iSys].Data());
501 TIter iter(fDetectorMap.GetTable());
503 while ((aPair = (TPair*) iter.Next())) {
504 AliShuttleConfigHolder* aHolder = (AliShuttleConfigHolder*) aPair->Value();
505 if(aHolder->SkipDCSQuery()) continue;
506 result += Form("DCS archive DB configuration for *** %s *** \n", aHolder->GetDetector());
507 result += Form("\tAmanda server: %s:%d \n", aHolder->GetDCSHost(), aHolder->GetDCSPort());
509 result += "\tDCS Aliases: ";
510 const TObjArray* aliases = aHolder->GetDCSAliases();
513 while ((anAlias = (TObjString*) it.Next())) {
514 result += Form("%s ", anAlias->String().Data());
521 if(!fIsValid) result += "\n\n********** !!!!! Configuration is INVALID !!!!! **********\n";