]>
Commit | Line | Data |
---|---|---|
11fdf7f2 | 1 | # -*- coding: utf-8 -*- |
11fdf7f2 TL |
2 | |
3 | import json | |
4 | ||
11fdf7f2 TL |
5 | from .. import mgr |
6 | from ..security import Scope | |
a4b75251 | 7 | from . import APIDoc, APIRouter, BaseController, Endpoint, EndpointDoc, ReadPermission |
f67539c2 TL |
8 | |
9 | MONITOR_SCHEMA = { | |
10 | "mon_status": ({ | |
11 | "name": (str, ""), | |
12 | "rank": (int, ""), | |
13 | "state": (str, ""), | |
14 | "election_epoch": (int, ""), | |
15 | "quorum": ([int], ""), | |
16 | "quorum_age": (int, ""), | |
17 | "features": ({ | |
18 | "required_con": (str, ""), | |
19 | "required_mon": ([int], ""), | |
20 | "quorum_con": (str, ""), | |
21 | "quorum_mon": ([str], "") | |
22 | }, ""), | |
23 | "outside_quorum": ([str], ""), | |
24 | "extra_probe_peers": ([str], ""), | |
25 | "sync_provider": ([str], ""), | |
26 | "monmap": ({ | |
27 | "epoch": (int, ""), | |
28 | "fsid": (str, ""), | |
29 | "modified": (str, ""), | |
30 | "created": (str, ""), | |
31 | "min_mon_release": (int, ""), | |
32 | "min_mon_release_name": (str, ""), | |
33 | "features": ({ | |
34 | "persistent": ([str], ""), | |
35 | "optional": ([str], "") | |
36 | }, ""), | |
37 | "mons": ([{ | |
38 | "rank": (int, ""), | |
39 | "name": (str, ""), | |
40 | "public_addrs": ({ | |
41 | "addrvec": ([{ | |
42 | "type": (str, ""), | |
43 | "addr": (str, ""), | |
44 | "nonce": (int, "") | |
45 | }], "") | |
46 | }, ""), | |
47 | "addr": (str, ""), | |
48 | "public_addr": (str, ""), | |
49 | "priority": (int, ""), | |
50 | "weight": (int, ""), | |
51 | "stats": ({ | |
52 | "num_sessions": ([int], ""), | |
53 | }, "") | |
54 | }], "") | |
55 | }, ""), | |
56 | "feature_map": ({ | |
57 | "mon": ([{ | |
58 | "features": (str, ""), | |
59 | "release": (str, ""), | |
60 | "num": (int, "") | |
61 | }], ""), | |
62 | "mds": ([{ | |
63 | "features": (str, ""), | |
64 | "release": (str, ""), | |
65 | "num": (int, "") | |
66 | }], ""), | |
67 | "client": ([{ | |
68 | "features": (str, ""), | |
69 | "release": (str, ""), | |
70 | "num": (int, "") | |
71 | }], ""), | |
72 | "mgr": ([{ | |
73 | "features": (str, ""), | |
74 | "release": (str, ""), | |
75 | "num": (int, "") | |
76 | }], ""), | |
77 | }, "") | |
78 | }, ""), | |
79 | "in_quorum": ([{ | |
80 | "rank": (int, ""), | |
81 | "name": (str, ""), | |
82 | "public_addrs": ({ | |
83 | "addrvec": ([{ | |
84 | "type": (str, ""), | |
85 | "addr": (str, ""), | |
86 | "nonce": (int, "") | |
87 | }], "") | |
88 | }, ""), | |
89 | "addr": (str, ""), | |
90 | "public_addr": (str, ""), | |
91 | "priority": (int, ""), | |
92 | "weight": (int, ""), | |
93 | "stats": ({ | |
94 | "num_sessions": ([int], "") | |
95 | }, "") | |
96 | }], ""), | |
97 | "out_quorum": ([int], "") | |
98 | } | |
11fdf7f2 TL |
99 | |
100 | ||
a4b75251 TL |
101 | @APIRouter('/monitor', Scope.MONITOR) |
102 | @APIDoc("Get Monitor Details", "Monitor") | |
11fdf7f2 TL |
103 | class Monitor(BaseController): |
104 | @Endpoint() | |
105 | @ReadPermission | |
f67539c2 TL |
106 | @EndpointDoc("Get Monitor Details", |
107 | responses={200: MONITOR_SCHEMA}) | |
11fdf7f2 TL |
108 | def __call__(self): |
109 | in_quorum, out_quorum = [], [] | |
110 | ||
111 | counters = ['mon.num_sessions'] | |
112 | ||
113 | mon_status_json = mgr.get("mon_status") | |
114 | mon_status = json.loads(mon_status_json['json']) | |
115 | ||
116 | for mon in mon_status["monmap"]["mons"]: | |
117 | mon["stats"] = {} | |
118 | for counter in counters: | |
119 | data = mgr.get_counter("mon", mon["name"], counter) | |
120 | if data is not None: | |
121 | mon["stats"][counter.split(".")[1]] = data[counter] | |
122 | else: | |
123 | mon["stats"][counter.split(".")[1]] = [] | |
124 | if mon["rank"] in mon_status["quorum"]: | |
125 | in_quorum.append(mon) | |
126 | else: | |
127 | out_quorum.append(mon) | |
128 | ||
129 | return { | |
130 | 'mon_status': mon_status, | |
131 | 'in_quorum': in_quorum, | |
132 | 'out_quorum': out_quorum | |
133 | } |