Skip to content

Commit e888c2d

Browse files
committed
Added basic event plugin manager
1 parent 477bdfb commit e888c2d

File tree

8 files changed

+127
-9
lines changed

8 files changed

+127
-9
lines changed

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import com.prashantchaubey.exceptionlessclient.lastreferenceidmanager.LastReferenceIdManagerIF;
66
import com.prashantchaubey.exceptionlessclient.logging.LogIF;
77
import com.prashantchaubey.exceptionlessclient.logging.NullLog;
8+
import com.prashantchaubey.exceptionlessclient.models.EventPluginContext;
9+
import com.prashantchaubey.exceptionlessclient.plugins.EventPluginIF;
810
import com.prashantchaubey.exceptionlessclient.queue.EventQueueIF;
911
import com.prashantchaubey.exceptionlessclient.services.EnvironmentInfoCollectorIF;
1012
import com.prashantchaubey.exceptionlessclient.services.ErrorParserIF;
@@ -19,6 +21,7 @@
1921
import lombok.Getter;
2022

2123
import java.util.*;
24+
import java.util.function.BiConsumer;
2225

2326
@Builder(builderClassName = "ConfigurationInternalBuilder")
2427
@Getter
@@ -40,6 +43,7 @@ public class ConfigurationManager {
4043
@Builder.Default private Configuration configuration = Configuration.defaultConfiguration();
4144
@Builder.Default private Set<String> defaultTags = new HashSet<>();
4245
@Builder.Default private Map<String, Object> defaultData = new HashMap<>();
46+
@Builder.Default private List<EventPluginIF> plugins = new ArrayList<>();
4347

4448
// lombok ignored fields
4549
private SettingsManager $settingsManager;
@@ -72,6 +76,44 @@ public void submitSessionHeartbeat(String sessionOrUserId) {
7276
submissionClient.sendHeartBeat(sessionOrUserId, false);
7377
}
7478

79+
public void addPlugin(EventPluginIF eventPlugin) {
80+
if (plugins.stream().anyMatch(plugin -> plugin.getName().equals(eventPlugin.getName()))) {
81+
log.info(
82+
String.format(
83+
"Can't add plugin, name: %s, priority: %s as a plugin with this name already configured",
84+
eventPlugin.getName(), eventPlugin.getPriority()));
85+
}
86+
plugins.add(eventPlugin);
87+
}
88+
89+
public void addPlugin(BiConsumer<EventPluginContext, ConfigurationManager> pluginAction) {
90+
addPlugin(UUID.randomUUID().toString(), 0, pluginAction);
91+
}
92+
93+
public void addPlugin(
94+
String name,
95+
int priority,
96+
BiConsumer<EventPluginContext, ConfigurationManager> pluginAction) {
97+
addPlugin(
98+
new EventPluginIF() {
99+
@Override
100+
public int getPriority() {
101+
return priority;
102+
}
103+
104+
@Override
105+
public String getName() {
106+
return name;
107+
}
108+
109+
@Override
110+
public void run(
111+
EventPluginContext eventPluginContext, ConfigurationManager configurationManager) {
112+
pluginAction.accept(eventPluginContext, configurationManager);
113+
}
114+
});
115+
}
116+
75117
public static ConfigurationBuilder builder() {
76118
return new ConfigurationBuilder();
77119
}

src/main/java/com/prashantchaubey/exceptionlessclient/logging/Slf4jLog.java

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

src/main/java/com/prashantchaubey/exceptionlessclient/plugins/EventPluginManager.java

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,82 @@
22

33
import com.prashantchaubey.exceptionlessclient.configuration.ConfigurationManager;
44
import com.prashantchaubey.exceptionlessclient.models.EventPluginContext;
5+
import com.prashantchaubey.exceptionlessclient.plugins.preconfigured.*;
56
import lombok.Builder;
67
import lombok.Getter;
78

9+
import java.util.List;
810
import java.util.function.Consumer;
911

10-
@Builder
12+
@Builder(builderClassName = "EventPluginInternalBuilder")
1113
@Getter
1214
public class EventPluginManager {
1315
private ConfigurationManager configurationManager;
1416

1517
public void run(EventPluginContext eventPluginContext, Consumer<EventPluginContext> handler) {
16-
// todo implement
18+
List<EventPluginIF> plugins = configurationManager.getPlugins();
19+
plugins.add(
20+
new EventPluginIF() {
21+
@Override
22+
public int getPriority() {
23+
return Integer.MAX_VALUE;
24+
}
25+
26+
@Override
27+
public String getName() {
28+
return "handler";
29+
}
30+
31+
@Override
32+
public void run(
33+
EventPluginContext eventPluginContext, ConfigurationManager configurationManager) {
34+
handler.accept(eventPluginContext);
35+
}
36+
});
37+
38+
plugins.sort((o1, o2) -> o2.getPriority() - o1.getPriority());
39+
plugins.forEach(
40+
plugin -> {
41+
if (eventPluginContext.getContext().isEventCancelled()) {
42+
return;
43+
}
44+
45+
try {
46+
plugin.run(eventPluginContext, configurationManager);
47+
48+
} catch (Exception e) {
49+
configurationManager
50+
.getLog()
51+
.error(
52+
String.format(
53+
"Error running plugin: %s: %s. Discarding event",
54+
plugin.getName(), e.getMessage()),
55+
e);
56+
eventPluginContext.getContext().markAsCancelled();
57+
}
58+
});
59+
}
60+
61+
public static EventPluginBuilder builder() {
62+
return new EventPluginBuilder();
63+
}
64+
65+
public static class EventPluginBuilder extends EventPluginInternalBuilder {
66+
@Override
67+
public EventPluginManager build() {
68+
EventPluginManager manager = super.build();
69+
manager.init();
70+
return manager;
71+
}
72+
}
73+
74+
private void init() {
75+
configurationManager.addPlugin(ConfigurationDefaultsPlugin.builder().build());
76+
configurationManager.addPlugin(ErrorPlugin.builder().build());
77+
configurationManager.addPlugin(DuplicateCheckerPlugin.builder().build());
78+
configurationManager.addPlugin(EventExclusionPlugin.builder().build());
79+
configurationManager.addPlugin(ModuleInfoPlugin.builder().build());
80+
configurationManager.addPlugin(EnvironmentInfoPlugin.builder().build());
81+
configurationManager.addPlugin(SubmissionMethodPlugin.builder().build());
1782
}
1883
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
import com.prashantchaubey.exceptionlessclient.models.enums.EventPropertyKey;
77
import com.prashantchaubey.exceptionlessclient.models.services.EnvironmentInfoGetArgs;
88
import com.prashantchaubey.exceptionlessclient.plugins.EventPluginIF;
9+
import lombok.Builder;
10+
import lombok.Getter;
911

12+
@Builder
13+
@Getter
1014
public class EnvironmentInfoPlugin implements EventPluginIF {
1115
@Override
1216
public int getPriority() {

src/main/java/com/prashantchaubey/exceptionlessclient/plugins/preconfigured/ModuleInfoPlugin.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
import com.prashantchaubey.exceptionlessclient.models.EventPluginContext;
55
import com.prashantchaubey.exceptionlessclient.models.services.error.Error;
66
import com.prashantchaubey.exceptionlessclient.plugins.EventPluginIF;
7+
import lombok.Builder;
8+
import lombok.Getter;
79

10+
@Builder
11+
@Getter
812
public class ModuleInfoPlugin implements EventPluginIF {
913
@Override
1014
public int getPriority() {

src/main/java/com/prashantchaubey/exceptionlessclient/plugins/preconfigured/SubmissionMethodPlugin.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
import com.prashantchaubey.exceptionlessclient.configuration.ConfigurationManager;
44
import com.prashantchaubey.exceptionlessclient.models.EventPluginContext;
55
import com.prashantchaubey.exceptionlessclient.plugins.EventPluginIF;
6+
import lombok.Builder;
7+
import lombok.Getter;
68

9+
@Builder
10+
@Getter
711
public class SubmissionMethodPlugin implements EventPluginIF {
812
@Override
913
public int getPriority() {

src/main/java/com/prashantchaubey/exceptionlessclient/settings/DefaultSettingsClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public SettingsResponse getSettings(long version) {
5656

5757
return SettingsResponse.builder().success(true).settings(serverSettings).build();
5858
} catch (URISyntaxException | InterruptedException | IOException e) {
59-
return SettingsResponse.builder().success(false).exception(e).build();
59+
return SettingsResponse.builder().success(false).exception(e).message(e.getMessage()).build();
6060
}
6161
}
6262
}

src/main/java/com/prashantchaubey/exceptionlessclient/settings/SettingsManager.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ private void updateSettings() {
6767
log.info(String.format("Checking for updated settings from: v%s", currentVersion));
6868

6969
SettingsResponse response = settingsClient.getSettings(currentVersion);
70-
// todo implement
70+
if (!response.isSuccess()) {
71+
log.warn(String.format("Unable to update settings: %s:", response.getMessage()));
72+
return;
73+
}
74+
storageProvider.getSettings().save(response.getSettings());
7175
}
7276
}

0 commit comments

Comments
 (0)