void module_register (void) { plugin_register_config ("logfile", logfile_config, config_keys, config_keys_num); plugin_register_log ("logfile", logfile_log); plugin_register_notification ("logfile", logfile_notification); } /* void module_register (void) */
void module_register (void) { plugin_register_init ("notify_email", notify_email_init); plugin_register_shutdown ("notify_email", notify_email_shutdown); plugin_register_config ("notify_email", notify_email_config, config_keys, config_keys_num); plugin_register_notification ("notify_email", notify_email_notification); } /* void module_register (void) */
static int riemann_config_node(oconfig_item_t *ci) { struct riemann_host *host = NULL; int status = 0; int i; oconfig_item_t *child; char callback_name[DATA_MAX_NAME_LEN]; user_data_t ud; if ((host = calloc(1, sizeof (*host))) == NULL) { ERROR ("write_riemann plugin: calloc failed."); return ENOMEM; } pthread_mutex_init (&host->lock, NULL); host->reference_count = 1; host->node = NULL; host->service = NULL; host->store_rates = 1; host->always_append_ds = 0; host->use_tcp = 0; status = cf_util_get_string (ci, &host->name); if (status != 0) { WARNING("write_riemann plugin: Required host name is missing."); riemann_free (host); return -1; } for (i = 0; i < ci->children_num; i++) { /* * The code here could be simplified but makes room * for easy adding of new options later on. */ child = &ci->children[i]; status = 0; if (strcasecmp ("Host", child->key) == 0) { status = cf_util_get_string (child, &host->node); if (status != 0) break; } else if (strcasecmp ("Port", child->key) == 0) { status = cf_util_get_service (child, &host->service); if (status != 0) { ERROR ("write_riemann plugin: Invalid argument " "configured for the \"Port\" " "option."); break; } } else if (strcasecmp ("Protocol", child->key) == 0) { char tmp[16]; status = cf_util_get_string_buffer (child, tmp, sizeof (tmp)); if (status != 0) { ERROR ("write_riemann plugin: cf_util_get_" "string_buffer failed with " "status %i.", status); break; } if (strcasecmp ("UDP", tmp) == 0) host->use_tcp = 0; else if (strcasecmp ("TCP", tmp) == 0) host->use_tcp = 1; else WARNING ("write_riemann plugin: The value " "\"%s\" is not valid for the " "\"Protocol\" option. Use " "either \"UDP\" or \"TCP\".", tmp); } else if (strcasecmp ("StoreRates", child->key) == 0) { status = cf_util_get_boolean (child, &host->store_rates); if (status != 0) break; } else if (strcasecmp ("AlwaysAppendDS", child->key) == 0) { status = cf_util_get_boolean (child, &host->always_append_ds); if (status != 0) break; } else { WARNING("write_riemann plugin: ignoring unknown config " "option: \"%s\"", child->key); } } if (status != 0) { riemann_free (host); return status; } ssnprintf (callback_name, sizeof (callback_name), "write_riemann/%s", host->name); ud.data = host; ud.free_func = riemann_free; pthread_mutex_lock (&host->lock); status = plugin_register_write (callback_name, riemann_write, &ud); if (status != 0) WARNING ("write_riemann plugin: plugin_register_write (\"%s\") " "failed with status %i.", callback_name, status); else /* success */ host->reference_count++; status = plugin_register_notification (callback_name, riemann_notification, &ud); if (status != 0) WARNING ("write_riemann plugin: plugin_register_notification (\"%s\") " "failed with status %i.", callback_name, status); else /* success */ host->reference_count++; if (host->reference_count <= 1) { /* Both callbacks failed => free memory. * We need to unlock here, because riemann_free() will lock. * This is not a race condition, because we're the only one * holding a reference. */ pthread_mutex_unlock (&host->lock); riemann_free (host); return (-1); } host->reference_count--; pthread_mutex_unlock (&host->lock); return status; }