Line data Source code
1 : //-*- Mode: C++ -*-
2 : // $Id$
3 :
4 : #ifndef ALIHLTONLINECONFIGURATION_H
5 : #define ALIHLTONLINECONFIGURATION_H
6 : //* This file is property of and copyright by the ALICE HLT Project *
7 : //* ALICE Experiment at CERN, All rights reserved. *
8 : //* See cxx source for full Copyright notice *
9 :
10 : /// @file AliHLTOnlineConfiguration.h
11 : /// @author Matthias Richter
12 : /// @author Lars Christian Raae
13 : /// @date
14 : /// @brief Description of the HLT online configuration
15 :
16 : #include <vector>
17 :
18 : #include "AliHLTLogging.h"
19 : #include <TObject.h>
20 : #include <TArrayC.h>
21 : #include <TList.h>
22 : #include <TXMLNode.h>
23 :
24 : /**
25 : * @class AliHLTOnlineConfiguration
26 : * @brief Description of the HLT online configuration
27 : * This class wraps an online HLT configuration file for storage in a
28 : * CDB object.
29 : *
30 : * Ideas:
31 : * The class provides easy access to the XML tags of the configuration through
32 : * an XML parser.
33 : *
34 : * The online configuration is translated into a tree like configuration
35 : * structure. The Draw function can be used to create a graph.
36 : *
37 : * The xml configuration is loaded into an internal TArrayC buffer, which
38 : * is automatically compressed depending on the compression level used for
39 : * root file storage. Later extension will be the implementation of a custom
40 : * Streamer function implementing the most efficient compression.
41 : */
42 : class AliHLTOnlineConfiguration : public TObject, public AliHLTLogging {
43 : public:
44 : /// standard constructor
45 : AliHLTOnlineConfiguration();
46 : /// destructor
47 : virtual ~AliHLTOnlineConfiguration();
48 :
49 : /// load configuration from file
50 : int LoadConfiguration(const char* filename);
51 :
52 : /// compress the xml buffer
53 : int Compress();
54 :
55 : /// uncompress the xml buffer
56 : int Uncompress();
57 :
58 : /// parse the xml buffer
59 : int Parse();
60 :
61 : /// get default chains (sources of HLTOutFormatter)
62 0 : const char* GetDefaultChains() const {return fDefaultChains.Data();}
63 :
64 : /// get component libraries
65 : TString GetComponentLibraries();
66 :
67 : /// overloaded from TObject, print info
68 : virtual void Print(const char* options) const;
69 :
70 : /// overloaded from TObject, more crude data dump
71 : virtual void Dump() const;
72 :
73 : /// overloaded from TObject, clear object
74 : virtual void Clear(Option_t * option="");
75 :
76 : /// overloaded from TObject, clone object
77 : virtual TObject *Clone(const char *newname="") const;
78 :
79 : /// overloaded from TObject, copy object
80 : virtual void Copy(TObject &object) const;
81 :
82 : /// overloaded from TObject, draw graph of the configuration
83 : virtual void Draw(Option_t *option="");
84 :
85 : /// custom status bits of TObject
86 : /// bit 14 to 23 can be freely used
87 : /// use functions SetBit, ResetBit, TestBit
88 : enum {
89 : kLoaded = BIT(14), // xml buffer is loaded
90 : kCompressed = BIT(15), // xml buffer is compressed
91 : kParsed = BIT(16), // already parsed
92 : };
93 :
94 : private:
95 : /// buffer for XML configuration
96 : TArrayC fXMLBuffer;
97 : /// size of XML buffer
98 : UInt_t fXMLSize;
99 : /// list of parsed configuration entries
100 : TList fConfEntryList;
101 : /// default chains (sources of HLTOutFormatter)
102 : TString fDefaultChains;
103 :
104 : /**
105 : * Parse XML configuration.
106 : * @param node XML root node of configuration
107 : * @return
108 : * -EINVAL if unparsable or empty configuration
109 : * -EPROTO if no configuration is loaded
110 : * 0 if any elements were successfully parsed
111 : */
112 : int ParseConfiguration(TXMLNode* node);
113 :
114 : /**
115 : * Parse XML configuration entry.
116 : * @param node XML root node of entry
117 : * @param id online component ID
118 : * @param type online component type
119 : * @return
120 : * -EINVAL if parsing error
121 : * 0 if entry was successfully parsed
122 : */
123 : int ParseEntry(TXMLNode* node, const char* id, const char* type);
124 :
125 : /**
126 : * Parse standard component configuration.
127 : * @param id online component ID
128 : * @param type online component type
129 : * @param cmd online command
130 : * @param sources component sources
131 : * @param nodes online computing nodes
132 : * @return
133 : * -EINVAL if parsing error
134 : * 0 if entry was successfully parsed
135 : */
136 : int ParseStandardComponent(const char* id, const char* type, const char* cmd,
137 : TString& sources, TString& nodes);
138 :
139 : /**
140 : * Parse RORCPublisher configuration.
141 : * @param id online component ID
142 : * @param type online component type
143 : * @param cmd online command
144 : * @param sources component sources
145 : * @param nodes online computing nodes
146 : * @return
147 : * -EINVAL if parsing error
148 : * 0 if entry was successfully parsed
149 : */
150 : int ParseRORCPublisher(const char* id, const char* type, const char* cmd,
151 : TString& sources, TString& nodes);
152 :
153 : /**
154 : * Parse TCPDumpSubscriber configuration.
155 : * @param id online component ID
156 : * @param type online component type
157 : * @param cmd online command
158 : * @param sources component sources
159 : * @param nodes online computing nodes
160 : * @return
161 : * -EINVAL if parsing error
162 : * 0 if entry was successfully parsed
163 : */
164 : int ParseTCPDumpSubscriber(const char* id, const char* type, const char* cmd,
165 : TString& sources, TString& nodes);
166 :
167 : /**
168 : * Parse Relay configuration.
169 : * @param id online component ID
170 : * @param type online component type
171 : * @param cmd online command
172 : * @param sources component sources
173 : * @param nodes online computing nodes
174 : * @return
175 : * -EINVAL if parsing error
176 : * 0 if entry was successfully parsed
177 : */
178 : int ParseRelay(const char* id, const char* type, const char* cmd,
179 : TString& sources, TString& nodes);
180 :
181 : /**
182 : * Parse HLTOutFormatter configuration.
183 : * @param id online component ID
184 : * @param type online component type
185 : * @param cmd online command
186 : * @param sources component sources
187 : * @param nodes online computing nodes
188 : * @return
189 : * -EINVAL if parsing error
190 : * 0 if entry was successfully parsed
191 : */
192 : int ParseHLTOutFormatter(const char* id, const char* type, const char* cmd,
193 : TString& sources, TString& nodes);
194 :
195 : /**
196 : * Parse HLTOutWriterSubscriber configuration.
197 : * @param id online component ID
198 : * @param type online component type
199 : * @param cmd online command
200 : * @param sources component sources
201 : * @param nodes online computing nodes
202 : * @return
203 : * -EINVAL if parsing error
204 : * 0 if entry was successfully parsed
205 : */
206 : int ParseHLTOutWriterSubscriber(const char* id, const char* type,
207 : const char* cmd, TString& sources, TString& nodes);
208 :
209 126 : ClassDef(AliHLTOnlineConfiguration, 1); // description of HLT online configuration
210 : };
211 :
212 : #endif
|