#include <common/hashtable/utils.h>
#include <lttng/event-rule/event-rule.h>
#include <lttng/event-rule/event-rule-internal.h>
-#include <lttng/event-rule/tracepoint.h>
+#include <lttng/event-rule/user-tracepoint.h>
#include <lttng/condition/condition.h>
#include <lttng/condition/event-rule-matches-internal.h>
#include <lttng/condition/event-rule-matches.h>
int loglevel = -1, ret = 0;
const char *pattern;
- /* For now only LTTNG_EVENT_RULE_TYPE_TRACEPOINT are supported. */
- assert(lttng_event_rule_get_type(rule) ==
- LTTNG_EVENT_RULE_TYPE_TRACEPOINT);
memset(event_notifier, 0, sizeof(*event_notifier));
} else {
const struct lttng_log_level_rule *log_level_rule;
- status = lttng_event_rule_tracepoint_get_pattern(rule, &pattern);
+ assert(lttng_event_rule_get_type(rule) ==
+ LTTNG_EVENT_RULE_TYPE_USER_TRACEPOINT);
+
+ status = lttng_event_rule_user_tracepoint_get_name_pattern(rule, &pattern);
if (status != LTTNG_EVENT_RULE_STATUS_OK) {
/* At this point, this is a fatal error. */
abort();
}
- status = lttng_event_rule_tracepoint_get_log_level_rule(
+ status = lttng_event_rule_user_tracepoint_get_log_level_rule(
rule, &log_level_rule);
if (status == LTTNG_EVENT_RULE_STATUS_UNSET) {
ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_ALL;
const struct lttng_event_rule *event_rule = NULL;
unsigned int capture_bytecode_count = 0, i;
enum lttng_condition_status cond_status;
+ enum lttng_event_rule_type event_rule_type;
health_code_update();
assert(app->event_notifier_group.object);
assert(condition_status == LTTNG_CONDITION_STATUS_OK);
assert(event_rule);
- assert(lttng_event_rule_get_type(event_rule) == LTTNG_EVENT_RULE_TYPE_TRACEPOINT);
+
+ event_rule_type = lttng_event_rule_get_type(event_rule);
+ assert(event_rule_type == LTTNG_EVENT_RULE_TYPE_USER_TRACEPOINT ||
+ event_rule_type == LTTNG_EVENT_RULE_TYPE_JUL_LOGGING ||
+ event_rule_type ==
+ LTTNG_EVENT_RULE_TYPE_LOG4J_LOGGING ||
+ event_rule_type ==
+ LTTNG_EVENT_RULE_TYPE_PYTHON_LOGGING);
init_ust_event_notifier_from_event_rule(event_rule, &event_notifier);
event_notifier.event.token = ua_event_notifier_rule->token;
return ret;
}
+bool ust_app_supports_notifiers(const struct ust_app *app)
+{
+ return app->v_major >= 9;
+}
+
+bool ust_app_supports_counters(const struct ust_app *app)
+{
+ return app->v_major >= 9;
+}
+
/*
* Setup the base event notifier group.
*
assert(app);
+ if (!ust_app_supports_notifiers(app)) {
+ ret = -ENOSYS;
+ goto error;
+ }
+
/* Get the write side of the pipe. */
event_pipe_write_fd = lttng_pipe_get_writefd(
app->event_notifier_group.event_pipe);
event_notifier_error_accounting_status =
event_notifier_error_accounting_register_app(app);
- if (event_notifier_error_accounting_status != EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_OK) {
- if (event_notifier_error_accounting_status == EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_APP_DEAD) {
- DBG3("Failed to setup event notifier error accounting (application is dead): app socket fd = %d",
- app->sock);
- ret = 0;
- goto error_accounting;
- }
-
+ switch (event_notifier_error_accounting_status) {
+ case EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_OK:
+ break;
+ case EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_UNSUPPORTED:
+ DBG3("Failed to setup event notifier error accounting (application does not support notifier error accounting): app socket fd = %d, app name = '%s', app ppid = %d",
+ app->sock, app->name, (int) app->ppid);
+ ret = 0;
+ goto error_accounting;
+ case EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_APP_DEAD:
+ DBG3("Failed to setup event notifier error accounting (application is dead): app socket fd = %d, app name = '%s', app ppid = %d",
+ app->sock, app->name, (int) app->ppid);
+ ret = 0;
+ goto error_accounting;
+ default:
ERR("Failed to setup event notifier error accounting for app");
ret = -1;
goto error_accounting;
struct ust_app_event_notifier_rule *event_notifier_rule;
unsigned int count, i;
+ if (!ust_app_supports_notifiers(app)) {
+ goto end;
+ }
+
/*
* Currrently, registering or unregistering a trigger with an
* event rule condition causes a full synchronization of the event
DBG2("UST application global event notifier rules update: app = '%s' (ppid: %d)",
app->name, app->ppid);
- if (!app->compatible) {
+ if (!app->compatible || !ust_app_supports_notifiers(app)) {
return;
}
memset(pathname, 0, sizeof(pathname));
ret = snprintf(pathname, sizeof(pathname),
- DEFAULT_UST_TRACE_DIR "/" DEFAULT_UST_TRACE_UID_PATH,
+ DEFAULT_UST_TRACE_UID_PATH,
reg->uid, reg->bits_per_long);
if (ret < 0) {
PERROR("snprintf snapshot path");
/* Add the UST default trace dir to path. */
memset(pathname, 0, sizeof(pathname));
- ret = snprintf(pathname, sizeof(pathname), DEFAULT_UST_TRACE_DIR "/%s",
+ ret = snprintf(pathname, sizeof(pathname), "%s",
ua_sess->path);
if (ret < 0) {
status = LTTNG_ERR_INVALID;