Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
plugin_api.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
5#pragma once
6
52#ifdef __cplusplus
53extern "C" {
54#endif
55
56// Plugin API version (increment on breaking changes)
57#define PLUGIN_API_VERSION 1
58
59// Platform-specific export macro
60#if defined(_WIN32) || defined(_WIN64)
61 #define PLUGIN_EXPORT __declspec(dllexport)
62#elif defined(__GNUC__) || defined(__clang__)
63 #define PLUGIN_EXPORT __attribute__((visibility("default")))
64#else
65 #define PLUGIN_EXPORT
66#endif
67
68// Forward declaration for collector_plugin
69// Actual definition is in collector_plugin.h (C++ header)
70namespace kcenon { namespace monitoring { class collector_plugin; } }
71
79typedef struct plugin_api_metadata {
82
84 const char* name;
85
87 const char* version;
88
90 const char* description;
91
93 const char* author;
94
96 const char* category;
98
111typedef kcenon::monitoring::collector_plugin* (*create_plugin_fn)(void);
112
124
135typedef const plugin_api_metadata* (*get_plugin_info_fn)(void);
136
140#define CREATE_PLUGIN_FN_NAME "create_plugin"
141#define DESTROY_PLUGIN_FN_NAME "destroy_plugin"
142#define GET_PLUGIN_INFO_FN_NAME "get_plugin_info"
143
160#ifdef __cplusplus
161#define IMPLEMENT_PLUGIN(PluginClass, Name, Version, Description, Author, Category) \
162 extern "C" { \
163 PLUGIN_EXPORT struct collector_plugin* create_plugin() { \
164 return new PluginClass(); \
165 } \
166 \
167 PLUGIN_EXPORT void destroy_plugin(struct collector_plugin* plugin) { \
168 delete plugin; \
169 } \
170 \
171 PLUGIN_EXPORT const plugin_api_metadata* get_plugin_info() { \
172 static plugin_api_metadata metadata = { \
173 PLUGIN_API_VERSION, \
174 Name, \
175 Version, \
176 Description, \
177 Author, \
178 Category \
179 }; \
180 return &metadata; \
181 } \
182 }
183#endif
184
185#ifdef __cplusplus
186}
187#endif
Pure virtual interface for metric collector plugins.
struct plugin_api_metadata plugin_api_metadata
void(* destroy_plugin_fn)(kcenon::monitoring::collector_plugin *plugin)
Destroy a plugin instance.
Definition plugin_api.h:123
Plugin API metadata information.
Definition plugin_api.h:79
const char * version
Definition plugin_api.h:87
const char * description
Definition plugin_api.h:90
const char * name
Definition plugin_api.h:84
const char * author
Definition plugin_api.h:93
const char * category
Definition plugin_api.h:96