X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Flttng-ctl%2Frotate.c;h=d9907cc67e34b3c33304f989b69d920c81cb1c03;hb=90936dcf0968343f20b2f6fd365b9c015cdb9717;hp=4132159323ab98cf2092ee88dcc075180072f0fa;hpb=d68c9a04537b683991a7355b812b0af954008cf1;p=lttng-tools.git diff --git a/src/lib/lttng-ctl/rotate.c b/src/lib/lttng-ctl/rotate.c index 413215932..d9907cc67 100644 --- a/src/lib/lttng-ctl/rotate.c +++ b/src/lib/lttng-ctl/rotate.c @@ -32,12 +32,25 @@ struct lttng_rotation_immediate_attr *lttng_rotation_immediate_attr_create(void) return zmalloc(sizeof(struct lttng_rotation_immediate_attr)); } +struct lttng_rotation_schedule_attr *lttng_rotation_schedule_attr_create(void) +{ + return zmalloc(sizeof(struct lttng_rotation_schedule_attr)); +} + void lttng_rotation_immediate_attr_destroy( struct lttng_rotation_immediate_attr *attr) { free(attr); } +void lttng_rotation_schedule_attr_destroy(struct lttng_rotation_schedule_attr *attr) +{ + if (attr) { + free(attr); + attr = NULL; + } +} + enum lttng_rotation_status lttng_rotation_immediate_attr_set_session_name( struct lttng_rotation_immediate_attr *attr, const char *session_name) @@ -97,6 +110,51 @@ end: } +enum lttng_rotation_status lttng_rotation_schedule_attr_set_session_name( + struct lttng_rotation_schedule_attr *attr, + const char *session_name) +{ + enum lttng_rotation_status status = LTTNG_ROTATION_STATUS_OK; + int ret; + + if (!attr || !session_name) { + status = LTTNG_ROTATION_STATUS_INVALID; + goto error; + } + + ret = lttng_strncpy(attr->session_name, session_name, + sizeof(attr->session_name)); + if (ret) { + status = LTTNG_ROTATION_STATUS_INVALID; + goto error; + } + +error: + return status; +} + +enum lttng_rotation_status lttng_rotation_schedule_attr_set_timer_period( + struct lttng_rotation_schedule_attr *attr, + uint64_t timer) +{ + enum lttng_rotation_status status = LTTNG_ROTATION_STATUS_OK; + + if (!attr) { + status = LTTNG_ROTATION_STATUS_INVALID; + goto end; + } + + attr->timer_us = timer; +end: + return status; +} + +void lttng_rotation_schedule_attr_set_size( + struct lttng_rotation_schedule_attr *attr, uint64_t size) +{ + attr->size = size; +} + enum lttng_rotation_status lttng_rotation_handle_get_state( struct lttng_rotation_handle *rotation_handle, enum lttng_rotation_state *state) @@ -251,3 +309,82 @@ end: free(rotate_return); return ret; } + +/* + * Configure the automatic rotate parameters. + */ +int lttng_rotation_set_schedule( + struct lttng_rotation_schedule_attr *attr) +{ + struct lttcomm_session_msg lsm; + int ret; + + if (!attr) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + + memset(&lsm, 0, sizeof(lsm)); + lsm.cmd_type = LTTNG_ROTATION_SET_SCHEDULE; + lttng_ctl_copy_string(lsm.session.name, attr->session_name, + sizeof(lsm.session.name)); + lsm.u.rotate_setup.timer_us = attr->timer_us; + lsm.u.rotate_setup.size = attr->size; + + ret = lttng_ctl_ask_sessiond(&lsm, NULL); + +end: + return ret; +} + +int lttng_rotation_schedule_get_timer_period(const char *session_name, + uint64_t *rotate_timer) +{ + struct lttcomm_session_msg lsm; + struct lttng_rotation_schedule_get_timer_period *get_timer = NULL; + int ret; + + memset(&lsm, 0, sizeof(lsm)); + lsm.cmd_type = LTTNG_ROTATION_SCHEDULE_GET_TIMER_PERIOD; + lttng_ctl_copy_string(lsm.session.name, session_name, + sizeof(lsm.session.name)); + + ret = lttng_ctl_ask_sessiond(&lsm, (void **) &get_timer); + if (ret < 0) { + ret = -1; + goto end; + } + + *rotate_timer = get_timer->rotate_timer; + ret = 0; +end: + free(get_timer); + return ret; +} + +int lttng_rotation_schedule_get_size(const char *session_name, + uint64_t *rotate_size) +{ + struct lttcomm_session_msg lsm; + struct lttng_rotation_schedule_get_size *get_size = NULL; + int ret; + + memset(&lsm, 0, sizeof(lsm)); + lsm.cmd_type = LTTNG_ROTATION_SCHEDULE_GET_SIZE; + lttng_ctl_copy_string(lsm.session.name, session_name, + sizeof(lsm.session.name)); + + ret = lttng_ctl_ask_sessiond(&lsm, (void **) &get_size); + if (ret < 0) { + ret = -1; + goto end; + } + + *rotate_size = get_size->rotate_size; + + ret = 0; + +end: + free(get_size); + return ret; +}