fd1a46b34a2b9b5f098cd819469ae128ac5ebeae
[lttng-ust-java-tests.git] / lttng-ust-java-tests / src / test / java / org / lttng / ust / agent / utils / EventRuleFactory.java
1 /*
2 * Copyright (C) 2015, EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 */
18
19 package org.lttng.ust.agent.utils;
20
21 import java.util.StringJoiner;
22
23 import org.lttng.ust.agent.session.EventRule;
24 import org.lttng.ust.agent.session.LogLevelSelector;
25
26 /**
27 * Factory class for {@link EventRule} objects, offering convenience methods
28 * that mimic the results of passing the given arguments on the command-line.
29 *
30 * @author Alexandre Montplaisir
31 */
32 public final class EventRuleFactory {
33
34 /** Name of the "all" (-a) event */
35 public static final String EVENT_NAME_ALL = "*";
36
37 /** Log level set by default when it is not specified */
38 public static final LogLevelSelector LOG_LEVEL_UNSPECIFIED = new LogLevelSelector(Integer.MIN_VALUE, 0);
39
40 private EventRuleFactory() {}
41
42 /**
43 * Construct an event by only passing the event name on the command-line.
44 *
45 * @param eventName
46 * The event name
47 * @return The corresponding event rule
48 */
49 public static EventRule createRule(String eventName) {
50 return new EventRule(eventName, LOG_LEVEL_UNSPECIFIED, filterStringFromEventName(eventName));
51 }
52
53 /**
54 * Construct and event rule by specifying the event name and log level.
55 *
56 * @param eventName
57 * The event name
58 * @param logLevelSelector
59 * The log level
60 * @return The corresponding event rule
61 */
62 public static EventRule createRule(String eventName, LogLevelSelector logLevelSelector) {
63 StringJoiner sj = new StringJoiner(") && (", "(", ")");
64 String filterStr = sj.add(filterStringFromEventName(eventName))
65 .add(filterStringFromLogLevel(logLevelSelector))
66 .toString();
67 return new EventRule(eventName, logLevelSelector, filterStr);
68 }
69
70 /**
71 * Construct and event rule by specifying the event name, log level, and a
72 * filter string.
73 *
74 * @param eventName
75 * The event name
76 * @param logLevelSelector
77 * The log level
78 * @param extraFilter
79 * The filter string passed on the command-line
80 * @return The corresponding event rule
81 */
82 public static EventRule createRule(String eventName, LogLevelSelector logLevelSelector, String extraFilter) {
83 StringJoiner sj1 = new StringJoiner(") && (", "(", ")");
84 sj1.add(extraFilter);
85 sj1.add(filterStringFromEventName(eventName));
86 String firstPart = sj1.toString();
87
88 if (logLevelSelector.equals(LOG_LEVEL_UNSPECIFIED)) {
89 return new EventRule(eventName, logLevelSelector, firstPart);
90 }
91
92 /*
93 * If there is both a filter and a log level, the filter + event name is
94 * "resolved" first.
95 */
96 StringJoiner sj2 = new StringJoiner(") && (", "(", ")");
97 sj2.add(firstPart);
98 sj2.add(filterStringFromLogLevel(logLevelSelector));
99 return new EventRule(eventName, logLevelSelector, sj2.toString());
100 }
101
102 /**
103 * Construct an event rule corresponding to enabling all (-a) events.
104 *
105 * @return The corresponding event rule
106 */
107 public static EventRule createRuleAllEvents() {
108 return new EventRule(EVENT_NAME_ALL, LOG_LEVEL_UNSPECIFIED, "");
109 }
110
111 private static String filterStringFromEventName(String eventName) {
112 return "logger_name == \"" + eventName + "\"";
113 }
114
115 private static String filterStringFromLogLevel(LogLevelSelector logLevelSelector) {
116 StringBuilder sb = new StringBuilder();
117 sb.append("int_loglevel ");
118
119 switch (logLevelSelector.getLogLevelType()) {
120 case LTTNG_EVENT_LOGLEVEL_RANGE:
121 sb.append(">=");
122 break;
123 case LTTNG_EVENT_LOGLEVEL_SINGLE:
124 sb.append("==");
125 break;
126 case LTTNG_EVENT_LOGLEVEL_ALL:
127 default:
128 throw new IllegalArgumentException();
129 }
130
131 sb.append(" " + logLevelSelector.getLogLevel());
132 return sb.toString();
133 }
134
135 }
This page took 0.031759 seconds and 3 git commands to generate.