lgeneric_dout(this, 1) << "do_command '" << command << "' '" << args << "'" << dendl;
if (command == "perfcounters_dump" || command == "1" ||
command == "perf dump") {
- std::vector<char> v;
- _perf_counters_collection->write_json_to_buf(v, false);
- out->append(&v[0], v.size());
+ _perf_counters_collection->write_json_to_buf(*out, false);
}
else if (command == "perfcounters_schema" || command == "2" ||
command == "perf schema") {
- std::vector<char> v;
- _perf_counters_collection->write_json_to_buf(v, true);
- out->append(&v[0], v.size());
+ _perf_counters_collection->write_json_to_buf(*out, true);
}
else if (command == "config show") {
ostringstream ss;
}
}
-void PerfCountersCollection::write_json_to_buf(std::vector <char> &buffer, bool schema)
+void PerfCountersCollection::write_json_to_buf(bufferlist& bl, bool schema)
{
Mutex::Locker lck(m_lock);
- buffer.push_back('{');
+ bl.append('{');
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, schema);
+ (*l)->write_json_to_buf(bl, schema);
if (++l == l_end)
break;
- buffer.push_back(',');
+ bl.append(',');
}
}
- buffer.push_back('}');
- buffer.push_back('\0');
+ bl.append('}');
}
// ---------------------------
return data.u.dbl;
}
-static inline void append_to_vector(std::vector <char> &buffer, char *buf)
-{
- size_t strlen_buf = strlen(buf);
- std::vector<char>::size_type sz = buffer.size();
- buffer.resize(sz + strlen_buf);
- memcpy(&buffer[sz], buf, strlen_buf);
-}
-
-void PerfCounters::write_json_to_buf(std::vector <char> &buffer, bool schema)
+void PerfCounters::write_json_to_buf(bufferlist& bl, bool schema)
{
char buf[512];
Mutex::Locker lck(m_lock);
snprintf(buf, sizeof(buf), "\"%s\":{", m_name.c_str());
- append_to_vector(buffer, buf);
+ bl.append(buf);
perf_counter_data_vec_t::const_iterator d = m_data.begin();
perf_counter_data_vec_t::const_iterator d_end = m_data.end();
if (d == d_end) {
- buffer.push_back('}');
+ bl.append('}');
return;
}
while (true) {
else
data.write_json(buf, sizeof(buf));
- append_to_vector(buffer, buf);
+ bl.append(buf);
if (++d == d_end)
break;
- buffer.push_back(',');
+ bl.append(',');
}
- buffer.push_back('}');
+ bl.append('}');
}
const std::string &PerfCounters::get_name() const
#include "common/config_obs.h"
#include "common/Mutex.h"
+#include "include/buffer.h"
#include <stdint.h>
#include <string>
void finc(int idx, double v);
double fget(int idx) const;
- void write_json_to_buf(std::vector <char> &buffer, bool schema);
+ void write_json_to_buf(ceph::bufferlist& bl, bool schema);
const std::string& get_name() const;
void set_name(std::string s) {
void add(class PerfCounters *l);
void remove(class PerfCounters *l);
void clear();
- void write_json_to_buf(std::vector <char> &buffer, bool schema);
+ void write_json_to_buf(ceph::bufferlist& bl, bool schema);
private:
bool init(const std::string &uri);
void shutdown();