]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/mgr_module.py
2 import ceph_state
#noqa
8 class CommandResult(object):
10 Use with MgrModule.send_command
12 def __init__(self
, tag
):
13 self
.ev
= threading
.Event()
18 # This is just a convenience for notifications from
19 # C++ land, to avoid passing addresses around in messages.
22 def complete(self
, r
, outb
, outs
):
30 return self
.r
, self
.outb
, self
.outs
33 class MgrModule(object):
36 def __init__(self
, handle
):
38 self
._logger
= logging
.getLogger(handle
)
40 # Don't filter any logs at the python level, leave it to C++
41 self
._logger
.setLevel(logging
.DEBUG
)
43 # FIXME: we should learn the log level from C++ land, and then
44 # avoid calling ceph_state.log when we know a message is of
45 # an insufficient level to be ultimately output
47 class CPlusPlusHandler(logging
.Handler
):
48 def emit(self
, record
):
49 if record
.levelno
<= logging
.DEBUG
:
51 elif record
.levelno
<= logging
.INFO
:
53 elif record
.levelno
<= logging
.WARNING
:
58 ceph_state
.log(handle
, ceph_level
, self
.format(record
))
60 self
._logger
.addHandler(CPlusPlusHandler())
62 self
._version
= ceph_state
.get_version()
72 def notify(self
, notify_type
, notify_id
):
74 Called by the ceph-mgr service to notify the Python plugin
75 that new state is available.
81 Called by the ceph-mgr service to start any server that
82 is provided by this Python plugin. The implementation
83 of this function should block until ``shutdown`` is called.
85 You *must* implement ``shutdown`` if you implement ``serve``
91 Called by the ceph-mgr service to request that this
92 module drop out of its serve() function. You do not
93 need to implement this if you do not implement serve()
99 def get(self
, data_name
):
101 Called by the plugin to load some cluster state from ceph-mgr
103 return ceph_state
.get(self
._handle
, data_name
)
105 def get_server(self
, hostname
):
107 Called by the plugin to load information about a particular
110 :param hostname: a hostame
112 return ceph_state
.get_server(self
._handle
, hostname
)
114 def get_counter(self
, svc_type
, svc_name
, path
):
116 Called by the plugin to fetch data for a particular perf counter
117 on a particular service.
122 :return: A list of two-element lists containing time and value
124 return ceph_state
.get_counter(self
._handle
, svc_type
, svc_name
, path
)
126 def list_servers(self
):
128 Like ``get_server``, but instead of returning information
129 about just one node, return all the nodes in an array.
131 return ceph_state
.get_server(self
._handle
, None)
133 def get_metadata(self
, svc_type
, svc_id
):
135 Fetch the metadata for a particular service.
137 :param svc_type: one of 'mds', 'osd', 'mon'
138 :param svc_id: string
141 return ceph_state
.get_metadata(self
._handle
, svc_type
, svc_id
)
143 def send_command(self
, *args
, **kwargs
):
145 Called by the plugin to send a command to the mon
148 ceph_state
.send_command(self
._handle
, *args
, **kwargs
)
150 def handle_command(self
, cmd
):
152 Called by ceph-mgr to request the plugin to handle one
153 of the commands that it declared in self.COMMANDS
155 Return a status code, an output buffer, and an
156 output string. The output buffer is for data results,
157 the output string is for informative text.
159 :param cmd: dict, from Ceph's cmdmap_t
161 :return: 3-tuple of (int, str, str)
164 # Should never get called if they didn't declare
166 raise NotImplementedError()
168 def get_mgr_id(self
):
174 return ceph_state
.get_mgr_id()
176 def get_config(self
, key
):
178 Retrieve the value of a persistent configuration setting
183 return ceph_state
.get_config(self
._handle
, key
)
185 def get_config_prefix(self
, key_prefix
):
187 Retrieve a dict of config values with the given prefix
189 :param key_prefix: str
192 return ceph_state
.get_config_prefix(self
._handle
, key_prefix
)
194 def set_config(self
, key
, val
):
196 Set the value of a persistent configuration setting
201 ceph_state
.set_config(self
._handle
, key
, val
)
203 def set_config_json(self
, key
, val
):
205 Helper for setting json-serialized-config
208 :param val: json-serializable object
210 self
.set_config(key
, json
.dumps(val
))
212 def get_config_json(self
, key
):
214 Helper for getting json-serialized config
219 raw
= self
.get_config(key
)
223 return json
.loads(raw
)