consumerd: register threads to health monitoring
[lttng-tools.git] / src / bin / lttng-consumerd / lttng-consumerd.c
index edf1f152f44a5d229fee090fd5b34c5d1146413b..e33a470f59268e6c3f33f09c72e506930ae859fd 100644 (file)
@@ -49,6 +49,7 @@
 #include <common/sessiond-comm/sessiond-comm.h>
 
 #include "lttng-consumerd.h"
+#include "health-consumerd.h"
 
 /* TODO : support UST (all direct kernel-ctl accesses). */
 
@@ -72,6 +73,9 @@ static enum lttng_consumer_type opt_type = LTTNG_CONSUMER_KERNEL;
 /* the liblttngconsumerd context */
 static struct lttng_consumer_local_data *ctx;
 
+/* Consumerd health monitoring */
+struct health_app *health_consumerd;
+
 /*
  * Signal handler for the daemon
  */
@@ -325,6 +329,11 @@ int main(int argc, char **argv)
                set_ulimit();
        }
 
+       health_consumerd = health_app_create(NR_HEALTH_CONSUMERD_TYPES);
+       if (!health_consumerd) {
+               goto error;
+       }
+
        /* create the consumer instance with and assign the callbacks */
        ctx = lttng_consumer_create(opt_type, lttng_consumer_read_subbuffer,
                NULL, lttng_consumer_on_recv_stream, NULL);
@@ -367,19 +376,16 @@ int main(int argc, char **argv)
        lttng_consumer_set_error_sock(ctx, ret);
 
        /*
-        * For UST consumer, we block RT signals used for periodical metadata flush
-        * in main and create a dedicated thread to handle these signals.
+        * Block RT signals used for UST periodical metadata flush and the live
+        * timer in main, and create a dedicated thread to handle these signals.
         */
-       switch (opt_type) {
-       case LTTNG_CONSUMER32_UST:
-       case LTTNG_CONSUMER64_UST:
-               consumer_signal_init();
-               break;
-       default:
-               break;
-       }
+       consumer_signal_init();
+
        ctx->type = opt_type;
 
+       /* Initialize communication library */
+       lttcomm_init();
+
        /* Create thread to manage channels */
        ret = pthread_create(&channel_thread, NULL, consumer_thread_channel_poll,
                        (void *) ctx);
@@ -412,25 +418,21 @@ int main(int argc, char **argv)
                goto sessiond_error;
        }
 
-       switch (opt_type) {
-       case LTTNG_CONSUMER32_UST:
-       case LTTNG_CONSUMER64_UST:
-               /* Create the thread to manage the metadata periodic timers */
-               ret = pthread_create(&metadata_timer_thread, NULL,
-                               consumer_timer_metadata_thread, (void *) ctx);
-               if (ret != 0) {
-                       perror("pthread_create");
-                       goto metadata_timer_error;
-               }
+       /*
+        * Create the thread to manage the UST metadata periodic timer and
+        * live timer.
+        */
+       ret = pthread_create(&metadata_timer_thread, NULL,
+                       consumer_timer_thread, (void *) ctx);
+       if (ret != 0) {
+               perror("pthread_create");
+               goto metadata_timer_error;
+       }
 
-               ret = pthread_detach(metadata_timer_thread);
-               if (ret) {
-                       errno = ret;
-                       perror("pthread_detach");
-               }
-               break;
-       default:
-               break;
+       ret = pthread_detach(metadata_timer_thread);
+       if (ret) {
+               errno = ret;
+               perror("pthread_detach");
        }
 
 metadata_timer_error:
@@ -469,11 +471,16 @@ metadata_error:
 
 error:
        ret = EXIT_FAILURE;
-       lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_EXIT_FAILURE);
+       if (ctx) {
+               lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_EXIT_FAILURE);
+       }
 
 end:
        lttng_consumer_destroy(ctx);
        lttng_consumer_cleanup();
+       if (health_consumerd) {
+               health_app_destroy(health_consumerd);
+       }
 
        return ret;
 }
This page took 0.025618 seconds and 5 git commands to generate.