Plugin healthcheck | Other plugins can now extend the Monitor list
New lookup tables UI
SMTP integration | Allows specifying a set of protocols enabled for SSL connection
Fixes and improvements
[fixed] First login with external authentication fails to identify an existing user with the same email
[fixed] Header size does not match the number of axes in vertical
[fixed] Some channels appear multiple times in the grouped tooltip
[fixed] Tooltip without background on the temporal pipes widget
[fixed] Legends being kept when new filter changes at the bar chart
UI improvements at dashboard filter setup
UI improvements at widget header
Multiple UI/UX improvements at plugin admin screen
Details
Plugin healthcheck | Other plugins can now extend the Monitor list
SMTP integration | Allows specifying a set of protocols enabled for SSL connection
SMTP integration screen allows specifying a set of protocols for SSL connection. By default the plugin offers TLSv1.0, TLSv1.1, TLSv1.2, however, this list is extensible and accepts other protocols
Default list of protocols
New lookup tables UI
Distinction between lookup tables created by user and plugin
public class Main implements LivePlugin {
public void start(Live live) throws Exception {
...
HealthcheckMonitorService monitorService = Objects.requireNonNull(live.system().getPluginService(HealthcheckMonitorService.class));
monitorService.registerMonitor(live, new MyMonitor());
...
}
}
public class MyMonitor implements HealthcheckMonitor {
private static final String QUERY = ""; // some query
private static final String EVENT_TYPE = ""; //some event type
private Live.Action queriesHandler;
@Override
public void start(@NotNull Live live, @NotNull HealthcheckConfig healthcheckConfig) throws Exception {
//start monitoring
String statsEmail = healthcheckConfig.getGeneralStatsRecipient();
final List<String> statsRecipients = Collections.singletonList(statsEmail);
QueryListener.Empty listener = new QueryListener.Empty() {
@Override
public void onEvent(QueryEvent events, boolean history) throws Exception {
if (history) return;
Map<String, Object> stats = HealthCheckUtils.loadBaseEvent(live, EVENT_TYPE, HealthCheckUtils::hostNameSupplier);
for (Map<String, Object> event : events) {
stats.put("key1", event.get("key1"));
}
String json = LiveJson.toJson(stats);
HealthCheckUtils.sendEmailWithAttachments(live, json, statsRecipients);
}
};
Query query = new Query(QUERY)
.follow(true)
.preloadWindow(true)
.description("My monitor query")
.listenWith(listener);
queriesHandler = live.queries().run(query);
}
@Override
public void stop(@NotNull Live live) throws Exception {
//stop monitoring
if (queriesHandler != null) {
queriesHandler.close();
}
}
}