]> git.proxmox.com Git - ceph.git/blob - ceph/src/mon/MgrStatMonitor.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / mon / MgrStatMonitor.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #pragma once
5
6 #include "include/Context.h"
7 #include "PaxosService.h"
8 #include "mon/PGMap.h"
9 #include "mgr/ServiceMap.h"
10
11 class MgrStatMonitor : public PaxosService {
12 // live version
13 version_t version = 0;
14 PGMapDigest digest;
15 ServiceMap service_map;
16 std::map<std::string,ProgressEvent> progress_events;
17
18 // pending commit
19 PGMapDigest pending_digest;
20 health_check_map_t pending_health_checks;
21 std::map<std::string,ProgressEvent> pending_progress_events;
22 bufferlist pending_service_map_bl;
23
24 public:
25 MgrStatMonitor(Monitor *mn, Paxos *p, const string& service_name);
26 ~MgrStatMonitor() override;
27
28 void init() override {}
29 void on_shutdown() override {}
30
31 void create_initial() override;
32 void update_from_paxos(bool *need_bootstrap) override;
33 void create_pending() override;
34 void encode_pending(MonitorDBStore::TransactionRef t) override;
35 version_t get_trim_to() const override;
36
37 bool definitely_converted_snapsets() const {
38 return digest.definitely_converted_snapsets();
39 }
40
41 bool preprocess_query(MonOpRequestRef op) override;
42 bool prepare_update(MonOpRequestRef op) override;
43
44 void encode_full(MonitorDBStore::TransactionRef t) override { }
45
46 bool preprocess_report(MonOpRequestRef op);
47 bool prepare_report(MonOpRequestRef op);
48
49 bool preprocess_getpoolstats(MonOpRequestRef op);
50 bool preprocess_statfs(MonOpRequestRef op);
51
52 void check_sub(Subscription *sub);
53 void check_subs();
54 void send_digests();
55
56 void on_active() override;
57 void tick() override;
58
59 uint64_t get_last_osd_stat_seq(int osd) {
60 return digest.get_last_osd_stat_seq(osd);
61 }
62
63 void update_logger();
64
65 const ServiceMap& get_service_map() const {
66 return service_map;
67 }
68
69 const std::map<std::string,ProgressEvent>& get_progress_events() {
70 return progress_events;
71 }
72
73 // pg stat access
74 const pool_stat_t* get_pool_stat(int64_t poolid) const {
75 auto i = digest.pg_pool_sum.find(poolid);
76 if (i != digest.pg_pool_sum.end()) {
77 return &i->second;
78 }
79 return nullptr;
80 }
81
82 const PGMapDigest& get_digest() {
83 return digest;
84 }
85
86 ceph_statfs get_statfs(OSDMap& osdmap,
87 boost::optional<int64_t> data_pool) const {
88 return digest.get_statfs(osdmap, data_pool);
89 }
90
91 void print_summary(Formatter *f, ostream *out) const {
92 digest.print_summary(f, out);
93 }
94 void dump_info(Formatter *f) const {
95 digest.dump(f);
96 f->dump_object("servicemap", get_service_map());
97 }
98 void dump_cluster_stats(stringstream *ss,
99 Formatter *f,
100 bool verbose) const {
101 digest.dump_cluster_stats(ss, f, verbose);
102 }
103 void dump_pool_stats(const OSDMap& osdm, stringstream *ss, Formatter *f,
104 bool verbose) const {
105 digest.dump_pool_stats_full(osdm, ss, f, verbose);
106 }
107 };