ANNA Suite  2020b
Multipurpose development suite for Telco applications
Engine.hpp
Go to the documentation of this file.
1 // ANNA - Anna is Not Nothingness Anymore //
2 // //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
4 // //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7 
8 
9 #ifndef anna_statistics_Engine_hpp
10 #define anna_statistics_Engine_hpp
11 
12 #include <anna/core/Singleton.hpp>
15 #include <anna/core/mt/Mutex.hpp>
16 
17 // Standard
18 #include <string>
19 #include <map>
20 
21 // Local
23 
24 namespace anna {
25 namespace xml {
26 class Node;
27 }
28 }
29 
30 
31 
32 namespace anna {
33 
34 namespace statistics {
35 
36 
37 class Accumulator;
38 
39 
40 typedef struct {
41 
42  std::string SampleFile; // Sample file to optional writtings
43  std::string Description;
44  std::string Unit;
46 
48 
49 typedef std::map <int, _concept_identification_t> _concept_identification_map_t;
50 typedef std::map <int, _concept_identification_t>::const_iterator _concept_identification_map_iter;
51 typedef std::map <int, _concept_identification_t>::iterator _concept_identification_map_nc_iter;
52 
53 typedef std::map <std::string, Accumulator*> _accumulator_map_t;
54 typedef std::map <std::string, Accumulator*>::const_iterator _accumulator_map_it;
55 typedef std::map <std::string, Accumulator*>::iterator _accumulator_map_nc_it;
56 
57 
63 class Engine : public anna::Singleton <Engine> {
64 
65 
66 public:
67 
69  ~Engine();
70 
71  // Sets
72 
85  int addConcept(const std::string & description, const std::string & unit, const bool & integerNatureSample = true) ;
86 
87 
91  void enable(void) { a_enabled = true; }
92 
93 
97  void disable(void) { a_enabled = false; }
98 
112  bool enableSampleLog(const int & id = -1, const char *sampleFileName = NULL) ;
113 
114 
123  bool disableSampleLog(const int & id = -1) ;
124 
125  // Gets
126 
137  bool getConcept(const int & id, std::string & description, std::string & unit, bool & integerNatureSample) const ;
138 
139 
143  bool enabled(void) const { return (a_enabled); }
144 
145 
153  Accumulator *createAccumulator(const std::string &name) noexcept(false);
154 
162  Accumulator* getAccumulator(const std::string &name) ;
163 
164 
165 
171  std::string asString(void) const ;
172 
173 
181  anna::xml::Node* asXML(anna::xml::Node* parent, const int & numberOfDecimals = 2) const ;
182 
183 
184 private:
185 
186  Engine(); // private constructor
187 
188  _concept_identification_map_t a_concept_identification_map;
189  _accumulator_map_t a_accumulators; // you could create accumulators regardless the engine, but this is easier and asXML will show all the information easily
190  bool a_enabled;
191  int a_sequence_concept_id;
192  anna::Mutex a_mutex; // for logSample
193 
194  bool logSample(const int & conceptId, const anna::Millisecond & unixTimestamp, const double & value) const ;
195 
196  friend class anna::Singleton <Engine>;
197  friend class Accumulator;
198 };
199 
200 
201 }
202 }
203 
204 #endif
Definition: Millisecond.hpp:24
void disable(void)
Definition: Engine.hpp:97
std::string Description
Definition: Engine.hpp:43
bool IntegerNatureSample
Definition: Engine.hpp:45
bool enabled(void) const
Definition: Engine.hpp:143
Definition: Engine.hpp:63
Definition: Node.hpp:56
Definition: Singleton.hpp:76
std::map< std::string, Accumulator * >::iterator _accumulator_map_nc_it
Definition: Engine.hpp:55
std::string Unit
Definition: Engine.hpp:44
std::map< std::string, Accumulator * > _accumulator_map_t
Definition: Engine.hpp:53
std::map< std::string, Accumulator * >::const_iterator _accumulator_map_it
Definition: Engine.hpp:54
xml::Node Node
Definition: Node.hpp:21
std::map< int, _concept_identification_t >::iterator _concept_identification_map_nc_iter
Definition: Engine.hpp:51
Definition: app.hpp:12
std::string SampleFile
Definition: Engine.hpp:42
void enable(void)
Definition: Engine.hpp:91
Contains statistical sample information.
Definition: Accumulator.hpp:87
Definition: Mutex.hpp:41
std::map< int, _concept_identification_t > _concept_identification_map_t
Definition: Engine.hpp:49
std::map< int, _concept_identification_t >::const_iterator _concept_identification_map_iter
Definition: Engine.hpp:50