Skip to content

Commit 5d3c93c

Browse files
committed
Core: redesigned plugin manager, added support to list all available plugins, split instance classes into multiple files based on their type
1 parent 1681f14 commit 5d3c93c

18 files changed

+2214
-1272
lines changed

src/core/CMakeLists.txt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,17 @@ set(CORE_SOURCE
44
configurator/config_file.hpp
55
configurator/configurator.cpp
66
configurator/configurator.hpp
7-
configurator/instance.cpp
87
configurator/instance.hpp
9-
configurator/plugin_finder.cpp
10-
configurator/plugin_finder.hpp
8+
configurator/instance_input.cpp
9+
configurator/instance_input.hpp
10+
configurator/instance_intermediate.cpp
11+
configurator/instance_intermediate.hpp
12+
configurator/instance_outmgr.cpp
13+
configurator/instance_outmgr.hpp
14+
configurator/instance_output.cpp
15+
configurator/instance_output.hpp
16+
configurator/plugin_mgr.cpp
17+
configurator/plugin_mgr.hpp
1118
configurator/model.cpp
1219
configurator/model.hpp
1320
api.c

src/core/configurator/configurator.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -183,18 +183,18 @@ ipx_configurator::start(const ipx_config_model &model)
183183

184184
// Phase 1. Create all instances (i.e. find plugins)
185185
for (const auto &output : model.outputs) {
186-
const ipx_plugin_data *data = finder.find(output.plugin, IPX_PT_OUTPUT);
187-
outputs.emplace_back(new ipx_instance_output(output.name, &data->cbs, ring_size));
186+
ipx_plugin_mgr::plugin_ref *ref = plugins.plugin_get(IPX_PT_OUTPUT, output.plugin);
187+
outputs.emplace_back(new ipx_instance_output(output.name, ref, ring_size));
188188
}
189189

190190
for (const auto &inter : model.inters) {
191-
const ipx_plugin_data *data = finder.find(inter.plugin, IPX_PT_INTERMEDIATE);
192-
inters.emplace_back(new ipx_instance_intermediate(inter.name, &data->cbs, ring_size));
191+
ipx_plugin_mgr::plugin_ref *ref = plugins.plugin_get(IPX_PT_INTERMEDIATE, inter.plugin);
192+
inters.emplace_back(new ipx_instance_intermediate(inter.name, ref, ring_size));
193193
}
194194

195195
for (const auto &input : model.inputs) {
196-
const ipx_plugin_data *data = finder.find(input.plugin, IPX_PT_INPUT);
197-
inputs.emplace_back(new ipx_instance_input(input.name, &data->cbs, ring_size));
196+
ipx_plugin_mgr::plugin_ref *ref = plugins.plugin_get(IPX_PT_INPUT, input.plugin);
197+
inputs.emplace_back(new ipx_instance_input(input.name, ref, ring_size));
198198
}
199199

200200
// Insert the output manager as the last intermediate plugin
@@ -210,9 +210,9 @@ ipx_configurator::start(const ipx_config_model &model)
210210
}
211211

212212
for (size_t i = 0; i < inters.size() - 1; ++i) { // Skip the last element
213-
ipx_instance_intermediate *now = inters[i].get();
214-
ipx_instance_intermediate *next = inters[i + 1].get();
215-
now->connect_to(*next);
213+
ipx_instance_intermediate *from = inters[i].get();
214+
ipx_instance_intermediate *to = inters[i + 1].get();
215+
from->connect_to(*to);
216216
}
217217

218218
for (size_t i = 0; i < model.outputs.size(); ++i) {
@@ -234,7 +234,7 @@ ipx_configurator::start(const ipx_config_model &model)
234234
instance->init(cfg.params, iemgr, verbosity_str2level(cfg.verbosity));
235235
}
236236

237-
output_manager->init("", iemgr, ipx_verb_level_get());
237+
output_manager->init(iemgr, ipx_verb_level_get());
238238
for (size_t i = 0; i < model.inters.size(); ++i) {
239239
ipx_instance_intermediate *instance = inters[i].get();
240240
const ipx_plugin_inter &cfg = model.inters[i];
@@ -249,7 +249,7 @@ ipx_configurator::start(const ipx_config_model &model)
249249

250250
IPX_DEBUG(comp_str, "All instances have been successfully initialized.", '\0');
251251

252-
// Start threads of all plugins
252+
// Phase 4. Start threads of all plugins
253253
for (auto &output : outputs) {
254254
output->start();
255255
}

src/core/configurator/configurator.hpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,13 @@
4545
#include <stdint.h>
4646
#include <vector>
4747
#include <memory>
48-
#include "plugin_finder.hpp"
48+
4949
#include "model.hpp"
50-
#include "instance.hpp"
50+
#include "instance_input.hpp"
51+
#include "instance_intermediate.hpp"
52+
#include "instance_outmgr.hpp"
53+
#include "instance_output.hpp"
54+
#include "plugin_mgr.hpp"
5155

5256
extern "C" {
5357
#include <ipfixcol2.h>
@@ -90,8 +94,8 @@ class ipx_configurator {
9094
ipx_configurator(const ipx_configurator &) = delete;
9195
ipx_configurator& operator=(const ipx_configurator &) = delete;
9296

93-
/** Modules finder */
94-
ipx_plugin_finder finder;
97+
/** Plugin manager */
98+
ipx_plugin_mgr plugins;
9599

96100
/**
97101
* \brief Start the configuration with a new model
@@ -123,5 +127,4 @@ class ipx_configurator {
123127
void set_buffer_size(uint32_t size);
124128
};
125129

126-
127130
#endif //IPFIXCOL_CONFIGURATOR_H

0 commit comments

Comments
 (0)