supervision: Add supervision and supervisor
[src/app-framework-binder.git] / src / main.c
index 150b781..c05556d 100644 (file)
@@ -54,6 +54,7 @@
 #include "sd-fds.h"
 #include "afb-debug.h"
 #include "process-name.h"
+#include "afb-supervision.h"
 
 /*
    if SELF_PGROUP == 0 the launched command is the group leader
@@ -535,7 +536,7 @@ static void run_startup_calls()
  | job for starting the daemon
  +--------------------------------------------------------- */
 
-static void start(int signum)
+static void start(int signum, void *arg)
 {
        struct afb_hsrv *hsrv;
 
@@ -546,12 +547,6 @@ static void start(int signum)
                exit(1);
        }
 
-       // ------------------ sanity check ----------------------------------------
-       if (config->httpdPort <= 0) {
-               ERROR("no port is defined");
-               goto error;
-       }
-
        /* set the directories */
        mkdir(config->workdir, S_IRWXU | S_IRGRP | S_IXGRP);
        if (chdir(config->workdir) < 0) {
@@ -564,9 +559,8 @@ static void start(int signum)
        }
 
        /* configure the daemon */
-       afb_session_init(config->nbSessionMax, config->cntxTimeout, config->token);
-       if (!afb_hreq_init_cookie(config->httpdPort, config->rootapi, config->cntxTimeout)) {
-               ERROR("initialisation of cookies failed");
+       if (afb_session_init(config->nbSessionMax, config->cntxTimeout, config->token)) {
+               ERROR("initialisation of session manager failed");
                goto error;
        }
        main_apiset = afb_apiset_create("main", config->apiTimeout);
@@ -578,6 +572,10 @@ static void start(int signum)
                ERROR("failed to setup monitor");
                goto error;
        }
+       if (afb_supervision_init() < 0) {
+               ERROR("failed to setup supervision");
+               goto error;
+       }
 
        /* install hooks */
        if (config->tracereq)
@@ -593,7 +591,7 @@ static void start(int signum)
        afb_debug("start-load");
        apiset_start_list(config->so_bindings, afb_api_so_add_binding, "the binding");
        apiset_start_list(config->dbus_clients, afb_api_dbus_add_client, "the afb-dbus client");
-       apiset_start_list(config->ws_clients, afb_api_ws_add_client, "the afb-websocket client");
+       apiset_start_list(config->ws_clients, afb_api_ws_add_client_weak, "the afb-websocket client");
        apiset_start_list(config->ldpaths, afb_api_so_add_pathset_fails, "the binding path set");
        apiset_start_list(config->weak_ldpaths, afb_api_so_add_pathset_nofails, "the weak binding path set");
 
@@ -613,6 +611,16 @@ static void start(int signum)
        /* start the HTTP server */
        afb_debug("start-http");
        if (!config->noHttpd) {
+               if (config->httpdPort <= 0) {
+                       ERROR("no port is defined");
+                       goto error;
+               }
+
+               if (!afb_hreq_init_cookie(config->httpdPort, config->rootapi, config->cntxTimeout)) {
+                       ERROR("initialisation of HTTP cookies failed");
+                       goto error;
+               }
+
                hsrv = start_http_server();
                if (hsrv == NULL)
                        goto error;
@@ -674,7 +682,7 @@ int main(int argc, char *argv[])
        afb_debug("main-start");
 
        /* enter job processing */
-       jobs_start(3, 0, 50, start);
+       jobs_start(3, 0, 50, start, NULL);
        WARNING("hoops returned from jobs_enter! [report bug]");
        return 1;
 }