Skip to content

Commit

Permalink
Send IFMap parse error statistics in Vrouter UVE
Browse files Browse the repository at this point in the history
The stats are sent using DerivedStats infra. Agent builds only
aggregate stats and diff stats determined by DerivedStats Infra
are sent.

Change-Id: Ib7cb817ecd5c599fb95505864cb810b57b3e7609
Closes-Bug: #1608958
  • Loading branch information
ashoksr committed Aug 19, 2016
1 parent d5ef51b commit cc4f2c7
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 26 deletions.
4 changes: 4 additions & 0 deletions src/vnsw/agent/uve/vrouter.sandesh
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,10 @@ struct VrouterStatsAgent { // Agent stats
53: optional map<string,derived_stats_results.EWMResult> out_bps_ewm (mstats="phy_band_out_bps:DSEWM:0.2")
54: optional derived_stats_results.CategoryResult drop_stats_agg (hidden="yes")
55: optional derived_stats_results.CategoryResult drop_stats_diff (stats="drop_stats_agg:DSCategoryCount:", tags="")
56: optional map<string, u64> raw_ifmap_stats (metric="agg", hidden="yes")
/** @display_name:Vrouter IFMAP Parse Error Statistics*/
57: optional map<string, u64> ifmap_stats (mstats="raw_ifmap_stats:DSNon0:", tags=".__key")
58: optional map<string, u64> ifmap_stats_1h (mstats="raw_ifmap_stats:DSSum:120")
}

