Skip to content

Commit

Permalink
Merge pull request #68 from jshaughn/hwkalerts-64
Browse files Browse the repository at this point in the history
HWKALERTS-64 Add handling at manual resolve time
  • Loading branch information
lucasponce committed Jul 10, 2015
2 parents 862e201 + 267de63 commit 546c5ef
Show file tree
Hide file tree
Showing 13 changed files with 413 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,15 @@ public void setTenantId(String tenantId) {

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;

Trigger trigger = (Trigger) o;
Trigger trigger = (Trigger)o;

if (id != null ? !id.equals(trigger.id) : trigger.id != null) return false;
if (id != null ? !id.equals(trigger.id) : trigger.id != null)
return false;
return !(tenantId != null ? !tenantId.equals(trigger.tenantId) : trigger.tenantId != null);

}
Expand All @@ -140,9 +143,9 @@ public int hashCode() {

@Override
public String toString() {
return "Trigger [tenantId="+ tenantId + " id=" + id + ", enabled=" + enabled + ", mode=" + mode +
", getName()=" + getName() + ", isAutoDisable()=" + isAutoDisable() + ", isAutoResolve()=" +
isAutoResolve() + "]";
return "Trigger [tenantId=" + tenantId + " id=" + id + ", enabled=" + enabled + ", mode=" + mode +
", getName()=" + getName() + ", isAutoDisable()=" + isAutoDisable() + ", isAutoEnable()="
+ isAutoEnable() + ", isAutoResolve()=" + isAutoResolve() + "]";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ public enum Match {
@JsonInclude
private boolean autoDisable;

@JsonInclude
private boolean autoEnable;

@JsonInclude
private boolean autoResolve;

Expand All @@ -70,6 +73,7 @@ public TriggerTemplate(String name) {
this.name = name;

this.autoDisable = false;
this.autoEnable = false;
this.autoResolve = false;
this.autoResolveAlerts = true;
this.severity = Severity.MEDIUM;
Expand Down Expand Up @@ -105,6 +109,14 @@ public void setAutoDisable(boolean autoDisable) {
this.autoDisable = autoDisable;
}

public boolean isAutoEnable() {
return autoEnable;
}

public void setAutoEnable(boolean autoEnable) {
this.autoEnable = autoEnable;
}

public boolean isAutoResolve() {
return autoResolve;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,7 @@ public void jsonTriggerTest() throws Exception {
"\"id\":\"test\"," +
"\"enabled\":true," +
"\"autoDisable\":true," +
"\"autoEnable\":true," +
"\"autoResolve\":true," +
"\"autoResolveAlerts\":true," +
"\"severity\":\"HIGH\"}";
Expand All @@ -790,6 +791,7 @@ public void jsonTriggerTest() throws Exception {
assertTrue(trigger.getId().equals("test"));
assertTrue(trigger.isEnabled());
assertTrue(trigger.isAutoDisable());
assertTrue(trigger.isAutoEnable());
assertTrue(trigger.isAutoResolve());
assertTrue(trigger.isAutoResolveAlerts());
assertTrue(trigger.getSeverity() == Severity.HIGH);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@
import org.hawkular.alerts.api.model.paging.Page;
import org.hawkular.alerts.api.model.paging.Pager;
import org.hawkular.alerts.api.model.trigger.Tag;
import org.hawkular.alerts.api.model.trigger.Trigger;
import org.hawkular.alerts.api.services.ActionsService;
import org.hawkular.alerts.api.services.AlertsCriteria;
import org.hawkular.alerts.api.services.AlertsService;
import org.hawkular.alerts.api.services.DefinitionsService;
import org.hawkular.alerts.engine.log.MsgLogger;
import org.hawkular.alerts.engine.service.AlertsEngine;
import org.jboss.logging.Logger;
Expand Down Expand Up @@ -72,6 +74,9 @@ public class CassAlertsServiceImpl implements AlertsService {
@EJB
AlertsEngine alertsEngine;

@EJB
DefinitionsService definitionsService;

@EJB
ActionsService actionsService;

Expand Down Expand Up @@ -278,7 +283,7 @@ public Page<Alert> getAlerts(String tenantId, AlertsCriteria criteria, Pager pag
}

private Page<Alert> preparePage(List<Alert> alerts, Pager pager) {
if (pager != null) {
if (pager != null) {
if (pager.getOrder() != null
&& !pager.getOrder().isEmpty()
&& pager.getOrder().get(0).getField() == null) {
Expand All @@ -291,10 +296,10 @@ private Page<Alert> preparePage(List<Alert> alerts, Pager pager) {
if (pager.getOrder() != null) {
pager.getOrder().stream().filter(o -> o.getField() != null && o.getDirection() != null)
.forEach(o -> {
AlertComparator comparator = new AlertComparator(Field.getField(o.getField()),
o.getDirection());
Collections.sort(ordered, comparator);
});
AlertComparator comparator = new AlertComparator(Field.getField(o.getField()),
o.getDirection());
Collections.sort(ordered, comparator);
});
}
if (!pager.isLimited() || ordered.size() < pager.getStart()) {
pager = new Pager(0, ordered.size(), pager.getOrder());
Expand Down Expand Up @@ -577,6 +582,7 @@ public void ackAlerts(String tenantId, Collection<String> alertIds, String ackBy
@Override
public void resolveAlerts(String tenantId, Collection<String> alertIds, String resolvedBy, String resolvedNotes,
List<Set<ConditionEval>> resolvedEvalSets) throws Exception {

if (isEmpty(tenantId)) {
throw new IllegalArgumentException("TenantId must be not null");
}
Expand All @@ -588,21 +594,31 @@ public void resolveAlerts(String tenantId, Collection<String> alertIds, String r
criteria.setAlertIds(alertIds);
List<Alert> alertsToResolve = getAlerts(tenantId, criteria, null);

// resolve the alerts
for (Alert a : alertsToResolve) {
a.setStatus(Alert.Status.RESOLVED);
a.setResolvedBy(resolvedBy);
a.setResolvedNotes(resolvedNotes);
a.setResolvedEvalSets(resolvedEvalSets);
updateAlertStatus(a);
}

// gather the triggerIds of the triggers we need to check for resolve options
Set<String> triggerIds = alertsToResolve.stream().map(a -> a.getTriggerId()).collect(Collectors.toSet());

// handle resolve options
triggerIds.stream().forEach(tid -> handleResolveOptions(tenantId, tid, true));
}

@Override
public void resolveAlertsForTrigger(String tenantId, String triggerId, String resolvedBy, String resolvedNotes,
List<Set<ConditionEval>> resolvedEvalSets) throws Exception {

if (isEmpty(tenantId)) {
throw new IllegalArgumentException("TenantId must be not null");
}
if (isEmpty(triggerId)) {
return;
throw new IllegalArgumentException("TriggerId must be not null");
}

AlertsCriteria criteria = new AlertsCriteria();
Expand All @@ -617,6 +633,8 @@ public void resolveAlertsForTrigger(String tenantId, String triggerId, String re
a.setResolvedEvalSets(resolvedEvalSets);
updateAlertStatus(a);
}

handleResolveOptions(tenantId, triggerId, false);
}

private Alert updateAlertStatus(Alert alert) throws Exception {
Expand Down Expand Up @@ -665,6 +683,48 @@ private Alert updateAlertStatus(Alert alert) throws Exception {
return alert;
}

private void handleResolveOptions(String tenantId, String triggerId, boolean checkAllResolved) {

try {
Trigger trigger = definitionsService.getTrigger(tenantId, triggerId);
if (null == trigger) {
return;
}

boolean setEnabled = trigger.isAutoEnable() && !trigger.isEnabled();
boolean setFiring = trigger.isAutoResolve();

if (!setEnabled && !setFiring) {
return;
}

boolean allResolved = true;
if (checkAllResolved) {
AlertsCriteria ac = new AlertsCriteria();
ac.setTriggerId(triggerId);
ac.setStatusSet(EnumSet.complementOf(EnumSet.of(Alert.Status.RESOLVED)));
Page<Alert> unresolvedAlerts = getAlerts(tenantId, ac, new Pager(0, 1, Order.unspecified()));
allResolved = unresolvedAlerts.isEmpty();
}

if (!allResolved) {
return;
}

// Either update the trigger, which implicitly reloads the trigger (and as such resets to firing mode)
// or perform an explicit reload to reset to firing mode.
if (setEnabled) {
trigger.setEnabled(true);
definitionsService.updateTrigger(tenantId, trigger);
} else {
alertsEngine.reloadTrigger(tenantId, triggerId);
}
} catch (Exception e) {
msgLog.errorDatabaseException(e.getMessage());
}

}

@Override
public void sendData(Data data) throws Exception {
alertsEngine.sendData(data);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ private void initTriggers(File fFolder) throws Exception {
String name = (String)t.get("name");
String description = (String)t.get("description");
boolean autoDisable = (Boolean)t.get("autoDisable");
boolean autoEnable = (Boolean)t.get("autoEnable");
boolean autoResolve = (Boolean)t.get("autoResolve");
boolean autoResolveAlerts = (Boolean)t.get("autoResolveAlerts");
Severity severity = Severity.valueOf((String)t.get("severity"));
Expand All @@ -190,6 +191,7 @@ private void initTriggers(File fFolder) throws Exception {
Trigger trigger = new Trigger(triggerId, name);
trigger.setEnabled(enabled);
trigger.setAutoDisable(autoDisable);
trigger.setAutoEnable(autoEnable);
trigger.setAutoResolve(autoResolve);
trigger.setAutoResolveAlerts(autoResolveAlerts);
trigger.setSeverity(severity);
Expand Down Expand Up @@ -441,8 +443,8 @@ public void addTrigger(String tenantId, Trigger trigger) throws Exception {

try {
session.execute(insertTrigger.bind(trigger.getName(), trigger.getDescription(),
trigger.isAutoDisable(), trigger.isAutoResolve(), trigger.isAutoResolveAlerts(), trigger
.getSeverity().name(),
trigger.isAutoDisable(), trigger.isAutoEnable(), trigger.isAutoResolve(),
trigger.isAutoResolveAlerts(), trigger.getSeverity().name(),
trigger.getFiringMatch().name(), trigger.getAutoResolveMatch().name(),
trigger.getId(), trigger.isEnabled(), trigger.getTenantId()));

Expand Down Expand Up @@ -521,9 +523,10 @@ public Trigger updateTrigger(String tenantId, Trigger trigger) throws Exception
}
try {
session.execute(updateTrigger.bind(trigger.getName(), trigger.getDescription(), trigger.isAutoDisable(),
trigger.isAutoResolve(), trigger.isAutoResolveAlerts(), trigger.getSeverity().name(),
trigger.getFiringMatch().name(), trigger.getAutoResolveMatch().name(), trigger.isEnabled(),
trigger.getTenantId(), trigger.getId()));
trigger.isAutoEnable(), trigger.isAutoResolve(), trigger.isAutoResolveAlerts(),
trigger.getSeverity().name(), trigger.getFiringMatch().name(),
trigger.getAutoResolveMatch().name(), trigger.isEnabled(), trigger.getTenantId(),
trigger.getId()));
deleteTriggerActions(trigger);
insertTriggerActions(trigger);
} catch (Exception e) {
Expand Down Expand Up @@ -754,6 +757,7 @@ private Trigger mapTrigger(Row row) {
trigger.setName(row.getString("name"));
trigger.setDescription(row.getString("description"));
trigger.setAutoDisable(row.getBool("autoDisable"));
trigger.setAutoEnable(row.getBool("autoEnable"));
trigger.setAutoResolve(row.getBool("autoResolve"));
trigger.setAutoResolveAlerts(row.getBool("autoResolveAlerts"));
trigger.setSeverity(Severity.valueOf(row.getString("severity")));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,8 +208,8 @@ public class CassStatement {
+ "(tenantId, category, name, triggers) VALUES (?, ?, ?, ?) ";

INSERT_TRIGGER = "INSERT INTO " + keyspace + ".triggers " +
"(name, description, autoDisable, autoResolve, autoResolveAlerts, severity, firingMatch, " +
"autoResolveMatch, id, enabled, tenantId) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
"(name, description, autoDisable, autoEnable, autoResolve, autoResolveAlerts, severity, firingMatch, "
+ "autoResolveMatch, id, enabled, tenantId) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";

INSERT_TRIGGER_ACTIONS = "INSERT INTO " + keyspace + ".triggers_actions "
+ "(tenantId, triggerId, actionPlugin, actions) VALUES (?, ?, ?, ?) ";
Expand Down Expand Up @@ -320,7 +320,7 @@ public class CassStatement {
+ "FROM " + keyspace + ".tags_triggers "
+ "WHERE tenantId = ? AND name = ? ";

SELECT_TRIGGER = "SELECT name, description, autoDisable, autoResolve, "
SELECT_TRIGGER = "SELECT name, description, autoDisable, autoEnable, autoResolve, "
+ "autoResolveAlerts, severity, firingMatch, autoResolveMatch, id, enabled, tenantId "
+ "FROM " + keyspace + ".triggers "
+ "WHERE tenantId = ? AND id = ? ";
Expand Down Expand Up @@ -352,11 +352,11 @@ public class CassStatement {
+ "FROM " + keyspace + ".dampenings "
+ "WHERE tenantId = ? AND triggerId = ? and triggerMode = ? ";

SELECT_TRIGGERS_ALL = "SELECT name, description, autoDisable, autoResolve, "
SELECT_TRIGGERS_ALL = "SELECT name, description, autoDisable, autoEnable, autoResolve, "
+ "autoResolveAlerts, severity, firingMatch, autoResolveMatch, id, enabled, tenantId "
+ "FROM " + keyspace + ".triggers ";

SELECT_TRIGGERS_TENANT = "SELECT name, description, autoDisable, autoResolve, "
SELECT_TRIGGERS_TENANT = "SELECT name, description, autoDisable, autoEnable, autoResolve, "
+ "autoResolveAlerts, severity, firingMatch, autoResolveMatch, id, enabled, tenantId "
+ "FROM " + keyspace + ".triggers WHERE tenantId = ? ";

Expand All @@ -378,8 +378,8 @@ public class CassStatement {
+ "WHERE tenantId = ? AND name = ? ";

UPDATE_TRIGGER = "UPDATE " + keyspace + ".triggers "
+ "SET name = ?, description = ?, autoDisable = ?, autoResolve = ?, autoResolveAlerts = ?, "
+ "severity = ?, firingMatch = ?, autoResolveMatch = ?, enabled = ? "
+ "SET name = ?, description = ?, autoDisable = ?, autoEnable = ?, autoResolve = ?, "
+ "autoResolveAlerts = ?, severity = ?, firingMatch = ?, autoResolveMatch = ?, enabled = ? "
+ "WHERE tenantId = ? AND id = ? ";

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ CREATE TABLE ${keyspace}.triggers (
name text,
description text,
autoDisable boolean,
autoEnable boolean,
autoResolve boolean,
autoResolveAlerts boolean,
severity text,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"name": "NumericData-01-low",
"description": "This is the description",
"autoDisable": false,
"autoEnable": false,
"autoResolve": false,
"autoResolveAlerts": true,
"severity": "HIGH",
Expand Down Expand Up @@ -34,6 +35,7 @@
"name": "NumericData-01-02-high",
"description": "This is the description",
"autoDisable": false,
"autoEnable": false,
"autoResolve": false,
"autoResolveAlerts": true,
"severity": "HIGH",
Expand Down Expand Up @@ -63,6 +65,7 @@
"name": "NumericData-03-range",
"description": "This is the description",
"autoDisable": false,
"autoEnable": false,
"autoResolve": false,
"autoResolveAlerts": true,
"severity": "HIGH",
Expand Down Expand Up @@ -92,6 +95,7 @@
"name": "CompareData-01-d1-lthalf-d2",
"description": "This is the description",
"autoDisable": false,
"autoEnable": false,
"autoResolve": false,
"autoResolveAlerts": true,
"severity": "HIGH",
Expand Down Expand Up @@ -121,6 +125,7 @@
"name": "StringData-01-starts",
"description": "This is the description",
"autoDisable": false,
"autoEnable": false,
"autoResolve": false,
"autoResolveAlerts": true,
"severity": "HIGH",
Expand Down Expand Up @@ -150,6 +155,7 @@
"name": "Availability-01-NOT-UP",
"description": "This is the description",
"autoDisable": false,
"autoEnable": false,
"autoResolve": false,
"autoResolveAlerts": true,
"severity": "HIGH",
Expand Down

0 comments on commit 546c5ef

Please sign in to comment.