index e151b52ed17af64e0a8f902b8f012c975ebbce84..0f94ce34fd2ebe2fc550d872ad595bc69028093b 100644 (file)
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif /* HAVE_CONFIG_H */
+
#include "sysdb.h"
#include "core/plugin.h"
#include "core/store.h"
-#include "core/error.h"
+#include "utils/error.h"
#include "utils/unixsock.h"
#include "liboconfig/utils.h"
size_t n, sdb_data_t *data,
sdb_object_t __attribute__((unused)) *user_data)
{
- char *hostname = NULL;
- sdb_time_t timestamp = 0;
-
- sdb_host_t host = SDB_HOST_INIT;
+ const char *hostname;
+ sdb_time_t timestamp;
int status;
assert((data[0].type == SDB_TYPE_STRING)
&& (data[1].type == SDB_TYPE_DATETIME));
- hostname = strdup(data[0].data.string);
+ hostname = data[0].data.string;
timestamp = data[1].data.datetime;
- host._name = hostname;
- host._last_update = timestamp;
-
- status = sdb_store_host(&host);
+ status = sdb_store_host(hostname, timestamp);
if (status < 0) {
sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to "
"store/update host '%s'.", hostname);
- free(hostname);
return -1;
}
else if (status > 0) /* value too old */
return 0;
sdb_log(SDB_LOG_DEBUG, "MK Livestatus backend: Added/updated "
- "host '%s' (last update timestamp = %"PRIscTIME").",
+ "host '%s' (last update timestamp = %"PRIsdbTIME").",
hostname, timestamp);
- free(hostname);
return 0;
} /* sdb_livestatus_get_host */
size_t n, sdb_data_t *data,
sdb_object_t __attribute__((unused)) *user_data)
{
- char *hostname = NULL;
- char *svcname = NULL;
+ const char *hostname = NULL;
+ const char *svcname = NULL;
sdb_time_t timestamp = 0;
- sdb_service_t svc = SDB_SVC_INIT;
-
int status;
assert(n == 3);
&& (data[1].type == SDB_TYPE_STRING)
&& (data[2].type == SDB_TYPE_DATETIME));
- hostname = strdup(data[0].data.string);
- svcname = strdup(data[1].data.string);
+ hostname = data[0].data.string;
+ svcname = data[1].data.string;
timestamp = data[2].data.datetime;
- svc.hostname = hostname;
- svc._name = svcname;
- svc._last_update = timestamp;
-
- status = sdb_store_service(&svc);
+ status = sdb_store_service(hostname, svcname, timestamp);
if (status < 0) {
sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to "
"store/update service '%s / %s'.", hostname, svcname);
- free(hostname);
- free(svcname);
return -1;
}
else if (status > 0) /* value too old */
return 0;
sdb_log(SDB_LOG_DEBUG, "MK Livestatus backend: Added/updated "
- "service '%s / %s' (last update timestamp = %"PRIscTIME").",
+ "service '%s / %s' (last update timestamp = %"PRIsdbTIME").",
hostname, svcname, timestamp);
- free(hostname);
- free(svcname);
return 0;
} /* sdb_livestatus_get_svc */
return 0;
} /* sdb_livestatus_init */
+static int
+sdb_livestatus_shutdown(sdb_object_t *user_data)
+{
+ if (! user_data)
+ return -1;
+
+ sdb_unixsock_client_destroy(SDB_OBJ_WRAPPER(user_data)->data);
+ SDB_OBJ_WRAPPER(user_data)->data = NULL;
+ return 0;
+} /* sdb_livestatus_shutdown */
+
static int
sdb_livestatus_collect(sdb_object_t *user_data)
{
char *name = NULL;
char *socket_path = NULL;
- char cb_name[1024];
-
sdb_object_t *user_data;
sdb_unixsock_client_t *client;
return -1;
}
- snprintf(cb_name, sizeof(cb_name), "mk-livestatus::%s", name);
- cb_name[sizeof(cb_name) - 1] = '\0';
-
client = sdb_unixsock_client_create(socket_path);
if (! client) {
char errbuf[1024];
return -1;
}
- user_data = sdb_object_create_wrapper(client,
+ user_data = sdb_object_create_wrapper("unixsock-client", client,
(void (*)(void *))sdb_unixsock_client_destroy);
if (! user_data) {
sdb_unixsock_client_destroy(client);
return -1;
}
- sdb_plugin_register_init(cb_name, sdb_livestatus_init, user_data);
- sdb_plugin_register_collector(cb_name, sdb_livestatus_collect,
+ sdb_plugin_register_init(name, sdb_livestatus_init, user_data);
+ sdb_plugin_register_shutdown(name, sdb_livestatus_shutdown, user_data);
+ sdb_plugin_register_collector(name, sdb_livestatus_collect,
/* interval */ NULL, user_data);
/* pass control to the list */
{
int i;
+ if (! ci) /* nothing to do to deconfigure this plugin */
+ return 0;
+
for (i = 0; i < ci->children_num; ++i) {
oconfig_item_t *child = ci->children + i;
int
sdb_module_init(sdb_plugin_info_t *info)
{
- sdb_plugin_set_info(info, SDB_PLUGIN_INFO_NAME, "MK-Livestatus");
sdb_plugin_set_info(info, SDB_PLUGIN_INFO_DESC,
"backend accessing Nagios/Icinga/Shinken using MK Livestatus");
sdb_plugin_set_info(info, SDB_PLUGIN_INFO_COPYRIGHT,
sdb_plugin_set_info(info, SDB_PLUGIN_INFO_VERSION, SDB_VERSION);
sdb_plugin_set_info(info, SDB_PLUGIN_INFO_PLUGIN_VERSION, SDB_VERSION);
- sdb_plugin_register_config("mk-livestatus", sdb_livestatus_config);
+ sdb_plugin_register_config(sdb_livestatus_config);
return 0;
} /* sdb_version_extra */