diff options
author | Costa Tsaousis <costa@tsaousis.gr> | 2016-05-28 15:57:13 +0300 |
---|---|---|
committer | Costa Tsaousis <costa@tsaousis.gr> | 2016-05-29 13:24:08 +0300 |
commit | 4f63fa6fe9ed7e508f0f74bc014200ae97aba1ca (patch) | |
tree | 9a5fefd40b8bf921e09d081784a6f55ea5e55124 /src/main.c | |
parent | 900e280a367724c258674d794f917c88f27f7f6f (diff) |
added single threaded web server
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 65 |
1 files changed, 29 insertions, 36 deletions
diff --git a/src/main.c b/src/main.c index d6d2579b28..b988f0dece 100644 --- a/src/main.c +++ b/src/main.c @@ -70,26 +70,38 @@ struct netdata_static_thread { void (*init_routine) (void); void *(*start_routine) (void *); -}; - -struct netdata_static_thread static_threads[] = { - {"tc", "plugins", "tc", 1, NULL, NULL, tc_main}, - {"idlejitter", "plugins", "idlejitter", 1, NULL, NULL, cpuidlejitter_main}, - {"proc", "plugins", "proc", 1, NULL, NULL, proc_main}, - {"cgroups", "plugins", "cgroups", 1, NULL, NULL, cgroups_main}, - +} static_threads[] = { #ifdef INTERNAL_PLUGIN_NFACCT - // nfacct requires root access +// nfacct requires root access // so, we build it as an external plugin with setuid to root - {"nfacct", "plugins", "nfacct", 1, NULL, NULL, nfacct_main}, + {"nfacct", "plugins", "nfacct", 1, NULL, NULL, nfacct_main}, #endif - {"plugins.d", NULL, NULL, 1, NULL, NULL, pluginsd_main}, - {"check", "plugins", "checks", 0, NULL, NULL, checks_main}, - {"web", NULL, NULL, 1, NULL, NULL, socket_listen_main}, - {NULL, NULL, NULL, 0, NULL, NULL, NULL} + {"tc", "plugins", "tc", 1, NULL, NULL, tc_main}, + {"idlejitter", "plugins", "idlejitter", 1, NULL, NULL, cpuidlejitter_main}, + {"proc", "plugins", "proc", 1, NULL, NULL, proc_main}, + {"cgroups", "plugins", "cgroups", 1, NULL, NULL, cgroups_main}, + {"plugins.d", NULL, NULL, 1, NULL, NULL, pluginsd_main}, + {"check", "plugins", "checks", 0, NULL, NULL, checks_main}, + {"web", NULL, NULL, 1, NULL, NULL, socket_listen_main_multi_threaded}, + {"web-single-threaded", NULL, NULL, 0, NULL, NULL, socket_listen_main_single_threaded}, + {NULL, NULL, NULL, 0, NULL, NULL, NULL} }; +void web_server_threading_selection(void) { + int threaded = config_get_boolean("global", "multi threaded web server", 1); + + int i; + for(i = 0; static_threads[i].name ; i++) { + if(static_threads[i].start_routine == socket_listen_main_multi_threaded) + static_threads[i].enabled = threaded?1:0; + + if(static_threads[i].start_routine == socket_listen_main_single_threaded) + static_threads[i].enabled = threaded?0:1; + } +} + + int killpid(pid_t pid, int sig) { int ret = -1; @@ -591,28 +603,7 @@ int main(int argc, char **argv) // -------------------------------------------------------------------- - listen_backlog = (int) config_get_number("global", "http port listen backlog", LISTEN_BACKLOG); - - listen_port = (int) config_get_number("global", "port", LISTEN_PORT); - if(listen_port < 1 || listen_port > 65535) { - info("Invalid listen port %d given. Defaulting to %d.", listen_port, LISTEN_PORT); - listen_port = LISTEN_PORT; - } - else debug(D_OPTIONS, "Listen port set to %d.", listen_port); - - int ip = 0; - char *ipv = config_get("global", "ip version", "any"); - if(!strcmp(ipv, "any") || !strcmp(ipv, "both") || !strcmp(ipv, "all")) ip = 0; - else if(!strcmp(ipv, "ipv4") || !strcmp(ipv, "IPV4") || !strcmp(ipv, "IPv4") || !strcmp(ipv, "4")) ip = 4; - else if(!strcmp(ipv, "ipv6") || !strcmp(ipv, "IPV6") || !strcmp(ipv, "IPv6") || !strcmp(ipv, "6")) ip = 6; - else info("Cannot understand ip version '%s'. Assuming 'any'.", ipv); - - if(ip == 0 || ip == 6) listen_fd = create_listen_socket6(config_get("global", "bind socket to IP", "*"), listen_port, listen_backlog); - if(listen_fd < 0) { - listen_fd = create_listen_socket4(config_get("global", "bind socket to IP", "*"), listen_port, listen_backlog); - if(listen_fd >= 0 && ip != 4) info("Managed to open an IPv4 socket on port %d.", listen_port); - } - + listen_fd = create_listen_socket(); if(listen_fd < 0) fatal("Cannot listen socket."); } @@ -656,6 +647,8 @@ int main(int argc, char **argv) // ------------------------------------------------------------------------ // spawn the threads + web_server_threading_selection(); + for (i = 0; static_threads[i].name != NULL ; i++) { struct netdata_static_thread *st = &static_threads[i]; |