nut plugin: Added a plugin to query the `upsd' from the `network ups tools'.
[collectd.git] / src / plugin.h
index 93bf029..0164e9c 100644 (file)
@@ -7,8 +7,7 @@
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
+ * Free Software Foundation; only version 2 of the License is applicable.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
 #define DS_TYPE_COUNTER 0
 #define DS_TYPE_GAUGE   1
 
+#ifndef LOG_ERR
+# define LOG_ERR 3
+#endif
+#ifndef LOG_WARNING
+# define LOG_WARNING 4
+#endif
+#ifndef LOG_NOTICE
+# define LOG_NOTICE 5
+#endif
+#ifndef LOG_INFO
+# define LOG_INFO 6
+#endif
+#ifndef LOG_DEBUG
+# define LOG_DEBUG 7
+#endif
+
 /*
  * Public data types
  */
+enum modreg
+{
+       MR_EVERYTHING = 7,
+       MR_DATASETS   = 1,
+       MR_READ       = 2,
+       MR_WRITE      = 4
+};
+typedef enum modreg modreg_e;
+
 typedef unsigned long long counter_t;
 typedef double gauge_t;
 
@@ -45,12 +69,16 @@ struct value_list_s
 {
        value_t *values;
        int      values_len;
+       time_t   time;
+       char     host[DATA_MAX_NAME_LEN];
        char     plugin[DATA_MAX_NAME_LEN];
        char     plugin_instance[DATA_MAX_NAME_LEN];
        char     type_instance[DATA_MAX_NAME_LEN];
 };
 typedef struct value_list_s value_list_t;
 
+#define VALUE_LIST_INIT { NULL, 0, 0, "localhost", "", "", "" }
+
 struct data_source_s
 {
        char   name[DATA_MAX_NAME_LEN];
@@ -65,7 +93,6 @@ struct data_set_s
        char           type[DATA_MAX_NAME_LEN];
        int            ds_num;
        data_source_t *ds;
-       char          *filename;
 };
 typedef struct data_set_s data_set_t;
 
@@ -101,7 +128,8 @@ void plugin_set_dir (const char *dir);
  *  functions.
  *
  * ARGUMENTS
- *  `type'      Name of the plugin to load.
+ *  `name'      Name of the plugin to load.
+ *  `mr'        Types of functions to request from the plugin.
  *
  * RETURN VALUE
  *  Returns zero upon success, a value greater than zero if no plugin was found
@@ -110,7 +138,7 @@ void plugin_set_dir (const char *dir);
  * NOTES
  *  No attempt is made to re-load an already loaded module.
  */
-int  plugin_load (const char *name);
+int plugin_load (const char *name, modreg_e mr);
 
 void plugin_init_all (void);
 void plugin_read_all (const int *loop);
@@ -133,6 +161,16 @@ int plugin_register_write (const char *name,
 int plugin_register_shutdown (char *name,
                int (*callback) (void));
 int plugin_register_data_set (const data_set_t *ds);
+int plugin_register_log (char *name,
+               void (*callback) (int, const char *));
+
+int plugin_unregister_config (const char *name);
+int plugin_unregister_init (const char *name);
+int plugin_unregister_read (const char *name);
+int plugin_unregister_write (const char *name);
+int plugin_unregister_shutdown (const char *name);
+int plugin_unregister_data_set (const char *name);
+int plugin_unregister_log (const char *name);
 
 /*
  * NAME
@@ -151,8 +189,17 @@ int plugin_register_data_set (const data_set_t *ds);
  */
 int plugin_dispatch_values (const char *name, const value_list_t *vl);
 
+void plugin_log (int level, const char *format, ...);
+#define ERROR(...)   plugin_log (LOG_ERR,     __VA_ARGS__)
+#define WARNING(...) plugin_log (LOG_WARNING, __VA_ARGS__)
+#define NOTICE(...)  plugin_log (LOG_NOTICE,  __VA_ARGS__)
+#define INFO(...)    plugin_log (LOG_INFO,    __VA_ARGS__)
+#define DEBUG(...)   plugin_log (LOG_DEBUG,   __VA_ARGS__)
+
 /* TODO: Move plugin_{complain,relief} into `utils_complain.[ch]'. -octo */
 void plugin_complain (int level, complain_t *c, const char *format, ...);
 void plugin_relief (int level, complain_t *c, const char *format, ...);
 
+const data_set_t *plugin_get_ds (const char *name);
+
 #endif /* PLUGIN_H */