diff options
author | 2020-07-15 13:26:51 +0200 | |
---|---|---|
committer | 2020-07-17 13:43:43 +0200 | |
commit | ba384eeb3cc007ff1d48db04fecc9356069456c5 (patch) | |
tree | cbb6695e1ca3ac80e31dc16fd05483fd10b3fa37 /src/main | |
parent | 977a518c680032572f6c5c59879ead71221e460a (diff) |
implement regex support in PM Mapper filtering mechanism
Issue-ID: DCAEGEN2-2347
Signed-off-by: marcinrzepeckiwroc <marcin.rzepecki@nokia.com>
Change-Id: I3fdbae33ae318800ccc2758a191604fe79c2aaf4
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/org/onap/dcaegen2/services/pmmapper/App.java | 10 | ||||
-rw-r--r-- | src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java | 79 |
2 files changed, 53 insertions, 36 deletions
diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/App.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/App.java index 21e4441..6aeeaba 100644 --- a/src/main/java/org/onap/dcaegen2/services/pmmapper/App.java +++ b/src/main/java/org/onap/dcaegen2/services/pmmapper/App.java @@ -59,7 +59,6 @@ import javax.net.ssl.SSLContext; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.List; @Data @@ -213,6 +212,7 @@ public class App { try { hasMatchingFilter = filterHandler.filterByMeasType(events); if(!hasMatchingFilter) { + logger.unwrap().info("No filter match from all measurement files."); sendEventProcessed(config,event); } } catch (Exception exception) { @@ -223,25 +223,25 @@ public class App { } public static Flux<List<Event>> map(Mapper mapper, List<Event> events, MapperConfig config) { - List<Event> mappedEvents = new ArrayList<>(); + List<Event> mappedEvents; try { mappedEvents = mapper.mapEvents(events); } catch (Exception exception) { logger.unwrap().error("Unable to map XML to VES",exception); sendEventProcessed(config,events.get(0)); - return Flux.<List<Event>>empty(); + return Flux.empty(); } return Flux.just(mappedEvents); } public static Flux<List<Event>> split(MeasSplitter splitter, Event event, MapperConfig config) { - List<Event> splitEvents = new ArrayList<>(); + List<Event> splitEvents; try { splitEvents = splitter.split(event); } catch (Exception exception) { logger.unwrap().error("Unable to split MeasCollecFile",exception); sendEventProcessed(config,event); - return Flux.<List<Event>>empty(); + return Flux.empty(); } return Flux.just(splitEvents); } diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java index fb5772e..7f2a5d6 100644 --- a/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java +++ b/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java @@ -21,8 +21,11 @@ package org.onap.dcaegen2.services.pmmapper.filtering; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.Optional; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; import java.util.stream.Collectors; import org.apache.commons.io.FilenameUtils; @@ -68,16 +71,9 @@ public class MeasFilterHandler { logger.unwrap().info("Filtering the measurement file by measTypes."); MeasurementData measData = measurementFile.getMeasurementData().get().get(0); List<MeasurementInfo> measInfos = measData.getMeasurementInfo(); - List<MeasurementInfo> filteredMeasInfos = new ArrayList<>(); + List<Pattern> filterPatternList = getPatternsFromFilters(filter); - for (MeasurementInfo currentMeasInfo : measInfos) { - List<String> measTypesNode = currentMeasInfo.getMeasTypes(); - if (measTypesNode != null && !measTypesNode.isEmpty()) { - setMeasInfosFromMeasTypes(currentMeasInfo, filteredMeasInfos, filter.get()); - } else { - setMeasInfoFromMeasType(currentMeasInfo, filteredMeasInfos, filter.get()); - } - } + List<MeasurementInfo> filteredMeasInfos = filterMeasInfos(measInfos, filterPatternList); if (filteredMeasInfos.isEmpty()) { logger.unwrap().info("No filter match from the current measurement file."); @@ -90,27 +86,43 @@ public class MeasFilterHandler { return true; } - /** - * Filters each measInfo node in the list for measTypes that match the given measTypes from filters. - **/ - public boolean filterByMeasType(List<Event> events) { - boolean hasMatchAnyFilter = false; - for (int i = 0; i < events.size(); i++) { - Event currentEvent = events.get(i); - boolean hasMatchingFilter = filterByMeasType(currentEvent); - if (hasMatchingFilter) { - hasMatchAnyFilter = true; + private List<MeasurementInfo> filterMeasInfos(List<MeasurementInfo> measInfos, List<Pattern> filterPatternList) { + List<MeasurementInfo> filteredMeasInfos = new LinkedList<>(); + for (MeasurementInfo currentMeasInfo : measInfos) { + List<String> measTypesNode = currentMeasInfo.getMeasTypes(); + if (measTypesNode != null && !measTypesNode.isEmpty()) { + getFilteredMeasInfosFromMeasTypes(currentMeasInfo, filterPatternList).ifPresent(filteredMeasInfos::add); } else { - events.remove(events.get(i)); + getFilteredMeasInfoFromMeasType(currentMeasInfo, filterPatternList).ifPresent(filteredMeasInfos::add); } } + return filteredMeasInfos; + } - if (!hasMatchAnyFilter) { - logger.unwrap().info("No filter match from all measurement files."); - return false; + private List<Pattern> getPatternsFromFilters(Optional<Filter> filters) { + List<Pattern> patternList = new LinkedList<>(); + for (String filter : filters.get().getMeasTypes()) { + tryToCompileFilter(filter).ifPresent(patternList::add); + } + return patternList; + } + private Optional<Pattern> tryToCompileFilter(String measType) { + try { + return Optional.of(Pattern.compile("^" + measType + "$")); + } catch (PatternSyntaxException exception) { + logger.unwrap().warn("Can not parse measType filter: ", exception); } + return Optional.empty(); + } - return true; + /** + * Filters each measInfo node in the list for measTypes that match the given measTypes from filters. + **/ + public boolean filterByMeasType(List<Event> events) { + List<Event> filteredList = events.stream().filter(this::filterByMeasType).collect(Collectors.toList()); + events.clear(); + events.addAll(filteredList); + return !events.isEmpty(); } private boolean hasNoFilters(Optional<Filter> filter) { @@ -162,9 +174,9 @@ public class MeasFilterHandler { return hasResults; } - private void setMeasInfoFromMeasType(MeasurementInfo currentMeasInfo, List<MeasurementInfo> filteredMeasInfos, Filter filter) { + private Optional<MeasurementInfo> getFilteredMeasInfoFromMeasType(MeasurementInfo currentMeasInfo, List<Pattern> filters) { List<MeasurementInfo.MeasType> filteredMeasTypes = currentMeasInfo.getMeasType().stream() - .filter(mt -> filter.getMeasTypes().contains(mt.getValue())) + .filter(mt -> matchFilters(filters, mt.getValue())) .collect(Collectors.toList()); if(!filteredMeasTypes.isEmpty()) { @@ -173,11 +185,16 @@ public class MeasFilterHandler { .collect(Collectors.toList()); currentMeasInfo.replaceMeasType(filteredMeasTypes); currentMeasInfo.replaceMeasValue(filteredMeasValues); - filteredMeasInfos.add(currentMeasInfo); + return Optional.of(currentMeasInfo); } + return Optional.empty(); + } + + private boolean matchFilters(List<Pattern> filters, String measType) { + return filters.stream().anyMatch(filter -> filter.matcher(measType).matches()); } - private void setMeasInfosFromMeasTypes(MeasurementInfo currentMeasInfo, List<MeasurementInfo> filteredMeasInfos, Filter filter) { + private Optional<MeasurementInfo> getFilteredMeasInfosFromMeasTypes(MeasurementInfo currentMeasInfo, List<Pattern> filters) { MeasValue currentMeasValue = currentMeasInfo.getMeasValue() .get(0); List<String> measTypesNode = currentMeasInfo.getMeasTypes(); @@ -187,8 +204,7 @@ public class MeasFilterHandler { List<String> filteredMeasTypes = new ArrayList<>(); for (int j = 0; j < measTypesNode.size(); j++) { String currentMeasType = measTypesNode.get(j); - List<String> measTypeFilters = filter.getMeasTypes(); - if (measTypeFilters.contains(currentMeasType)) { + if (matchFilters(filters, currentMeasType)) { filteredMeasTypes.add(currentMeasType); filteredMeasResults.add(measResultsNode.get(j)); } @@ -197,8 +213,9 @@ public class MeasFilterHandler { if (!filteredMeasTypes.isEmpty()) { currentMeasInfo.replaceMeasTypes(filteredMeasTypes); currentMeasValue.replaceMeasResults(filteredMeasResults); - filteredMeasInfos.add(currentMeasInfo); + return Optional.of(currentMeasInfo); } + return Optional.empty(); } } |