@Override public Document updateMetaAlertStatus(String metaAlertGuid, MetaAlertStatus status) throws IOException { Document metaAlert = retrieveLatestDao .getLatest(metaAlertGuid, MetaAlertConstants.METAALERT_TYPE); if (metaAlert == null) { throw new IOException(String.format("Unable to update meta alert status. Meta alert with guid %s cannot be found.", metaAlertGuid)); } String currentStatus = (String) metaAlert.getDocument().get(MetaAlertConstants.STATUS_FIELD); boolean metaAlertUpdated = !status.getStatusString().equals(currentStatus); if (metaAlertUpdated) { List<GetRequest> getRequests = new ArrayList<>(); @SuppressWarnings("unchecked") List<Map<String, Object>> currentAlerts = (List<Map<String, Object>>) metaAlert.getDocument() .get(MetaAlertConstants.ALERT_FIELD); currentAlerts.stream() .forEach(currentAlert -> getRequests.add(new GetRequest((String) currentAlert.get(GUID), (String) currentAlert.get(config.getSourceTypeField())))); Iterable<Document> alerts = retrieveLatestDao.getAllLatest(getRequests); Map<Document, Optional<String>> updates = buildStatusChangeUpdates(metaAlert, alerts, status); update(updates); } return metaAlert; }
private Map<String, Object> createMetaAlert(String guid) throws Exception { // create and index 2 normal alerts List<Map<String, Object>> alerts = buildAlerts(2); alerts.get(0).put(METAALERT_FIELD, Collections.singletonList(guid)); alerts.get(1).put(METAALERT_FIELD, Collections.singletonList(guid)); addRecords(alerts, getTestIndexFullName(), SENSOR_NAME); // create and index a meta-alert Map<String, Object> metaAlert = buildMetaAlert(guid, MetaAlertStatus.ACTIVE, Optional.of(alerts)); addRecords(Collections.singletonList(metaAlert), getMetaAlertIndex(), METAALERT_TYPE); // ensure the test alerts were loaded findCreatedDocs(Arrays.asList( new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("meta_alert", METAALERT_TYPE))); return metaAlert; }
@Test public void shouldGetAllLatest() throws Exception { // Load alerts List<Document> alerts = buildAlerts(15); alerts.stream().collect(Collectors.toMap(Document::getGuid, document -> Optional.empty())); Map<Document, Optional<String>> updates = alerts.stream() .collect(Collectors.toMap(document -> document, document -> Optional.empty())); hbaseDao.batchUpdate(updates); int expectedCount = 12; List<GetRequest> getRequests = new ArrayList<>(); for(int i = 1; i < expectedCount + 1; i ++) { getRequests.add(new GetRequest("message_" + i, SENSOR_TYPE)); } Iterator<Document> results = hbaseDao.getAllLatest(getRequests).iterator(); for (int i = 0; i < expectedCount; i++) { Document expectedDocument = alerts.get(i + 1); Document actualDocument = results.next(); Assert.assertEquals(expectedDocument, actualDocument); } Assert.assertFalse("Result size should be 12 but was greater", results.hasNext()); }
new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("message_2", SENSOR_NAME), new GetRequest("message_3", SENSOR_NAME), new GetRequest("meta_alert", METAALERT_TYPE) )); .asList(new GetRequest("message_1", SENSOR_NAME), new GetRequest("message_2", SENSOR_NAME))); assertEquals(expectedMetaAlert, actualMetaAlert.getDocument()); findUpdatedDoc(expectedMetaAlert, "meta_alert", METAALERT_TYPE); .asList(new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME))); assertEquals(expectedMetaAlert, actualMetaAlert.getDocument()); findUpdatedDoc(expectedMetaAlert, "meta_alert", METAALERT_TYPE); .asList(new GetRequest("message_2", SENSOR_NAME), new GetRequest("message_3", SENSOR_NAME))); assertEquals(expectedMetaAlert, actualMetaAlert.getDocument()); findUpdatedDoc(expectedMetaAlert, "meta_alert", METAALERT_TYPE);
new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("meta_alert", METAALERT_TYPE))); Collections.singletonList(new GetRequest("message_1", SENSOR_NAME))); Assert.fail("Adding alerts to an inactive meta alert should throw an exception"); } catch (IllegalStateException ise) { Collections.singletonList(new GetRequest("message_0", SENSOR_NAME))); Assert.fail("Removing alerts from an inactive meta alert should throw an exception"); } catch (IllegalStateException ise) {
@Test public void shouldPatchMetaAlertFields() throws Exception { // Load alerts List<Map<String, Object>> alerts = buildAlerts(2); alerts.get(0).put(METAALERT_FIELD, Collections.singletonList("meta_active")); alerts.get(1).put(METAALERT_FIELD, Collections.singletonList("meta_active")); addRecords(alerts, getTestIndexFullName(), SENSOR_NAME); // Put the nested type into the test index, so that it'll match appropriately setupTypings(); // Load metaAlerts Map<String, Object> metaAlert = buildMetaAlert("meta_alert", MetaAlertStatus.ACTIVE, Optional.of(Arrays.asList(alerts.get(0), alerts.get(1)))); // We pass MetaAlertDao.METAALERT_TYPE, because the "_doc" gets appended automatically. addRecords(Collections.singletonList(metaAlert), getMetaAlertIndex(), METAALERT_TYPE); // ensure the test data was loaded findCreatedDocs(Arrays.asList( new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("meta_alert", METAALERT_TYPE))); // patch the name field String namePatch = namePatchRequest.replace(META_INDEX_FLAG, getMetaAlertIndex()); PatchRequest patchRequest = JSONUtils.INSTANCE.load(namePatch, PatchRequest.class); metaDao.patch(metaDao, patchRequest, Optional.of(System.currentTimeMillis())); // ensure the alert was patched assertEventually(() -> { Document updated = metaDao.getLatest("meta_alert", METAALERT_TYPE); Assert.assertEquals("New Meta Alert", updated.getDocument().get(NAME_FIELD)); }); }
new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("message_2", SENSOR_NAME), new GetRequest("message_3", SENSOR_NAME), new GetRequest("meta_alert", METAALERT_TYPE))); .asList(new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME))); assertEquals(expectedMetaAlert, actualMetaAlert.getDocument()); findUpdatedDoc(expectedMetaAlert, "meta_alert", METAALERT_TYPE); .asList(new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME))); assertEquals(expectedMetaAlert, actualMetaAlert.getDocument()); findUpdatedDoc(expectedMetaAlert, "meta_alert", METAALERT_TYPE); .asList(new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_2", SENSOR_NAME))); assertEquals(expectedMetaAlert, actualMetaAlert.getDocument()); findUpdatedDoc(expectedMetaAlert, "meta_alert", METAALERT_TYPE); Collections.singletonList(new GetRequest("message_3", SENSOR_NAME))); Assert.fail("Removing these alerts will result in an empty meta alert. Empty meta alerts are not allowed."); } catch (IllegalStateException ise) {
new GetRequest((String) metaAlert.get(Constants.GUID), METAALERT_TYPE)) .collect(Collectors.toList()); createdDocs.addAll(alerts.stream().map(alert -> new GetRequest((String) alert.get(Constants.GUID), SENSOR_NAME)) .collect(Collectors.toList())); findCreatedDocs(createdDocs);
new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("meta_alert", METAALERT_TYPE)));
new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("meta_alert", METAALERT_TYPE)));
new GetRequest("meta_active", METAALERT_TYPE), new GetRequest("meta_inactive", METAALERT_TYPE)));
new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("message_2", SENSOR_NAME))); add(new GetRequest("message_1", SENSOR_NAME)); add(new GetRequest("message_2", SENSOR_NAME, getTestIndexFullName())); }});
new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME)));
new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("message_2", SENSOR_NAME), new GetRequest("message_3", SENSOR_NAME), new GetRequest("meta_active", METAALERT_TYPE), new GetRequest("meta_inactive", METAALERT_TYPE)));
new GetRequest("message_0", SENSOR_NAME), new GetRequest("message_1", SENSOR_NAME), new GetRequest("meta_active", METAALERT_TYPE), new GetRequest("meta_inactive", METAALERT_TYPE)));
@Test(expected = InvalidCreateException.class) public void testCreateMetaAlertEmptyGroups() throws InvalidCreateException, IOException { ElasticsearchDao esDao = new ElasticsearchDao(); MultiIndexDao miDao = new MultiIndexDao(esDao); ElasticsearchMetaAlertDao emaDao = new ElasticsearchMetaAlertDao(); emaDao.init(miDao); MetaAlertCreateRequest createRequest = new MetaAlertCreateRequest(); createRequest.setAlerts(Collections.singletonList(new GetRequest("don't", "care"))); emaDao.createMetaAlert(createRequest); }
requests.add(new GetRequest("message_" + i, SENSOR_NAME)); requests.add(new GetRequest("meta_alert", METAALERT_TYPE));
new GetRequest((String) metaAlert.get(Constants.GUID), METAALERT_TYPE)) .collect(Collectors.toList()); createdDocs.addAll(alerts.stream().map(alert -> new GetRequest((String) alert.get(Constants.GUID), SENSOR_NAME)) .collect(Collectors.toList())); findCreatedDocs(createdDocs);