From 843927644db93e8f92cf950465bef616a8819d53 Mon Sep 17 00:00:00 2001 From: Pere Diaz Bou Date: Tue, 22 Feb 2022 15:00:51 +0100 Subject: [PATCH] exporter daemon Signed-off-by: Pere Diaz Bou --- src/CMakeLists.txt | 1 + src/ceph_exporter.cc | 19 +++++++++++++++++++ src/common/entity_name.cc | 3 ++- src/common/entity_name.h | 3 ++- src/include/msgr.h | 1 + src/mgr/ActivePyModules.cc | 1 - src/mgr/CMakeLists.txt | 7 +++++++ src/mgr/DaemonMetricCollector.cc | 7 +++++++ src/mgr/DaemonMetricCollector.h | 7 +++++++ src/msg/msg_types.cc | 3 +++ src/msg/msg_types.h | 3 +++ src/pybind/mgr/CMakeLists.txt | 6 +++--- src/vstart.sh | 2 +- 13 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 src/ceph_exporter.cc create mode 100644 src/mgr/DaemonMetricCollector.cc create mode 100644 src/mgr/DaemonMetricCollector.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 89c53ea46eb93..2f608722099ba 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -894,6 +894,7 @@ add_custom_target(vstart-base DEPENDS ceph-mon ceph-authtool ceph-conf + ceph-exporter monmaptool crushtool rados) diff --git a/src/ceph_exporter.cc b/src/ceph_exporter.cc new file mode 100644 index 0000000000000..d19c2ae4b0570 --- /dev/null +++ b/src/ceph_exporter.cc @@ -0,0 +1,19 @@ +#include "mgr/DaemonMetricCollector.h" +#include +#include "global/global_init.h" +#include "common/ceph_argparse.h" +#include + + +int main(int argc, char** argv) { + // TODO: daemonize + std::cout << "inside exporter" << std::endl; + std::map defaults = { + { "keyring", "$mgr_data/keyring" } + }; + auto args = argv_to_vec(argc, argv); + auto cct = global_init(&defaults, args, CEPH_ENTITY_TYPE_EXPORTER, + CODE_ENVIRONMENT_DAEMON, 0); + DaemonMetricCollector collector; + collector.main(); +} diff --git a/src/common/entity_name.cc b/src/common/entity_name.cc index 5357b34eacb7f..fad4f0f3b4de9 100644 --- a/src/common/entity_name.cc +++ b/src/common/entity_name.cc @@ -20,12 +20,13 @@ using std::string; -const std::array EntityName::STR_TO_ENTITY_TYPE = {{ +const std::array EntityName::STR_TO_ENTITY_TYPE = {{ { CEPH_ENTITY_TYPE_AUTH, "auth" }, { CEPH_ENTITY_TYPE_MON, "mon" }, { CEPH_ENTITY_TYPE_OSD, "osd" }, { CEPH_ENTITY_TYPE_MDS, "mds" }, { CEPH_ENTITY_TYPE_MGR, "mgr" }, + { CEPH_ENTITY_TYPE_EXPORTER, "exporter" }, { CEPH_ENTITY_TYPE_CLIENT, "client" }, }}; diff --git a/src/common/entity_name.h b/src/common/entity_name.h index 5e5ab111404a6..a9cc533886ba8 100644 --- a/src/common/entity_name.h +++ b/src/common/entity_name.h @@ -60,6 +60,7 @@ struct EntityName bool is_mds() const { return get_type() == CEPH_ENTITY_TYPE_MDS; } bool is_client() const { return get_type() == CEPH_ENTITY_TYPE_CLIENT; } bool is_mon() const { return get_type() == CEPH_ENTITY_TYPE_MON; } + bool is_exporter() const { return get_type() == CEPH_ENTITY_TYPE_EXPORTER; } std::string_view get_type_name() const; const std::string &get_id() const; @@ -78,7 +79,7 @@ private: uint32_t type; const char *str; }; - static const std::array STR_TO_ENTITY_TYPE; + static const std::array STR_TO_ENTITY_TYPE; uint32_t type = 0; std::string id; diff --git a/src/include/msgr.h b/src/include/msgr.h index c8ad48ad1afef..3c5f7aa8f5370 100644 --- a/src/include/msgr.h +++ b/src/include/msgr.h @@ -92,6 +92,7 @@ struct ceph_entity_name { #define CEPH_ENTITY_TYPE_CLIENT 0x08 #define CEPH_ENTITY_TYPE_MGR 0x10 #define CEPH_ENTITY_TYPE_AUTH 0x20 +#define CEPH_ENTITY_TYPE_EXPORTER 0x30 #define CEPH_ENTITY_TYPE_ANY 0xFF diff --git a/src/mgr/ActivePyModules.cc b/src/mgr/ActivePyModules.cc index 58c3d9ee4d6f4..9ac03739595f6 100644 --- a/src/mgr/ActivePyModules.cc +++ b/src/mgr/ActivePyModules.cc @@ -233,7 +233,6 @@ PyObject *ActivePyModules::get_python(const std::string &what) } else if (what.substr(0, 7) == "osd_map") { without_gil_t no_gil; cluster_state.with_osdmap([&](const OSDMap &osd_map){ - no_gil.acquire_gil(); if (what == "osd_map") { osd_map.dump(&f); } else if (what == "osd_map_tree") { diff --git a/src/mgr/CMakeLists.txt b/src/mgr/CMakeLists.txt index f9ec04317f4be..4f1003a6149a8 100644 --- a/src/mgr/CMakeLists.txt +++ b/src/mgr/CMakeLists.txt @@ -33,7 +33,14 @@ if(WITH_MGR) StandbyPyModules.cc mgr_commands.cc $) + set(exporter_srcs + ${CMAKE_SOURCE_DIR}/src/ceph_exporter.cc + DaemonMetricCollector.cc + ) add_executable(ceph-mgr ${mgr_srcs}) + add_executable(ceph-exporter ${exporter_srcs}) + target_link_libraries(ceph-exporter + global-static ceph-common) target_compile_definitions(ceph-mgr PRIVATE PY_SSIZE_T_CLEAN) if(WITH_LIBCEPHSQLITE) target_link_libraries(ceph-mgr cephsqlite SQLite3::SQLite3) diff --git a/src/mgr/DaemonMetricCollector.cc b/src/mgr/DaemonMetricCollector.cc new file mode 100644 index 0000000000000..8adcc39e551b9 --- /dev/null +++ b/src/mgr/DaemonMetricCollector.cc @@ -0,0 +1,7 @@ +#include "DaemonMetricCollector.h" +#include + + +void DaemonMetricCollector::main() { + std::cout << "metric" << std::endl; +} diff --git a/src/mgr/DaemonMetricCollector.h b/src/mgr/DaemonMetricCollector.h new file mode 100644 index 0000000000000..93443f128f744 --- /dev/null +++ b/src/mgr/DaemonMetricCollector.h @@ -0,0 +1,7 @@ +#pragma once + +class DaemonMetricCollector { + public: + int i; + void main(); +}; diff --git a/src/msg/msg_types.cc b/src/msg/msg_types.cc index 1a78cb3268098..e0e84c586e2fb 100644 --- a/src/msg/msg_types.cc +++ b/src/msg/msg_types.cc @@ -28,6 +28,9 @@ bool entity_name_t::parse(std::string_view s) } else if (s.find("mgr.") == 0) { _type = TYPE_MGR; start += 4; + } else if (s.find("exporter.") == 0) { + _type = TYPE_EXPORTER; + start += 8; } else { return false; } diff --git a/src/msg/msg_types.h b/src/msg/msg_types.h index a33545d916f3d..d247a2bb06cf2 100644 --- a/src/msg/msg_types.h +++ b/src/msg/msg_types.h @@ -51,6 +51,7 @@ public: static const int TYPE_OSD = CEPH_ENTITY_TYPE_OSD; static const int TYPE_CLIENT = CEPH_ENTITY_TYPE_CLIENT; static const int TYPE_MGR = CEPH_ENTITY_TYPE_MGR; + static const int TYPE_EXPORTER = CEPH_ENTITY_TYPE_EXPORTER; static const int64_t NEW = -1; @@ -66,6 +67,7 @@ public: static entity_name_t OSD(int64_t i=NEW) { return entity_name_t(TYPE_OSD, i); } static entity_name_t CLIENT(int64_t i=NEW) { return entity_name_t(TYPE_CLIENT, i); } static entity_name_t MGR(int64_t i=NEW) { return entity_name_t(TYPE_MGR, i); } + static entity_name_t EXPORTER(int64_t i=NEW) { return entity_name_t(TYPE_EXPORTER, i); } int64_t num() const { return _num; } int type() const { return _type; } @@ -80,6 +82,7 @@ public: bool is_osd() const { return type() == TYPE_OSD; } bool is_mon() const { return type() == TYPE_MON; } bool is_mgr() const { return type() == TYPE_MGR; } + bool is_exporter() const { return type() == TYPE_EXPORTER; } operator ceph_entity_name() const { ceph_entity_name n = { _type, ceph_le64(_num) }; diff --git a/src/pybind/mgr/CMakeLists.txt b/src/pybind/mgr/CMakeLists.txt index 54aa914202892..d25254048a5c5 100644 --- a/src/pybind/mgr/CMakeLists.txt +++ b/src/pybind/mgr/CMakeLists.txt @@ -8,9 +8,9 @@ set(mgr_module_install_excludes add_subdirectory(dashboard) -if(WITH_MGR_ROOK_CLIENT) - add_subdirectory(rook) -endif() +# if(WITH_MGR_ROOK_CLIENT) +# add_subdirectory(rook) +# endif() if(WITH_TESTS) include(AddCephTest) add_tox_test(mgr ${CMAKE_CURRENT_SOURCE_DIR} TOX_ENVS py3 py37 mypy flake8 jinjalint nooptional) diff --git a/src/vstart.sh b/src/vstart.sh index 5518e300624fe..4a9d0005230e5 100755 --- a/src/vstart.sh +++ b/src/vstart.sh @@ -788,7 +788,6 @@ $DAEMONOPTS mds root ino gid = `id -g` $(format_conf "${extra_conf}") [mgr] - mgr disabled modules = rook mgr data = $CEPH_DEV_DIR/mgr.\$id mgr module path = $MGR_PYTHON_PATH cephadm path = $CEPH_ROOT/src/cephadm/cephadm @@ -823,6 +822,7 @@ $COSDSHORT $(format_conf "${extra_conf}") [mon] mon_data_avail_crit = 1 + mgr disabled modules = rook mgr initial modules = $mgr_modules $DAEMONOPTS $CMONDEBUG -- 2.39.5