33 #include "configfile.h"
34 #include "meta_data.h"
35 #include "utils_time.h"
40 #define DS_TYPE_COUNTER 0
41 #define DS_TYPE_GAUGE 1
42 #define DS_TYPE_DERIVE 2
43 #define DS_TYPE_ABSOLUTE 3
45 #define DS_TYPE_TO_STRING(t) \
46 (t == DS_TYPE_COUNTER) \
48 : (t == DS_TYPE_GAUGE) \
50 : (t == DS_TYPE_DERIVE) \
52 : (t == DS_TYPE_ABSOLUTE) ? "absolute" : "unknown"
70 #define NOTIF_MAX_MSG_LEN 256
72 #define NOTIF_FAILURE 1
73 #define NOTIF_WARNING 2
76 #define plugin_interval (plugin_get_ctx().interval)
84 char *plugin_instance;
90 typedef unsigned long long counter_t;
91 typedef double gauge_t;
92 typedef int64_t derive_t;
93 typedef uint64_t absolute_t;
108 char host[DATA_MAX_NAME_LEN];
109 char plugin[DATA_MAX_NAME_LEN];
110 char plugin_instance[DATA_MAX_NAME_LEN];
111 char type[DATA_MAX_NAME_LEN];
112 char type_instance[DATA_MAX_NAME_LEN];
117 #define VALUE_LIST_INIT \
118 { .values = NULL, .meta = NULL }
121 char name[DATA_MAX_NAME_LEN];
129 char type[DATA_MAX_NAME_LEN];
135 enum notification_meta_type_e {
138 NM_TYPE_UNSIGNED_INT,
144 char name[DATA_MAX_NAME_LEN];
145 enum notification_meta_type_e type;
147 const char *nm_string;
148 int64_t nm_signed_int;
149 uint64_t nm_unsigned_int;
159 char message[NOTIF_MAX_MSG_LEN];
160 char host[DATA_MAX_NAME_LEN];
161 char plugin[DATA_MAX_NAME_LEN];
162 char plugin_instance[DATA_MAX_NAME_LEN];
163 char type[DATA_MAX_NAME_LEN];
164 char type_instance[DATA_MAX_NAME_LEN];
170 void (*free_func)(
void *);
174 enum cache_event_type_e { CE_VALUE_NEW, CE_VALUE_UPDATE, CE_VALUE_EXPIRED };
177 enum cache_event_type_e type;
179 const char *value_list_name;
186 cdtime_t flush_interval;
187 cdtime_t flush_timeout;
194 typedef int (*plugin_init_cb)(void);
198 typedef int (*plugin_flush_cb)(cdtime_t timeout,
const char *identifier,
209 typedef void (*plugin_log_cb)(
int severity,
const char *message,
user_data_t *);
210 typedef int (*plugin_shutdown_cb)(void);
225 void plugin_set_dir(
const char *dir);
249 int plugin_load(
const char *name,
bool global);
250 bool plugin_is_loaded(
char const *name);
252 int plugin_init_all(
void);
253 void plugin_read_all(
void);
254 int plugin_read_all_once(
void);
255 int plugin_shutdown_all(
void);
284 int plugin_write(
const char *plugin,
const data_set_t *ds,
287 int plugin_flush(
const char *plugin, cdtime_t timeout,
const char *identifier);
294 int plugin_register_config(
const char *name,
295 int (*callback)(
const char *key,
const char *val),
296 const char **keys,
int keys_num);
297 int plugin_register_complex_config(
const char *type,
299 int plugin_register_init(
const char *name, plugin_init_cb callback);
300 int plugin_register_read(
const char *name,
int (*callback)(
void));
303 int plugin_register_complex_read(
const char *group,
const char *name,
304 plugin_read_cb callback, cdtime_t interval,
306 int plugin_register_write(
const char *name, plugin_write_cb callback,
308 int plugin_register_flush(
const char *name, plugin_flush_cb callback,
310 int plugin_register_missing(
const char *name, plugin_missing_cb callback,
312 int plugin_register_cache_event(
const char *name,
313 plugin_cache_event_cb callback,
315 int plugin_register_shutdown(
const char *name, plugin_shutdown_cb callback);
316 int plugin_register_data_set(
const data_set_t *ds);
317 int plugin_register_log(
const char *name, plugin_log_cb callback,
319 int plugin_register_notification(
const char *name,
320 plugin_notification_cb callback,
323 int plugin_unregister_config(
const char *name);
324 int plugin_unregister_complex_config(
const char *name);
325 int plugin_unregister_init(
const char *name);
326 int plugin_unregister_read(
const char *name);
327 int plugin_unregister_read_group(
const char *group);
328 int plugin_unregister_write(
const char *name);
329 int plugin_unregister_flush(
const char *name);
330 int plugin_unregister_missing(
const char *name);
331 int plugin_unregister_cache_event(
const char *name);
332 int plugin_unregister_shutdown(
const char *name);
333 int plugin_unregister_data_set(
const char *name);
334 int plugin_unregister_log(
const char *name);
335 int plugin_unregister_notification(
const char *name);
347 void plugin_log_available_writers(
void);
398 bool store_percentage,
399 int store_type, ...);
402 void plugin_dispatch_cache_event(
enum cache_event_type_e event_type,
403 unsigned long callbacks_mask,
const char *name,
408 void plugin_log(
int level,
const char *format, ...)
409 __attribute__((format(printf, 2, 3)));
412 int parse_log_severity(const
char *severity);
413 int parse_notif_severity(const
char *severity);
415 #define ERROR(...) plugin_log(LOG_ERR, __VA_ARGS__)
416 #define WARNING(...) plugin_log(LOG_WARNING, __VA_ARGS__)
417 #define NOTICE(...) plugin_log(LOG_NOTICE, __VA_ARGS__)
418 #define INFO(...) plugin_log(LOG_INFO, __VA_ARGS__)
420 #define DEBUG(...) plugin_log(LOG_DEBUG, __VA_ARGS__)
426 void daemon_log(
int level,
const char *format, ...)
427 __attribute__((format(printf, 2, 3)));
429 #define P_ERROR(...) daemon_log(LOG_ERR, __VA_ARGS__)
430 #define P_WARNING(...) daemon_log(LOG_WARNING, __VA_ARGS__)
431 #define P_NOTICE(...) daemon_log(LOG_NOTICE, __VA_ARGS__)
432 #define P_INFO(...) daemon_log(LOG_INFO, __VA_ARGS__)
434 const data_set_t *plugin_get_ds(
const char *name);
436 int plugin_notification_meta_add_string(
notification_t *n,
const char *name,
438 int plugin_notification_meta_add_signed_int(
notification_t *n,
const char *name,
441 const char *name, uint64_t value);
442 int plugin_notification_meta_add_double(
notification_t *n,
const char *name,
444 int plugin_notification_meta_add_boolean(
notification_t *n,
const char *name,
456 void plugin_init_ctx(
void);
470 cdtime_t plugin_get_interval(
void);
476 int plugin_thread_create(pthread_t *thread,
void *(*start_routine)(
void *),
477 void *arg,
char const *name);
483 void module_register(
void);