Skip to content

Commit f8a5aaf

Browse files
committed
Added request info plugin
1 parent 443176a commit f8a5aaf

File tree

6 files changed

+96
-10
lines changed

6 files changed

+96
-10
lines changed

src/main/java/com/prashantchaubey/exceptionlessclient/configuration/ConfigurationManager.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ public class ConfigurationManager {
3434
@Getter private LastReferenceIdManagerIF lastReferenceIdManager;
3535
@Getter private LogIF log;
3636
@Getter private ModuleCollectorIF moduleCollector;
37+
@Getter private RequestInfoCollectorIF requestInfoCollector;
3738
@Getter private SubmissionClientIF submissionClient;
3839
@Getter private EventQueueIF queue;
3940
@Getter private Configuration configuration;
4041
@Getter private Set<String> defaultTags;
4142
@Getter private Map<String, Object> defaultData;
4243
private List<Consumer<ConfigurationManager>> onChangedHandlers;
4344
@Getter private SettingsManager settingsManager;
45+
@Getter private Set<String> userAgentBotPatterns;
4446
@Getter private PrivateInformationInclusions privateInformationInclusions;
4547
private Set<String> dataExclusions;
4648
private PluginManager pluginManager;
@@ -52,6 +54,7 @@ public ConfigurationManager(
5254
LastReferenceIdManagerIF lastReferenceIdManager,
5355
LogIF log,
5456
ModuleCollectorIF moduleCollector,
57+
RequestInfoCollectorIF requestInfoCollector,
5558
SubmissionClientIF submissionClient,
5659
SettingsClientIF settingsClient,
5760
StorageProviderIF storageProvider,
@@ -71,6 +74,10 @@ public ConfigurationManager(
7174
: lastReferenceIdManager;
7275
this.moduleCollector =
7376
moduleCollector == null ? DefaultModuleCollector.builder().build() : moduleCollector;
77+
this.requestInfoCollector =
78+
requestInfoCollector == null
79+
? DefaultRequestInfoCollector.builder().log(this.log).build()
80+
: requestInfoCollector;
7481
this.settingsManager =
7582
SettingsManager.builder()
7683
.settingsClient(
@@ -79,6 +86,7 @@ public ConfigurationManager(
7986
: settingsClient)
8087
.log(log)
8188
.build();
89+
this.userAgentBotPatterns = new HashSet<>();
8290
this.configuration =
8391
configuration == null ? Configuration.defaultConfiguration() : configuration;
8492
this.submissionClient =
@@ -131,6 +139,10 @@ public void addDataExclusions(String... exclusions) {
131139
dataExclusions.addAll(Arrays.asList(exclusions));
132140
}
133141

142+
public void addUserAgentBotPatterns(String... userAgentBotPatterns) {
143+
this.userAgentBotPatterns.addAll(Arrays.asList(userAgentBotPatterns));
144+
}
145+
134146
public Set<String> getDataExclusions() {
135147
Set<String> combinedExclusions = settingsManager.getSavedServerSettings().getDataExclusions();
136148
combinedExclusions.addAll(dataExclusions);

src/main/java/com/prashantchaubey/exceptionlessclient/configuration/PluginManager.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,18 @@ public class PluginManager {
1818

1919
@Builder
2020
public PluginManager(LogIF log) {
21+
this.log = log;
2122
configureDefaultPlugins();
2223
sortPlugins();
2324
}
2425

2526
private void configureDefaultPlugins() {
2627
addPlugin(ConfigurationDefaultsPlugin.builder().build());
2728
addPlugin(ErrorPlugin.builder().build());
28-
addPlugin(DuplicateErrorCheckerPlugin.builder().build());
29-
addPlugin(EventExclusionPlugin.builder().build());
29+
addPlugin(DuplicateErrorCheckerPlugin.builder().log(this.log).build());
30+
addPlugin(EventExclusionPlugin.builder().log(this.log).build());
3031
addPlugin(ModuleInfoPlugin.builder().build());
32+
addPlugin(RequestInfoPlugin.builder().log(this.log).build());
3133
addPlugin(EnvironmentInfoPlugin.builder().build());
3234
addPlugin(SubmissionMethodPlugin.builder().build());
3335
}

src/main/java/com/prashantchaubey/exceptionlessclient/models/Event.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.prashantchaubey.exceptionlessclient.models.enums.EventPropertyKey;
55
import com.prashantchaubey.exceptionlessclient.models.enums.EventTag;
66
import com.prashantchaubey.exceptionlessclient.models.services.EnvironmentInfo;
7+
import com.prashantchaubey.exceptionlessclient.models.services.RequestInfo;
78
import com.prashantchaubey.exceptionlessclient.models.services.error.Error;
89
import com.prashantchaubey.exceptionlessclient.queue.EventDataFilter;
910
import com.prashantchaubey.exceptionlessclient.queue.EventValidator;
@@ -66,10 +67,6 @@ private void initData(Map<String, Object> data, Set<String> dataExclusions) {
6667
Map.Entry::getKey, entry -> eventDataFilter.filter(entry.getValue())));
6768
}
6869

69-
public void addData(Map<String, Object> data) {
70-
addData(data, new HashSet<>());
71-
}
72-
7370
public void addData(Map<String, Object> data, Set<String> dataExclusions) {
7471
EventDataFilter filter = EventDataFilter.builder().exclusions(dataExclusions).build();
7572
data =
@@ -94,6 +91,10 @@ public void addSubmissionMethod(String submissionMethod) {
9491
data.put(EventPropertyKey.SUBMISSION_METHOD.value(), submissionMethod);
9592
}
9693

94+
public void addRequestInfo(RequestInfo requestInfo) {
95+
data.put(EventPropertyKey.REQUEST_INFO.value(), requestInfo);
96+
}
97+
9798
public Optional<Error> getError() {
9899
return Optional.ofNullable(safeGetAs(data.get(EventPropertyKey.ERROR.value()), Error.class));
99100
}
@@ -112,6 +113,11 @@ public Optional<UserInfo> getUserInfo() {
112113
return Optional.ofNullable(safeGetAs(data.get(EventPropertyKey.USER.value()), UserInfo.class));
113114
}
114115

116+
public Optional<RequestInfo> getRequestInfo() {
117+
return Optional.ofNullable(
118+
safeGetAs(data.get(EventPropertyKey.REQUEST_INFO.value()), RequestInfo.class));
119+
}
120+
115121
public static EventBuilder builder() {
116122
return new EventBuilder();
117123
}

src/main/java/com/prashantchaubey/exceptionlessclient/models/PluginContext.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ public class PluginContext extends Model {
1616
private Exception exception;
1717
private Boolean unhandledError;
1818
private String submissionMethod;
19-
private HttpRequest requestInfo;
19+
private HttpRequest request;
2020

2121
@Builder
2222
public PluginContext(
2323
Exception exception,
2424
Boolean unhandledError,
2525
String submissionMethod,
26-
HttpRequest requestInfo) {
26+
HttpRequest request) {
2727
this.exception = exception;
2828
this.unhandledError = unhandledError;
2929
this.submissionMethod = submissionMethod;
30-
this.requestInfo = requestInfo;
30+
this.request = request;
3131
}
3232

3333
public boolean isUnhandledError() {

src/main/java/com/prashantchaubey/exceptionlessclient/models/enums/EventPropertyKey.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public enum EventPropertyKey {
1010
ENVIRONMENT("@environment"),
1111
EXTRA("@ext"),
1212
SUBMISSION_METHOD("@submission_method"),
13-
VERSION("@version");
13+
VERSION("@version"),
14+
REQUEST_INFO("@request");
1415

1516
private String value;
1617

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.prashantchaubey.exceptionlessclient.plugins.preconfigured;
2+
3+
import com.prashantchaubey.exceptionlessclient.configuration.ConfigurationManager;
4+
import com.prashantchaubey.exceptionlessclient.logging.LogIF;
5+
import com.prashantchaubey.exceptionlessclient.models.Event;
6+
import com.prashantchaubey.exceptionlessclient.models.EventPluginContext;
7+
import com.prashantchaubey.exceptionlessclient.models.services.RequestInfo;
8+
import com.prashantchaubey.exceptionlessclient.plugins.EventPluginIF;
9+
import com.prashantchaubey.exceptionlessclient.services.RequestInfoGetArgs;
10+
import com.prashantchaubey.exceptionlessclient.utils.Utils;
11+
import lombok.Builder;
12+
13+
import java.net.http.HttpRequest;
14+
15+
public class RequestInfoPlugin implements EventPluginIF {
16+
private LogIF log;
17+
18+
@Builder
19+
public RequestInfoPlugin(LogIF log) {
20+
this.log = log;
21+
}
22+
23+
@Override
24+
public int getPriority() {
25+
return 70;
26+
}
27+
28+
@Override
29+
public void run(
30+
EventPluginContext eventPluginContext, ConfigurationManager configurationManager) {
31+
Event event = eventPluginContext.getEvent();
32+
if (event.getRequestInfo().isPresent()) {
33+
return;
34+
}
35+
HttpRequest request = eventPluginContext.getContext().getRequest();
36+
if (request == null) {
37+
return;
38+
}
39+
RequestInfo requestInfo =
40+
configurationManager
41+
.getRequestInfoCollector()
42+
.getRequestInfo(
43+
request,
44+
RequestInfoGetArgs.builder()
45+
.exclusions(configurationManager.getDataExclusions())
46+
.includeCookies(
47+
configurationManager.getPrivateInformationInclusions().getCookies())
48+
.includeIpAddress(
49+
configurationManager.getPrivateInformationInclusions().getIpAddress())
50+
.includePostData(
51+
configurationManager.getPrivateInformationInclusions().getPostData())
52+
.includeQueryString(
53+
configurationManager.getPrivateInformationInclusions().getQueryString())
54+
.build());
55+
56+
if (configurationManager.getUserAgentBotPatterns().stream()
57+
.anyMatch(pattern -> Utils.match(requestInfo.getUserAgent(), pattern))) {
58+
log.info("Cancelling event as the request user agent matches a known bot pattern");
59+
eventPluginContext.getContext().setEventCancelled(true);
60+
return;
61+
}
62+
63+
event.addRequestInfo(requestInfo);
64+
}
65+
}

0 commit comments

Comments
 (0)