From d0980f44b9be209af3b35914622b0cf2a4659110 Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Tue, 27 Apr 2021 20:13:13 -0400 Subject: [PATCH] build system: support rotation example MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau Change-Id: Icf5f88dcc725967b7fda66db6e047cdf18a89f01 --- configure.ac | 1 + doc/examples/Makefile.am | 2 +- doc/examples/rotation/Makefile.am | 9 +++ doc/examples/rotation/rotate-client-example.c | 77 ++++++++++--------- 4 files changed, 52 insertions(+), 37 deletions(-) create mode 100644 doc/examples/rotation/Makefile.am diff --git a/configure.ac b/configure.ac index ea8b15458..549b69962 100644 --- a/configure.ac +++ b/configure.ac @@ -1098,6 +1098,7 @@ AC_CONFIG_FILES([ Makefile doc/Makefile doc/examples/Makefile + doc/examples/rotation/Makefile doc/examples/trigger-condition-event-matches/Makefile doc/man/Makefile doc/man/asciidoc-attrs.conf diff --git a/doc/examples/Makefile.am b/doc/examples/Makefile.am index 1b2d8456f..89aad3d06 100644 --- a/doc/examples/Makefile.am +++ b/doc/examples/Makefile.am @@ -1,3 +1,3 @@ # SPDX-License-Identifier: GPL-2.0-only -SUBDIRS = trigger-condition-event-matches +SUBDIRS = rotation trigger-condition-event-matches diff --git a/doc/examples/rotation/Makefile.am b/doc/examples/rotation/Makefile.am new file mode 100644 index 000000000..92f6d0628 --- /dev/null +++ b/doc/examples/rotation/Makefile.am @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: GPL-2.0-only + +LIBLTTNG_CTL=$(top_builddir)/src/lib/lttng-ctl/liblttng-ctl.la + +noinst_PROGRAMS = rotate-client +dist_noinst_SCRIPTS = rotate-client-compress.sh + +rotate_client_SOURCES = rotate-client-example.c +rotate_client_LDADD = $(LIBLTTNG_CTL) diff --git a/doc/examples/rotation/rotate-client-example.c b/doc/examples/rotation/rotate-client-example.c index a9d8b9f31..ae641d895 100644 --- a/doc/examples/rotation/rotate-client-example.c +++ b/doc/examples/rotation/rotate-client-example.c @@ -31,32 +31,24 @@ * ./rotate-client mysession 1 -1 ./rotate-client-compress.sh */ +#include +#include #include #include #include #include -#include -#include - -#define DEFAULT_DATA_AVAILABILITY_WAIT_TIME 200000 /* usec */ -/* Uncomment to enable debug output. */ -//#define DEBUG -#ifndef DEBUG -#define printf(fmt, ...) (0) -#endif +#define DEFAULT_DATA_AVAILABILITY_WAIT_TIME 200000 /* usec */ static volatile int quit = 0; -static -void sighandler(int signal) +static void sighandler(int signal) { printf("Signal caught, exiting\n"); quit = 1; } -static -int setup_session(const char *session_name, const char *path) +static int setup_session(const char *session_name, const char *path) { int ret; struct lttng_domain dom; @@ -84,8 +76,8 @@ int setup_session(const char *session_name, const char *path) strcpy(ev.name, "*"); ev.loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL; - ret = lttng_enable_event_with_exclusions(chan_handle, &ev, "mychan", NULL, - 0, NULL); + ret = lttng_enable_event_with_exclusions( + chan_handle, &ev, "mychan", NULL, 0, NULL); if (ret < 0) { fprintf(stderr, "Failed to enable events (ret = %i)\n", ret); goto end; @@ -106,8 +98,7 @@ end: return ret; } -static -int cleanup_session(const char *session_name) +static int cleanup_session(const char *session_name) { int ret; @@ -127,8 +118,8 @@ int cleanup_session(const char *session_name) } /* - * Data sleep time before retrying (in usec). Don't sleep if the call - * returned value indicates availability. + * Data sleep time before retrying (in usec). Don't sleep if the + * call returned value indicates availability. */ if (ret) { usleep(DEFAULT_DATA_AVAILABILITY_WAIT_TIME); @@ -151,8 +142,7 @@ end: return ret; } -static -int rotate_session(const char *session_name, const char *ext_program) +static int rotate_session(const char *session_name, const char *ext_program) { int ret; struct lttng_rotation_handle *handle = NULL; @@ -164,15 +154,16 @@ int rotate_session(const char *session_name, const char *ext_program) ret = lttng_rotate_session(session_name, NULL, &handle); if (ret < 0) { - fprintf(stderr, "Failed to rotate session, %s\n", lttng_strerror(ret)); + fprintf(stderr, "Failed to rotate session, %s\n", + lttng_strerror(ret)); goto end; } fflush(stdout); do { - rotation_status = lttng_rotation_handle_get_state(handle, - &rotation_state); + rotation_status = lttng_rotation_handle_get_state( + handle, &rotation_state); if (rotation_status != LTTNG_ROTATION_STATUS_OK) { ret = -1; fprintf(stderr, "Failed to get the current rotation's state\n"); @@ -207,8 +198,9 @@ int rotate_session(const char *session_name, const char *ext_program) goto end; } - location_status = lttng_trace_archive_location_local_get_absolute_path( - location, &absolute_path); + location_status = + lttng_trace_archive_location_local_get_absolute_path( + location, &absolute_path); if (location_status != LTTNG_TRACE_ARCHIVE_LOCATION_STATUS_OK) { fprintf(stderr, "Failed to get absolute path of completed chunk archive"); ret = -1; @@ -217,7 +209,8 @@ int rotate_session(const char *session_name, const char *ext_program) printf("Output files of session %s rotated to %s\n", session_name, absolute_path); - ret = snprintf(cmd, PATH_MAX, "%s %s", ext_program, absolute_path); + ret = snprintf(cmd, PATH_MAX, "%s %s", ext_program, + absolute_path); if (ret < 0) { fprintf(stderr, "Failed to prepare command string\n"); goto end; @@ -226,11 +219,21 @@ int rotate_session(const char *session_name, const char *ext_program) goto end; } case LTTNG_ROTATION_STATE_EXPIRED: - printf("Output files of session %s rotated, but the handle expired\n", session_name); + printf("Output files of session %s rotated, but the handle expired\n", + session_name); ret = 0; goto end; case LTTNG_ROTATION_STATE_ERROR: - fprintf(stderr, "An error occurred with the rotation of session %s\n", session_name); + fprintf(stderr, "An error occurred with the rotation of session %s\n", + session_name); + ret = -1; + goto end; + case LTTNG_ROTATION_STATE_ONGOING: + abort(); + goto end; + case LTTNG_ROTATION_STATE_NO_ROTATION: + fprintf(stderr, "No rotation was performed on rotation request for session %s\n", + session_name); ret = -1; goto end; } @@ -240,8 +243,7 @@ end: return ret; } -static -int cleanup_dir(const char *path) +static int cleanup_dir(const char *path) { char cmd[PATH_MAX]; int ret; @@ -257,15 +259,17 @@ end: return ret; } -void usage(const char *prog_name) +static void usage(const char *prog_name) { fprintf(stderr, "Usage: %s \n", prog_name); fprintf(stderr, " : the name of the session you want to create\n"); fprintf(stderr, " : the delay in seconds between each rotation\n"); - fprintf(stderr, " : the number of rotation you want to perform, " + fprintf(stderr, + " : the number of rotation you want to perform, " "-1 for infinite until ctrl-c\n"); - fprintf(stderr, " : program to run on each chunk, it must be " + fprintf(stderr, + " : program to run on each chunk, it must be " "executable, and expect a trace folder as only argument\n"); fprintf(stderr, "\nThe trace folder is deleted when this program completes.\n"); } @@ -294,7 +298,8 @@ int main(int argc, char **argv) goto end; } - if (signal(SIGINT, sighandler) == SIG_ERR) { + if (signal(SIGINT, sighandler) == SIG_ERR) { + ret = -1; perror("signal handler"); goto end; } @@ -326,7 +331,7 @@ int main(int argc, char **argv) } } } else { - for(;;) { + for (;;) { if (quit) { break; } -- 2.34.1