Skip to content

Commit

Permalink
Fix SandeshMessageStatsReq introspect
Browse files Browse the repository at this point in the history
Use the generated set_XXX and get_XXX functions for
sandesh defined structures instead of accessing the
structure members directly so that the isset boolean
for the members are set.

Change-Id: I52342d650a67b6d454473ff90752df58d0dba009
Closes-Bug: #1667143
(cherry picked from commit ca0bf1f)
  • Loading branch information
Megh Bhatt committed Mar 1, 2017
1 parent d15667d commit 49074af
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 95 deletions.
195 changes: 116 additions & 79 deletions library/cpp/sandesh_statistics.cc
Expand Up @@ -36,13 +36,14 @@ void SandeshMessageStatistics::Get(DetailStatsList *v_detail_type_stats,
// Basic stats
static void PopulateBasicStats(const SandeshMessageStats &detail_stats,
SandeshMessageBasicStats *basic_stats) {
basic_stats->messages_sent = detail_stats.messages_sent;
basic_stats->bytes_sent = detail_stats.bytes_sent;
basic_stats->messages_received = detail_stats.messages_received;
basic_stats->bytes_received = detail_stats.bytes_received;
basic_stats->messages_sent_dropped = detail_stats.messages_sent_dropped;
basic_stats->messages_received_dropped =
detail_stats.messages_received_dropped;
basic_stats->set_messages_sent(detail_stats.get_messages_sent());
basic_stats->set_bytes_sent(detail_stats.get_bytes_sent());
basic_stats->set_messages_received(detail_stats.get_messages_received());
basic_stats->set_bytes_received(detail_stats.get_bytes_received());
basic_stats->set_messages_sent_dropped(
detail_stats.get_messages_sent_dropped());
basic_stats->set_messages_received_dropped(
detail_stats.get_messages_received_dropped());
}

static void PopulateBasicTypeStats(const SandeshMessageTypeStats &detail_stats,
Expand All @@ -69,81 +70,121 @@ static void UpdateDetailStatsDrops(SandeshMessageStats *smstats,
if (sent) {
switch (send_dreason) {
case SandeshTxDropReason::ValidationFailed:
smstats->messages_sent_dropped_validation_failed++;
smstats->bytes_sent_dropped_validation_failed += bytes;
smstats->set_messages_sent_dropped_validation_failed(
smstats->get_messages_sent_dropped_validation_failed() + 1);
smstats->set_bytes_sent_dropped_validation_failed(
smstats->get_bytes_sent_dropped_validation_failed() + bytes);
break;
case SandeshTxDropReason::RatelimitDrop:
smstats->messages_sent_dropped_rate_limited++;
smstats->bytes_sent_dropped_rate_limited += bytes;
smstats->set_messages_sent_dropped_rate_limited(
smstats->get_messages_sent_dropped_rate_limited() + 1);
smstats->set_bytes_sent_dropped_rate_limited(
smstats->get_bytes_sent_dropped_rate_limited() + bytes);
break;
case SandeshTxDropReason::QueueLevel:
smstats->messages_sent_dropped_queue_level++;
smstats->bytes_sent_dropped_queue_level += bytes;
smstats->set_messages_sent_dropped_queue_level(
smstats->get_messages_sent_dropped_queue_level() + 1);
smstats->set_bytes_sent_dropped_queue_level(
smstats->get_bytes_sent_dropped_queue_level() + bytes);
break;
case SandeshTxDropReason::NoClient:
smstats->messages_sent_dropped_no_client++;
smstats->bytes_sent_dropped_no_client += bytes;
smstats->set_messages_sent_dropped_no_client(
smstats->get_messages_sent_dropped_no_client() + 1);
smstats->set_bytes_sent_dropped_no_client(
smstats->get_bytes_sent_dropped_no_client() + bytes);
break;
case SandeshTxDropReason::NoSession:
smstats->messages_sent_dropped_no_session++;
smstats->bytes_sent_dropped_no_session += bytes;
smstats->set_messages_sent_dropped_no_session(
smstats->get_messages_sent_dropped_no_session() + 1);
smstats->set_bytes_sent_dropped_no_session(
smstats->get_bytes_sent_dropped_no_session() + bytes);
break;
case SandeshTxDropReason::NoQueue:
smstats->messages_sent_dropped_no_queue++;
smstats->bytes_sent_dropped_no_queue += bytes;
smstats->set_messages_sent_dropped_no_queue(
smstats->get_messages_sent_dropped_no_queue() + 1);
smstats->set_bytes_sent_dropped_no_queue(
smstats->get_bytes_sent_dropped_no_queue() + bytes);
break;
case SandeshTxDropReason::ClientSendFailed:
smstats->messages_sent_dropped_client_send_failed++;
smstats->bytes_sent_dropped_client_send_failed += bytes;
smstats->set_messages_sent_dropped_client_send_failed(
smstats->get_messages_sent_dropped_client_send_failed() + 1);
smstats->set_bytes_sent_dropped_client_send_failed(
smstats->get_bytes_sent_dropped_client_send_failed() + bytes);
break;
case SandeshTxDropReason::WrongClientSMState:
smstats->messages_sent_dropped_wrong_client_sm_state++;
smstats->bytes_sent_dropped_wrong_client_sm_state += bytes;
smstats->set_messages_sent_dropped_wrong_client_sm_state(
smstats->get_messages_sent_dropped_wrong_client_sm_state() + 1);
smstats->set_bytes_sent_dropped_wrong_client_sm_state(
smstats->get_bytes_sent_dropped_wrong_client_sm_state() +
bytes);
break;
case SandeshTxDropReason::WriteFailed:
smstats->messages_sent_dropped_write_failed++;
smstats->bytes_sent_dropped_write_failed += bytes;
smstats->set_messages_sent_dropped_write_failed(
smstats->get_messages_sent_dropped_write_failed() + 1);
smstats->set_bytes_sent_dropped_write_failed(
smstats->get_bytes_sent_dropped_write_failed() + bytes);
break;
case SandeshTxDropReason::HeaderWriteFailed:
smstats->messages_sent_dropped_header_write_failed++;
smstats->bytes_sent_dropped_header_write_failed += bytes;
smstats->set_messages_sent_dropped_header_write_failed(
smstats->get_messages_sent_dropped_header_write_failed() + 1);
smstats->set_bytes_sent_dropped_header_write_failed(
smstats->get_bytes_sent_dropped_header_write_failed() + bytes);
break;
case SandeshTxDropReason::SessionNotConnected:
smstats->messages_sent_dropped_session_not_connected++;
smstats->bytes_sent_dropped_session_not_connected += bytes;
smstats->set_messages_sent_dropped_session_not_connected(
smstats->get_messages_sent_dropped_session_not_connected() + 1);
smstats->set_bytes_sent_dropped_session_not_connected(
smstats->get_bytes_sent_dropped_session_not_connected() +
bytes);
break;
default:
assert(0);
}
smstats->messages_sent_dropped++;
smstats->bytes_sent_dropped += bytes;
smstats->set_messages_sent_dropped(
smstats->get_messages_sent_dropped() + 1);
smstats->set_bytes_sent_dropped(
smstats->get_bytes_sent_dropped() + bytes);
} else {
switch (recv_dreason) {
case SandeshRxDropReason::QueueLevel:
smstats->messages_received_dropped_queue_level++;
smstats->bytes_received_dropped_queue_level += bytes;
smstats->set_messages_received_dropped_queue_level(
smstats->get_messages_received_dropped_queue_level() + 1);
smstats->set_bytes_received_dropped_queue_level(
smstats->get_bytes_received_dropped_queue_level() + bytes);
break;
case SandeshRxDropReason::NoQueue:
smstats->messages_received_dropped_no_queue++;
smstats->bytes_received_dropped_no_queue += bytes;
smstats->set_messages_received_dropped_no_queue(
smstats->get_messages_received_dropped_no_queue() + 1);
smstats->set_bytes_received_dropped_no_queue(
smstats->get_bytes_received_dropped_no_queue() + bytes);
break;
case SandeshRxDropReason::DecodingFailed:
smstats->messages_received_dropped_decoding_failed++;
smstats->bytes_received_dropped_decoding_failed += bytes;
smstats->set_messages_received_dropped_decoding_failed(
smstats->get_messages_received_dropped_decoding_failed() + 1);
smstats->set_bytes_received_dropped_decoding_failed(
smstats->get_bytes_received_dropped_decoding_failed() + bytes);
break;
case SandeshRxDropReason::ControlMsgFailed:
smstats->messages_received_dropped_control_msg_failed++;
smstats->bytes_received_dropped_control_msg_failed += bytes;
smstats->set_messages_received_dropped_control_msg_failed(
smstats->get_messages_received_dropped_control_msg_failed() +
1);
smstats->set_bytes_received_dropped_control_msg_failed(
smstats->get_bytes_received_dropped_control_msg_failed() +
bytes);
break;
case SandeshRxDropReason::CreateFailed:
smstats->messages_received_dropped_create_failed++;
smstats->bytes_received_dropped_create_failed += bytes;
smstats->set_messages_received_dropped_create_failed(
smstats->get_messages_received_dropped_create_failed() + 1);
smstats->set_bytes_received_dropped_create_failed(
smstats->get_bytes_received_dropped_create_failed() + bytes);
break;
default:
assert(0);
}
smstats->messages_received_dropped++;
smstats->bytes_received_dropped += bytes;
smstats->set_messages_received_dropped(
smstats->get_messages_received_dropped() + 1);
smstats->set_bytes_received_dropped(
smstats->get_bytes_received_dropped() + bytes);
}
}

Expand Down Expand Up @@ -190,16 +231,23 @@ void SandeshMessageStatistics::UpdateInternal(const std::string &msg_name,
UpdateDetailStatsDrops(&detail_agg_stats_, is_tx,
bytes, send_dreason, recv_dreason);
} else {
SandeshMessageStats *d_smstats(&detail_mtstats->stats);
if (is_tx) {
detail_mtstats->stats.messages_sent++;
detail_mtstats->stats.bytes_sent += bytes;
detail_agg_stats_.messages_sent++;
detail_agg_stats_.bytes_sent += bytes;
d_smstats->set_messages_sent(d_smstats->get_messages_sent() + 1);
d_smstats->set_bytes_sent(d_smstats->get_bytes_sent() + bytes);
detail_agg_stats_.set_messages_sent(
detail_agg_stats_.get_messages_sent() + 1);
detail_agg_stats_.set_bytes_sent(
detail_agg_stats_.get_bytes_sent() + bytes);
} else {
detail_mtstats->stats.messages_received++;
detail_mtstats->stats.bytes_received += bytes;
detail_agg_stats_.messages_received++;
detail_agg_stats_.bytes_received += bytes;
d_smstats->set_messages_received(
d_smstats->get_messages_received() + 1);
d_smstats->set_bytes_received(
d_smstats->get_bytes_received() + bytes);
detail_agg_stats_.set_messages_received(
detail_agg_stats_.get_messages_received() + 1);
detail_agg_stats_.set_bytes_received(
detail_agg_stats_.get_bytes_received() + bytes);
}
}
}
Expand All @@ -209,47 +257,36 @@ void SandeshMessageStatistics::UpdateInternal(const std::string &msg_name,
//
void SandeshEventStatistics::Get(
std::vector<SandeshStateMachineEvStats> *ev_stats) const {
for (EventStatsMap::const_iterator it = event_stats.begin();
it != event_stats.end(); ++it) {
const EventStats *es = it->second;
SandeshStateMachineEvStats ev_stat;
ev_stat.event = it->first;
ev_stat.enqueues = es->enqueues;
ev_stat.dequeues = es->dequeues;
ev_stat.enqueue_fails = es->enqueue_fails;
ev_stat.dequeue_fails = es->dequeue_fails;
ev_stats->push_back(ev_stat);
BOOST_FOREACH(EventStatsMap::const_iterator::value_type it,
event_stats_) {
ev_stats->push_back(*it.second);
}
SandeshStateMachineEvStats ev_agg_stat;
ev_agg_stat.enqueues = agg_stats.enqueues;
ev_agg_stat.dequeues = agg_stats.dequeues;
ev_agg_stat.enqueue_fails = agg_stats.enqueue_fails;
ev_agg_stat.dequeue_fails = agg_stats.dequeue_fails;
ev_stats->push_back(ev_agg_stat);
ev_stats->push_back(agg_stats_);
}

void SandeshEventStatistics::Update(std::string &event_name, bool enqueue,
bool fail) {
EventStatsMap::iterator it = event_stats.find(event_name);
if (it == event_stats.end()) {
it = (event_stats.insert(event_name, new EventStats)).first;
EventStatsMap::iterator it = event_stats_.find(event_name);
if (it == event_stats_.end()) {
it = (event_stats_.insert(event_name, new SandeshStateMachineEvStats)).first;
}
EventStats *es = it->second;
SandeshStateMachineEvStats *es = it->second;
es->set_event(event_name);
if (enqueue) {
if (fail) {
es->enqueue_fails++;
agg_stats.enqueue_fails++;
es->set_enqueue_fails(es->get_enqueue_fails() + 1);
agg_stats_.set_enqueue_fails(agg_stats_.get_enqueue_fails() + 1);
} else {
es->enqueues++;
agg_stats.enqueues++;
es->set_enqueues(es->get_enqueues() + 1);
agg_stats_.set_enqueues(agg_stats_.get_enqueues() + 1);
}
} else {
if (fail) {
es->dequeue_fails++;
agg_stats.dequeue_fails++;
es->set_dequeue_fails(es->get_dequeue_fails() + 1);
agg_stats_.set_dequeue_fails(agg_stats_.get_dequeue_fails() + 1);
} else {
es->dequeues++;
agg_stats.dequeues++;
es->set_dequeues(es->get_dequeues() + 1);
agg_stats_.set_dequeues(agg_stats_.get_dequeues() + 1);
}
}
}
19 changes: 3 additions & 16 deletions library/cpp/sandesh_statistics.h
Expand Up @@ -46,29 +46,16 @@ class SandeshMessageStatistics {
SandeshMessageStats detail_agg_stats_;
};

struct EventStats {
EventStats() :
enqueues(0),
enqueue_fails(0),
dequeues(0),
dequeue_fails(0) {
}
uint64_t enqueues;
uint64_t enqueue_fails;
uint64_t dequeues;
uint64_t dequeue_fails;
};

class SandeshEventStatistics {
public:
SandeshEventStatistics() {}

void Update(std::string &event_name, bool enqueue, bool fail);
void Get(std::vector<SandeshStateMachineEvStats> *ev_stats) const;

typedef boost::ptr_map<std::string, EventStats> EventStatsMap;
EventStatsMap event_stats;
EventStats agg_stats;
typedef boost::ptr_map<std::string, SandeshStateMachineEvStats> EventStatsMap;
EventStatsMap event_stats_;
SandeshStateMachineEvStats agg_stats_;
};

#endif // __SANDESH_STATISTICS_H__

0 comments on commit 49074af

Please sign in to comment.