Skip to content

Commit

Permalink
Merge "Send IFMap parse error statistics in Vrouter UVE"
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Aug 19, 2016
2 parents 4b81551 + cc4f2c7 commit 1e0b9cc
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
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
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
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 1e0b9cc

Please sign in to comment.