X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Frotate.c;fp=src%2Fbin%2Flttng%2Fcommands%2Frotate.c;h=0000000000000000000000000000000000000000;hp=aa0923cc20d2af039b66d4ac5904adc4a6bddba3;hb=48a4000561343808724f7cb5fa8c131877489ccd;hpb=81663f073dbfb4b61c06a0ceb8ca33c4fc41b1c5 diff --git a/src/bin/lttng/commands/rotate.c b/src/bin/lttng/commands/rotate.c deleted file mode 100644 index aa0923cc2..000000000 --- a/src/bin/lttng/commands/rotate.c +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (C) 2017 Julien Desfossez - * - * SPDX-License-Identifier: GPL-2.0-only - * - */ - -#define _LGPL_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "../command.h" -#include - -static char *opt_session_name; -static int opt_no_wait; -static struct mi_writer *writer; - -#ifdef LTTNG_EMBED_HELP -static const char help_msg[] = -#include -; -#endif - -enum { - OPT_HELP = 1, - OPT_LIST_OPTIONS, -}; - -static struct poptOption long_options[] = { - /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ - {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, - {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, - {"no-wait", 'n', POPT_ARG_VAL, &opt_no_wait, 1, 0, 0}, - {0, 0, 0, 0, 0, 0, 0} -}; - -static int rotate_tracing(char *session_name) -{ - int ret; - enum cmd_error_code cmd_ret = CMD_SUCCESS; - struct lttng_rotation_handle *handle = NULL; - enum lttng_rotation_status rotation_status; - enum lttng_rotation_state rotation_state = LTTNG_ROTATION_STATE_ONGOING; - const struct lttng_trace_archive_location *location = NULL; - bool print_location = true; - - DBG("Rotating the output files of session %s", session_name); - - ret = lttng_rotate_session(session_name, NULL, &handle); - if (ret < 0) { - switch (-ret) { - case LTTNG_ERR_SESSION_NOT_STARTED: - WARN("Tracing session %s not started yet", session_name); - cmd_ret = CMD_WARNING; - goto end; - default: - ERR("%s", lttng_strerror(ret)); - goto error; - } - } - - if (opt_no_wait) { - rotation_state = LTTNG_ROTATION_STATE_ONGOING; - goto skip_wait; - } - - _MSG("Waiting for rotation to complete"); - ret = fflush(stdout); - if (ret) { - PERROR("fflush"); - goto error; - } - - do { - rotation_status = lttng_rotation_handle_get_state(handle, - &rotation_state); - if (rotation_status != LTTNG_ROTATION_STATUS_OK) { - MSG(""); - ERR("Failed to query the state of the rotation."); - goto error; - } - - if (rotation_state == LTTNG_ROTATION_STATE_ONGOING) { - ret = usleep(DEFAULT_DATA_AVAILABILITY_WAIT_TIME_US); - if (ret) { - PERROR("\nusleep"); - goto error; - } - _MSG("."); - - ret = fflush(stdout); - if (ret) { - PERROR("\nfflush"); - goto error; - } - } - } while (rotation_state == LTTNG_ROTATION_STATE_ONGOING); - MSG(""); - -skip_wait: - switch (rotation_state) { - case LTTNG_ROTATION_STATE_COMPLETED: - rotation_status = lttng_rotation_handle_get_archive_location( - handle, &location); - if (rotation_status != LTTNG_ROTATION_STATUS_OK) { - ERR("Failed to retrieve the rotation's completed chunk archive location."); - cmd_ret = CMD_ERROR; - } - break; - case LTTNG_ROTATION_STATE_EXPIRED: - break; - case LTTNG_ROTATION_STATE_ERROR: - ERR("Failed to retrieve rotation state."); - goto error; - case LTTNG_ROTATION_STATE_ONGOING: - MSG("Rotation ongoing for session %s", session_name); - print_location = false; - break; - default: - ERR("Unexpected rotation state encountered."); - goto error; - } - - if (!lttng_opt_mi && print_location) { - ret = print_trace_archive_location(location, - session_name); - } else if (lttng_opt_mi) { - ret = mi_lttng_rotate(writer, session_name, rotation_state, - location); - } - - if (ret < 0) { - cmd_ret = CMD_ERROR; - } - -end: - lttng_rotation_handle_destroy(handle); - return cmd_ret; -error: - cmd_ret = CMD_ERROR; - goto end; -} - -/* - * cmd_rotate - * - * The 'rotate ' first level command - */ -int cmd_rotate(int argc, const char **argv) -{ - int opt, ret; - enum cmd_error_code cmd_ret = CMD_SUCCESS; - int popt_ret; - static poptContext pc; - char *session_name = NULL; - bool free_session_name = false; - - pc = poptGetContext(NULL, argc, argv, long_options, 0); - popt_ret = poptReadDefaultConfig(pc, 0); - if (popt_ret) { - ERR("poptReadDefaultConfig"); - goto error; - } - - while ((opt = poptGetNextOpt(pc)) != -1) { - switch (opt) { - case OPT_HELP: - SHOW_HELP(); - goto end; - case OPT_LIST_OPTIONS: - list_cmd_options(stdout, long_options); - goto end; - default: - cmd_ret = CMD_UNDEFINED; - goto end; - } - } - - opt_session_name = (char*) poptGetArg(pc); - - if (!opt_session_name) { - session_name = get_session_name(); - if (!session_name) { - goto error; - } - free_session_name = true; - } else { - session_name = opt_session_name; - } - - /* Mi check */ - if (lttng_opt_mi) { - writer = mi_lttng_writer_create(fileno(stdout), lttng_opt_mi); - if (!writer) { - goto error; - } - - /* Open rotate command */ - ret = mi_lttng_writer_command_open(writer, - mi_lttng_element_command_rotate); - if (ret) { - goto error; - } - - /* Open output element */ - ret = mi_lttng_writer_open_element(writer, - mi_lttng_element_command_output); - if (ret) { - goto error; - } - } - - cmd_ret = rotate_tracing(session_name); - - /* Mi closing */ - if (lttng_opt_mi) { - /* Close output element */ - ret = mi_lttng_writer_close_element(writer); - if (ret) { - goto error; - } - /* Success ? */ - ret = mi_lttng_writer_write_element_bool(writer, - mi_lttng_element_command_success, - cmd_ret == CMD_SUCCESS); - if (ret) { - goto error; - } - - /* Command element close */ - ret = mi_lttng_writer_command_close(writer); - if (ret) { - goto error; - } - } - - /* Mi clean-up */ - if (writer && mi_lttng_writer_destroy(writer)) { - goto error; - } -end: - poptFreeContext(pc); - if (free_session_name) { - free(session_name); - } - - return cmd_ret; -error: - cmd_ret = CMD_ERROR; - goto end; -}