You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by ni...@apache.org on 2018/06/22 15:43:57 UTC
[02/10] metron git commit: METRON-1616 Changing alert status fails if
no metaalerts have been created yet (merrimanr) closes apache/metron#1061
METRON-1616 Changing alert status fails if no metaalerts have been created yet (merrimanr) closes apache/metron#1061
Project: http://git-wip-us.apache.org/repos/asf/metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/36b20297
Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/36b20297
Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/36b20297
Branch: refs/heads/feature/METRON-1416-upgrade-solr
Commit: 36b20297b7f385202387b22087a5e85d92e55bc7
Parents: 0bb3580
Author: merrimanr <me...@gmail.com>
Authored: Mon Jun 18 16:35:51 2018 -0500
Committer: merrimanr <me...@apache.org>
Committed: Mon Jun 18 16:35:51 2018 -0500
----------------------------------------------------------------------
.../dao/ElasticsearchMetaAlertDao.java | 29 ++++++++++++------
.../dao/ElasticsearchMetaAlertDaoTest.java | 32 ++++++++++++++++++++
2 files changed, 52 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metron/blob/36b20297/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDao.java
----------------------------------------------------------------------
diff --git a/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDao.java b/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDao.java
index ee3ca89..71fe181 100644
--- a/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDao.java
+++ b/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDao.java
@@ -43,6 +43,7 @@ import org.apache.metron.indexing.dao.update.OriginalNotFoundException;
import org.apache.metron.indexing.dao.update.PatchRequest;
import org.apache.metron.stellar.common.utils.ConversionUtils;
import org.elasticsearch.action.search.SearchRequestBuilder;
+import org.elasticsearch.index.IndexNotFoundException;
import org.elasticsearch.index.query.InnerHitBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
@@ -77,6 +78,7 @@ public class ElasticsearchMetaAlertDao implements MetaAlertDao {
public static final String THREAT_TRIAGE_FIELD = THREAT_FIELD_DEFAULT.replace('.', ':');
private static final String STATUS_PATH = "/status";
private static final String ALERT_PATH = "/alert";
+ private static final String INDEX_NOT_FOUND_INDICES_KEY = "es.index";
private IndexDao indexDao;
private ElasticsearchDao elasticsearchDao;
@@ -421,15 +423,24 @@ public class ElasticsearchMetaAlertDao implements MetaAlertDao {
} else {
Map<Document, Optional<String>> updates = new HashMap<>();
updates.put(update, index);
- // We need to update an alert itself. Only that portion of the update can be delegated.
- // We still need to get meta alerts potentially associated with it and update.
- Collection<Document> metaAlerts = getMetaAlertsForAlert(update.getGuid()).getResults().stream()
- .map(searchResult -> new Document(searchResult.getSource(), searchResult.getId(), METAALERT_TYPE, update.getTimestamp()))
- .collect(Collectors.toList());
- // Each meta alert needs to be updated with the new alert
- for (Document metaAlert : metaAlerts) {
- replaceAlertInMetaAlert(metaAlert, update);
- updates.put(metaAlert, Optional.of(METAALERTS_INDEX));
+ try {
+ // We need to update an alert itself. Only that portion of the update can be delegated.
+ // We still need to get meta alerts potentially associated with it and update.
+ Collection<Document> metaAlerts = getMetaAlertsForAlert(update.getGuid()).getResults().stream()
+ .map(searchResult -> new Document(searchResult.getSource(), searchResult.getId(), METAALERT_TYPE, update.getTimestamp()))
+ .collect(Collectors.toList());
+ // Each meta alert needs to be updated with the new alert
+ for (Document metaAlert : metaAlerts) {
+ replaceAlertInMetaAlert(metaAlert, update);
+ updates.put(metaAlert, Optional.of(METAALERTS_INDEX));
+ }
+ } catch (IndexNotFoundException e) {
+ List<String> indicesNotFound = e.getMetadata(INDEX_NOT_FOUND_INDICES_KEY);
+ // If no metaalerts have been created yet and the metaalerts index does not exist, assume no metaalerts exist for alert.
+ // Otherwise throw the exception.
+ if (indicesNotFound.size() != 1 || !METAALERTS_INDEX.equals(indicesNotFound.get(0))) {
+ throw e;
+ }
}
// Run the alert's update
http://git-wip-us.apache.org/repos/asf/metron/blob/36b20297/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDaoTest.java
----------------------------------------------------------------------
diff --git a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDaoTest.java b/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDaoTest.java
index 44defb3..df782bd 100644
--- a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDaoTest.java
+++ b/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/dao/ElasticsearchMetaAlertDaoTest.java
@@ -18,9 +18,14 @@
package org.apache.metron.elasticsearch.dao;
+import static org.apache.metron.indexing.dao.MetaAlertDao.METAALERTS_INDEX;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
import java.io.IOException;
import java.util.ArrayList;
@@ -47,6 +52,7 @@ import org.apache.metron.indexing.dao.search.InvalidSearchException;
import org.apache.metron.indexing.dao.search.SearchRequest;
import org.apache.metron.indexing.dao.search.SearchResponse;
import org.apache.metron.indexing.dao.update.Document;
+import org.elasticsearch.index.IndexNotFoundException;
import org.junit.Test;
public class ElasticsearchMetaAlertDaoTest {
@@ -273,4 +279,30 @@ public class ElasticsearchMetaAlertDaoTest {
metaAlertDao.calculateMetaScores(metaalert);
assertNotNull(metaalert.getDocument().get(MetaAlertDao.THREAT_FIELD_DEFAULT));
}
+
+ @Test
+ public void testUpdateShouldUpdateOnMissingMetaAlertIndex() throws Exception {
+ ElasticsearchDao elasticsearchDao = mock(ElasticsearchDao.class);
+ ElasticsearchMetaAlertDao emaDao = spy(new ElasticsearchMetaAlertDao(elasticsearchDao));
+
+ doThrow(new IndexNotFoundException(METAALERTS_INDEX)).when(emaDao).getMetaAlertsForAlert("alert_one");
+
+ Document update = new Document(new HashMap<>(), "alert_one", "", 0L);
+ emaDao.update(update, Optional.empty());
+
+ Map<Document, Optional<String>> expectedUpdate = new HashMap<Document, Optional<String>>() {{
+ put(update, Optional.empty());
+ }};
+ verify(elasticsearchDao).batchUpdate(expectedUpdate);
+ }
+
+ @Test(expected = IndexNotFoundException.class)
+ public void testUpdateShouldThrowExceptionOnMissingSensorIndex() throws Exception {
+ ElasticsearchMetaAlertDao emaDao = spy(new ElasticsearchMetaAlertDao());
+
+ doThrow(new IndexNotFoundException("bro")).when(emaDao).getMetaAlertsForAlert("alert_one");
+
+ Document update = new Document(new HashMap<>(), "alert_one", "", 0L);
+ emaDao.update(update, Optional.empty());
+ }
}