Skip to content

Commit 740f884

Browse files
authored
Merge pull request #9 from pc9795/main
More migrations from Java script client
2 parents 907047c + 8a6a0ce commit 740f884

File tree

63 files changed

+1504
-830
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1504
-830
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<dependency>
1313
<groupId>org.projectlombok</groupId>
1414
<artifactId>lombok</artifactId>
15-
<version>1.18.10</version>
15+
<version>1.18.14</version>
1616
</dependency>
1717
<dependency>
1818
<groupId>ch.qos.logback</groupId>
@@ -39,7 +39,7 @@
3939
<path>
4040
<groupId>org.projectlombok</groupId>
4141
<artifactId>lombok</artifactId>
42-
<version>1.18.10</version>
42+
<version>1.18.14</version>
4343
</path>
4444
</annotationProcessorPaths>
4545
</configuration>
Lines changed: 70 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.prashantchaubey.exceptionlessclient;
22

3+
import com.prashantchaubey.exceptionlessclient.configuration.Configuration;
34
import com.prashantchaubey.exceptionlessclient.configuration.ConfigurationManager;
45
import com.prashantchaubey.exceptionlessclient.models.Event;
56
import com.prashantchaubey.exceptionlessclient.models.EventPluginContext;
@@ -8,84 +9,108 @@
89
import com.prashantchaubey.exceptionlessclient.models.enums.EventPropertyKey;
910
import com.prashantchaubey.exceptionlessclient.models.enums.EventType;
1011
import com.prashantchaubey.exceptionlessclient.models.submission.SubmissionResponse;
11-
import com.prashantchaubey.exceptionlessclient.plugins.EventPluginManager;
12+
import com.prashantchaubey.exceptionlessclient.plugins.EventPluginRunner;
1213
import lombok.Builder;
13-
import lombok.Getter;
1414

1515
import java.time.LocalDate;
1616
import java.util.Timer;
1717
import java.util.TimerTask;
18-
import java.util.function.Consumer;
1918

