OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
agent_stats.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  *
4  * Global vnswad statistics
5  */
6 
7 #ifndef vnsw_agent_stats_hpp
8 #define vnsw_agent_stats_hpp
9 
10 #include <stdint.h>
11 #include <tbb/atomic.h>
12 
13 typedef boost::function<uint32_t()> FlowCountFn;
14 class AgentStats {
15 public:
16  static const uint32_t kInvalidFlowCount = 0xFFFFFFFF;
17  static const int kFlowStatsUpdateInterval = 1000;
18  struct FlowCounters {
19  uint64_t prev_flow_count; //previous flow created/aged count
20  uint32_t max_flows_per_second; //max_flows_added/deleted_per_second
21  uint32_t min_flows_per_second; //min_flows_added/deleted_per_second
22 
26  }
27  };
28 
29  AgentStats(Agent *agent)
39  max_flow_count_(0),
42  ipc_in_msgs_(0U), ipc_out_msgs_(0U), in_tpkts_(0U), in_bytes_(0U),
43  out_tpkts_(0U), out_bytes_(0U) {
44  assert(singleton_ == NULL);
45  singleton_ = this;
46  flow_count_ = 0;
47  flow_created_ = 0;
48  flow_aged_ = 0;
49  hold_flow_count_ = 0;
50  }
51 
52  virtual ~AgentStats() {singleton_ = NULL;}
53 
54  static AgentStats *GetInstance() {return singleton_;}
55  void Shutdown() { }
56 
57  void Reset();
58  void incr_xmpp_reconnects(uint8_t idx) {xmpp_reconnect_[idx]++;}
59  uint32_t xmpp_reconnects(uint8_t idx) const {
60  return xmpp_reconnect_[idx];
61  }
62 
63  void incr_xmpp_in_msgs(uint8_t idx) {xmpp_in_msgs_[idx]++;}
64  uint64_t xmpp_in_msgs(uint8_t idx) const {return xmpp_in_msgs_[idx];}
65 
66  void incr_xmpp_out_msgs(uint8_t idx) {xmpp_out_msgs_[idx]++;}
67  uint64_t xmpp_out_msgs(uint8_t idx) const {return xmpp_out_msgs_[idx];}
68 
69  void incr_xmpp_config_in_msgs(uint8_t idx) {xmpp_config_in_msgs_[idx]++;}
70  uint64_t xmpp_config_in_msgs(uint8_t idx) const {
71  return xmpp_config_in_msgs_[idx];
72  }
73 
75  uint32_t sandesh_reconnects() const {return sandesh_reconnects_;}
76 
78  uint64_t sandesh_in_msgs() const {return sandesh_in_msgs_;}
79 
81  uint64_t sandesh_out_msgs() const {return sandesh_out_msgs_;}
82 
84  uint32_t sandesh_http_sessions() const {return sandesh_http_sessions_;}
85 
87  flow_created_.fetch_and_increment();
88  uint32_t count = flow_count_.fetch_and_increment();
89  if (count > max_flow_count_)
90  max_flow_count_ = count + 1;
91  }
92  void decr_flow_count() {
93  flow_count_--;
94  }
95 
96  void update_hold_flow_count(uint32_t value) {
97  hold_flow_count_ = value;
98  }
99 
100  uint64_t flow_created() const {return flow_created_;}
101 
102  uint64_t max_flow_count() const {return max_flow_count_;}
103 
104  uint32_t hold_flow_count() const {return hold_flow_count_;}
105 
106  void incr_flow_aged() { flow_aged_.fetch_and_increment(); }
107  uint64_t flow_aged() const {return flow_aged_;}
108 
111  }
112 
115  }
116 
118  uint64_t flow_drop_due_to_max_limit() const {
120  }
123  }
126  }
127 
129  uint64_t pkt_exceptions() const {return pkt_exceptions_;}
130 
133 
136 
138  uint64_t pkt_no_handler() const {return pkt_no_handler_;}
139 
142 
144  uint64_t pkt_invalid_mpls_hdr() const {return pkt_invalid_mpls_hdr_;}
145 
147  uint64_t pkt_invalid_ip_pkt() const {return pkt_invalid_ip_pkt_;}
148 
151 
153  uint64_t pkt_invalid_frm_tor() const {return pkt_invalid_frm_tor_;}
154 
157 
160 
163 
165  uint64_t pkt_dropped() const {return pkt_dropped_;}
166 
168  uint64_t ipc_in_msgs() const {return ipc_out_msgs_;}
169 
171  uint64_t ipc_out_msgs() const {return ipc_out_msgs_;}
172 
173  void incr_in_pkts(uint64_t count) {in_tpkts_ += count;}
174  uint64_t in_pkts() const {return in_tpkts_;}
175 
176  void incr_in_bytes(uint64_t count) {in_bytes_ += count;}
177  uint64_t in_bytes() const {return in_bytes_;}
178 
179  void incr_out_pkts(uint64_t count) {out_tpkts_ += count;}
180  uint64_t out_pkts() const {return out_tpkts_;}
181 
182  void incr_out_bytes(uint64_t count) {out_bytes_ += count;}
183  uint64_t out_bytes() const {return out_bytes_;}
184 
185  uint32_t max_flow_adds_per_second() const {
187  }
188  uint32_t min_flow_adds_per_second() const {
190  }
191  uint32_t max_flow_deletes_per_second() const {
193  }
194  uint32_t min_flow_deletes_per_second() const {
196  }
197 
198  void set_prev_flow_created(uint64_t value) {
199  added_.prev_flow_count = value;
200  }
201 
202  void set_prev_flow_aged(uint64_t value) {
203  deleted_.prev_flow_count = value;
204  }
205  void set_max_flow_adds_per_second(uint32_t value) {
207  }
208  void set_min_flow_adds_per_second(uint32_t value) {
210  }
211  void set_max_flow_deletes_per_second(uint32_t value) {
213  }
214  void set_min_flow_deletes_per_second(uint32_t value) {
216  }
217  void UpdateFlowMinMaxStats(uint64_t total_flows, FlowCounters &stat) const;
218  void ResetFlowMinMaxStats(FlowCounters &stat) const;
219 
221  uint32_t FlowCount() const;
222  FlowCounters& added() { return added_; }
224 private:
225 
232 
237 
238  // Number of NH created
239  uint32_t nh_count_;
240 
241  // Exception packet stats
242  uint64_t pkt_exceptions_;
245  uint64_t pkt_no_handler_;
247  uint64_t pkt_dropped_;
255 
256  // Flow stats
257  tbb::atomic<uint32_t> flow_count_;
258  uint32_t max_flow_count_;
259  tbb::atomic<uint32_t> hold_flow_count_;
262  tbb::atomic<uint64_t> flow_created_;
263  tbb::atomic<uint64_t> flow_aged_;
267 
268  // Kernel IPC
269  uint64_t ipc_in_msgs_;
270  uint64_t ipc_out_msgs_;
271  uint64_t in_tpkts_;
272  uint64_t in_bytes_;
273  uint64_t out_tpkts_;
274  uint64_t out_bytes_;
275 
277 };
278 
279 #endif // vnsw_agent_stats_hpp
uint32_t FlowCount() const
Definition: agent_stats.cc:162
uint64_t pkt_drop_due_to_invalid_ethertype() const
Definition: agent_stats.h:159
uint64_t pkt_no_handler() const
Definition: agent_stats.h:138
void incr_pkt_invalid_mpls_hdr()
Definition: agent_stats.h:143
uint64_t pkt_invalid_frm_tor_
Definition: agent_stats.h:251
void incr_pkt_invalid_ip_pkt()
Definition: agent_stats.h:146
void incr_out_bytes(uint64_t count)
Definition: agent_stats.h:182
uint64_t xmpp_out_msgs_[MAX_XMPP_SERVERS]
Definition: agent_stats.h:230
void incr_xmpp_reconnects(uint8_t idx)
Definition: agent_stats.h:58
uint64_t pkt_invalid_mpls_hdr() const
Definition: agent_stats.h:144
uint64_t out_bytes() const
Definition: agent_stats.h:183
void Reset()
Definition: agent_stats.cc:21
uint64_t xmpp_out_msgs(uint8_t idx) const
Definition: agent_stats.h:67
uint64_t ipc_out_msgs_
Definition: agent_stats.h:270
static const uint32_t kInvalidFlowCount
Definition: agent_stats.h:16
uint64_t pkt_invalid_frm_tor() const
Definition: agent_stats.h:153
void incr_sandesh_out_msgs()
Definition: agent_stats.h:80
void Shutdown()
Definition: agent_stats.h:55
void incr_pkt_exceptions()
Definition: agent_stats.h:128
boost::function< uint32_t()> FlowCountFn
Definition: agent_stats.h:13
void incr_xmpp_config_in_msgs(uint8_t idx)
Definition: agent_stats.h:69
int flow_stats_update_timeout_
Definition: agent_stats.h:266
uint64_t in_bytes_
Definition: agent_stats.h:272
void incr_flow_aged()
Definition: agent_stats.h:106
void set_prev_flow_aged(uint64_t value)
Definition: agent_stats.h:202
void incr_flow_drop_due_to_max_limit()
Definition: agent_stats.h:117
uint32_t max_flow_count_
Definition: agent_stats.h:258
uint64_t pkt_drop_due_to_disable_tnl() const
Definition: agent_stats.h:150
uint32_t nh_count_
Definition: agent_stats.h:239
uint64_t ipc_in_msgs() const
Definition: agent_stats.h:168
uint64_t flow_created() const
Definition: agent_stats.h:100
uint64_t flow_drop_due_to_linklocal_limit_
Definition: agent_stats.h:261
tbb::atomic< uint64_t > flow_created_
Definition: agent_stats.h:262
uint64_t pkt_fragments_dropped() const
Definition: agent_stats.h:141
uint32_t sandesh_http_sessions() const
Definition: agent_stats.h:84
AgentStats(Agent *agent)
Definition: agent_stats.h:29
uint64_t pkt_exceptions() const
Definition: agent_stats.h:129
void incr_pkt_no_handler()
Definition: agent_stats.h:137
uint32_t xmpp_reconnects(uint8_t idx) const
Definition: agent_stats.h:59
virtual ~AgentStats()
Definition: agent_stats.h:52
FlowCounters added_
Definition: agent_stats.h:264
void incr_pkt_invalid_agent_hdr()
Definition: agent_stats.h:131
uint64_t out_bytes_
Definition: agent_stats.h:274
uint64_t in_tpkts_
Definition: agent_stats.h:271
static AgentStats * GetInstance()
Definition: agent_stats.h:54
uint32_t max_flow_deletes_per_second() const
Definition: agent_stats.h:191
uint64_t pkt_invalid_agent_hdr_
Definition: agent_stats.h:243
void incr_flow_created()
Definition: agent_stats.h:86
uint64_t ipc_out_msgs() const
Definition: agent_stats.h:171
uint64_t pkt_drop_due_to_decode_error_
Definition: agent_stats.h:252
void incr_sandesh_in_msgs()
Definition: agent_stats.h:77
uint64_t pkt_drop_due_to_flow_trap_
Definition: agent_stats.h:254
uint64_t pkt_drop_due_to_flow_trap() const
Definition: agent_stats.h:162
uint64_t pkt_invalid_interface_
Definition: agent_stats.h:244
void ResetFlowMinMaxStats(FlowCounters &stat) const
Definition: agent_stats.cc:153
void incr_pkt_dropped()
Definition: agent_stats.h:164
Agent * agent_
Definition: agent_stats.h:226
void decr_flow_count()
Definition: agent_stats.h:92
uint64_t flow_aged() const
Definition: agent_stats.h:107
uint64_t ipc_in_msgs_
Definition: agent_stats.h:269
uint64_t pkt_dropped() const
Definition: agent_stats.h:165
uint64_t xmpp_config_in_msgs_[MAX_XMPP_SERVERS]
Definition: agent_stats.h:231
void set_max_flow_deletes_per_second(uint32_t value)
Definition: agent_stats.h:211
uint64_t pkt_no_handler_
Definition: agent_stats.h:245
uint32_t hold_flow_count() const
Definition: agent_stats.h:104
uint64_t sandesh_in_msgs() const
Definition: agent_stats.h:78
void set_min_flow_deletes_per_second(uint32_t value)
Definition: agent_stats.h:214
void set_prev_flow_created(uint64_t value)
Definition: agent_stats.h:198
uint32_t min_flow_deletes_per_second() const
Definition: agent_stats.h:194
uint64_t pkt_fragments_dropped_
Definition: agent_stats.h:246
Definition: agent.h:358
uint64_t sandesh_out_msgs_
Definition: agent_stats.h:235
void incr_pkt_drop_due_to_decode_error()
Definition: agent_stats.h:155
void set_min_flow_adds_per_second(uint32_t value)
Definition: agent_stats.h:208
void UpdateFlowMinMaxStats(uint64_t total_flows, FlowCounters &stat) const
Definition: agent_stats.cc:139
void update_hold_flow_count(uint32_t value)
Definition: agent_stats.h:96
void incr_ipc_out_msgs()
Definition: agent_stats.h:170
uint64_t sandesh_out_msgs() const
Definition: agent_stats.h:81
void incr_pkt_drop_due_to_disable_tnl()
Definition: agent_stats.h:149
void RegisterFlowCountFn(FlowCountFn cb)
Definition: agent_stats.cc:158
static AgentStats * singleton_
Definition: agent_stats.h:276
FlowCounters & added()
Definition: agent_stats.h:222
void incr_out_pkts(uint64_t count)
Definition: agent_stats.h:179
uint64_t max_flow_count() const
Definition: agent_stats.h:102
uint64_t pkt_dropped_
Definition: agent_stats.h:247
void set_flow_stats_update_timeout(int value)
Definition: agent_stats.h:113
uint64_t pkt_drop_due_to_invalid_ethertype_
Definition: agent_stats.h:253
void incr_flow_drop_due_to_linklocal_limit()
Definition: agent_stats.h:121
uint64_t flow_drop_due_to_max_limit() const
Definition: agent_stats.h:118
uint32_t sandesh_http_sessions_
Definition: agent_stats.h:236
#define MAX_XMPP_SERVERS
Definition: agent.h:291
void incr_pkt_fragments_dropped()
Definition: agent_stats.h:140
uint32_t max_flow_adds_per_second() const
Definition: agent_stats.h:185
uint64_t pkt_invalid_ip_pkt_
Definition: agent_stats.h:249
void incr_in_bytes(uint64_t count)
Definition: agent_stats.h:176
uint64_t xmpp_in_msgs_[MAX_XMPP_SERVERS]
Definition: agent_stats.h:229
void incr_pkt_invalid_frm_tor()
Definition: agent_stats.h:152
void incr_pkt_invalid_interface()
Definition: agent_stats.h:134
uint64_t pkt_invalid_interface() const
Definition: agent_stats.h:135
uint64_t pkt_invalid_ip_pkt() const
Definition: agent_stats.h:147
void incr_sandesh_http_sessions()
Definition: agent_stats.h:83
uint64_t xmpp_config_in_msgs(uint8_t idx) const
Definition: agent_stats.h:70
uint64_t out_pkts() const
Definition: agent_stats.h:180
uint64_t pkt_invalid_mpls_hdr_
Definition: agent_stats.h:248
FlowCounters & deleted()
Definition: agent_stats.h:223
uint64_t xmpp_in_msgs(uint8_t idx) const
Definition: agent_stats.h:64
uint64_t in_bytes() const
Definition: agent_stats.h:177
tbb::atomic< uint64_t > flow_aged_
Definition: agent_stats.h:263
FlowCountFn flow_count_fn_
Definition: agent_stats.h:227
uint64_t flow_drop_due_to_linklocal_limit() const
Definition: agent_stats.h:124
static const int kFlowStatsUpdateInterval
Definition: agent_stats.h:17
uint64_t pkt_drop_due_to_decode_error() const
Definition: agent_stats.h:156
uint64_t flow_drop_due_to_max_limit_
Definition: agent_stats.h:260
tbb::atomic< uint32_t > flow_count_
Definition: agent_stats.h:257
uint64_t pkt_exceptions_
Definition: agent_stats.h:242
FlowCounters deleted_
Definition: agent_stats.h:265
void incr_pkt_drop_due_to_invalid_ethertype()
Definition: agent_stats.h:158
uint32_t xmpp_reconnect_[MAX_XMPP_SERVERS]
Definition: agent_stats.h:228
uint64_t pkt_invalid_agent_hdr() const
Definition: agent_stats.h:132
uint32_t sandesh_reconnects_
Definition: agent_stats.h:233
tbb::atomic< uint32_t > hold_flow_count_
Definition: agent_stats.h:259
void incr_sandesh_reconnects()
Definition: agent_stats.h:74
void incr_xmpp_in_msgs(uint8_t idx)
Definition: agent_stats.h:63
uint32_t sandesh_reconnects() const
Definition: agent_stats.h:75
uint64_t out_tpkts_
Definition: agent_stats.h:273
void set_max_flow_adds_per_second(uint32_t value)
Definition: agent_stats.h:205
uint32_t min_flow_adds_per_second() const
Definition: agent_stats.h:188
void incr_pkt_drop_due_to_flow_trap()
Definition: agent_stats.h:161
void incr_ipc_in_msgs()
Definition: agent_stats.h:167
uint64_t pkt_drop_due_to_disable_tnl_
Definition: agent_stats.h:250
uint64_t sandesh_in_msgs_
Definition: agent_stats.h:234
int flow_stats_update_timeout() const
Definition: agent_stats.h:109
void incr_in_pkts(uint64_t count)
Definition: agent_stats.h:173
uint64_t in_pkts() const
Definition: agent_stats.h:174
void incr_xmpp_out_msgs(uint8_t idx)
Definition: agent_stats.h:66