Session daemon health check support
[lttng-tools.git] / src / bin / lttng-sessiond / health.h
diff --git a/src/bin/lttng-sessiond/health.h b/src/bin/lttng-sessiond/health.h
new file mode 100644 (file)
index 0000000..9a1ef39
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2012 - David Goulet <dgoulet@efficios.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License, version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This program 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 General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef _HEALTH_H
+#define _HEALTH_H
+
+#include <stdint.h>
+#include <urcu/uatomic.h>
+
+/*
+ * These are the value added to the current state depending of the position in
+ * the thread where is either waiting on a poll() or running in the code.
+ */
+#define HEALTH_POLL_VALUE 1
+#define HEALTH_CODE_VALUE 2
+
+#define HEALTH_IS_IN_POLL(x) (x % HEALTH_CODE_VALUE)
+#define HEALTH_IS_IN_CODE(x) (x % HEALTH_POLL_VALUE)
+
+struct health_state {
+       uint64_t last;
+       uint64_t current;
+};
+
+/* Health state counters for the client command thread */
+extern struct health_state health_thread_cmd;
+
+/* Health state counters for the application registration thread */
+extern struct health_state health_thread_app_reg;
+
+/* Health state counters for the kernel thread */
+extern struct health_state health_thread_kernel;
+
+/*
+ * Update current counter by 1 to indicate that the thread is in a blocking
+ * state cause by a poll().
+ */
+static inline void health_poll_update(struct health_state *state)
+{
+       assert(state);
+
+       uatomic_add(&state->current, HEALTH_POLL_VALUE);
+}
+
+/*
+ * Update current counter by 2 which indicates that we are currently running in
+ * a thread and NOT blocked at a poll().
+ */
+static inline void health_code_update(struct health_state *state)
+{
+       assert(state);
+
+       uatomic_add(&state->current, HEALTH_CODE_VALUE);
+}
+
+/*
+ * Reset health state. A value of zero indicate a bad health state.
+ */
+static inline void health_reset(struct health_state *state)
+{
+       assert(state);
+
+       uatomic_set(&state->current, 0);
+       uatomic_set(&state->last, 0);
+}
+
+/*
+ * Init health state.
+ */
+static inline void health_init(struct health_state *state)
+{
+       assert(state);
+
+       uatomic_set(&state->last, 0);
+       uatomic_set(&state->current, HEALTH_CODE_VALUE);
+}
+
+int health_check_state(struct health_state *state);
+
+#endif /* _HEALTH_H */
This page took 0.02362 seconds and 4 git commands to generate.