This commit was generated by cvs2svn to compensate for changes in r12269,
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttleConfig.cxx
CommitLineData
73abe331 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15
16/*
17$Log$
18Revision 1.1.1.1 2005/09/12 22:11:40 byordano
19SHUTTLE package
20
21Revision 1.3 2005/08/30 09:13:02 byordano
22some docs added
23
24*/
25
26
27//
28// This class keeps the AliShuttle configuration.
29// It reads the configuration for LDAP server.
30// For every child entry in basedn which has schema type 'shuttleConfig'
31// it creates a detector configuration. This configuration includes:
32// DCS server host and port and the set of aliases for which data from
33// will be retrieved (used by AliShuttle).
34//
35
36
37#include "AliShuttleConfig.h"
38
39#include "AliLog.h"
40
41#include <TObjString.h>
42#include <TLDAPResult.h>
43#include <TLDAPEntry.h>
44#include <TLDAPAttribute.h>
45
46AliShuttleConfig::ConfigHolder::ConfigHolder(const TLDAPEntry* entry):
47 fIsValid(kFALSE)
48{
49 TLDAPAttribute* anAttribute;
50
51 anAttribute = entry->GetAttribute("dt");
52 if (!anAttribute) {
53 AliError("Invalid configuration! Can't get detector name.");
54 return;
55 }
56 fDetector = anAttribute->GetValue();
57 if (!fDetector.Length()) {
58 AliError("Detector name can't be an empty string!")
59 return;
60 }
61
62 anAttribute = entry->GetAttribute("ipHost");
63 if (!anAttribute) {
64 AliError("Invalid configuration! Can't get ipHost.");
65 return;
66 }
67 fHost = anAttribute->GetValue();
68 if (!fHost.Length()) {
69 AliError("Host can't be an empty string!")
70 return;
71 }
72
73 anAttribute = entry->GetAttribute("ipServicePort");
74 if (!anAttribute) {
75 AliError("Invalid configuration! Can't get ipServicePort.");
76 return;
77 }
78 TString portStr = anAttribute->GetValue();
79 if (!portStr.Length()) {
80 AliError("ipServicePort can't be an empty string!")
81 return;
82 }
83 fPort = portStr.Atoi();
84
85 anAttribute = entry->GetAttribute("alias");
86 if (!anAttribute) {
87 AliError("Invalid configuration! Can't get alias attribute.");
88 return;
89 }
90 const char* anAlias;
91 while ((anAlias = anAttribute->GetValue())) {
92 fAliases.Add(new TObjString(anAlias));
93 }
94
95 fIsValid = kTRUE;
96}
97
98AliShuttleConfig::ConfigHolder::~ConfigHolder() {
99 fAliases.Delete();
100}
101
102ClassImp(AliShuttleConfig)
103
104AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
105 const char* binddn, const char* password, const char* basedn):
106 fIsValid(kFALSE)
107{
108 //
109 // host: ldap server host
110 // port: ldap server port
111 // binddn: binddn used for ldap binding (simple bind is used!).
112 // password: password for binddn
113 // basedn: this is basedn whose childeren entries which have
114 // (objectClass=shuttleConfig) will be used as detector configurations.
115 //
116
117 TLDAPServer aServer(host, port, binddn, password);
118
119 if (!aServer.IsConnected()) {
120 AliError(Form("Can't connect to ldap server %s:%d",
121 host, port));
122 return;
123 }
124
125 TLDAPResult* aResult = aServer.Search(basedn, LDAP_SCOPE_ONELEVEL,
126 "(objectClass=shuttleConfig)");
127 if (!aResult) {
128 AliError(Form("Can't find configuration with base DN: %s",
129 basedn));
130 return;
131 }
132
133 TLDAPEntry* anEntry;
134 while ((anEntry = aResult->GetNext())) {
135 ConfigHolder* aHolder = new ConfigHolder(anEntry);
136 delete anEntry;
137
138 if (!aHolder->IsValid()) {
139 AliError("This entry is going to be skipped!");
140 delete aHolder;
141
142 continue;
143 }
144
145 TObjString* detStr = new TObjString(aHolder->GetDetector());
146 fDetectorMap.Add(detStr, aHolder);
147 fDetectorList.Add(detStr);
148 }
149
150 delete aResult;
151
152 fIsValid = kTRUE;
153}
154
155AliShuttleConfig::~AliShuttleConfig() {
156 fDetectorMap.DeleteAll();
157}
158
159const TList* AliShuttleConfig::GetDetectors() const {
160 //
161 // returns collection of TObjString which contains the name
162 // of every detector which is in the configuration.
163 //
164
165 return &fDetectorList;
166}
167
168Bool_t AliShuttleConfig::HasDetector(const char* detector) const {
169 //
170 // checks for paricular detector in the configuration.
171 //
172 return fDetectorMap.GetValue(detector) != NULL;
173}
174
175const char* AliShuttleConfig::GetHost(const char* detector) const {
176 //
177 // returns DCS server host used by particular detector
178 //
179
180 ConfigHolder* aHolder = (ConfigHolder*) fDetectorMap.GetValue(detector);
181 if (!aHolder) {
182 AliError(Form("There isn't configuration for detector: %s",
183 detector));
184 return NULL;
185 }
186
187 return aHolder->GetHost();
188}
189
190Int_t AliShuttleConfig::GetPort(const char* detector) const {
191 //
192 // returns DCS server port used by particular detector
193 //
194
195
196 ConfigHolder* aHolder = (ConfigHolder*) fDetectorMap.GetValue(detector);
197 if (!aHolder) {
198 AliError(Form("There isn't configuration for detector: %s",
199 detector));
200 return 0;
201 }
202
203 return aHolder->GetPort();
204}
205
206const TList* AliShuttleConfig::GetAliases(const char* detector) const {
207 //
208 // returns collection of TObjString which represents the set of aliases
209 // which used for data retrieval for particular detector
210 //
211
212 ConfigHolder* aHolder = (ConfigHolder*) fDetectorMap.GetValue(detector);
213 if (!aHolder) {
214 AliError(Form("There isn't configuration for detector: %s",
215 detector));
216 return NULL;
217 }
218
219 return aHolder->GetAliases();
220}
221
222void AliShuttleConfig::Print(Option_t* /*option*/) const {
223
224 TString result;
225 result += '\n';
226
227 TIter iter(fDetectorMap.GetTable());
228 TPair* aPair;
229 while ((aPair = (TPair*) iter.Next())) {
230 ConfigHolder* aHolder = (ConfigHolder*) aPair->Value();
231 result += '\n';
232 result += " Detector: ";
233 result += aHolder->GetDetector();
234 result += '\n';
235 result += " Host: ";
236 result += aHolder->GetHost();
237 result += '\n';
238 result += " Port: ";
239 result += aHolder->GetPort();
240 result += '\n';
241
242 result += " Aliases: ";
243 const TList* aliases = aHolder->GetAliases();
244 TIter it(aliases);
245 TObjString* anAlias;
246 while ((anAlias = (TObjString*) it.Next())) {
247 result += anAlias->String();
248 result += ' ';
249 }
250
251 result += '\n';
252 }
253
254 AliInfo(result);
255}