Skip to content

Commit 889e820

Browse files
committed
Moved request info and environment info collector logic to respective plugins
1 parent 9a12da0 commit 889e820

File tree

12 files changed

+326
-431
lines changed

12 files changed

+326
-431
lines changed

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,9 @@ public class ConfigurationManager {
3535
private static final Integer API_KEY_MIN_LENGTH = 11;
3636
private static final Integer DEFAULT_HEART_BEAT_INTERVAL_IN_SECS = 30;
3737

38-
@Getter private final EnvironmentInfoCollectorIF environmentInfoCollector;
3938
@Getter private final ErrorParserIF errorParser;
4039
@Getter private final LastReferenceIdManagerIF lastReferenceIdManager;
4140
@Getter private final ModuleCollectorIF moduleCollector;
42-
@Getter private final RequestInfoCollectorIF requestInfoCollector;
4341
@Getter private final SubmissionClientIF submissionClient;
4442
@Getter private final EventQueueIF queue;
4543
@Getter private final Configuration configuration;
@@ -55,34 +53,24 @@ public class ConfigurationManager {
5553

5654
@Builder
5755
public ConfigurationManager(
58-
EnvironmentInfoCollectorIF environmentInfoCollector,
5956
ErrorParserIF errorParser,
6057
LastReferenceIdManagerIF lastReferenceIdManager,
6158
LogCapturerIF logCatpurer,
6259
ModuleCollectorIF moduleCollector,
63-
RequestInfoCollectorIF requestInfoCollector,
6460
SubmissionClientIF submissionClient,
6561
SettingsClientIF settingsClient,
6662
StorageProviderIF storageProvider,
6763
EventQueueIF queue,
6864
Configuration configuration,
6965
Integer maxQueueItems,
7066
Integer processingIntervalInSecs) {
71-
this.environmentInfoCollector =
72-
environmentInfoCollector == null
73-
? DefaultEnvironmentInfoCollector.builder().build()
74-
: environmentInfoCollector;
7567
this.errorParser = errorParser == null ? DefaultErrorParser.builder().build() : errorParser;
7668
this.lastReferenceIdManager =
7769
lastReferenceIdManager == null
7870
? DefaultLastReferenceIdManager.builder().build()
7971
: lastReferenceIdManager;
8072
this.moduleCollector =
8173
moduleCollector == null ? DefaultModuleCollector.builder().build() : moduleCollector;
82-
this.requestInfoCollector =
83-
requestInfoCollector == null
84-
? DefaultRequestInfoCollector.builder().build()
85-
: requestInfoCollector;
8674
this.storageProvider =
8775
storageProvider == null
8876
? InMemoryStorageProvider.builder().maxQueueItems(maxQueueItems).build()

src/main/java/com/exceptionless/exceptionlessclient/configuration/PrivateInformationInclusions.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ public PrivateInformationInclusions(
3333
Boolean ipAddress,
3434
Boolean machineName,
3535
Boolean userName) {
36-
this.queryString = queryString == null || queryString;
37-
this.postData = postData == null || postData;
38-
this.cookies = cookies == null || cookies;
39-
this.ipAddress = ipAddress == null || ipAddress;
40-
this.machineName = machineName == null || machineName;
41-
this.userName = userName == null || userName;
36+
this.queryString = queryString != null && queryString;
37+
this.postData = postData != null && postData;
38+
this.cookies = cookies != null && cookies;
39+
this.ipAddress = ipAddress != null && ipAddress;
40+
this.machineName = machineName != null && machineName;
41+
this.userName = userName != null && userName;
4242
this.propertyChangeSupport = new PropertyChangeSupport(this);
4343
}
4444

src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/EnvironmentInfoPlugin.java

Lines changed: 96 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,48 @@
33
import com.exceptionless.exceptionlessclient.configuration.ConfigurationManager;
44
import com.exceptionless.exceptionlessclient.models.Event;
55
import com.exceptionless.exceptionlessclient.models.EventPluginContext;
6+
import com.exceptionless.exceptionlessclient.models.enums.EnvironmentInfoPropertyKey;
7+
import com.exceptionless.exceptionlessclient.models.services.EnvironmentInfo;
68
import com.exceptionless.exceptionlessclient.plugins.EventPluginIF;
79
import com.exceptionless.exceptionlessclient.services.EnvironmentInfoGetArgs;
10+
import com.sun.management.OperatingSystemMXBean;
811
import lombok.Builder;
12+
import lombok.extern.slf4j.Slf4j;
913

14+
import java.lang.management.ManagementFactory;
15+
import java.net.InetAddress;
16+
import java.net.UnknownHostException;
17+
import java.nio.ByteOrder;
18+
import java.util.HashMap;
19+
import java.util.Map;
20+
21+
@Slf4j
1022
public class EnvironmentInfoPlugin implements EventPluginIF {
1123
private static final Integer DEFAULT_PRIORITY = 80;
1224

25+
private EnvironmentInfo defaultEnvironmentInfo;
26+
1327
@Builder
14-
public EnvironmentInfoPlugin() {}
28+
public EnvironmentInfoPlugin() {
29+
initDefaultEnvironmentInfo();
30+
}
31+
32+
private void initDefaultEnvironmentInfo() {
33+
OperatingSystemMXBean operatingSystemMXBean =
34+
(OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
35+
this.defaultEnvironmentInfo =
36+
EnvironmentInfo.builder()
37+
.processorCount(Runtime.getRuntime().availableProcessors())
38+
.totalPhysicalMemory(operatingSystemMXBean.getTotalPhysicalMemorySize())
39+
.osName(operatingSystemMXBean.getName())
40+
.architecture(operatingSystemMXBean.getArch())
41+
.osVersion(operatingSystemMXBean.getVersion())
42+
.runtimeVersion(System.getProperty("java.version"))
43+
.processName(String.valueOf(ProcessHandle.current().pid()))
44+
.processName(ManagementFactory.getRuntimeMXBean().getName())
45+
.commandLine(ProcessHandle.current().info().commandLine().orElse(null))
46+
.build();
47+
}
1548

1649
@Override
1750
public int getPriority() {
@@ -24,15 +57,68 @@ public void run(
2457
Event event = eventPluginContext.getEvent();
2558
if (event.getEnvironmentInfo().isEmpty()) {
2659
event.addEnvironmentInfo(
27-
configurationManager
28-
.getEnvironmentInfoCollector()
29-
.getEnvironmentInfo(
30-
EnvironmentInfoGetArgs.builder()
31-
.includeIpAddress(
32-
configurationManager.getPrivateInformationInclusions().getIpAddress())
33-
.includeMachineName(
34-
configurationManager.getPrivateInformationInclusions().getMachineName())
35-
.build()));
60+
getEnvironmentInfo(
61+
EnvironmentInfoGetArgs.builder()
62+
.includeIpAddress(
63+
configurationManager.getPrivateInformationInclusions().getIpAddress())
64+
.includeMachineName(
65+
configurationManager.getPrivateInformationInclusions().getMachineName())
66+
.build()));
67+
}
68+
}
69+
70+
public EnvironmentInfo getEnvironmentInfo(EnvironmentInfoGetArgs args) {
71+
OperatingSystemMXBean operatingSystemMXBean =
72+
(OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
73+
74+
EnvironmentInfo.EnvironmentInfoBuilder<?, ?> builder =
75+
EnvironmentInfo.builder()
76+
.processorCount(defaultEnvironmentInfo.getProcessorCount())
77+
.totalPhysicalMemory(defaultEnvironmentInfo.getTotalPhysicalMemory())
78+
.availablePhysicalMemory(operatingSystemMXBean.getFreePhysicalMemorySize())
79+
.commandLine(defaultEnvironmentInfo.getCommandLine())
80+
.processName(defaultEnvironmentInfo.getProcessName())
81+
.processId(defaultEnvironmentInfo.getProcessId())
82+
.processMemorySize(ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed())
83+
.threadId(String.valueOf(Thread.currentThread().getId()))
84+
.architecture(defaultEnvironmentInfo.getArchitecture())
85+
.osName(defaultEnvironmentInfo.getOsName())
86+
.osVersion(defaultEnvironmentInfo.getOsVersion())
87+
.runtimeVersion(defaultEnvironmentInfo.getRuntimeVersion())
88+
.data(getData());
89+
90+
try {
91+
InetAddress localhost = InetAddress.getLocalHost();
92+
if (args.isIncludeMachineName()) {
93+
builder.machineName(localhost.getHostName());
94+
}
95+
if (args.isIncludeIpAddress()) {
96+
builder.ipAddress(localhost.getHostAddress());
97+
}
98+
} catch (UnknownHostException e) {
99+
log.error("Error while getting machine name", e);
36100
}
101+
102+
return builder.build();
103+
}
104+
105+
private Map<String, Object> getData() {
106+
Map<String, Object> data = new HashMap<>();
107+
OperatingSystemMXBean operatingSystemMXBean =
108+
(OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
109+
data.put(
110+
EnvironmentInfoPropertyKey.LOAD_AVG.value(),
111+
String.valueOf(operatingSystemMXBean.getSystemLoadAverage()));
112+
data.put(EnvironmentInfoPropertyKey.TMP_DIR.value(), System.getProperty("java.io.tmpdir"));
113+
data.put(
114+
EnvironmentInfoPropertyKey.UP_TIME.value(),
115+
String.valueOf(ManagementFactory.getRuntimeMXBean().getUptime()));
116+
data.put(EnvironmentInfoPropertyKey.ENDIANESS.value(), getEndianess());
117+
118+
return data;
119+
}
120+
121+
private String getEndianess() {
122+
return ByteOrder.nativeOrder().equals(ByteOrder.BIG_ENDIAN) ? "Big-endian" : "Little-endian";
37123
}
38124
}

src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java

Lines changed: 64 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@
1010
import lombok.Builder;
1111
import lombok.extern.slf4j.Slf4j;
1212

13+
import java.net.InetAddress;
14+
import java.net.URI;
15+
import java.net.UnknownHostException;
1316
import java.net.http.HttpRequest;
17+
import java.util.Map;
18+
import java.util.Set;
19+
import java.util.stream.Collectors;
1420

1521
@Slf4j
1622
public class RequestInfoPlugin implements EventPluginIF {
@@ -36,21 +42,18 @@ public void run(
3642
return;
3743
}
3844
RequestInfo requestInfo =
39-
configurationManager
40-
.getRequestInfoCollector()
41-
.getRequestInfo(
42-
request,
43-
RequestInfoGetArgs.builder()
44-
.exclusions(configurationManager.getDataExclusions())
45-
.includeCookies(
46-
configurationManager.getPrivateInformationInclusions().getCookies())
47-
.includeIpAddress(
48-
configurationManager.getPrivateInformationInclusions().getIpAddress())
49-
.includePostData(
50-
configurationManager.getPrivateInformationInclusions().getPostData())
51-
.includeQueryString(
52-
configurationManager.getPrivateInformationInclusions().getQueryString())
53-
.build());
45+
getRequestInfo(
46+
request,
47+
RequestInfoGetArgs.builder()
48+
.exclusions(configurationManager.getDataExclusions())
49+
.includeCookies(configurationManager.getPrivateInformationInclusions().getCookies())
50+
.includeIpAddress(
51+
configurationManager.getPrivateInformationInclusions().getIpAddress())
52+
.includePostData(
53+
configurationManager.getPrivateInformationInclusions().getPostData())
54+
.includeQueryString(
55+
configurationManager.getPrivateInformationInclusions().getQueryString())
56+
.build());
5457

5558
if (configurationManager.getUserAgentBotPatterns().stream()
5659
.anyMatch(pattern -> Utils.match(requestInfo.getUserAgent(), pattern))) {
@@ -61,4 +64,50 @@ public void run(
6164

6265
event.addRequestInfo(requestInfo);
6366
}
67+
68+
public RequestInfo getRequestInfo(HttpRequest request, RequestInfoGetArgs args) {
69+
RequestInfo.RequestInfoBuilder<?, ?> builder =
70+
RequestInfo.builder()
71+
.userAgent(request.headers().firstValue("User-Agent").orElse(null))
72+
.secure(isSecure(request.uri()))
73+
.httpMethod(request.method())
74+
.host(request.uri().getHost())
75+
.path(request.uri().getPath())
76+
.port(request.uri().getPort());
77+
78+
if (args.isIncludeIpAddress()) {
79+
try {
80+
InetAddress address = InetAddress.getByName(request.uri().getHost());
81+
builder.clientIpAddress(address.getHostAddress());
82+
} catch (UnknownHostException e) {
83+
log.error(
84+
String.format("Error while getting ip-address for host: %s", request.uri().getHost()));
85+
}
86+
}
87+
88+
if (args.isIncludeCookies()) {
89+
builder.cookies(filterExclusions(Utils.getCookies(request), args.getExclusions()));
90+
}
91+
92+
if (args.isIncludeQueryString()) {
93+
builder.queryString(
94+
filterExclusions(Utils.getQueryParams(request.uri()), args.getExclusions()));
95+
}
96+
97+
// todo get post data from request.
98+
99+
return builder.build();
100+
}
101+
102+
private <X> Map<String, X> filterExclusions(Map<String, X> map, Set<String> exclusions) {
103+
return map.entrySet().stream()
104+
.filter(
105+
entry ->
106+
exclusions.stream().noneMatch(exclusion -> Utils.match(entry.getKey(), exclusion)))
107+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
108+
}
109+
110+
private boolean isSecure(URI uri) {
111+
return uri.getScheme().contains("https");
112+
}
64113
}

src/main/java/com/exceptionless/exceptionlessclient/services/DefaultEnvironmentInfoCollector.java

Lines changed: 0 additions & 97 deletions
This file was deleted.

0 commit comments

Comments
 (0)