/* nebmod_init(), but loaded even if no modules are */ int nerd_init(void) { nerd_mod.deinit_func = nerd_deinit; nerd_mod.filename = (char *)"NERD"; /* something to log */ if(qh_register_handler("nerd", "Nagios Event Radio Dispatcher - Subscriber Service", 0, nerd_qh_handler) < 0) { logit(NSLOG_RUNTIME_ERROR, TRUE, "nerd: Failed to register with query handler\n"); return ERROR; } neb_add_core_module(&nerd_mod); chan_host_checks_id = nerd_mkchan("hostchecks", "Host check results", chan_host_checks, nebcallback_flag(NEBCALLBACK_HOST_CHECK_DATA)); chan_service_checks_id = nerd_mkchan("servicechecks", "Service check results", chan_service_checks, nebcallback_flag(NEBCALLBACK_SERVICE_CHECK_DATA)); chan_opath_checks_id = nerd_mkchan("opathchecks", "Host and service checks in gource's log format", chan_opath_checks, nebcallback_flag(NEBCALLBACK_HOST_CHECK_DATA) | nebcallback_flag(NEBCALLBACK_SERVICE_CHECK_DATA)); logit(NSLOG_INFO_MESSAGE, TRUE, "nerd: Fully initialized and ready to rock!\n"); return 0; }
int qh_init(const char *path) { int result, old_umask; if (qh_listen_sock >= 0) iobroker_close(nagios_iobs, qh_listen_sock); if (!path) { nm_log(NSLOG_RUNTIME_ERROR, "qh: query_socket is NULL. What voodoo is this?\n"); return ERROR; } old_umask = umask(0117); errno = 0; qh_listen_sock = nsock_unix(path, NSOCK_TCP | NSOCK_UNLINK); umask(old_umask); if (qh_listen_sock < 0) { nm_log(NSLOG_RUNTIME_ERROR, "qh: Failed to init socket '%s'. %s: %s\n", path, nsock_strerror(qh_listen_sock), strerror(errno)); return ERROR; } /* plugins shouldn't have this socket */ (void)fcntl(qh_listen_sock, F_SETFD, FD_CLOEXEC); /* most likely overkill, but it's small, so... */ qh_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify) qh_remove); errno = 0; result = iobroker_register(nagios_iobs, qh_listen_sock, NULL, qh_registration_input); if (result < 0) { g_hash_table_destroy(qh_table); close(qh_listen_sock); nm_log(NSLOG_RUNTIME_ERROR, "qh: Failed to register socket with io broker: %s\n", iobroker_strerror(result)); return ERROR; } nm_log(NSLOG_INFO_MESSAGE, "qh: Socket '%s' successfully initialized\n", path); /* now register our the in-core handlers */ qh_register_handler("command", "Naemon external commands interface", 0, qh_command); qh_register_handler("echo", "The Echo Service - What You Put Is What You Get", 0, qh_echo); qh_register_handler("help", "Help for the query handler", 0, qh_help); return 0; }
/* this function gets called when the module is loaded by the event broker */ int nebmodule_init(int flags, char* args, nebmodule* handle) { (void)flags; (void)args; (void)handle; return qh_register_handler("nagioseasier", "The nagioseasier query handler", 0, nagioseasier_query_handler); }
int init_workers(int desired_workers) { specialized_workers = dkhash_create(512); if (!specialized_workers) { logit(NSLOG_RUNTIME_ERROR, TRUE, "wproc: Failed to allocate specialized worker table.\n"); return -1; } /* Register our query handler before launching workers, so other workers * can join us whenever they're ready. */ if (!qh_register_handler("wproc", "Worker process management and info", 0, wproc_query_handler)) logit(NSLOG_INFO_MESSAGE, TRUE, "wproc: Successfully registered manager as @wproc with query handler\n"); else logit(NSLOG_RUNTIME_ERROR, TRUE, "wproc: Failed to register manager with query handler\n"); if (desired_workers <= 0) { int cpus = online_cpus(); /* Always at least 1 CPU. */ if (desired_workers < 0) { /* @note This is an undocumented case of questionable utility, and * should be removed. Users reading this note have been warned. */ desired_workers = cpus - desired_workers; /* desired_workers is now > 0. */ } else { desired_workers = cpus * 1.5; if (desired_workers < 4) { /* Use at least 4 workers when autocalculating so we have some * level of parallelism. */ desired_workers = 4; } else if (desired_workers > 48) { /* Limit the autocalculated workers so we don't spawn too many * on systems with many schedulable cores (>32). */ desired_workers = 48; } } } wproc_num_workers_desired = desired_workers; if (workers_alive() == desired_workers) return 0; /* can't shrink the number of workers (yet) */ if (desired_workers < (int)workers.len) return -1; while (desired_workers-- > 0) spawn_core_worker(); return 0; }
int init_workers(int desired_workers) { int i; /* * we register our query handler before launching workers, * so other workers can join us whenever they're ready */ specialized_workers = dkhash_create(512); if(!qh_register_handler("wproc", "Worker process management and info", 0, wproc_query_handler)) logit(NSLOG_INFO_MESSAGE, TRUE, "wproc: Successfully registered manager as @wproc with query handler\n"); else logit(NSLOG_RUNTIME_ERROR, TRUE, "wproc: Failed to register manager with query handler\n"); i = desired_workers; if (desired_workers <= 0) { int cpus = online_cpus(); if(desired_workers < 0) { desired_workers = cpus - desired_workers; } if(desired_workers <= 0) { desired_workers = cpus * 1.5; /* min 4 workers, as it's tested and known to work */ if(desired_workers < 4) desired_workers = 4; } } wproc_num_workers_desired = desired_workers; if (workers_alive() == desired_workers) return 0; /* can't shrink the number of workers (yet) */ if (desired_workers < (int)workers.len) return -1; for (i = 0; i < desired_workers; i++) spawn_core_worker(); return 0; }