X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconditions%2Fcondition.c;h=2a21f8190d22ec7e2357df94bd77888557d56493;hb=6a751b953a43c566b74818ec6325db0978e16c66;hp=d1990414c2fb759dd9de851306bf9db79c287fbe;hpb=683d081a7f3734fcb5c8dd4424b0aa102117d1a0;p=lttng-tools.git diff --git a/src/common/conditions/condition.c b/src/common/conditions/condition.c index d1990414c..2a21f8190 100644 --- a/src/common/conditions/condition.c +++ b/src/common/conditions/condition.c @@ -5,17 +5,19 @@ * */ -#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include #include #include -#include -#include -#include -#include +#include #include -#include enum lttng_condition_type lttng_condition_get_type( const struct lttng_condition *condition) @@ -170,8 +172,9 @@ ssize_t lttng_condition_create_from_payload( case LTTNG_CONDITION_TYPE_SESSION_ROTATION_COMPLETED: create_from_payload = lttng_condition_session_rotation_completed_create_from_payload; break; - case LTTNG_CONDITION_TYPE_EVENT_RULE_HIT: - create_from_payload = lttng_condition_event_rule_create_from_payload; + case LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES: + create_from_payload = + lttng_condition_event_rule_matches_create_from_payload; break; default: ERR("Attempted to create condition of unknown type (%i)", @@ -207,3 +210,91 @@ void lttng_condition_init(struct lttng_condition *condition, condition->type = type; urcu_ref_init(&condition->ref); } + +LTTNG_HIDDEN +const char *lttng_condition_type_str(enum lttng_condition_type type) +{ + switch (type) { + case LTTNG_CONDITION_TYPE_UNKNOWN: + return "unknown"; + + case LTTNG_CONDITION_TYPE_SESSION_CONSUMED_SIZE: + return "session consumed size"; + + case LTTNG_CONDITION_TYPE_BUFFER_USAGE_HIGH: + return "buffer usage high"; + + case LTTNG_CONDITION_TYPE_BUFFER_USAGE_LOW: + return "buffer usage low"; + + case LTTNG_CONDITION_TYPE_SESSION_ROTATION_ONGOING: + return "session rotation ongoing"; + + case LTTNG_CONDITION_TYPE_SESSION_ROTATION_COMPLETED: + return "session rotation completed"; + + case LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES: + return "event rule matches"; + + default: + return "???"; + } +} + +LTTNG_HIDDEN +enum lttng_error_code lttng_condition_mi_serialize( + const struct lttng_trigger *trigger, + const struct lttng_condition *condition, + struct mi_writer *writer, + const struct mi_lttng_error_query_callbacks *error_query_callbacks) +{ + int ret; + enum lttng_error_code ret_code; + struct lttng_error_query_results *error_query_results = NULL; + + assert(condition); + assert(writer); + assert(condition->mi_serialize); + + /* Open condition element. */ + ret = mi_lttng_writer_open_element(writer, mi_lttng_element_condition); + if (ret) { + goto mi_error; + } + + /* Serialize underlying condition. */ + ret_code = condition->mi_serialize(condition, writer); + if (ret_code != LTTNG_OK) { + goto end; + } + + /* Serialize error query results for the action. */ + if (error_query_callbacks && error_query_callbacks->action_cb) { + ret_code = error_query_callbacks->condition_cb( + trigger, &error_query_results); + if (ret_code != LTTNG_OK) { + goto end; + } + + ret_code = lttng_error_query_results_mi_serialize( + error_query_results, writer); + if (ret_code != LTTNG_OK) { + goto end; + } + } + + /* Close condition element. */ + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto mi_error; + } + + ret_code = LTTNG_OK; + goto end; + +mi_error: + ret_code = LTTNG_ERR_MI_IO_FAIL; +end: + lttng_error_query_results_destroy(error_query_results); + return ret_code; +}