From 3ada714c33bb81c54682004bf7370dbaac3a602c Mon Sep 17 00:00:00 2001 From: Rex Schilasky <49162693+rex-schilasky@users.noreply.github.com> Date: Tue, 20 Aug 2024 14:37:30 +0200 Subject: [PATCH] python monitoring dictionary enhanced (still not complete) (#1715) --- lang/python/core/src/ecal_wrap.cxx | 101 +++++++++++++++++++++++++---- 1 file changed, 88 insertions(+), 13 deletions(-) diff --git a/lang/python/core/src/ecal_wrap.cxx b/lang/python/core/src/ecal_wrap.cxx index 91d0214418..b42450d344 100644 --- a/lang/python/core/src/ecal_wrap.cxx +++ b/lang/python/core/src/ecal_wrap.cxx @@ -1,6 +1,6 @@ /* ========================= eCAL LICENSE ================================= * - * Copyright (C) 2016 - 2019 Continental Corporation + * Copyright (C) 2016 - 2024 Continental Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1343,6 +1343,8 @@ PyObject* mon_setfilterstate(PyObject* /*self*/, PyObject* args) /****************************************/ /* mon_monitoring */ /****************************************/ + + // TODO: std::map attr PyObject* mon_monitoring(PyObject* /*self*/, PyObject* /*args*/) { PyObject* retDict = PyDict_New(); @@ -1371,6 +1373,9 @@ PyObject* mon_monitoring(PyObject* /*self*/, PyObject* /*args*/) val = Py_BuildValue("s", process.hname().c_str()); PyDict_SetItemString(processDict, "hname", val); Py_DECREF(val); + val = Py_BuildValue("s", process.hgname().c_str()); + PyDict_SetItemString(processDict, "hgname", val); Py_DECREF(val); + val = Py_BuildValue("i", process.pid()); PyDict_SetItemString(processDict, "pid", val); Py_DECREF(val); @@ -1418,6 +1423,9 @@ PyObject* mon_monitoring(PyObject* /*self*/, PyObject* /*args*/) val = Py_BuildValue("s", process.component_init_info().c_str()); PyDict_SetItemString(processDict, "component_init_info", val); Py_DECREF(val); + + val = Py_BuildValue("s", process.ecal_runtime_version().c_str()); + PyDict_SetItemString(processDict, "ecal_runtime_version", val); Py_DECREF(val); } // collect service infos @@ -1449,25 +1457,76 @@ PyObject* mon_monitoring(PyObject* /*self*/, PyObject* /*args*/) val = Py_BuildValue("s", service.sname().c_str()); PyDict_SetItemString(serviceDict, "sname", val); Py_DECREF(val); + val = Py_BuildValue("i", service.version()); + PyDict_SetItemString(serviceDict, "version", val); Py_DECREF(val); + + val = Py_BuildValue("i", service.tcp_port_v0()); + PyDict_SetItemString(serviceDict, "tcp_port_v0", val); Py_DECREF(val); + + val = Py_BuildValue("i", service.tcp_port_v1()); + PyDict_SetItemString(serviceDict, "tcp_port_v1", val); Py_DECREF(val); + PyObject* methodsDict = PyDict_New(); PyDict_SetItemString(serviceDict, "methods", methodsDict); Py_DECREF(methodsDict); - // for(int i = 0; i < service.methods().size(); ++i) - // { - // const eCAL::pb::Method& method = service.methods(i); + for(int i = 0; i < service.methods().size(); ++i) + { + const eCAL::pb::Method& method = service.methods(i); + + val = Py_BuildValue("s", method.mname().c_str()); + PyDict_SetItemString(methodsDict, "mname", val); Py_DECREF(val); + + val = Py_BuildValue("s", method.req_type().c_str()); + PyDict_SetItemString(methodsDict, "req_type", val); Py_DECREF(val); + + // TODO: std::string req_desc + + val = Py_BuildValue("s", method.resp_type().c_str()); + PyDict_SetItemString(methodsDict, "resp_type", val); Py_DECREF(val); + + // TODO: std::string resp_desc + + val = Py_BuildValue("i", method.call_count()); + PyDict_SetItemString(methodsDict, "call_count", val); Py_DECREF(val); + } + } + + // collect client infos + { + PyObject* clientList = PyList_New(0); + PyDict_SetItemString(retDict, "clients", clientList); Py_DECREF(clientList); + + for (int i = 0; i < monitoring.clients().size(); ++i) + { + PyObject* clientDict = PyDict_New(); + PyList_Append(clientList, clientDict); Py_DECREF(clientDict); - // val = Py_BuildValue("s", method.mname().c_str()); - // PyDict_SetItemString(methodsDict, "mname", val); Py_DECREF(val); + const auto& client = monitoring.clients(i); + + val = Py_BuildValue("i", client.rclock()); + PyDict_SetItemString(clientDict, "rclock", val); Py_DECREF(val); - // val = Py_BuildValue("s", method.inp_type().c_str()); - // PyDict_SetItemString(methodsDict, "inp_type", val); Py_DECREF(val); + val = Py_BuildValue("s", client.hname().c_str()); + PyDict_SetItemString(clientDict, "hname", val); Py_DECREF(val); - // val = Py_BuildValue("s", method.out_type().c_str()); - // PyDict_SetItemString(methodsDict, "out_type", val); Py_DECREF(val); + val = Py_BuildValue("s", client.pname().c_str()); + PyDict_SetItemString(clientDict, "pname", val); Py_DECREF(val); - // val = Py_BuildValue("i", method.call_count()); - // PyDict_SetItemString(methodsDict, "call_count", val); Py_DECREF(val); - //} + val = Py_BuildValue("s", client.uname().c_str()); + PyDict_SetItemString(clientDict, "uname", val); Py_DECREF(val); + + val = Py_BuildValue("i", client.pid()); + PyDict_SetItemString(clientDict, "pid", val); Py_DECREF(val); + + val = Py_BuildValue("s", client.sname().c_str()); + PyDict_SetItemString(clientDict, "sname", val); Py_DECREF(val); + + val = Py_BuildValue("s", client.sid().c_str()); + PyDict_SetItemString(clientDict, "sid", val); Py_DECREF(val); + + val = Py_BuildValue("i", client.version()); + PyDict_SetItemString(clientDict, "version", val); Py_DECREF(val); + } } // collect topic infos @@ -1511,9 +1570,25 @@ PyObject* mon_monitoring(PyObject* /*self*/, PyObject* /*args*/) val = Py_BuildValue("y#", topic.tdesc().c_str(), (Py_ssize_t)(topic.tdesc().length())); PyDict_SetItemString(topicDict, "tdesc", val); Py_DECREF(val); + // TODO: SDataTypeInformation tdatatype + + // TODO: std::vector tlayer + val = Py_BuildValue("i", topic.tsize()); PyDict_SetItemString(topicDict, "tsize", val); Py_DECREF(val); + val = Py_BuildValue("i", topic.connections_loc()); + PyDict_SetItemString(topicDict, "connections_loc", val); Py_DECREF(val); + + val = Py_BuildValue("i", topic.connections_ext()); + PyDict_SetItemString(topicDict, "connections_ext", val); Py_DECREF(val); + + val = Py_BuildValue("i", topic.message_drops()); + PyDict_SetItemString(topicDict, "message_drops", val); Py_DECREF(val); + + val = Py_BuildValue("i", topic.did()); + PyDict_SetItemString(topicDict, "did", val); Py_DECREF(val); + val = Py_BuildValue("i", topic.dclock()); PyDict_SetItemString(topicDict, "dclock", val); Py_DECREF(val);