daemon->perf_counters.clear();
if (m->service_daemon) {
- daemon->metadata = m->daemon_metadata;
+ daemon->set_metadata(m->daemon_metadata);
daemon->service_status = m->daemon_status;
utime_t now = ceph_clock_now();
if (!daemon_state.exists(key)) {
auto daemon = std::make_shared<DaemonState>(daemon_state.types);
daemon->key = key;
- daemon->metadata = q.second.metadata;
+ daemon->set_metadata(q.second.metadata);
if (q.second.metadata.count("hostname")) {
daemon->hostname = q.second.metadata["hostname"];
}
#include <boost/circular_buffer.hpp>
#include "common/RWLock.h"
+#include "include/str_map.h"
#include "msg/msg_types.h"
// Unique reference to a daemon within a cluster
typedef std::pair<std::string, std::string> DaemonKey;
+static inline std::string to_string(const DaemonKey& dk) {
+ return dk.first + "." + dk.second;
+}
+
// An instance of a performance counter type, within
// a particular daemon.
class PerfCounterInstance
// The metadata (hostname, version, etc) sent from the daemon
std::map<std::string, std::string> metadata;
+ /// device ids, derived from metadata[device_ids]
+ std::set<std::string> devids;
+
// TODO: this can be generalized to other daemons
std::vector<DaemonHealthMetric> daemon_health_metrics;
{
}
+ void set_metadata(const std::map<std::string,std::string>& m) {
+ metadata = m;
+ auto p = m.find("device_ids");
+ if (p != m.end()) {
+ map<std::string,std::string> devs;
+ get_str_map(p->second, &devs, ",; ");
+ for (auto& i : devs) {
+ devids.insert(i.second);
+ }
+ }
+ }
+
const std::map<std::string,std::string>& get_config_defaults() {
if (config_defaults.empty() &&
config_defaults_bl.length()) {
}
daemon_meta.erase("hostname");
state->metadata.clear();
+ map<string,string> m;
for (const auto &i : daemon_meta) {
- state->metadata[i.first] = i.second.get_str();
- }
+ m[i.first] = i.second.get_str();
+ }
+ state->set_metadata(m);
} else {
state = std::make_shared<DaemonState>(daemon_state.types);
state->key = key;
}
daemon_meta.erase("hostname");
+ map<string,string> m;
for (const auto &i : daemon_meta) {
- state->metadata[i.first] = i.second.get_str();
+ m[i.first] = i.second.get_str();
}
+ state->set_metadata(m);
daemon_state.insert(state);
}
osd_metadata.erase("id");
osd_metadata.erase("hostname");
+ map<string,string> m;
for (const auto &i : osd_metadata) {
- dm->metadata[i.first] = i.second.get_str();
+ m[i.first] = i.second.get_str();
}
+ dm->set_metadata(m);
daemon_state.insert(dm);
}