Skip to content

Commit

Permalink
0004952: Fixed unresolvable log monitors
Browse files Browse the repository at this point in the history
  • Loading branch information
evan-miller-jumpmind committed Jun 12, 2023
1 parent b7d0fd5 commit cb862a8
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
Expand Up @@ -62,6 +62,7 @@
import org.jumpmind.symmetric.service.IMonitorService;
import org.jumpmind.symmetric.service.INodeService;
import org.jumpmind.util.AppUtils;
import org.jumpmind.util.LogSummary;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
Expand Down Expand Up @@ -211,6 +212,9 @@ protected void updateMonitor(Monitor monitor, IMonitorType monitorType, Node ide
updateMonitorEventAsResolved(event);
} else if (eventValue.getValue() >= monitor.getThreshold()) {
if (event == null) {
if (monitor.getType().equals("log") && isLogMonitorEventResolved(monitor, eventValue, identity.getNodeId())) {
return;
}
event = new MonitorEvent();
event.setMonitorId(monitor.getMonitorId());
event.setNodeId(identity.getNodeId());
Expand Down Expand Up @@ -250,6 +254,35 @@ protected void updateMonitor(Monitor monitor, IMonitorType monitorType, Node ide
}
}

private boolean isLogMonitorEventResolved(Monitor monitor, MonitorEvent eventValue, String nodeId) {
List<LogSummary> eventLogSummaries = new Gson().fromJson(eventValue.getDetails(), new TypeToken<List<LogSummary>>() {
}.getType());
List<MonitorEvent> resolvedEvents = getMonitorEventsResolvedForNode(monitor.getMonitorId(), nodeId);
for (LogSummary eventLogSummary : eventLogSummaries) {
boolean logMessageResolved = false;
for (MonitorEvent resolvedEvent : resolvedEvents) {
if (resolvedEvent.getLastUpdateTime() == null || eventLogSummary.getMostRecentTime() > resolvedEvent.getLastUpdateTime().getTime()) {
continue;
}
List<LogSummary> resolvedLogSummaries = new Gson().fromJson(resolvedEvent.getDetails(), new TypeToken<List<LogSummary>>() {
}.getType());
for (LogSummary resolvedLogSummary : resolvedLogSummaries) {
if (eventLogSummary.getMessage() != null && eventLogSummary.getMessage().equals(resolvedLogSummary.getMessage())) {
logMessageResolved = true;
break;
}
}
if (logMessageResolved) {
break;
}
}
if (!logMessageResolved) {
return false;
}
}
return true;
}

@Override
public List<Monitor> getMonitors() {
return sqlTemplate.query(getSql("selectMonitorSql"), new MonitorRowMapper());
Expand Down Expand Up @@ -321,6 +354,11 @@ public List<MonitorEvent> getMonitorEvents() {
return sqlTemplate.query(getSql("selectMonitorEventSql"), new MonitorEventRowMapper());
}

protected List<MonitorEvent> getMonitorEventsResolvedForNode(String monitorId, String nodeId) {
return sqlTemplate.query(getSql("selectMonitorEventSql", "whereMonitorEventResolvedSql"),
new MonitorEventRowMapper(), monitorId, nodeId);
}

protected Map<String, MonitorEvent> getMonitorEventsNotResolvedForNode(String nodeId) {
List<MonitorEvent> list = sqlTemplate.query(getSql("selectMonitorEventSql", "whereMonitorEventNotResolvedSql"),
new MonitorEventRowMapper(), nodeId);
Expand Down
Expand Up @@ -63,6 +63,7 @@ public MonitorServiceSqlMap(IDatabasePlatform platform, Map<String, String> repl
"select monitor_id, node_id, event_time, " + type + ", event_value, event_count, threshold, severity_level, host_name, " +
"is_resolved, is_notified, details, last_update_time " +
"from $(monitor_event) ");
putSql("whereMonitorEventResolvedSql", "where monitor_id = ? and node_id = ? and is_resolved = 1");
putSql("whereMonitorEventNotResolvedSql", "where node_id = ? and is_resolved = 0");
putSql("whereMonitorEventFilteredSql", "where severity_level >= ?");
putSql("whereMonitorEventForNotificationBySeveritySql",
Expand Down

0 comments on commit cb862a8

Please sign in to comment.