From e7e7690d8fc7b56bcff6a5e935a3583ba99ff68b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20L=C3=BCke?= Date: Mon, 30 Dec 2024 10:38:41 +0100 Subject: [PATCH] mana: remove int() and shutdown() from IManaSink --- src/internal/mana_analysis.h | 2 -- src/internal/mana_api.hpp | 10 ------- src/internal/mana_lib.hpp | 28 ++++-------------- src/internal/mana_nng.hpp | 8 ------ src/mana_plugin_cpp_test.cc | 10 ------- src/tools/mana_auto_replay.cc | 6 +--- src/tools/mana_nng_client.cc | 54 ++++++++++++++--------------------- 7 files changed, 28 insertions(+), 90 deletions(-) diff --git a/src/internal/mana_analysis.h b/src/internal/mana_analysis.h index 096ff98..3891236 100644 --- a/src/internal/mana_analysis.h +++ b/src/internal/mana_analysis.h @@ -284,8 +284,6 @@ struct ManaCountingSink: public IManaSink totalBytes = 0; } - void init(int, const char **) override {} - void shutdown() override {} void begin_run(const char *descriptor_json) override { auto jRun = nlohmann::json::parse(descriptor_json); diff --git a/src/internal/mana_api.hpp b/src/internal/mana_api.hpp index f9d3ffb..654d0f8 100644 --- a/src/internal/mana_api.hpp +++ b/src/internal/mana_api.hpp @@ -16,8 +16,6 @@ class IManaSink public: virtual ~IManaSink() = default; - virtual void init(int plugin_argc, const char **plugin_argv) = 0; - virtual void shutdown() = 0; virtual void begin_run(const char *descriptor_json) = 0; virtual void end_run(const char *descriptor_json) = 0; virtual void process_event(uint16_t eventIndex, mana_offset_array_t *arrays, size_t arrayCount, @@ -25,14 +23,6 @@ class IManaSink virtual void process_system_event(const uint32_t *data, size_t size) = 0; - template void init(StringHolder args) - { - std::vector cargs(args.size()); - std::transform(args.begin(), args.end(), cargs.begin(), - [](const std::string &s) { return s.c_str(); }); - init(cargs.size(), cargs.data()); - } - protected: IManaSink() = default; diff --git a/src/internal/mana_lib.hpp b/src/internal/mana_lib.hpp index 2b0188f..751dc53 100644 --- a/src/internal/mana_lib.hpp +++ b/src/internal/mana_lib.hpp @@ -142,8 +142,6 @@ class ManaSinkPerfProxy: public IManaSink } std::vector eventHits; std::vector eventBytes; - duration dt_init; - duration dt_shutdown; duration dt_beginRun; duration dt_endRun; std::vector dt_processEvent; @@ -158,20 +156,6 @@ class ManaSinkPerfProxy: public IManaSink const Perf &perf() const { return perf_; } - void init(int plugin_argc, const char **plugin_argv) override - { - auto t = Perf::clock::now(); - sink_->init(plugin_argc, plugin_argv); - perf_.dt_init = Perf::duration_cast(Perf::clock::now() - t); - } - - void shutdown() override - { - auto t = Perf::clock::now(); - sink_->shutdown(); - perf_.dt_shutdown = Perf::duration_cast(Perf::clock::now() - t); - } - void begin_run(const char *descriptor_json) override { perf_.eventHits.clear(); @@ -247,16 +231,16 @@ struct ManaCSink: public IManaSink mana_sink_plugin_t plugin_; void *context_ = nullptr; - explicit ManaCSink(mana_sink_plugin_t plugin) + explicit ManaCSink(mana_sink_plugin_t plugin, int plugin_argc, const char **plugin_argv) : plugin_(plugin) + , context_(plugin_.init(plugin_argc, plugin_argv)) { + if (!context_) + throw std::runtime_error("ManaCSink: plugin init failed"); } - void init(int plugin_argc, const char **plugin_argv) override - { - context_ = plugin_.init(plugin_argc, plugin_argv); - } - void shutdown() override { plugin_.shutdown(context_); } + ~ManaCSink() override { plugin_.shutdown(context_); } + void begin_run(const char *descriptor_json) override { plugin_.begin_run(context_, descriptor_json); diff --git a/src/internal/mana_nng.hpp b/src/internal/mana_nng.hpp index 258e4ba..8aceffb 100644 --- a/src/internal/mana_nng.hpp +++ b/src/internal/mana_nng.hpp @@ -41,14 +41,6 @@ class NngServerSink: public IManaSink { } - void init(int plugin_argc, const char **plugin_argv) override - { - (void)plugin_argc; - (void)plugin_argv; - } - - void shutdown() override {} - void begin_run(const char *descriptor_json) override { auto len = std::strlen(descriptor_json); diff --git a/src/mana_plugin_cpp_test.cc b/src/mana_plugin_cpp_test.cc index 4902b1b..95b2f29 100644 --- a/src/mana_plugin_cpp_test.cc +++ b/src/mana_plugin_cpp_test.cc @@ -7,16 +7,6 @@ using namespace mesytec::mnode::mana; class Sink: public IManaSink { public: - void init(int plugin_argc, const char **plugin_argv) override - { - (void)plugin_argc; - (void)plugin_argv; - log_set_level(LOG_INFO); - log_info("init: this=%p", this); - } - - void shutdown() override { log_info("shutdown: this=%p", this); } - void begin_run(const char *descriptor_json) override { (void)descriptor_json; diff --git a/src/tools/mana_auto_replay.cc b/src/tools/mana_auto_replay.cc index b063e8e..366e48a 100644 --- a/src/tools/mana_auto_replay.cc +++ b/src/tools/mana_auto_replay.cc @@ -441,7 +441,7 @@ int main(int argc, char *argv[]) if (auto entryPoint = pluginHandle.get("mana_get_sink_plugin")) { - destSink = std::make_unique(entryPoint()); + destSink = std::make_unique(entryPoint(), 0, nullptr); } } catch (const std::exception &e) @@ -526,13 +526,11 @@ int main(int argc, char *argv[]) auto run_replay = [&] { - mana.sink->init(0, nullptr); mana.sink->begin_run(mana.runDescriptor.dump().c_str()); replayStrategy->run(*listfileContext, *parserContext); mana.sink->end_run(mana.runDescriptor.dump().c_str()); - mana.sink->shutdown(); }; strategyName = "multi-threaded"; @@ -573,9 +571,7 @@ int main(int argc, char *argv[]) std::thread replayThread(run_replay); // FIXME: this is useless when running the client loop blocking like this std::atomic clientQuit = false; - destSink->init(0, nullptr); mana::nng_client_run(clientSocket, destSink, clientQuit); - destSink->shutdown(); if (replayThread.joinable()) replayThread.join(); fmt::print("Internal NngServerSink: {}\n", to_string(serverPerfSink->perf())); diff --git a/src/tools/mana_nng_client.cc b/src/tools/mana_nng_client.cc index ee18c22..53b0de9 100644 --- a/src/tools/mana_nng_client.cc +++ b/src/tools/mana_nng_client.cc @@ -61,28 +61,36 @@ int main(int argc, char *argv[]) try { - destSink = std::make_unique( - pluginHandle.get("mana_get_sink_plugin")()); + if (auto entryPoint = + pluginHandle.get("mana_get_sink_plugin")) + { + destSink = std::make_unique(entryPoint(), 0, nullptr); + } } catch (const std::exception &e) { - spdlog::debug("plugin {} is not a MANA_C_SINK_PLUGIN", pluginFile); - try + } + + if (!destSink) + { + if (auto entryPoint = pluginHandle.get("mana_get_plugin")) { - manaCppPlugin = std::unique_ptr( - pluginHandle.get("mana_get_plugin")()); + manaCppPlugin = std::unique_ptr(entryPoint()); + if (!manaCppPlugin) + throw std::runtime_error("plugin {}: mana_get_plugin() returned nullptr"); destSink = manaCppPlugin->makeSink(); } - catch (const std::exception &e) - { - std::cerr << fmt::format("Error loading plugin: {}\n", e.what()); - return 1; - } } } catch (const std::exception &e) { - std::cerr << fmt::format("Error loading plugin: {}\n", e.what()); + std::cerr << fmt::format("Error loading shared library {}: {}\n", pluginFile, e.what()); + return 1; + } + + if (!destSink) + { + std::cerr << fmt::format("Error: plugin {} does not provide a sink\n", pluginFile); return 1; } } @@ -103,29 +111,9 @@ int main(int argc, char *argv[]) spdlog::info("connected to {}", url); std::atomic quit = false; - manaSink->init(0, nullptr); run(socket, manaSink.get(), quit); - manaSink->shutdown(); - auto perf = manaSink->perf(); - { - auto totalBytes = std::accumulate(std::begin(perf.eventBytes), std::end(perf.eventBytes), - static_cast(0)); - auto totalHits = std::accumulate(std::begin(perf.eventHits), std::end(perf.eventHits), - static_cast(0)); - double elapsed_ms = - std::chrono::duration_cast(perf.t_endRun - perf.t_beginRun) - .count(); - double elapsed_s = elapsed_ms / 1000.0; - - double MiB = totalBytes / (1024.0 * 1024); - double MiB_s = MiB / elapsed_s; - double hit_s = totalHits / elapsed_s; - - fmt::print("Data Sink Performance: events={}, bytes={:.2f} MiB, elapsed={:.2f} s, " - "event_rate={:.2f} event/s, data_rate={:.2f} MiB/s\n", - totalHits, MiB, elapsed_s, hit_s, MiB_s); - } + fmt::print("Destination Sink: {}\n", to_string(manaSink->perf())); return 0; }