use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class DefaultServiceLevelAgreementChecker method checkAgreement.
/**
* Check the Agreement. Caller needs to wrap this in MetadataAccesss transcation
*/
public void checkAgreement(ServiceLevelAgreement agreement) {
if (agreement != null) {
Alert newAlert = null;
if (isAssessable(agreement)) {
LOG.info("Assessing SLA : " + agreement.getName());
try {
ServiceLevelAssessment assessment = assessor.assess(agreement);
if (shouldAlert(agreement, assessment)) {
newAlert = alertManager.createEntityAlert(AssessmentAlerts.VIOLATION_ALERT_TYPE, Alert.Level.FATAL, "Violation of SLA: " + agreement.getName(), alertManager.createEntityIdentificationAlertContent(agreement.getId().toString(), SecurityRole.ENTITY_TYPE.SLA, assessment.getId()));
}
} catch (AssessorNotFoundException e) {
LOG.info("SLA assessment failed. Assessor Not found: {} - Exception: {}", agreement.getName(), e);
}
}
if (newAlert != null) {
// Record this assessment as the latest for this SLA.
alertedAssessments.put(agreement.getId(), (ServiceLevelAssessment.ID) newAlert.getContent());
LOG.info("SLA assessment failed: {} - generated alert: {}", agreement.getName(), newAlert.getId());
}
}
}
use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class AggregatingAlertProvider method findActionableAlert.
private SimpleEntry<Alert, AlertManager> findActionableAlert(ID id) {
SourceAlertID srcId = asSourceAlertId(id);
AlertManager mgr = this.managers.get(srcId.sourceId);
if (mgr != null) {
return getAlert(srcId.alertId, mgr, true).filter(alert -> alert.isActionable()).map(alert -> new SimpleEntry<>(unwrapAlert(alert), mgr)).orElse(null);
} else {
return null;
}
}
use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class InMemoryAlertManager method getAlertsSummary.
@Override
public Iterator<AlertSummary> getAlertsSummary(AlertCriteria criteria) {
BaseAlertCriteria predicate = (BaseAlertCriteria) (criteria == null ? criteria() : criteria);
// TODO Grab a partition of the map first based on before/after times of criteria
List<Alert> alerts = this.alertsByTime.values().stream().map(ref -> (Alert) ref.get()).filter(predicate).collect(Collectors.toList());
List<AlertSummary> summaryList = new ArrayList<>();
Map<String, AlertSummary> groupedAlerts = new HashMap<>();
alerts.stream().forEach(alert -> {
String key = alert.getType() + ":" + alert.getSubtype() + ":" + alert.getLevel();
groupedAlerts.computeIfAbsent(key, groupKey -> new GenericAlertSummary(alert.getType().toString(), alert.getSubtype(), alert.getLevel()));
((GenericAlertSummary) groupedAlerts.get(key)).incrementCount();
});
return groupedAlerts.values().iterator();
}
use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class AggregatingAlertProviderTest method testGetAlert.
@Test
public void testGetAlert() {
TestAlert mgrAlert = new TestAlert(this.manager);
TestAlert srcAlert = new TestAlert(this.source);
SourceAlertID mgrId = new SourceAlertID(mgrAlert.getId(), this.manager);
SourceAlertID srcId = new SourceAlertID(srcAlert.getId(), this.source);
this.provider.addAlertSource(this.source);
this.provider.addAlertManager(this.manager);
when(this.source.getAlert(any(Alert.ID.class))).thenReturn(Optional.of(srcAlert));
when(this.source.getAlertAsServiceAccount(any(Alert.ID.class))).thenReturn(Optional.of(srcAlert));
when(this.manager.getAlert(any(Alert.ID.class))).thenReturn(Optional.of(mgrAlert));
when(this.manager.getAlertAsServiceAccount(any(Alert.ID.class))).thenReturn(Optional.of(mgrAlert));
Alert getMgrAlert = providerToSourceAlertFunction().apply(this.provider.getAlert(mgrId).get());
Alert getSrcAlert = providerToSourceAlertFunction().apply(this.provider.getAlert(srcId).get());
assertThat(getMgrAlert).isEqualTo(mgrAlert);
assertThat(getSrcAlert).isEqualTo(srcAlert);
}
use of com.thinkbiganalytics.alerts.api.Alert in project kylo by Teradata.
the class InMemoryAlertManagerTest method testChangeState.
@Test
public void testChangeState() {
Alert alert = this.manager.create(URI.create("urn:alert:test1"), "subtype", Alert.Level.INFO, "test1", "created");
Alert changed = this.manager.getResponse(alert).inProgress("in progress");
Optional<Alert> retrieved = this.manager.getAlert(alert.getId());
assertThat(changed.getEvents()).hasSize(2).extracting("state").contains(Alert.State.UNHANDLED, Alert.State.IN_PROGRESS);
assertThat(retrieved.isPresent()).isTrue();
assertThat(retrieved.get().getEvents()).hasSize(2).extracting("state").contains(Alert.State.UNHANDLED, Alert.State.IN_PROGRESS);
}
Aggregations