{
Mutex::Locker lck(m_lock);
buffer.push_back('{');
- for (perf_counters_set_t::iterator l = m_loggers.begin();
- l != m_loggers.end(); ++l)
- {
- (*l)->write_json_to_buf(buffer);
+ perf_counters_set_t::iterator l = m_loggers.begin();
+ perf_counters_set_t::iterator l_end = m_loggers.end();
+ if (l != l_end) {
+ while (true) {
+ (*l)->write_json_to_buf(buffer);
+ if (++l == l_end)
+ break;
+ buffer.push_back(',');
+ }
}
buffer.push_back('}');
buffer.push_back('\0');
perf_counter_data_vec_t::const_iterator d = m_data.begin();
perf_counter_data_vec_t::const_iterator d_end = m_data.end();
- for (; d != d_end; ++d) {
+ if (d == d_end) {
+ buffer.push_back('}');
+ return;
+ }
+ while (true) {
const perf_counter_data_any_d &data(*d);
buf[0] = '\0';
if (d->count != COUNT_DISABLED) {
switch (d->type) {
case PERF_COUNTERS_DATA_ANY_U64:
snprintf(buf, sizeof(buf), "\"%s\":{\"count\":%" PRId64 ","
- "\"sum\":%" PRId64 "},",
+ "\"sum\":%" PRId64 "}",
data.name, data.count, data.u.u64);
break;
case PERF_COUNTERS_DATA_ANY_DOUBLE:
snprintf(buf, sizeof(buf), "\"%s\":{\"count\":%" PRId64 ","
- "\"sum\":%g},",
+ "\"sum\":%g}",
data.name, data.count, data.u.dbl);
break;
default:
else {
switch (d->type) {
case PERF_COUNTERS_DATA_ANY_U64:
- snprintf(buf, sizeof(buf), "\"%s\":%" PRId64 ",",
+ snprintf(buf, sizeof(buf), "\"%s\":%" PRId64,
data.name, data.u.u64);
break;
case PERF_COUNTERS_DATA_ANY_DOUBLE:
- snprintf(buf, sizeof(buf), "\"%s\":%g,", data.name, data.u.dbl);
+ snprintf(buf, sizeof(buf), "\"%s\":%g", data.name, data.u.dbl);
break;
default:
assert(0);
}
}
append_to_vector(buffer, buf);
+ if (++d == d_end)
+ break;
+ buffer.push_back(',');
}
-
buffer.push_back('}');
- buffer.push_back(',');
}
const std::string &PerfCounters::
std::string msg;
ASSERT_EQ("", client.get_message(&msg));
ASSERT_EQ(sd("{'test_perfcounter_1':{'element1':0,"
- "'element2':0,'element3':{'count':0,'sum':0},},}"), msg);
+ "'element2':0,'element3':{'count':0,'sum':0}}}"), msg);
fake_pf->inc(TEST_PERFCOUNTERS1_ELEMENT_1);
fake_pf->fset(TEST_PERFCOUNTERS1_ELEMENT_2, 0.5);
fake_pf->finc(TEST_PERFCOUNTERS1_ELEMENT_3, 100.0);
ASSERT_EQ("", client.get_message(&msg));
ASSERT_EQ(sd("{'test_perfcounter_1':{'element1':1,"
- "'element2':0.5,'element3':{'count':1,'sum':100},},}"), msg);
+ "'element2':0.5,'element3':{'count':1,'sum':100}}}"), msg);
fake_pf->finc(TEST_PERFCOUNTERS1_ELEMENT_3, 0.0);
fake_pf->finc(TEST_PERFCOUNTERS1_ELEMENT_3, 25.0);
ASSERT_EQ("", client.get_message(&msg));
ASSERT_EQ(sd("{'test_perfcounter_1':{'element1':1,'element2':0.5,"
- "'element3':{'count':3,'sum':125},},}"), msg);
+ "'element3':{'count':3,'sum':125}}}"), msg);
}
enum {
ASSERT_EQ("", client.get_message(&msg));
ASSERT_EQ(sd("{'test_perfcounter_1':{'element1':0,'element2':0,'element3':"
- "{'count':0,'sum':0},},'test_perfcounter_2':{'foo':0,'bar':0,},}"), msg);
+ "{'count':0,'sum':0}},'test_perfcounter_2':{'foo':0,'bar':0}}"), msg);
fake_pf1->inc(TEST_PERFCOUNTERS1_ELEMENT_1);
fake_pf1->inc(TEST_PERFCOUNTERS1_ELEMENT_1, 5);
ASSERT_EQ("", client.get_message(&msg));
ASSERT_EQ(sd("{'test_perfcounter_1':{'element1':6,'element2':0,'element3':"
- "{'count':0,'sum':0},},'test_perfcounter_2':{'foo':0,'bar':0,},}"), msg);
+ "{'count':0,'sum':0}},'test_perfcounter_2':{'foo':0,'bar':0}}"), msg);
coll->logger_remove(fake_pf2);
ASSERT_EQ("", client.get_message(&msg));
ASSERT_EQ(sd("{'test_perfcounter_1':{'element1':6,'element2':0,"
- "'element3':{'count':0,'sum':0},},}"), msg);
+ "'element3':{'count':0,'sum':0}}}"), msg);
coll->logger_clear();
ASSERT_EQ("", client.get_message(&msg));