*
* Copyright 2017 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
*
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
+ * SPDX-License-Identifier: MIT
*
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
*/
#include <stdio.h>
#include <assert.h>
#include <lttng/action/action.h>
+#include <lttng/action/group.h>
#include <lttng/action/notify.h>
#include <lttng/condition/buffer-usage.h>
#include <lttng/condition/condition.h>
#include <lttng/notification/channel.h>
#include <lttng/notification/notification.h>
#include <lttng/trigger/trigger.h>
+#include <lttng/lttng-error.h>
static unsigned int nr_notifications = 0;
static unsigned int nr_expected_notifications = 0;
static double threshold_ratio = 0.0;
static uint64_t threshold_bytes = 0;
static bool is_threshold_ratio = false;
+static bool use_action_group = false;
static enum lttng_condition_type buffer_usage_type = LTTNG_CONDITION_TYPE_UNKNOWN;
static enum lttng_domain_type domain_type = LTTNG_DOMAIN_NONE;
const struct lttng_condition *condition,
const struct lttng_evaluation *condition_evaluation);
-int parse_arguments(char **argv) {
+static
+int parse_arguments(char **argv)
+{
const char *domain_type_string = NULL;
const char *buffer_usage_type_string = NULL;
const char *buffer_usage_threshold_type = NULL;
const char *buffer_usage_threshold_value = NULL;
const char *nr_expected_notifications_string = NULL;
+ const char *use_action_group_value = NULL;
session_name = argv[1];
channel_name = argv[2];
buffer_usage_threshold_type = argv[5];
buffer_usage_threshold_value = argv[6];
nr_expected_notifications_string = argv[7];
+ use_action_group_value = argv[8];
/* Parse arguments */
/* Domain type */
/* Number of notification to expect */
sscanf(nr_expected_notifications_string, "%d", &nr_expected_notifications);
+ /* Put notify action in a group. */
+ if (!strcasecmp("1", use_action_group_value)) {
+ use_action_group = true;
+ }
+
return 0;
error:
return 1;
{
int ret = 0;
enum lttng_condition_status condition_status;
+ enum lttng_action_status action_status;
enum lttng_notification_channel_status nc_status;
struct lttng_notification_channel *notification_channel = NULL;
struct lttng_condition *condition = NULL;
*/
setbuf(stdout, NULL);
- if (argc < 8) {
+ if (argc < 9) {
printf("error: Missing arguments for tests\n");
ret = 1;
goto end;
goto end;
}
condition_status = lttng_condition_buffer_usage_set_domain_type(
- condition, LTTNG_DOMAIN_UST);
+ condition, domain_type);
if (condition_status != LTTNG_CONDITION_STATUS_OK) {
printf("error: Could not set domain type\n");
ret = 1;
goto end;
}
- action = lttng_action_notify_create();
- if (!action) {
- printf("error: Could not create action notify\n");
- ret = 1;
- goto end;
+ if (use_action_group) {
+ struct lttng_action *notify, *group;
+
+ group = lttng_action_group_create();
+ if (!group) {
+ printf("error: Could not create action group\n");
+ ret = 1;
+ goto end;
+ }
+ notify = lttng_action_notify_create();
+ if (!notify) {
+ lttng_action_destroy(group);
+ printf("error: Could not create action notify\n");
+ ret = 1;
+ goto end;
+ }
+ action_status = lttng_action_group_add_action(group, notify);
+ if (action_status != LTTNG_ACTION_STATUS_OK) {
+ printf("error: Could not add action notify to action group\n");
+ lttng_action_destroy(group);
+ lttng_action_destroy(notify);
+ ret = 1;
+ goto end;
+ }
+
+ action = group;
+ } else {
+ action = lttng_action_notify_create();
+ if (!action) {
+ printf("error: Could not create action notify\n");
+ ret = 1;
+ goto end;
+ }
}
trigger = lttng_trigger_create(condition, action);
goto end;
default:
/* Unhandled conditions / errors. */
- printf("error: Unknown notification channel status\n");
+ printf("error: Unknown notification channel status (%d) \n", status);
ret = 1;
goto end;
}