Search in sources :

Example 1 with Alert

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());
        }
    }
}
Also used : ServiceLevelAssessment(com.thinkbiganalytics.metadata.sla.api.ServiceLevelAssessment) AssessorNotFoundException(com.thinkbiganalytics.metadata.sla.spi.AssessorNotFoundException) Alert(com.thinkbiganalytics.alerts.api.Alert)

Example 2 with Alert

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;
    }
}
Also used : ThreadFactoryBuilder(com.google.common.util.concurrent.ThreadFactoryBuilder) AlertManager(com.thinkbiganalytics.alerts.spi.AlertManager) AlertResponder(com.thinkbiganalytics.alerts.api.AlertResponder) Proxy(java.lang.reflect.Proxy) LoggerFactory(org.slf4j.LoggerFactory) AlertSource(com.thinkbiganalytics.alerts.spi.AlertSource) Registration(reactor.bus.registry.Registration) HashMap(java.util.HashMap) AtomicReference(java.util.concurrent.atomic.AtomicReference) ArrayList(java.util.ArrayList) AlertSummary(com.thinkbiganalytics.alerts.api.AlertSummary) Inject(javax.inject.Inject) PreDestroy(javax.annotation.PreDestroy) AlertProvider(com.thinkbiganalytics.alerts.api.AlertProvider) Alert(com.thinkbiganalytics.alerts.api.Alert) Event(reactor.bus.Event) Map(java.util.Map) StreamSupport(java.util.stream.StreamSupport) Named(javax.inject.Named) Method(java.lang.reflect.Method) SimpleEntry(java.util.AbstractMap.SimpleEntry) Logger(org.slf4j.Logger) Iterator(java.util.Iterator) AlertNotifyReceiver(com.thinkbiganalytics.alerts.spi.AlertNotifyReceiver) Executor(java.util.concurrent.Executor) DateTime(org.joda.time.DateTime) SourceAlert(com.thinkbiganalytics.alerts.api.SourceAlert) EventBus(reactor.bus.EventBus) Executors(java.util.concurrent.Executors) Serializable(java.io.Serializable) ID(com.thinkbiganalytics.alerts.api.Alert.ID) Objects(java.util.Objects) List(java.util.List) Stream(java.util.stream.Stream) MatchAllSelector(reactor.bus.selector.MatchAllSelector) AlertSourceAggregator(com.thinkbiganalytics.alerts.spi.AlertSourceAggregator) AlertListener(com.thinkbiganalytics.alerts.api.AlertListener) PostConstruct(javax.annotation.PostConstruct) Optional(java.util.Optional) InvocationHandler(java.lang.reflect.InvocationHandler) Consumer(reactor.fn.Consumer) Collections(java.util.Collections) AlertCriteria(com.thinkbiganalytics.alerts.api.AlertCriteria) AlertResponse(com.thinkbiganalytics.alerts.api.AlertResponse) AlertManager(com.thinkbiganalytics.alerts.spi.AlertManager) SimpleEntry(java.util.AbstractMap.SimpleEntry)

Example 3 with Alert

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();
}
Also used : HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) BaseAlertCriteria(com.thinkbiganalytics.alerts.api.core.BaseAlertCriteria) ArrayList(java.util.ArrayList) Alert(com.thinkbiganalytics.alerts.api.Alert) AlertSummary(com.thinkbiganalytics.alerts.api.AlertSummary)

Example 4 with Alert

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);
}
Also used : SourceAlertID(com.thinkbiganalytics.alerts.api.core.AggregatingAlertProvider.SourceAlertID) Alert(com.thinkbiganalytics.alerts.api.Alert) SourceAlertID(com.thinkbiganalytics.alerts.api.core.AggregatingAlertProvider.SourceAlertID) Test(org.junit.Test)

Example 5 with Alert

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);
}
Also used : Alert(com.thinkbiganalytics.alerts.api.Alert) Test(org.junit.Test)

Aggregations

Alert (com.thinkbiganalytics.alerts.api.Alert)29 ArrayList (java.util.ArrayList)9 Test (org.junit.Test)9 AlertCriteria (com.thinkbiganalytics.alerts.api.AlertCriteria)8 JpaAlert (com.thinkbiganalytics.metadata.jpa.alerts.JpaAlert)8 AlertResponse (com.thinkbiganalytics.alerts.api.AlertResponse)7 DateTime (org.joda.time.DateTime)6 AlertSummary (com.thinkbiganalytics.alerts.api.AlertSummary)5 AlertManager (com.thinkbiganalytics.alerts.spi.AlertManager)5 List (java.util.List)5 BooleanBuilder (com.querydsl.core.BooleanBuilder)4 AlertResponder (com.thinkbiganalytics.alerts.api.AlertResponder)4 JpaAlertChangeEvent (com.thinkbiganalytics.metadata.jpa.alerts.JpaAlertChangeEvent)4 Serializable (java.io.Serializable)4 Predicate (com.querydsl.core.types.Predicate)3 JPAQueryFactory (com.querydsl.jpa.impl.JPAQueryFactory)3 AlertNotfoundException (com.thinkbiganalytics.alerts.api.AlertNotfoundException)3 AlertProvider (com.thinkbiganalytics.alerts.api.AlertProvider)3 URI (java.net.URI)3 Principal (java.security.Principal)3