use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class DefaultAlertManager method updateAlertChangeEntry.
protected <C extends Serializable> Alert updateAlertChangeEntry(JpaAlert.AlertId id, String descr, C content) {
final Principal user = SecurityContextHolder.getContext().getAuthentication() != null ? SecurityContextHolder.getContext().getAuthentication() : null;
Alert changed = this.metadataAccess.commit(() -> {
JpaAlert alert = findAlert(id).orElseThrow(() -> new AlertNotfoundException(id));
List<AlertChangeEvent> events = alert.getEvents();
if (events != null && !events.isEmpty()) {
JpaAlertChangeEvent event = (JpaAlertChangeEvent) events.get(0);
event.setDescription(descr);
event.setContent(content);
event.setChangeTime(DateTime.now());
}
return asValue(alert);
}, MetadataAccess.SERVICE);
updateLastUpdatedTime();
notifyReceivers(1);
return changed;
}
use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class KyloEntityAwareAlertCriteria method orFilter.
private BooleanBuilder orFilter(QJpaAlert alert, QJpaOpsManagerFeed feed, QJpaServiceLevelAgreementDescription sla) {
BooleanBuilder globalFilter = new BooleanBuilder();
if (StringUtils.isNotBlank(getOrFilter())) {
Lists.newArrayList(StringUtils.split(getOrFilter(), ",")).stream().forEach(filter -> {
filter = StringUtils.trim(filter);
if (filter != null) {
List<String> in = null;
if (filter.contains("||")) {
// replace the OR || with commas for IN clause
in = Arrays.asList(StringUtils.split(filter, "||")).stream().map(f -> StringUtils.trim(f)).collect(Collectors.toList());
filter = in.stream().collect(Collectors.joining(","));
}
BooleanBuilder booleanBuilder = new BooleanBuilder();
List<Predicate> preds = new ArrayList<>();
try {
Alert.State state = Alert.State.valueOf(filter.toUpperCase());
preds.add(alert.state.eq(state));
} catch (IllegalArgumentException e) {
}
if (in != null) {
preds.add(alert.description.in(in));
preds.add(alert.entityType.in(in));
preds.add(alert.typeString.in(in));
preds.add(alert.subtype.in(in));
// add in joins on the feed or sla name
addOrFilter(feed, CommonFilterTranslations.feedFilters, preds, filter);
addOrFilter(sla, KyloEntityAwareAlertManager.alertSlaFilters, preds, filter);
} else {
preds.add(alert.description.likeIgnoreCase(filter.concat("%")));
preds.add(alert.entityType.likeIgnoreCase(filter.concat("%")));
preds.add(alert.typeString.likeIgnoreCase(filter.concat("%")));
preds.add(alert.subtype.like(filter.concat("%")));
// add in joins on the feed or sla name
addOrFilter(feed, CommonFilterTranslations.feedFilters, preds, filter);
addOrFilter(sla, KyloEntityAwareAlertManager.alertSlaFilters, preds, filter);
}
booleanBuilder.andAnyOf(preds.toArray(new Predicate[preds.size()]));
globalFilter.and(booleanBuilder);
}
});
}
return globalFilter;
}
use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class DefaultAlertManagerTest method testCreateAlert.
@Test(groups = "create")
public void testCreateAlert() throws Exception {
this.beforeTime = DateTime.now().minusMillis(50);
Alert alert1 = this.manager.create(URI.create("http://example.com/test/alert/1"), "subtype", Level.MINOR, LONG_DESCR, "1st content");
Thread.sleep(100);
Alert alert2 = this.manager.create(URI.create("http://example.com/test/alert/2"), "subtype", Level.CRITICAL, "2nd description", "2nd content");
Thread.sleep(100);
Assertions.assertThat(alert1).isNotNull().extracting("type", "level", "description", "content").contains(URI.create("http://example.com/test/alert/1"), Level.MINOR, TRUNK_DESCR, "1st content");
Assertions.assertThat(alert2).isNotNull().extracting("type", "level", "description", "content").contains(URI.create("http://example.com/test/alert/2"), Level.CRITICAL, "2nd description", "2nd content");
Assertions.assertThat(alert2.getEvents()).hasSize(1).extracting("state", "content").contains(Assertions.tuple(State.UNHANDLED, null));
Mockito.verify(this.alertReceiver, Mockito.times(2)).alertsAvailable(Matchers.anyInt());
this.middleTime = alert2.getCreatedTime().minusMillis(50);
this.afterTime = DateTime.now();
this.id1 = alert1.getId();
this.id2 = alert2.getId();
}
use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class DefaultAlertManagerTest method testAlertResponding.
@Test(dependsOnGroups = "create", groups = "update1")
public void testAlertResponding() {
Alert alert = this.manager.getAlertAsServiceAccount(id1).get();
AlertResponse resp = this.manager.getResponse(alert);
alert = resp.inProgress(LONG_DESCR);
Assertions.assertThat(alert.getEvents()).hasSize(2).extracting("state", "description", "content").contains(Assertions.tuple(State.UNHANDLED, null, null), Assertions.tuple(State.IN_PROGRESS, TRUNK_DESCR, null));
alert = resp.handle("Change handled", new Integer(42));
Assertions.assertThat(alert.getEvents()).hasSize(3).extracting("state", "description", "content").contains(Assertions.tuple(State.UNHANDLED, null, null), Assertions.tuple(State.IN_PROGRESS, TRUNK_DESCR, null), Assertions.tuple(State.HANDLED, "Change handled", 42));
Mockito.verify(this.alertReceiver, Mockito.times(2)).alertsAvailable(Matchers.anyInt());
}
use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class AlertsController method createCriteria.
private AlertCriteria createCriteria(UriInfo uriInfo) {
// Query params: limit, state, level, before-time, after-time, before-alert, after-alert
MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
AlertCriteria criteria = provider.criteria();
try {
Optional.ofNullable(params.get("type")).ifPresent(list -> list.forEach(typeStr -> criteria.type(URI.create(typeStr))));
Optional.ofNullable(params.get("subtype")).ifPresent(list -> list.forEach(subtype -> criteria.subtype(subtype)));
Optional.ofNullable(params.get("limit")).ifPresent(list -> list.forEach(limitStr -> criteria.limit(Integer.parseInt(limitStr))));
Optional.ofNullable(params.get("state")).ifPresent(list -> list.forEach(stateStr -> criteria.state(Alert.State.valueOf(stateStr.toUpperCase()))));
Optional.ofNullable(params.get("level")).ifPresent(list -> list.forEach(levelStr -> criteria.level(Alert.Level.valueOf(levelStr.toUpperCase()))));
Optional.ofNullable(params.get("before")).ifPresent(list -> list.forEach(timeStr -> criteria.before(Formatters.parseDateTime(timeStr))));
Optional.ofNullable(params.get("after")).ifPresent(list -> list.forEach(timeStr -> criteria.after(Formatters.parseDateTime(timeStr))));
return criteria;
} catch (IllegalArgumentException e) {
throw new WebApplicationException("Invalid query parameter: " + e.getMessage(), Status.BAD_REQUEST);
}
}
Aggregations