]> git.proxmox.com Git - ceph.git/blob - ceph/src/mon/MgrStatMonitor.h
bump version to 18.2.2-pve1
[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 ceph::buffer::list pending_service_map_bl;
23
24 public:
25 MgrStatMonitor(Monitor &mn, Paxos &p, const std::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 std::optional<int64_t> data_pool) const {
88 return digest.get_statfs(osdmap, data_pool);
89 }
90
91 void print_summary(ceph::Formatter *f, std::ostream *out) const {
92 digest.print_summary(f, out);
93 }
94 void dump_info(ceph::Formatter *f) const {
95 digest.dump(f);
96 f->dump_object("servicemap", get_service_map());
97 f->dump_unsigned("mgrstat_first_committed", get_first_committed());
98 f->dump_unsigned("mgrstat_last_committed", get_last_committed());
99 }
100 void dump_cluster_stats(std::stringstream *ss,
101 ceph::Formatter *f,
102 bool verbose) const {
103 digest.dump_cluster_stats(ss, f, verbose);
104 }
105 void dump_pool_stats(const OSDMap& osdm, std::stringstream *ss, ceph::Formatter *f,
106 bool verbose) const {
107 digest.dump_pool_stats_full(osdm, ss, f, verbose);
108 }
109 };