]>
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: string (e.g., 'mds', 'osd', 'mon')
138 :param svc_id: string
141 return ceph_state
.get_metadata(self
._handle
, svc_type
, svc_id
)
143 def get_daemon_status(self
, svc_type
, svc_id
):
145 Fetch the latest status for a particular service daemon.
147 :param svc_type: string (e.g., 'rgw')
148 :param svc_id: string
151 return ceph_state
.get_daemon_status(self
._handle
, svc_type
, svc_id
)
153 def send_command(self
, *args
, **kwargs
):
155 Called by the plugin to send a command to the mon
158 ceph_state
.send_command(self
._handle
, *args
, **kwargs
)
160 def handle_command(self
, cmd
):
162 Called by ceph-mgr to request the plugin to handle one
163 of the commands that it declared in self.COMMANDS
165 Return a status code, an output buffer, and an
166 output string. The output buffer is for data results,
167 the output string is for informative text.
169 :param cmd: dict, from Ceph's cmdmap_t
171 :return: 3-tuple of (int, str, str)
174 # Should never get called if they didn't declare
176 raise NotImplementedError()
178 def get_mgr_id(self
):
184 return ceph_state
.get_mgr_id()
186 def get_config(self
, key
):
188 Retrieve the value of a persistent configuration setting
193 return ceph_state
.get_config(self
._handle
, key
)
195 def get_config_prefix(self
, key_prefix
):
197 Retrieve a dict of config values with the given prefix
199 :param key_prefix: str
202 return ceph_state
.get_config_prefix(self
._handle
, key_prefix
)
204 def get_localized_config(self
, key
, default
=None):
206 Retrieve localized configuration for this ceph-mgr instance
211 r
= self
.get_config(self
.get_mgr_id() + '/' + key
)
213 r
= self
.get_config(key
)
219 def set_config(self
, key
, val
):
221 Set the value of a persistent configuration setting
226 ceph_state
.set_config(self
._handle
, key
, val
)
228 def set_localized_config(self
, key
, val
):
230 Set localized configuration for this ceph-mgr instance
235 return self
.set_config(self
.get_mgr_id() + '/' + key
, val
)
237 def set_config_json(self
, key
, val
):
239 Helper for setting json-serialized-config
242 :param val: json-serializable object
244 self
.set_config(key
, json
.dumps(val
))
246 def get_config_json(self
, key
):
248 Helper for getting json-serialized config
253 raw
= self
.get_config(key
)
257 return json
.loads(raw
)
261 Run a self-test on the module. Override this function and implement
262 a best as possible self-test for (automated) testing of the module