You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by le...@apache.org on 2018/05/18 18:29:33 UTC
[12/13] metron git commit: METRON-1548 Remove hardcoded source:type
from Alerts UI (justinleet) closes apache/metron#1010
METRON-1548 Remove hardcoded source:type from Alerts UI (justinleet) closes apache/metron#1010
Project: http://git-wip-us.apache.org/repos/asf/metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/71a015fa
Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/71a015fa
Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/71a015fa
Branch: refs/heads/feature/METRON-1416-upgrade-solr
Commit: 71a015fabc47b23ea0c5400fa239fee9f5c0d194
Parents: a99cadb
Author: justinjleet <ju...@gmail.com>
Authored: Wed May 16 17:39:07 2018 -0400
Committer: justinjleet <ju...@gmail.com>
Committed: Fri May 18 13:32:29 2018 -0400
----------------------------------------------------------------------
.../rest/service/impl/SearchServiceImpl.java | 42 ++++++++++----
.../src/main/resources/application.yml | 2 +-
.../SearchControllerIntegrationTest.java | 9 ++-
.../service/impl/SearchServiceImplTest.java | 60 +++++++++++++++++---
4 files changed, 92 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metron/blob/71a015fa/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java
----------------------------------------------------------------------
diff --git a/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java b/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java
index e5bab08..21d158f 100644
--- a/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java
+++ b/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java
@@ -23,19 +23,26 @@ import static org.apache.metron.rest.MetronRestConstants.INDEX_WRITER_NAME;
import static org.apache.metron.rest.MetronRestConstants.SEARCH_FACET_FIELDS_SPRING_PROPERTY;
import com.google.common.collect.Lists;
+import java.io.IOException;
import java.lang.invoke.MethodHandles;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import org.apache.metron.common.Constants;
import org.apache.metron.indexing.dao.IndexDao;
+import org.apache.metron.indexing.dao.search.FieldType;
import org.apache.metron.indexing.dao.search.GetRequest;
import org.apache.metron.indexing.dao.search.GroupRequest;
import org.apache.metron.indexing.dao.search.GroupResponse;
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.search.FieldType;
import org.apache.metron.rest.RestException;
import org.apache.metron.rest.model.AlertsUIUserSettings;
import org.apache.metron.rest.service.AlertsUIService;
+import org.apache.metron.rest.service.GlobalConfigService;
import org.apache.metron.rest.service.SearchService;
import org.apache.metron.rest.service.SensorIndexingConfigService;
import org.slf4j.Logger;
@@ -44,11 +51,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
-import java.io.IOException;
-import java.util.Map;
-import java.util.Optional;
-import java.util.List;
-
@Service
public class SearchServiceImpl implements SearchService {
@@ -57,14 +59,19 @@ public class SearchServiceImpl implements SearchService {
private IndexDao dao;
private Environment environment;
private SensorIndexingConfigService sensorIndexingConfigService;
+ private GlobalConfigService globalConfigService;
private AlertsUIService alertsUIService;
@Autowired
- public SearchServiceImpl(IndexDao dao, Environment environment,
- SensorIndexingConfigService sensorIndexingConfigService, AlertsUIService alertsUIService) {
+ public SearchServiceImpl(IndexDao dao,
+ Environment environment,
+ SensorIndexingConfigService sensorIndexingConfigService,
+ GlobalConfigService globalConfigService,
+ AlertsUIService alertsUIService) {
this.dao = dao;
this.environment = environment;
this.sensorIndexingConfigService = sensorIndexingConfigService;
+ this.globalConfigService = globalConfigService;
this.alertsUIService = alertsUIService;
}
@@ -133,11 +140,24 @@ public class SearchServiceImpl implements SearchService {
return indices;
}
- private List<String> getDefaultFacetFields() throws RestException {
+ @SuppressWarnings("unchecked")
+ public List<String> getDefaultFacetFields() throws RestException {
Optional<AlertsUIUserSettings> alertUserSettings = alertsUIService.getAlertsUIUserSettings();
if (!alertUserSettings.isPresent() || alertUserSettings.get().getFacetFields() == null) {
- String facetFieldsProperty = environment.getProperty(SEARCH_FACET_FIELDS_SPRING_PROPERTY, String.class, "");
- return Arrays.asList(facetFieldsProperty.split(","));
+ String facetFieldsProperty = environment
+ .getProperty(SEARCH_FACET_FIELDS_SPRING_PROPERTY, String.class, "");
+
+ Map<String, Object> globalConfig = globalConfigService.get();
+ String sourceTypeField = Constants.SENSOR_TYPE.replace('.', ':');
+ List<String> facetFields = new ArrayList<>();
+ if (globalConfig != null) {
+ sourceTypeField = (String) globalConfig.getOrDefault("source.type.field", sourceTypeField);
+ }
+ facetFields.add(sourceTypeField);
+ if (facetFieldsProperty != null) {
+ facetFields.addAll(Arrays.asList(facetFieldsProperty.split(",")));
+ }
+ return facetFields;
} else {
return alertUserSettings.get().getFacetFields();
}
http://git-wip-us.apache.org/repos/asf/metron/blob/71a015fa/metron-interface/metron-rest/src/main/resources/application.yml
----------------------------------------------------------------------
diff --git a/metron-interface/metron-rest/src/main/resources/application.yml b/metron-interface/metron-rest/src/main/resources/application.yml
index 3e75881..923f036 100644
--- a/metron-interface/metron-rest/src/main/resources/application.yml
+++ b/metron-interface/metron-rest/src/main/resources/application.yml
@@ -51,7 +51,7 @@ search:
results: 1000
groups: 1000
facet:
- fields: source:type,ip_src_addr,ip_dst_addr,enrichments:geo:ip_dst_addr:country
+ fields: ip_src_addr,ip_dst_addr,enrichments:geo:ip_dst_addr:country
index:
dao:
http://git-wip-us.apache.org/repos/asf/metron/blob/71a015fa/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java b/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java
index a55132c..aa7b6cd 100644
--- a/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java
+++ b/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java
@@ -37,6 +37,7 @@ import org.apache.metron.indexing.dao.InMemoryDao;
import org.apache.metron.indexing.dao.SearchIntegrationTest;
import org.apache.metron.indexing.dao.search.FieldType;
import org.apache.metron.rest.service.AlertsUIService;
+import org.apache.metron.rest.service.GlobalConfigService;
import org.apache.metron.rest.service.SensorIndexingConfigService;
import org.json.simple.parser.ParseException;
import org.junit.After;
@@ -141,7 +142,9 @@ public class SearchControllerIntegrationTest extends DaoControllerTest {
.andExpect(jsonPath("$.results[3].source.timestamp").value(2))
.andExpect(jsonPath("$.results[4].source.source:type").value("bro"))
.andExpect(jsonPath("$.results[4].source.timestamp").value(1))
- .andExpect(jsonPath("$.facetCounts.*", hasSize(1)))
+ .andExpect(jsonPath("$.facetCounts.*", hasSize(2)))
+ .andExpect(jsonPath("$.facetCounts.source:type.*", hasSize(1)))
+ .andExpect(jsonPath("$.facetCounts.source:type['bro']").value(5))
.andExpect(jsonPath("$.facetCounts.ip_src_addr.*", hasSize(2)))
.andExpect(jsonPath("$.facetCounts.ip_src_addr['192.168.1.1']").value(3))
.andExpect(jsonPath("$.facetCounts.ip_src_addr['192.168.1.2']").value(1))
@@ -366,8 +369,12 @@ public class SearchControllerIntegrationTest extends DaoControllerTest {
Map<String, Long> ipSrcPortCounts = new HashMap<>();
ipSrcPortCounts.put("8010", 1L);
ipSrcPortCounts.put("8009", 2L);
+ Map<String, Long> sourceTypeCounts = new HashMap<>();
+ sourceTypeCounts.put("bro", 5L);
facetCounts.put("ip_src_addr", ipSrcAddrCounts);
facetCounts.put("ip_src_port", ipSrcPortCounts);
+ facetCounts.put("source:type", sourceTypeCounts);
+
InMemoryDao.setFacetCounts(facetCounts);
}
http://git-wip-us.apache.org/repos/asf/metron/blob/71a015fa/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java
----------------------------------------------------------------------
diff --git a/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java b/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java
index 82ca0e9..4c63c6d 100644
--- a/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java
+++ b/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java
@@ -19,6 +19,7 @@ package org.apache.metron.rest.service.impl;
import static org.apache.metron.rest.MetronRestConstants.INDEX_WRITER_NAME;
import static org.apache.metron.rest.MetronRestConstants.SEARCH_FACET_FIELDS_SPRING_PROPERTY;
+import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
@@ -28,15 +29,17 @@ import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Optional;
-
import org.apache.metron.indexing.dao.IndexDao;
import org.apache.metron.indexing.dao.search.InvalidSearchException;
import org.apache.metron.indexing.dao.search.SearchRequest;
import org.apache.metron.rest.RestException;
import org.apache.metron.rest.model.AlertsUIUserSettings;
import org.apache.metron.rest.service.AlertsUIService;
-import org.apache.metron.rest.service.SearchService;
+import org.apache.metron.rest.service.GlobalConfigService;
import org.apache.metron.rest.service.SensorIndexingConfigService;
import org.junit.Before;
import org.junit.Rule;
@@ -52,16 +55,24 @@ public class SearchServiceImplTest {
IndexDao dao;
Environment environment;
SensorIndexingConfigService sensorIndexingConfigService;
+ GlobalConfigService globalConfigService;
AlertsUIService alertsUIService;
- SearchService searchService;
+ SearchServiceImpl searchService;
@Before
public void setUp() throws Exception {
dao = mock(IndexDao.class);
environment = mock(Environment.class);
sensorIndexingConfigService = mock(SensorIndexingConfigService.class);
+ globalConfigService = mock(GlobalConfigService.class);
alertsUIService = mock(AlertsUIService.class);
- searchService = new SearchServiceImpl(dao, environment, sensorIndexingConfigService, alertsUIService);
+ searchService = new SearchServiceImpl(
+ dao,
+ environment,
+ sensorIndexingConfigService,
+ globalConfigService,
+ alertsUIService
+ );
}
@@ -97,7 +108,7 @@ public class SearchServiceImplTest {
@Test
public void searchShouldProperlySearchDefaultFacetFields() throws Exception {
when(environment.getProperty(SEARCH_FACET_FIELDS_SPRING_PROPERTY, String.class, ""))
- .thenReturn("source:type,ip_src_addr");
+ .thenReturn("ip_src_addr,ip_dst_addr");
when(alertsUIService.getAlertsUIUserSettings()).thenReturn(Optional.empty());
SearchRequest searchRequest = new SearchRequest();
@@ -107,14 +118,14 @@ public class SearchServiceImplTest {
SearchRequest expectedSearchRequest = new SearchRequest();
expectedSearchRequest.setIndices(Arrays.asList("bro", "snort", "metaalert"));
- expectedSearchRequest.setFacetFields(Arrays.asList("source:type", "ip_src_addr"));
+ expectedSearchRequest.setFacetFields(Arrays.asList("source:type", "ip_src_addr", "ip_dst_addr"));
verify(dao).search(eq(expectedSearchRequest));
}
@Test
public void searchShouldProperlySearchWithUserSettingsFacetFields() throws Exception {
AlertsUIUserSettings alertsUIUserSettings = new AlertsUIUserSettings();
- alertsUIUserSettings.setFacetFields(Arrays.asList("source:type", "ip_dst_addr"));
+ alertsUIUserSettings.setFacetFields(Arrays.asList("ip_src_addr", "ip_dst_addr"));
when(alertsUIService.getAlertsUIUserSettings()).thenReturn(Optional.of(alertsUIUserSettings));
SearchRequest searchRequest = new SearchRequest();
@@ -124,7 +135,7 @@ public class SearchServiceImplTest {
SearchRequest expectedSearchRequest = new SearchRequest();
expectedSearchRequest.setIndices(Arrays.asList("bro", "snort", "metaalert"));
- expectedSearchRequest.setFacetFields(Arrays.asList("source:type", "ip_dst_addr"));
+ expectedSearchRequest.setFacetFields(Arrays.asList("ip_src_addr", "ip_dst_addr"));
verify(dao).search(eq(expectedSearchRequest));
}
@@ -166,4 +177,37 @@ public class SearchServiceImplTest {
verifyNoMoreInteractions(dao);
}
+
+ @Test
+ public void testGetDefaultFacetFieldsGlobalConfig() throws RestException {
+ when(environment.getProperty(SEARCH_FACET_FIELDS_SPRING_PROPERTY, String.class, ""))
+ .thenReturn("ip_src_addr");
+ Map<String, Object> globalConfig = new HashMap<>();
+ globalConfig.put("source.type.field", "source.type");
+ when(globalConfigService.get()).thenReturn(globalConfig);
+ when(alertsUIService.getAlertsUIUserSettings()).thenReturn(Optional.empty());
+ List<String> defaultFields = searchService.getDefaultFacetFields();
+
+ List<String> expectedFields = new ArrayList<>();
+ expectedFields.add("source.type");
+ expectedFields.add("ip_src_addr");
+
+ assertEquals(expectedFields, defaultFields);
+ }
+
+ @Test
+ public void testGetDefaultFacetFieldsEmptyGlobalConfig() throws RestException {
+ when(environment.getProperty(SEARCH_FACET_FIELDS_SPRING_PROPERTY, String.class, ""))
+ .thenReturn("ip_src_addr");
+ Map<String, Object> globalConfig = new HashMap<>();
+ when(globalConfigService.get()).thenReturn(globalConfig);
+ when(alertsUIService.getAlertsUIUserSettings()).thenReturn(Optional.empty());
+ List<String> defaultFields = searchService.getDefaultFacetFields();
+
+ List<String> expectedFields = new ArrayList<>();
+ expectedFields.add("source:type");
+ expectedFields.add("ip_src_addr");
+
+ assertEquals(expectedFields, defaultFields);
+ }
}