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
CommitLineData
1df8e5d7
AM
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
19package org.lttng.ust.agent.utils;
20
21import java.util.StringJoiner;
22
9db2c69a 23import org.lttng.tools.ILttngSession;
1df8e5d7
AM
24import org.lttng.ust.agent.session.EventRule;
25import 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 */
9db2c69a 33public class EventRuleFactory {
1df8e5d7
AM
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 */
9db2c69a 39 public final LogLevelSelector LOG_LEVEL_UNSPECIFIED;
1df8e5d7 40
9db2c69a
MJ
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 }
1df8e5d7
AM
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 */
9db2c69a 60 public EventRule createRule(String eventName) {
1df8e5d7
AM
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 */
9db2c69a 73 public EventRule createRule(String eventName, LogLevelSelector logLevelSelector) {
1df8e5d7
AM
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 */
9db2c69a 93 public EventRule createRule(String eventName, LogLevelSelector logLevelSelector, String extraFilter) {
1df8e5d7
AM
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 */
9db2c69a 118 public EventRule createRuleAllEvents() {
1df8e5d7
AM
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
9db2c69a 126 private String filterStringFromLogLevel(LogLevelSelector logLevelSelector) {
1df8e5d7
AM
127 StringBuilder sb = new StringBuilder();
128 sb.append("int_loglevel ");
129
130 switch (logLevelSelector.getLogLevelType()) {
131 case LTTNG_EVENT_LOGLEVEL_RANGE:
9db2c69a 132 sb.append(domain.rangeOperator());
1df8e5d7
AM
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 }
1df8e5d7 145}
This page took 0.028442 seconds and 4 git commands to generate.