X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fmgr%2FPyState.cc;h=3bc8a23a8be316122f373e4686027b789720f9d6;hb=224ce89bce8186937e77bdbda572a650953f8c23;hp=ce71dcd3f7003e2e1dfcb4bddb7b2db37d559f63;hpb=06dae762bfef1ba116dc58483c7b68b733d853e0;p=ceph.git diff --git a/ceph/src/mgr/PyState.cc b/ceph/src/mgr/PyState.cc index ce71dcd3f..3bc8a23a8 100644 --- a/ceph/src/mgr/PyState.cc +++ b/ceph/src/mgr/PyState.cc @@ -152,9 +152,27 @@ ceph_send_command(PyObject *self, PyObject *args) return nullptr; } } else if (std::string(type) == "pg") { - // TODO: expose objecter::pg_command + pg_t pgid; + if (!pgid.parse(name)) { + delete c; + string msg("invalid pgid: "); + msg.append("\"").append(name).append("\""); + PyErr_SetString(PyExc_ValueError, msg.c_str()); + return nullptr; + } + + ceph_tid_t tid; + global_handle->get_objecter().pg_command( + pgid, + {cmd_json}, + {}, + &tid, + &c->outbl, + &c->outs, + c); return nullptr; } else { + delete c; string msg("unknown service type: "); msg.append(type); PyErr_SetString(PyExc_ValueError, msg.c_str()); @@ -249,37 +267,29 @@ ceph_config_set(PyObject *self, PyObject *args) Py_RETURN_NONE; } -static entity_type_t svc_type_from_str(const std::string &type_str) -{ - if (type_str == std::string("mds")) { - return CEPH_ENTITY_TYPE_MDS; - } else if (type_str == std::string("osd")) { - return CEPH_ENTITY_TYPE_OSD; - } else if (type_str == std::string("mon")) { - return CEPH_ENTITY_TYPE_MON; - } else { - return CEPH_ENTITY_TYPE_ANY; - } -} - static PyObject* get_metadata(PyObject *self, PyObject *args) { char *handle = nullptr; - char *type_str = NULL; + char *svc_name = NULL; char *svc_id = NULL; - if (!PyArg_ParseTuple(args, "sss:get_metadata", &handle, &type_str, &svc_id)) { + if (!PyArg_ParseTuple(args, "sss:get_metadata", &handle, &svc_name, &svc_id)) { return nullptr; } + return global_handle->get_metadata_python(handle, svc_name, svc_id); +} - entity_type_t svc_type = svc_type_from_str(type_str); - if (svc_type == CEPH_ENTITY_TYPE_ANY) { - // FIXME: form a proper exception +static PyObject* +get_daemon_status(PyObject *self, PyObject *args) +{ + char *handle = nullptr; + char *svc_name = NULL; + char *svc_id = NULL; + if (!PyArg_ParseTuple(args, "sss:get_daemon_status", &handle, &svc_name, + &svc_id)) { return nullptr; } - - - return global_handle->get_metadata_python(handle, svc_type, svc_id); + return global_handle->get_daemon_status_python(handle, svc_name, svc_id); } static PyObject* @@ -313,22 +323,15 @@ static PyObject* get_counter(PyObject *self, PyObject *args) { char *handle = nullptr; - char *type_str = nullptr; + char *svc_name = nullptr; char *svc_id = nullptr; char *counter_path = nullptr; - if (!PyArg_ParseTuple(args, "ssss:get_counter", &handle, &type_str, + if (!PyArg_ParseTuple(args, "ssss:get_counter", &handle, &svc_name, &svc_id, &counter_path)) { return nullptr; } - - entity_type_t svc_type = svc_type_from_str(type_str); - if (svc_type == CEPH_ENTITY_TYPE_ANY) { - // FIXME: form a proper exception - return nullptr; - } - return global_handle->get_counter_python( - handle, svc_type, svc_id, counter_path); + handle, svc_name, svc_id, counter_path); } PyMethodDef CephStateMethods[] = { @@ -338,6 +341,8 @@ PyMethodDef CephStateMethods[] = { "Get a server object"}, {"get_metadata", get_metadata, METH_VARARGS, "Get a service's metadata"}, + {"get_daemon_status", get_daemon_status, METH_VARARGS, + "Get a service's status"}, {"send_command", ceph_send_command, METH_VARARGS, "Send a mon command"}, {"get_mgr_id", ceph_get_mgr_id, METH_NOARGS,