Add 'log4j2' domain tests to the Log4j 2.x agent
[lttng-ust-java-tests.git] / lttng-ust-java-tests-common / src / main / 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.tools.ILttngSession;
24 import org.lttng.ust.agent.session.EventRule;
25 import org.lttng.ust.agent.session.LogLevelSelector;
26
27 /**
28 * Factory class for {@link EventRule} objects, offering convenience methods
29 * that mimic the results of passing the given arguments on the command-line.
30 *
31 * @author Alexandre Montplaisir
32 */
33 public class EventRuleFactory {
34
35 /** Name of the "all" (-a) event */
36 public static final String EVENT_NAME_ALL = "*";
37
38 /** Log level set by default when it is not specified */
39 public final LogLevelSelector LOG_LEVEL_UNSPECIFIED;
40
41 private final ILttngSession.Domain domain;
42
43 /**
44 * Constructor.
45 *
46 * @param domain
47 */
48 public EventRuleFactory(ILttngSession.Domain domain) {
49 this.domain = domain;
50 LOG_LEVEL_UNSPECIFIED = new LogLevelSelector(domain.levelAllValue(), 0);
51 }
52
53 /**
54 * Construct an event by only passing the event name on the command-line.
55 *
56 * @param eventName
57 * The event name
58 * @return The corresponding event rule
59 */
60 public EventRule createRule(String eventName) {
61 return new EventRule(eventName, LOG_LEVEL_UNSPECIFIED, filterStringFromEventName(eventName));
62 }
63
64 /**
65 * Construct and event rule by specifying the event name and log level.
66 *
67 * @param eventName
68 * The event name
69 * @param logLevelSelector
70 * The log level
71 * @return The corresponding event rule
72 */
73 public EventRule createRule(String eventName, LogLevelSelector logLevelSelector) {
74 StringJoiner sj = new StringJoiner(") && (", "(", ")");
75 String filterStr = sj.add(filterStringFromEventName(eventName))
76 .add(filterStringFromLogLevel(logLevelSelector))
77 .toString();
78 return new EventRule(eventName, logLevelSelector, filterStr);
79 }
80
81 /**
82 * Construct and event rule by specifying the event name, log level, and a
83 * filter string.
84 *
85 * @param eventName
86 * The event name
87 * @param logLevelSelector
88 * The log level
89 * @param extraFilter
90 * The filter string passed on the command-line
91 * @return The corresponding event rule
92 */
93 public EventRule createRule(String eventName, LogLevelSelector logLevelSelector, String extraFilter) {
94 StringJoiner sj1 = new StringJoiner(") && (", "(", ")");
95 sj1.add(extraFilter);
96 sj1.add(filterStringFromEventName(eventName));
97 String firstPart = sj1.toString();
98
99 if (logLevelSelector.equals(LOG_LEVEL_UNSPECIFIED)) {
100 return new EventRule(eventName, logLevelSelector, firstPart);
101 }
102
103 /*
104 * If there is both a filter and a log level, the filter + event name is
105 * "resolved" first.
106 */
107 StringJoiner sj2 = new StringJoiner(") && (", "(", ")");
108 sj2.add(firstPart);
109 sj2.add(filterStringFromLogLevel(logLevelSelector));
110 return new EventRule(eventName, logLevelSelector, sj2.toString());
111 }
112
113 /**
114 * Construct an event rule corresponding to enabling all (-a) events.
115 *
116 * @return The corresponding event rule
117 */
118 public EventRule createRuleAllEvents() {
119 return new EventRule(EVENT_NAME_ALL, LOG_LEVEL_UNSPECIFIED, "");
120 }
121
122 private static String filterStringFromEventName(String eventName) {
123 return "logger_name == \"" + eventName + "\"";
124 }
125
126 private String filterStringFromLogLevel(LogLevelSelector logLevelSelector) {
127 StringBuilder sb = new StringBuilder();
128 sb.append("int_loglevel ");
129
130 switch (logLevelSelector.getLogLevelType()) {
131 case LTTNG_EVENT_LOGLEVEL_RANGE:
132 sb.append(domain.rangeOperator());
133 break;
134 case LTTNG_EVENT_LOGLEVEL_SINGLE:
135 sb.append("==");
136 break;
137 case LTTNG_EVENT_LOGLEVEL_ALL:
138 default:
139 throw new IllegalArgumentException();
140 }
141
142 sb.append(" " + logLevelSelector.getLogLevel());
143 return sb.toString();
144 }
145 }
This page took 0.033236 seconds and 4 git commands to generate.