Remove dynamic exceptions
[anna.git] / include / anna / diameter.comm / MessageStatistics.hpp
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_diameter_comm_MessageStatistics_hpp
10 #define anna_diameter_comm_MessageStatistics_hpp
11
12 // Standard
13 #include <algorithm>
14 #include <string>
15 #include <map>
16
17 // Project
18 #include <anna/diameter/defines.hpp>
19 #include <anna/statistics/Accumulator.hpp>
20
21 namespace anna {
22
23 namespace xml {
24   class Node;
25 }
26
27 namespace diameter {
28
29 namespace comm {
30
31
32
33 class MessageStatistics {
34
35   public:
36     MessageStatistics() {;}
37     ~MessageStatistics() {;}
38
39     struct ConceptType { enum _v { SentRequestProcessingTime, ReceivedMessageSize }; };
40
41     void initialize(const std::string &name) noexcept(false);
42     void process(const ConceptType::_v &conceptType, const anna::diameter::CommandId &cid, const double & value) noexcept(false);
43     anna::statistics::Accumulator *getAccumulator() const { return a_accumulator; }
44  
45   private:
46     anna::statistics::Accumulator *a_accumulator;
47     typedef std::pair<anna::diameter::CommandId, ConceptType::_v> ConceptId;
48     typedef std::map<ConceptId, int /* engine concept id */> concepts_map_t;
49     typedef std::map<ConceptId, int /* engine concept id */>::const_iterator concepts_map_it;
50     concepts_map_t a_concepts;
51 };
52
53 }
54 }
55 }
56
57 #endif