/**
Expand Down
46 changes: 20 additions & 26 deletions src/vnsw/agent/uve/vrouter_uve_entry.cc
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ bool VrouterUveEntry::SendVrouterMsg() {
static bool first = true;
uint64_t max_add_rate = 0, min_add_rate = 0;
uint64_t max_del_rate = 0, min_del_rate = 0;
bool change = false;
VrouterStatsAgent stats;

VrouterUveEntryBase::SendVrouterMsg();
Expand All @@ -48,105 +47,91 @@ bool VrouterUveEntry::SendVrouterMsg() {
agent_->stats()->in_pkts() || first) {
stats.set_in_tpkts(agent_->stats()->in_pkts());
prev_stats_.set_in_tpkts(agent_->stats()->in_pkts());
change = true;
}

if (prev_stats_.get_in_bytes() !=
agent_->stats()->in_bytes() || first) {
stats.set_in_bytes(agent_->stats()->in_bytes());
prev_stats_.set_in_bytes(agent_->stats()->in_bytes());
change = true;
}

if (prev_stats_.get_out_tpkts() !=
agent_->stats()->out_pkts() || first) {
stats.set_out_tpkts(agent_->stats()->out_pkts());
prev_stats_.set_out_tpkts(agent_->stats()->out_pkts());
change = true;
}

if (prev_stats_.get_out_bytes() !=
agent_->stats()->out_bytes() || first) {
stats.set_out_bytes(agent_->stats()->out_bytes());
prev_stats_.set_out_bytes(agent_->stats()->out_bytes());
change = true;
}

vector<AgentXmppStats> xmpp_list;
BuildXmppStatsList(xmpp_list);
if (prev_stats_.get_xmpp_stats_list() != xmpp_list) {
stats.set_xmpp_stats_list(xmpp_list);
prev_stats_.set_xmpp_stats_list(xmpp_list);
change = true;
}

if (prev_stats_.get_exception_packets() !=
agent_->stats()->pkt_exceptions() || first) {
stats.set_exception_packets(agent_->stats()->pkt_exceptions());
prev_stats_.set_exception_packets(agent_->stats()->pkt_exceptions());
change = true;
}

if (prev_stats_.get_exception_packets_dropped() !=
agent_->stats()->pkt_dropped() || first) {
stats.set_exception_packets_dropped(agent_->stats()->pkt_dropped());
prev_stats_.set_exception_packets_dropped(agent_->stats()->
pkt_dropped());
change = true;
}

uint64_t e_pkts_allowed = (agent_->stats()->pkt_exceptions() -
agent_->stats()->pkt_dropped());
if (prev_stats_.get_exception_packets_allowed() != e_pkts_allowed) {
stats.set_exception_packets_allowed(e_pkts_allowed);
prev_stats_.set_exception_packets_allowed(e_pkts_allowed);
change = true;
}

if (prev_stats_.get_total_flows() !=
agent_->stats()->flow_created() || first) {
stats.set_total_flows(agent_->stats()->flow_created());
prev_stats_.set_total_flows(agent_->stats()->
flow_created());
change = true;
}

if (prev_stats_.get_aged_flows() !=
agent_->stats()->flow_aged() || first) {
stats.set_aged_flows(agent_->stats()->flow_aged());
prev_stats_.set_aged_flows(agent_->stats()->flow_aged());
change = true;
}
uint64_t disable_drops =
agent_->flow_stats_manager()->flow_export_disable_drops();
if ((prev_stats_.get_flow_export_disable_drops() != disable_drops) ||
first) {
stats.set_flow_export_disable_drops(disable_drops);
prev_stats_.set_flow_export_disable_drops(disable_drops);
change = true;
}
uint64_t sampling_drops =
agent_->flow_stats_manager()->flow_export_sampling_drops();
if ((prev_stats_.get_flow_export_sampling_drops() != sampling_drops) ||
first) {
stats.set_flow_export_sampling_drops(sampling_drops);
prev_stats_.set_flow_export_sampling_drops(sampling_drops);
change = true;
}
uint64_t flow_drops =
agent_->flow_stats_manager()->flow_export_drops();
if ((prev_stats_.get_flow_export_drops() != flow_drops) || first) {
stats.set_flow_export_drops(flow_drops);
prev_stats_.set_flow_export_drops(flow_drops);
change = true;
}

vector<AgentIfStats> phy_if_list;
BuildPhysicalInterfaceList(phy_if_list);
if (prev_stats_.get_phy_if_stats_list() != phy_if_list) {
stats.set_phy_if_stats_list(phy_if_list);
prev_stats_.set_phy_if_stats_list(phy_if_list);
change = true;
}
bandwidth_count_++;
if (first) {
Expand All @@ -164,7 +149,6 @@ bool VrouterUveEntry::SendVrouterMsg() {
* always regardless of change in bandwidth or not */
stats.set_phy_band_in_bps(inb);
stats.set_phy_band_out_bps(outb);
change = true;
if (in_util != prev_stats_.get_total_in_bandwidth_utilization()) {
stats.set_total_in_bandwidth_utilization(in_util);
prev_stats_.set_total_in_bandwidth_utilization(in_util);
Expand All @@ -182,7 +166,6 @@ bool VrouterUveEntry::SendVrouterMsg() {
if (prev_stats_.get_phy_if_5min_usage() != phy_if_blist) {
stats.set_phy_if_5min_usage(phy_if_blist);
prev_stats_.set_phy_if_5min_usage(phy_if_blist);
change = true;
}
}

Expand All @@ -204,13 +187,10 @@ bool VrouterUveEntry::SendVrouterMsg() {
if (prev_stats_.get_vhost_stats() != vhost_stats) {
stats.set_vhost_stats(vhost_stats);
prev_stats_.set_vhost_stats(vhost_stats);
change = true;
}
}

if (SetVrouterPortBitmap(stats)) {
change = true;
}
SetVrouterPortBitmap(stats);

DerivedStatsMap ds;
FetchDropStats(ds);
Expand All @@ -219,7 +199,6 @@ bool VrouterUveEntry::SendVrouterMsg() {
cr.set_counters(ds);
stats.set_drop_stats_agg(cr);
prev_stats_.set_drop_stats_agg(cr);
change = true;
}
if (first) {
stats.set_uptime(start_time_);
Expand Down Expand Up @@ -252,7 +231,6 @@ bool VrouterUveEntry::SendVrouterMsg() {
flow_rate.set_active_flows(agent_->pkt()->get_flow_proto()->
FlowCount());
stats.set_flow_rate(flow_rate);
change = true;
agent_->stats()->ResetFlowAddMinMaxStats(cur_time);
agent_->stats()->ResetFlowDelMinMaxStats(cur_time);
prev_flow_setup_rate_export_time_ = cur_time;
Expand All @@ -263,9 +241,11 @@ bool VrouterUveEntry::SendVrouterMsg() {
prev_flow_setup_rate_export_time_ = cur_time;
}

if (change) {
DispatchVrouterStatsMsg(stats);
}
DerivedStatsMap ifmap_stats;
FetchIFMapStats(ifmap_stats);
stats.set_raw_ifmap_stats(ifmap_stats);

DispatchVrouterStatsMsg(stats);
first = false;
return true;
}
Expand Down Expand Up @@ -483,6 +463,20 @@ void VrouterUveEntry::FetchDropStats(DerivedStatsMap &ds) const {
ds.insert(DerivedStatsPair("vlan_fwd_enq", req.get_vds_vlan_fwd_enq()));
}

void VrouterUveEntry::FetchIFMapStats(DerivedStatsMap &ds) const {
IFMapAgentParser *parser = agent_->cfg()->cfg_parser();
if (parser) {
ds.insert(DerivedStatsPair("node_update_parse_errors",
parser->node_update_parse_errors()));
ds.insert(DerivedStatsPair("link_update_parse_errors",
parser->link_update_parse_errors()));
ds.insert(DerivedStatsPair("node_delete_parse_errors",
parser->node_delete_parse_errors()));
ds.insert(DerivedStatsPair("link_delete_parse_errors",
parser->link_delete_parse_errors()));
}
}

void VrouterUveEntry::BuildXmppStatsList(vector<AgentXmppStats> &list) const {
for (int count = 0; count < MAX_XMPP_SERVERS; count++) {
AgentXmppStats peer;
Expand Down
1 change: 1 addition & 0 deletions src/vnsw/agent/uve/vrouter_uve_entry.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class VrouterUveEntry : public VrouterUveEntryBase {
bool BuildPhysicalInterfaceList(std::vector<AgentIfStats> &list) const;
std::string GetMacAddress(const MacAddress &mac) const;
void BuildXmppStatsList(std::vector<AgentXmppStats> &list) const;
void FetchIFMapStats(DerivedStatsMap &ds) const;

uint64_t start_time_;
DISALLOW_COPY_AND_ASSIGN(VrouterUveEntry);
Expand Down

0 comments on commit cc4f2c7

Please sign in to comment.