Skip to content

Commit bc7ad6a

Browse files
authored
Merge pull request #51 from exceptionless/clean-services
Moving service logic to plugins
2 parents 0288de6 + ba267cb commit bc7ad6a

38 files changed

+412
-615
lines changed

Diff for: src/main/java/com/exceptionless/exceptionlessclient/configuration/ConfigurationManager.java

-19
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,7 @@ 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;
39-
@Getter private final ErrorParserIF errorParser;
4038
@Getter private final LastReferenceIdManagerIF lastReferenceIdManager;
41-
@Getter private final ModuleCollectorIF moduleCollector;
42-
@Getter private final RequestInfoCollectorIF requestInfoCollector;
4339
@Getter private final SubmissionClientIF submissionClient;
4440
@Getter private final EventQueueIF queue;
4541
@Getter private final Configuration configuration;
@@ -55,34 +51,19 @@ public class ConfigurationManager {
5551

5652
@Builder
5753
public ConfigurationManager(
58-
EnvironmentInfoCollectorIF environmentInfoCollector,
59-
ErrorParserIF errorParser,
6054
LastReferenceIdManagerIF lastReferenceIdManager,
6155
LogCapturerIF logCatpurer,
62-
ModuleCollectorIF moduleCollector,
63-
RequestInfoCollectorIF requestInfoCollector,
6456
SubmissionClientIF submissionClient,
6557
SettingsClientIF settingsClient,
6658
StorageProviderIF storageProvider,
6759
EventQueueIF queue,
6860
Configuration configuration,
6961
Integer maxQueueItems,
7062
Integer processingIntervalInSecs) {
71-
this.environmentInfoCollector =
72-
environmentInfoCollector == null
73-
? DefaultEnvironmentInfoCollector.builder().build()
74-
: environmentInfoCollector;
75-
this.errorParser = errorParser == null ? DefaultErrorParser.builder().build() : errorParser;
7663
this.lastReferenceIdManager =
7764
lastReferenceIdManager == null
7865
? DefaultLastReferenceIdManager.builder().build()
7966
: lastReferenceIdManager;
80-
this.moduleCollector =
81-
moduleCollector == null ? DefaultModuleCollector.builder().build() : moduleCollector;
82-
this.requestInfoCollector =
83-
requestInfoCollector == null
84-
? DefaultRequestInfoCollector.builder().build()
85-
: requestInfoCollector;
8667
this.storageProvider =
8768
storageProvider == null
8869
? InMemoryStorageProvider.builder().maxQueueItems(maxQueueItems).build()

Diff for: src/main/java/com/exceptionless/exceptionlessclient/configuration/PrivateInformationInclusions.java

+6-6
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

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/services/EnvironmentInfo.java renamed to src/main/java/com/exceptionless/exceptionlessclient/models/EnvironmentInfo.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.exceptionless.exceptionlessclient.models.services;
1+
package com.exceptionless.exceptionlessclient.models;
22

33
import com.exceptionless.exceptionlessclient.models.base.Model;
44
import lombok.EqualsAndHashCode;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/Event.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package com.exceptionless.exceptionlessclient.models;
22

3-
import com.exceptionless.exceptionlessclient.models.base.Model;
43
import com.exceptionless.exceptionlessclient.enums.EventPropertyKey;
54
import com.exceptionless.exceptionlessclient.enums.EventTag;
6-
import com.exceptionless.exceptionlessclient.models.services.EnvironmentInfo;
7-
import com.exceptionless.exceptionlessclient.models.services.RequestInfo;
8-
import com.exceptionless.exceptionlessclient.models.services.error.Error;
5+
import com.exceptionless.exceptionlessclient.models.base.Model;
6+
import com.exceptionless.exceptionlessclient.models.error.Error;
97
import com.exceptionless.exceptionlessclient.queue.EventDataFilter;
108
import com.exceptionless.exceptionlessclient.queue.EventValidator;
119
import com.exceptionless.exceptionlessclient.utils.Utils;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/services/Module.java renamed to src/main/java/com/exceptionless/exceptionlessclient/models/Module.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.exceptionless.exceptionlessclient.models.services;
1+
package com.exceptionless.exceptionlessclient.models;
22

33
import com.exceptionless.exceptionlessclient.models.base.Model;
44
import lombok.EqualsAndHashCode;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/services/RequestInfo.java renamed to src/main/java/com/exceptionless/exceptionlessclient/models/RequestInfo.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.exceptionless.exceptionlessclient.models.services;
1+
package com.exceptionless.exceptionlessclient.models;
22

33
import com.exceptionless.exceptionlessclient.models.base.Model;
44
import lombok.Builder;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/services/error/Error.java renamed to src/main/java/com/exceptionless/exceptionlessclient/models/error/Error.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.exceptionless.exceptionlessclient.models.services.error;
1+
package com.exceptionless.exceptionlessclient.models.error;
22

3-
import com.exceptionless.exceptionlessclient.models.services.Module;
3+
import com.exceptionless.exceptionlessclient.models.Module;
44
import lombok.Builder;
55
import lombok.Data;
66
import lombok.EqualsAndHashCode;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/services/error/InnerError.java renamed to src/main/java/com/exceptionless/exceptionlessclient/models/error/InnerError.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.exceptionless.exceptionlessclient.models.services.error;
1+
package com.exceptionless.exceptionlessclient.models.error;
22

33
import com.exceptionless.exceptionlessclient.models.base.Model;
44
import lombok.EqualsAndHashCode;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/services/error/Method.java renamed to src/main/java/com/exceptionless/exceptionlessclient/models/error/Method.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.exceptionless.exceptionlessclient.models.services.error;
1+
package com.exceptionless.exceptionlessclient.models.error;
22

33
import com.exceptionless.exceptionlessclient.models.base.Model;
44
import lombok.EqualsAndHashCode;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/services/error/Parameter.java renamed to src/main/java/com/exceptionless/exceptionlessclient/models/error/Parameter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.exceptionless.exceptionlessclient.models.services.error;
1+
package com.exceptionless.exceptionlessclient.models.error;
22

33
import com.exceptionless.exceptionlessclient.models.base.Model;
44
import lombok.EqualsAndHashCode;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/services/error/StackFrame.java renamed to src/main/java/com/exceptionless/exceptionlessclient/models/error/StackFrame.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.exceptionless.exceptionlessclient.models.services.error;
1+
package com.exceptionless.exceptionlessclient.models.error;
22

33
import lombok.EqualsAndHashCode;
44
import lombok.Value;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/DuplicateErrorCheckerPlugin.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
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.services.error.Error;
7-
import com.exceptionless.exceptionlessclient.models.services.error.InnerError;
6+
import com.exceptionless.exceptionlessclient.models.error.Error;
7+
import com.exceptionless.exceptionlessclient.models.error.InnerError;
88
import com.exceptionless.exceptionlessclient.plugins.EventPluginIF;
99
import com.exceptionless.exceptionlessclient.plugins.MergedEvent;
1010
import lombok.Builder;
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,50 @@
11
package com.exceptionless.exceptionlessclient.plugins.preconfigured;
22

33
import com.exceptionless.exceptionlessclient.configuration.ConfigurationManager;
4+
import com.exceptionless.exceptionlessclient.enums.EnvironmentInfoPropertyKey;
5+
import com.exceptionless.exceptionlessclient.models.EnvironmentInfo;
46
import com.exceptionless.exceptionlessclient.models.Event;
57
import com.exceptionless.exceptionlessclient.models.EventPluginContext;
68
import com.exceptionless.exceptionlessclient.plugins.EventPluginIF;
7-
import com.exceptionless.exceptionlessclient.services.EnvironmentInfoGetArgs;
9+
import com.exceptionless.exceptionlessclient.plugins.preconfigured.args.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+
private 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
}

Diff for: src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/ErrorPlugin.java

+28-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
package com.exceptionless.exceptionlessclient.plugins.preconfigured;
22

33
import com.exceptionless.exceptionlessclient.configuration.ConfigurationManager;
4-
import com.exceptionless.exceptionlessclient.models.Event;
5-
import com.exceptionless.exceptionlessclient.models.EventPluginContext;
64
import com.exceptionless.exceptionlessclient.enums.EventPropertyKey;
75
import com.exceptionless.exceptionlessclient.enums.EventType;
6+
import com.exceptionless.exceptionlessclient.models.Event;
7+
import com.exceptionless.exceptionlessclient.models.EventPluginContext;
8+
import com.exceptionless.exceptionlessclient.models.error.Error;
9+
import com.exceptionless.exceptionlessclient.models.error.StackFrame;
810
import com.exceptionless.exceptionlessclient.plugins.EventPluginIF;
911
import lombok.Builder;
1012

11-
import java.util.HashSet;
12-
import java.util.Map;
13-
import java.util.Set;
13+
import java.util.*;
14+
import java.util.stream.Collectors;
1415

1516
public class ErrorPlugin implements EventPluginIF {
1617
private static final Integer DEFAULT_PRIORITY = 30;
@@ -37,9 +38,30 @@ public void run(
3738
return;
3839
}
3940

40-
event.addError(configurationManager.getErrorParser().parse(exception));
41+
event.addError(parse(exception));
4142

4243
Set<String> dataExclusions = new HashSet<>(configurationManager.getDataExclusions());
4344
event.addData(Map.of(EventPropertyKey.EXTRA.value(), exception), dataExclusions);
4445
}
46+
47+
private Error parse(Exception exception) {
48+
return Error.builder()
49+
.type(exception.getClass().getCanonicalName())
50+
.message(exception.getMessage())
51+
.stackTrace(getStackFrames(exception))
52+
.build();
53+
}
54+
55+
private List<StackFrame> getStackFrames(Exception exception) {
56+
return Arrays.stream(exception.getStackTrace())
57+
.map(
58+
stackTraceElement ->
59+
StackFrame.builder()
60+
.name(stackTraceElement.getMethodName())
61+
.filename(stackTraceElement.getFileName())
62+
.lineNumber(stackTraceElement.getLineNumber())
63+
.declaringType(stackTraceElement.getClassName())
64+
.build())
65+
.collect(Collectors.toList());
66+
}
4567
}