20-
@Builder(builderClassName = "ExceptionlessClientInternalBuilder")
21-
@Getter
2219
public class ExceptionlessClient {
2320
private static final int UPDATE_SETTINGS_TIMER_INITIAL_DELAY = 5000;
2421

2522
private ConfigurationManager configurationManager;
23+
private EventPluginRunner eventPluginRunner;
24+
private Timer updateSettingsTimer;
2625

27-
// lombok ignored fields
28-
private EventPluginManager $eventPluginManager;
29-
private Timer $updateSettingsTimer = new Timer();
26+
@Builder
27+
public ExceptionlessClient(ConfigurationManager configurationManager) {
28+
this.configurationManager = configurationManager;
29+
this.eventPluginRunner =
30+
EventPluginRunner.builder().configurationManager(this.configurationManager).build();
31+
this.updateSettingsTimer = new Timer();
32+
init();
33+
}
34+
35+
private void init() {
36+
updateSettingsTimer.schedule(
37+
new TimerTask() {
38+
@Override
39+
public void run() {
40+
configurationManager.getSettingsManager().updateSettingsThreadSafe();
41+
}
42+
},
43+
UPDATE_SETTINGS_TIMER_INITIAL_DELAY,
44+
configurationManager.getConfiguration().getUpdateSettingsWhenIdleInterval());
45+
46+
configurationManager.onChanged(
47+
ignored -> configurationManager.getSettingsManager().updateSettingsThreadSafe());
48+
configurationManager
49+
.getQueue()
50+
.onEventsPosted(
51+
(ignored1, ignored2) ->
52+
configurationManager.getSettingsManager().updateSettingsThreadSafe());
53+
}
3054

3155
public static ExceptionlessClient from(String apiKey, String serverUrl) {
3256
return ExceptionlessClient.builder()
33-
.configurationManager(ConfigurationManager.from(apiKey, serverUrl))
57+
.configurationManager(
58+
ConfigurationManager.builder()
59+
.configuration(Configuration.builder().apiKey(apiKey).serverUrl(serverUrl).build())
60+
.build())
3461
.build();
3562
}
3663

37-
public void submitException(Exception exception, Consumer<EventPluginContext> handler) {
64+
public void submitException(Exception exception) {
3865
Event event = createException().build();
3966
PluginContext pluginContext = PluginContext.builder().exception(exception).build();
40-
submitEvent(EventPluginContext.builder().event(event).context(pluginContext).build(), handler);
67+
submitEvent(EventPluginContext.builder().event(event).context(pluginContext).build());
4168
}
4269

43-
private Event.EventBuilderImpl createException() {
70+
private Event.EventBuilder createException() {
4471
return createEvent().type(EventType.ERROR.value());
4572
}
4673

47-
public void submitUnhandledException(
48-
Exception exception, String submissionMethod, Consumer<EventPluginContext> handler) {
74+
public void submitUnhandledException(Exception exception, String submissionMethod) {
4975
Event event = createException().build();
5076
PluginContext pluginContext =
5177
PluginContext.builder()
5278
.exception(exception)
53-
.markAsUnhandledError()
79+
.unhandledError(true)
5480
.submissionMethod(submissionMethod)
5581
.build();
56-
submitEvent(EventPluginContext.builder().event(event).context(pluginContext).build(), handler);
82+
submitEvent(EventPluginContext.builder().event(event).context(pluginContext).build());
5783
}
5884

59-
public void submitFeatureUsage(String feature, Consumer<EventPluginContext> handler) {
85+
public void submitFeatureUsage(String feature) {
6086
Event event = createFeatureUsage(feature).build();
61-
submitEvent(EventPluginContext.from(event), handler);
87+
submitEvent(EventPluginContext.from(event));
6288
}
6389

64-
private Event.EventBuilderImpl createFeatureUsage(String feature) {
90+
private Event.EventBuilder createFeatureUsage(String feature) {
6591
return createEvent().type(EventType.USAGE.value()).source(feature);
6692
}
6793

68-
public void submitLog(String message, Consumer<EventPluginContext> handler) {
69-
submitLog(message, null, null, handler);
94+
public void submitLog(String message) {
95+
submitLog(message, null, null);
7096
}
7197

72-
public void submitLog(String message, String source, Consumer<EventPluginContext> handler) {
73-
submitLog(message, source, null, handler);
98+
public void submitLog(String message, String source) {
99+
submitLog(message, source, null);
74100
}
75101

76-
public void submitLog(
77-
String message, String source, String level, Consumer<EventPluginContext> handler) {
102+
public void submitLog(String message, String source, String level) {
78103
Event event = createLog(message, source, level).build();
79-
submitEvent(EventPluginContext.from(event), handler);
104+
submitEvent(EventPluginContext.from(event));
80105
}
81106

82-
private Event.EventBuilderImpl createLog(String message, String source, String level) {
107+
private Event.EventBuilder createLog(String message, String source, String level) {
83108
if (source == null) {
84109
// Calling method
85110
source = Thread.currentThread().getStackTrace()[2].getMethodName();
86111
}
87112

88-
Event.EventBuilderImpl builder =
113+
Event.EventBuilder builder =
89114
createEvent().type(EventType.LOG.value()).source(source).message(message);
90115
if (level == null) {
91116
return builder;
@@ -94,44 +119,33 @@ private Event.EventBuilderImpl createLog(String message, String source, String l
94119
return builder.property(EventPropertyKey.LOG_LEVEL.value(), level);
95120
}
96121

97-
public void submitNotFound(String resource, Consumer<EventPluginContext> handler) {
122+
public void submitNotFound(String resource) {
98123
Event event = createNotFound(resource).build();
99-
submitEvent(EventPluginContext.from(event), handler);
124+
submitEvent(EventPluginContext.from(event));
100125
}
101126

102-
private Event.EventBuilderImpl createNotFound(String resource) {
127+
private Event.EventBuilder createNotFound(String resource) {
103128
return createEvent().type(EventType.NOT_FOUND.value()).source(resource);
104129
}
105130

106-
public void submitSessionStart(Consumer<EventPluginContext> handler) {
131+
public void submitSessionStart() {
107132
Event event = createSessionStart().build();
108-
submitEvent(EventPluginContext.from(event), handler);
133+
submitEvent(EventPluginContext.from(event));
109134
}
110135

111-
private Event.EventBuilderImpl createSessionStart() {
136+
private Event.EventBuilder createSessionStart() {
112137
return createEvent().type(EventType.SESSION.value());
113138
}
114139

115-
private Event.EventBuilderImpl createEvent() {
116-
return Event.builder(configurationManager.getDataExclusions()).date(LocalDate.now());
140+
private Event.EventBuilder createEvent() {
141+
return Event.builder()
142+
.dataExclusions(configurationManager.getDataExclusions())
143+
.date(LocalDate.now());
117144
}
118145

119-
private void submitEvent(
120-
EventPluginContext eventPluginContext, Consumer<EventPluginContext> handler) {
121-
$eventPluginManager.run(
122-
eventPluginContext,
123-
evc -> {
124-
if (evc.getContext().isEventCancelled()) {
125-
return;
126-
}
127-
configurationManager.getQueue().enqueue(evc.getEvent());
128-
if (evc.getEvent().getReferenceId() != null) {
129-
configurationManager
130-
.getLastReferenceIdManager()
131-
.setLast(evc.getEvent().getReferenceId());
132-
}
133-
handler.accept(evc);
134-
});
146+
// todo this should be async
147+
private void submitEvent(EventPluginContext eventPluginContext) {
148+
eventPluginRunner.run(eventPluginContext);
135149
}
136150

137151
public void submitSessionEnd(String sessionOrUserId) {
@@ -141,12 +155,8 @@ public void submitSessionEnd(String sessionOrUserId) {
141155
configurationManager.getSubmissionClient().sendHeartBeat(sessionOrUserId, true);
142156
}
143157

144-
public void submitSessionHeartbeat(String sessionOrUserId) {
145-
configurationManager.submitSessionHeartbeat(sessionOrUserId);
146-
}
147-
148-
public void updateEmailAndDescription(
149-
String referenceId, String email, String description, Consumer<SubmissionResponse> handler) {
158+
public SubmissionResponse updateEmailAndDescription(
159+
String referenceId, String email, String description) {
150160
SubmissionResponse response =
151161
configurationManager
152162
.getSubmissionClient()
@@ -160,38 +170,11 @@ public void updateEmailAndDescription(
160170
String.format(
161171
"Failed to submit user email and description for event: %s", referenceId));
162172
}
163-
handler.accept(response);
173+
174+
return response;
164175
}
165176

166177
public String getLastReferenceId() {
167178
return configurationManager.getLastReferenceIdManager().getLast();
168179
}
169-
170-
public static ExceptionlessClientBuilder builder() {
171-
return new ExceptionlessClientBuilder();
172-
}
173-
174-
public static class ExceptionlessClientBuilder extends ExceptionlessClientInternalBuilder {
175-
@Override
176-
public ExceptionlessClient build() {
177-
ExceptionlessClient client = super.build();
178-
client.init();
179-
180-
return client;
181-
}
182-
}
183-
184-
private void init() {
185-
$updateSettingsTimer.schedule(
186-
new TimerTask() {
187-
@Override
188-
public void run() {
189-
configurationManager.getSettingsManager().updateSettingsThreadSafe();
190-
}
191-
},
192-
UPDATE_SETTINGS_TIMER_INITIAL_DELAY,
193-
configurationManager.getConfiguration().getUpdateSettingsWhenIdleInterval());
194-
$eventPluginManager =
195-
EventPluginManager.builder().configurationManager(configurationManager).build();
196-
}
197180
}

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

Lines changed: 92 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,104 @@
33
import lombok.Builder;
44
import lombok.Getter;
55

6-
@Builder
7-
@Getter
6+
import java.beans.PropertyChangeListener;
7+
import java.beans.PropertyChangeSupport;
8+
89
public class Configuration {
9-
public static final String USER_AGENT = "exceptionless-java/1.0";
10+
public static final String USER_AGENT = "exceptionless-java";
11+
12+
@Getter private String apiKey;
13+
@Getter private String serverUrl;
14+
@Getter private String configServerUrl;
15+
@Getter private String heartbeatServerUrl;
16+
@Getter private Long updateSettingsWhenIdleInterval;
17+
@Getter private Integer submissionBatchSize;
18+
@Getter private Integer submissionClientTimeoutInMillis;
19+
@Getter private Integer settingsClientTimeoutInMillis;
20+
private PropertyChangeSupport propertyChangeSupport;
1021

11-
private String apiKey;
12-
@Builder.Default private String serverUrl = "https://collector.exceptionless.io";
13-
@Builder.Default private String configServerUrl = "https://config.exceptionless.io";
14-
@Builder.Default private String heartbeatServerUrl = "https://heartbeat.exceptionless.io";
15-
@Builder.Default private long updateSettingsWhenIdleInterval = 120000;
16-
@Builder.Default private boolean includePrivateInformation = true;
17-
@Builder.Default private int submissionBatchSize = 50;
18-
@Builder.Default private int submissionClientTimeoutInMillis = 100;
19-
@Builder.Default private int settingsClientTimeoutInMillis = 100;
22+
@Builder
23+
public Configuration(
24+
String apiKey,
25+
String serverUrl,
26+
String configServerUrl,
27+
String heartbeatServerUrl,
28+
Long updateSettingsWhenIdleInterval,
29+
Integer submissionBatchSize,
30+
Integer submissionClientTimeoutInMillis,
31+
Integer settingsClientTimeoutInMillis) {
32+
this.apiKey = apiKey;
33+
this.serverUrl = serverUrl == null ? "https://collector.exceptionless.io" : serverUrl;
34+
this.configServerUrl =
35+
configServerUrl == null ? "https://config.exceptionless.io" : configServerUrl;
36+
this.heartbeatServerUrl =
37+
heartbeatServerUrl == null ? "https://heartbeat.exceptionless.io" : heartbeatServerUrl;
38+
this.updateSettingsWhenIdleInterval =
39+
updateSettingsWhenIdleInterval == null ? 12000L : updateSettingsWhenIdleInterval;
40+
this.submissionBatchSize = submissionBatchSize == null ? 50 : submissionBatchSize;
41+
this.submissionClientTimeoutInMillis =
42+
submissionClientTimeoutInMillis == null ? 100 : submissionClientTimeoutInMillis;
43+
this.settingsClientTimeoutInMillis =
44+
settingsClientTimeoutInMillis == null ? 100 : settingsClientTimeoutInMillis;
45+
this.propertyChangeSupport = new PropertyChangeSupport(this);
46+
}
2047

21-
public boolean isApiKeyValid() {
22-
return apiKey != null && apiKey.length() > 10;
48+
public void addPropertyChangeListener(PropertyChangeListener listener) {
49+
propertyChangeSupport.addPropertyChangeListener(listener);
2350
}
2451

2552
public static Configuration defaultConfiguration() {
2653
return Configuration.builder().build();
2754
}
55+
56+
public void setApiKey(String apiKey) {
57+
String prevValue = this.apiKey;
58+
this.apiKey = apiKey;
59+
propertyChangeSupport.firePropertyChange("apiKey", prevValue, apiKey);
60+
}
61+
62+
public void setServerUrl(String serverUrl) {
63+
String prevValue = this.serverUrl;
64+
this.serverUrl = serverUrl;
65+
propertyChangeSupport.firePropertyChange("serverUrl", prevValue, serverUrl);
66+
}
67+
68+
public void setConfigServerUrl(String configServerUrl) {
69+
String prevValue = this.configServerUrl;
70+
this.configServerUrl = configServerUrl;
71+
propertyChangeSupport.firePropertyChange("configServerUrl", prevValue, configServerUrl);
72+
}
73+
74+
public void setHeartbeatServerUrl(String heartbeatServerUrl) {
75+
String prevValue = this.heartbeatServerUrl;
76+
this.heartbeatServerUrl = heartbeatServerUrl;
77+
propertyChangeSupport.firePropertyChange("heartbeatServerUrl", prevValue, heartbeatServerUrl);
78+
}
79+
80+
public void setUpdateSettingsWhenIdleInterval(Long updateSettingsWhenIdleInterval) {
81+
Long prevValue = this.updateSettingsWhenIdleInterval;
82+
this.updateSettingsWhenIdleInterval = updateSettingsWhenIdleInterval;
83+
propertyChangeSupport.firePropertyChange(
84+
"updateSettingsWhenIdleInterval", prevValue, updateSettingsWhenIdleInterval);
85+
}
86+
87+
public void setSubmissionBatchSize(Integer submissionBatchSize) {
88+
Integer prevValue = this.submissionBatchSize;
89+
this.submissionBatchSize = submissionBatchSize;
90+
propertyChangeSupport.firePropertyChange("submissionBatchSize", prevValue, submissionBatchSize);
91+
}
92+
93+
public void setSubmissionClientTimeoutInMillis(Integer submissionClientTimeoutInMillis) {
94+
Integer prevValue = this.submissionClientTimeoutInMillis;
95+
this.submissionClientTimeoutInMillis = submissionClientTimeoutInMillis;
96+
propertyChangeSupport.firePropertyChange(
97+
"submissionClientTimeoutInMillis", prevValue, submissionClientTimeoutInMillis);
98+
}
99+
100+
public void setSettingsClientTimeoutInMillis(Integer settingsClientTimeoutInMillis) {
101+
Integer prevValue = this.settingsClientTimeoutInMillis;
102+
this.settingsClientTimeoutInMillis = settingsClientTimeoutInMillis;
103+
propertyChangeSupport.firePropertyChange(
104+
"settingsClientTimeoutInMillis", prevValue, settingsClientTimeoutInMillis);
105+
}
28106
}

0 commit comments

Comments
 (0)