Split the tests package in 3 separate artifacts
[lttng-ust-java-tests.git] / lttng-ust-java-tests-common / src / main / java / org / lttng / ust / agent / utils / EventRuleFactory.java
diff --git a/lttng-ust-java-tests-common/src/main/java/org/lttng/ust/agent/utils/EventRuleFactory.java b/lttng-ust-java-tests-common/src/main/java/org/lttng/ust/agent/utils/EventRuleFactory.java
new file mode 100644 (file)
index 0000000..fd1a46b
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2015, EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+package org.lttng.ust.agent.utils;
+
+import java.util.StringJoiner;
+
+import org.lttng.ust.agent.session.EventRule;
+import org.lttng.ust.agent.session.LogLevelSelector;
+
+/**
+ * Factory class for {@link EventRule} objects, offering convenience methods
+ * that mimic the results of passing the given arguments on the command-line.
+ *
+ * @author Alexandre Montplaisir
+ */
+public final class EventRuleFactory {
+
+    /** Name of the "all" (-a) event */
+    public static final String EVENT_NAME_ALL = "*";
+
+    /** Log level set by default when it is not specified */
+    public static final LogLevelSelector LOG_LEVEL_UNSPECIFIED = new LogLevelSelector(Integer.MIN_VALUE, 0);
+
+    private EventRuleFactory() {}
+
+    /**
+     * Construct an event by only passing the event name on the command-line.
+     *
+     * @param eventName
+     *            The event name
+     * @return The corresponding event rule
+     */
+    public static EventRule createRule(String eventName) {
+        return new EventRule(eventName, LOG_LEVEL_UNSPECIFIED, filterStringFromEventName(eventName));
+    }
+
+    /**
+     * Construct and event rule by specifying the event name and log level.
+     *
+     * @param eventName
+     *            The event name
+     * @param logLevelSelector
+     *            The log level
+     * @return The corresponding event rule
+     */
+    public static EventRule createRule(String eventName, LogLevelSelector logLevelSelector) {
+        StringJoiner sj = new StringJoiner(") && (", "(", ")");
+        String filterStr = sj.add(filterStringFromEventName(eventName))
+                .add(filterStringFromLogLevel(logLevelSelector))
+                .toString();
+        return new EventRule(eventName, logLevelSelector, filterStr);
+    }
+
+    /**
+     * Construct and event rule by specifying the event name, log level, and a
+     * filter string.
+     *
+     * @param eventName
+     *            The event name
+     * @param logLevelSelector
+     *            The log level
+     * @param extraFilter
+     *            The filter string passed on the command-line
+     * @return The corresponding event rule
+     */
+    public static EventRule createRule(String eventName, LogLevelSelector logLevelSelector, String extraFilter) {
+        StringJoiner sj1 = new StringJoiner(") && (", "(", ")");
+        sj1.add(extraFilter);
+        sj1.add(filterStringFromEventName(eventName));
+        String firstPart = sj1.toString();
+
+        if (logLevelSelector.equals(LOG_LEVEL_UNSPECIFIED)) {
+            return new EventRule(eventName, logLevelSelector, firstPart);
+        }
+
+        /*
+         * If there is both a filter and a log level, the filter + event name is
+         * "resolved" first.
+         */
+        StringJoiner sj2 = new StringJoiner(") && (", "(", ")");
+        sj2.add(firstPart);
+        sj2.add(filterStringFromLogLevel(logLevelSelector));
+        return new EventRule(eventName, logLevelSelector, sj2.toString());
+    }
+
+    /**
+     * Construct an event rule corresponding to enabling all (-a) events.
+     *
+     * @return The corresponding event rule
+     */
+    public static EventRule createRuleAllEvents() {
+        return new EventRule(EVENT_NAME_ALL, LOG_LEVEL_UNSPECIFIED, "");
+    }
+
+    private static String filterStringFromEventName(String eventName) {
+        return "logger_name == \"" + eventName + "\"";
+    }
+
+    private static String filterStringFromLogLevel(LogLevelSelector logLevelSelector) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("int_loglevel ");
+
+        switch (logLevelSelector.getLogLevelType()) {
+        case LTTNG_EVENT_LOGLEVEL_RANGE:
+            sb.append(">=");
+            break;
+        case LTTNG_EVENT_LOGLEVEL_SINGLE:
+            sb.append("==");
+            break;
+        case LTTNG_EVENT_LOGLEVEL_ALL:
+        default:
+            throw new IllegalArgumentException();
+        }
+
+        sb.append(" " + logLevelSelector.getLogLevel());
+        return sb.toString();
+    }
+
+}
This page took 0.057997 seconds and 4 git commands to generate.