Search in sources :

Example 11 with Alert

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;
}
Also used : AlertNotfoundException(com.thinkbiganalytics.alerts.api.AlertNotfoundException) JpaAlertChangeEvent(com.thinkbiganalytics.metadata.jpa.alerts.JpaAlertChangeEvent) Alert(com.thinkbiganalytics.alerts.api.Alert) JpaAlert(com.thinkbiganalytics.metadata.jpa.alerts.JpaAlert) JpaAlert(com.thinkbiganalytics.metadata.jpa.alerts.JpaAlert) Principal(java.security.Principal) AlertChangeEvent(com.thinkbiganalytics.alerts.api.AlertChangeEvent) JpaAlertChangeEvent(com.thinkbiganalytics.metadata.jpa.alerts.JpaAlertChangeEvent)

Example 12 with Alert

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;
}
Also used : BooleanBuilder(com.querydsl.core.BooleanBuilder) ArrayList(java.util.ArrayList) Alert(com.thinkbiganalytics.alerts.api.Alert) JpaAlert(com.thinkbiganalytics.metadata.jpa.alerts.JpaAlert) QJpaAlert(com.thinkbiganalytics.metadata.jpa.alerts.QJpaAlert) Predicate(com.querydsl.core.types.Predicate)

Example 13 with Alert

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

Example 14 with Alert

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

Example 15 with Alert

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);
    }
}
Also used : AlertCriteria(com.thinkbiganalytics.alerts.api.AlertCriteria) AlertManager(com.thinkbiganalytics.alerts.spi.AlertManager) PathParam(javax.ws.rs.PathParam) AlertResponder(com.thinkbiganalytics.alerts.api.AlertResponder) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) AggregatingAlertProvider(com.thinkbiganalytics.alerts.api.core.AggregatingAlertProvider) Path(javax.ws.rs.Path) ApiResponses(io.swagger.annotations.ApiResponses) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) AlertSummary(com.thinkbiganalytics.alerts.api.AlertSummary) ApiOperation(io.swagger.annotations.ApiOperation) MediaType(javax.ws.rs.core.MediaType) AlertProvider(com.thinkbiganalytics.alerts.api.AlertProvider) QueryParam(javax.ws.rs.QueryParam) AlertCreateRequest(com.thinkbiganalytics.alerts.rest.model.AlertCreateRequest) RestResponseStatus(com.thinkbiganalytics.rest.model.RestResponseStatus) Consumes(javax.ws.rs.Consumes) Alert(com.thinkbiganalytics.alerts.api.Alert) AlertUpdateRequest(com.thinkbiganalytics.alerts.rest.model.AlertUpdateRequest) DefaultValue(javax.ws.rs.DefaultValue) AccessController(com.thinkbiganalytics.security.AccessController) AlertRange(com.thinkbiganalytics.alerts.rest.model.AlertRange) Formatters(com.thinkbiganalytics.Formatters) URI(java.net.URI) Named(javax.inject.Named) Api(io.swagger.annotations.Api) Status(javax.ws.rs.core.Response.Status) POST(javax.ws.rs.POST) OperationsAccessControl(com.thinkbiganalytics.jobrepo.security.OperationsAccessControl) Collection(java.util.Collection) AlertType(com.thinkbiganalytics.alerts.rest.model.AlertType) Set(java.util.Set) Collectors(java.util.stream.Collectors) MultivaluedMap(javax.ws.rs.core.MultivaluedMap) List(java.util.List) Component(org.springframework.stereotype.Component) ApiResponse(io.swagger.annotations.ApiResponse) Optional(java.util.Optional) WebApplicationException(javax.ws.rs.WebApplicationException) KyloEntityAwareAlertManager(com.thinkbiganalytics.metadata.alerts.KyloEntityAwareAlertManager) UriInfo(javax.ws.rs.core.UriInfo) AlertsModel(com.thinkbiganalytics.alerts.rest.AlertsModel) AlertSummaryGrouped(com.thinkbiganalytics.alerts.rest.model.AlertSummaryGrouped) AlertCriteria(com.thinkbiganalytics.alerts.api.AlertCriteria) AlertCriteriaInput(com.thinkbiganalytics.alerts.api.core.AlertCriteriaInput) AlertResponse(com.thinkbiganalytics.alerts.api.AlertResponse) WebApplicationException(javax.ws.rs.WebApplicationException)

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