Diff for: src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/EventExclusionPlugin.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.exceptionless.exceptionlessclient.plugins.preconfigured;
22

33
import com.exceptionless.exceptionlessclient.configuration.ConfigurationManager;
4+
import com.exceptionless.exceptionlessclient.enums.EventType;
45
import com.exceptionless.exceptionlessclient.models.Event;
56
import com.exceptionless.exceptionlessclient.models.EventPluginContext;
6-
import com.exceptionless.exceptionlessclient.enums.EventType;
7-
import com.exceptionless.exceptionlessclient.models.services.error.Error;
7+
import com.exceptionless.exceptionlessclient.models.error.Error;
88
import com.exceptionless.exceptionlessclient.plugins.EventPluginIF;
99
import com.exceptionless.exceptionlessclient.settings.ServerSettings;
1010
import lombok.Builder;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/ModuleInfoPlugin.java

+13-3
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,27 @@
22

33
import com.exceptionless.exceptionlessclient.configuration.ConfigurationManager;
44
import com.exceptionless.exceptionlessclient.models.EventPluginContext;
5-
import com.exceptionless.exceptionlessclient.models.services.error.Error;
5+
import com.exceptionless.exceptionlessclient.models.Module;
6+
import com.exceptionless.exceptionlessclient.models.error.Error;
67
import com.exceptionless.exceptionlessclient.plugins.EventPluginIF;
78
import lombok.Builder;
89

10+
import java.util.List;
911
import java.util.Optional;
12+
import java.util.stream.Collectors;
1013

1114
public class ModuleInfoPlugin implements EventPluginIF {
1215
private static final Integer DEFAULT_PRIORITY = 50;
1316

17+
private final List<Module> modules;
18+
1419
@Builder
15-
public ModuleInfoPlugin() {}
20+
public ModuleInfoPlugin() {
21+
this.modules =
22+
ModuleLayer.boot().modules().stream()
23+
.map(module -> Module.builder().name(module.getName()).build())
24+
.collect(Collectors.toList());
25+
}
1626

1727
@Override
1828
public int getPriority() {
@@ -32,6 +42,6 @@ public void run(
3242
return;
3343
}
3444

35-
error.setModules(configurationManager.getModuleCollector().getModules());
45+
error.setModules(modules);
3646
}
3747
}

0 commit comments

Comments
 (0)