From d74df4226a1b4461c896d51a221afe38e07809a7 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 30 Sep 2013 17:34:19 -0400 Subject: [PATCH] health check API Signed-off-by: Mathieu Desnoyers --- include/Makefile.am | 1 + include/lttng/health-internal.h | 8 ++ include/lttng/health.h | 125 ++++++++++++++++++++++++++++++++ include/lttng/lttng.h | 3 +- 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 include/lttng/health.h diff --git a/include/Makefile.am b/include/Makefile.am index 15479d4a7..e813575a7 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,4 +1,5 @@ lttnginclude_HEADERS = \ + lttng/health.h \ lttng/lttng.h \ lttng/lttng-error.h \ lttng/snapshot.h diff --git a/include/lttng/health-internal.h b/include/lttng/health-internal.h index f4270647f..3ad25d826 100644 --- a/include/lttng/health-internal.h +++ b/include/lttng/health-internal.h @@ -25,6 +25,7 @@ #include #include #include +#include /* * These are the value added to the current state depending of the position in @@ -72,6 +73,13 @@ struct health_comm_reply { uint32_t ret_code; } LTTNG_PACKED; +/* + * Status returned to lttng clients. + */ +struct lttng_health_status { + uint64_t error_threads_bitmask; +}; + /* Declare TLS health state. */ extern DECLARE_URCU_TLS(struct health_state, health_state); diff --git a/include/lttng/health.h b/include/lttng/health.h new file mode 100644 index 000000000..477cb3d28 --- /dev/null +++ b/include/lttng/health.h @@ -0,0 +1,125 @@ +#ifndef LTTNG_HEALTH_H +#define LTTNG_HEALTH_H + +/* + * Copyright (C) 2012 - David Goulet + * Copyright (C) 2013 - Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License, version 2.1 only, + * as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +struct lttng_health; +struct lttng_health_thread; + +enum lttng_health_consumerd { + LTTNG_HEALTH_CONSUMERD_UST_32, + LTTNG_HEALTH_CONSUMERD_UST_64, + LTTNG_HEALTH_CONSUMERD_KERNEL, +}; + +/** + * lttng_health_create_sessiond - Create sessiond health object + * + * Return a newly allocated health object, or NULL on error. + */ +struct lttng_health *lttng_health_create_sessiond(void); + +/** + * lttng_health_create_consumerd - Create consumerd health object + * @consumerd: consumer daemon identifier + * + * Return a newly allocated health object, or NULL on error. + */ +struct lttng_health * + lttng_health_create_consumerd(enum lttng_health_consumerd consumerd); + +/** + * lttng_health_create_relayd - Create relayd health object + * @path: path to relay daemon health socket. + * + * "path" needs to refer to a local unix socket file matching the file + * used by the relay daemon to query. + * + * Return a newly allocated health object, or NULL on error. + */ +struct lttng_health *lttng_health_create_relayd(const char *path); + +/** + * lttng_health_destroy - Destroy health object + * @health: health object to destroy + */ +void lttng_health_destroy(struct lttng_health *health); + +/** + * lttng_health_query - Query component health + * @health: health state (input/output). + * + * Return 0 on success, negative value on error. This return value only + * reports if the query has been successfully performed, *NOT* the + * actual state. lttng_health_state() should be used for the latter. + */ +int lttng_health_query(struct lttng_health *health); + +/** + * lttng_health_state - Inspect the state of a health structure + * @health: health state (input). + * + * "path" needs to refer to a local unix socket file matching the file + * used by the relay daemon to query. + * + * Return 0 on success, negative value if the component has at least one + * thread in error. It also returns a negative return value if + * lttng_health_query() has not yet successfully completed on @health. + */ +int lttng_health_state(const struct lttng_health *health); + +/** + * lttng_health_get_nr_threads - Get number of threads in health component + * @health: health state (input) + * + * Return the number of threads (>= 0) on success, else negative value + * on error. + */ +int lttng_health_get_nr_threads(const struct lttng_health *health); + +/** + * lttng_health_get_thread - Get thread health + * @health: health state (input) + * @nth_thread: nth thread to lookup + * + * Return a pointer to the health thread, else NULL on error. This + * pointer should not be freed by the caller, and can be used until + * lttng_health_destroy() is called on @health. + */ +const struct lttng_health_thread * + lttng_health_get_thread(const struct lttng_health *health, + int nth_thread); + +/** + * lttng_health_thread_state - Get thread health state + * @thread: thread health + * + * Return 0 if thread is OK, else negative error value. + */ +int lttng_health_thread_state(const struct lttng_health_thread *thread); + +/** + * lttng_health_thread_name - Get thread name + * @thread: thread health + * + * Return thread name, NULL on error. + */ +const char *lttng_health_thread_name(const struct lttng_health_thread *thread); + +#endif /* LTTNG_HEALTH_H */ diff --git a/include/lttng/lttng.h b/include/lttng/lttng.h index b029d58e3..8f55a889e 100644 --- a/include/lttng/lttng.h +++ b/include/lttng/lttng.h @@ -658,7 +658,8 @@ int lttng_disable_consumer(struct lttng_handle *handle); * * Please see lttng-health-check(3) man page for more information. */ -extern int lttng_health_check(enum lttng_health_component c); +extern LTTNG_DEPRECATED("This call is now obsolete.") +int lttng_health_check(enum lttng_health_component c); /* * For a given session name, this call checks if the data is ready to be read -- 2.34.1