/** * Constructor. */ public PrototypeMeasurementFilter(PrototypeMeasurementFilterSpecification specification) { for (Map.Entry<String, PrototypeMeasurementFilterSpecification.MeterFilterSpecification> entry : specification.getInclude().entrySet()) { includePatterns.add(new MeterFilterPattern(entry.getKey(), entry.getValue())); } for (Map.Entry<String, PrototypeMeasurementFilterSpecification.MeterFilterSpecification> entry : specification.getExclude().entrySet()) { excludePatterns.add(new MeterFilterPattern(entry.getKey(), entry.getValue())); } }
/** * Factory method building a filter from a specification file. */ public static PrototypeMeasurementFilter loadFromPath(String path) throws IOException { PrototypeMeasurementFilterSpecification spec = PrototypeMeasurementFilterSpecification.loadFromPath(path); return new PrototypeMeasurementFilter(spec); }
@Test public void loadFromJson() throws IOException { String path = getClass().getResource("/test_measurement_filter.json").getFile(); PrototypeMeasurementFilterSpecification spec = PrototypeMeasurementFilterSpecification.loadFromPath(path); PrototypeMeasurementFilterSpecification specA = new PrototypeMeasurementFilterSpecification(); specA.getInclude().put("meterA", meterSpecA); specA.getInclude().put("meterD", meterSpecD); specA.getInclude().put( "empty", new PrototypeMeasurementFilterSpecification.MeterFilterSpecification( new ArrayList<>())); List<PrototypeMeasurementFilterSpecification.TagFilterSpecification> tagsX = Arrays.asList( new PrototypeMeasurementFilterSpecification.TagFilterSpecification("tagA", "X"), new PrototypeMeasurementFilterSpecification.TagFilterSpecification("tagX", ".*")); PrototypeMeasurementFilterSpecification.ValueFilterSpecification valueSpecX = new PrototypeMeasurementFilterSpecification.ValueFilterSpecification(); valueSpecX.getTags().addAll(tagsX); specA.getExclude().put( ".+", new PrototypeMeasurementFilterSpecification.MeterFilterSpecification( Collections.singletonList(valueSpecX))); Assertions.assertEquals(spec, specA); } }
@Test public void metersExcluded() { PrototypeMeasurementFilterSpecification spec = new PrototypeMeasurementFilterSpecification(); spec.getInclude().put( "counter.+", new PrototypeMeasurementFilterSpecification.MeterFilterSpecification()); spec.getExclude().put( "counterC", new PrototypeMeasurementFilterSpecification.MeterFilterSpecification()); PrototypeMeasurementFilter filter = new PrototypeMeasurementFilter(spec); Id idAYX = new TestId("counterA").withTag("tagA", "Y").withTag("tagB", "X"); Id idCYX = new TestId("counterC").withTag("tagA", "Y").withTag("tagB", "X"); Assertions.assertTrue(filter.test(new Measurement(idAYX, 1, 1))); Assertions.assertFalse(filter.test(new Measurement(idCYX, 2, 2))); }
@Test public void testMetricToPatternsWithMultipleMeters() { PrototypeMeasurementFilterSpecification spec = new PrototypeMeasurementFilterSpecification(); spec.getInclude().put("meterA", meterSpecA); spec.getInclude().put("meter.+", meterSpecB); PrototypeMeasurementFilter filter = new PrototypeMeasurementFilter(spec); PrototypeMeasurementFilter.MeterFilterPattern meterPatternA = new PrototypeMeasurementFilter.MeterFilterPattern("ignored", meterSpecA); PrototypeMeasurementFilter.MeterFilterPattern meterPatternB = new PrototypeMeasurementFilter.MeterFilterPattern("ignored", meterSpecB); final List<PrototypeMeasurementFilter.ValueFilterPattern> emptyList = new ArrayList<>(); Assertions.assertEquals( filter.metricToPatterns("meterB"), new PrototypeMeasurementFilter.IncludeExcludePatterns( meterPatternB.getValues(), emptyList)); List<PrototypeMeasurementFilter.ValueFilterPattern> expect = new ArrayList<>(); expect.addAll(meterPatternA.getValues()); expect.addAll(meterPatternB.getValues()); PrototypeMeasurementFilter.IncludeExcludePatterns patterns = filter.metricToPatterns("meterA"); Assertions.assertEquals(new HashSet<>(expect), new HashSet<>(patterns.getInclude())); }
@Test public void testMetricToPatterns() { PrototypeMeasurementFilterSpecification spec = new PrototypeMeasurementFilterSpecification(); spec.getInclude().put("meterA", meterSpecA); spec.getInclude().put(".+B", meterSpecB); spec.getInclude().put(".+C.*", meterSpecC); PrototypeMeasurementFilter filter = new PrototypeMeasurementFilter(spec); PrototypeMeasurementFilter.MeterFilterPattern meterPatternA = new PrototypeMeasurementFilter.MeterFilterPattern("meterA", meterSpecA); PrototypeMeasurementFilter.MeterFilterPattern meterPatternC = new PrototypeMeasurementFilter.MeterFilterPattern(".+C.*", meterSpecC); final List<PrototypeMeasurementFilter.ValueFilterPattern> emptyList = new ArrayList<>(); Assertions.assertEquals( filter.metricToPatterns("meterA"), new PrototypeMeasurementFilter.IncludeExcludePatterns( meterPatternA.getValues(), emptyList)); Assertions.assertEquals( filter.metricToPatterns("meterBextra"), new PrototypeMeasurementFilter.IncludeExcludePatterns( emptyList, emptyList)); Assertions.assertEquals( filter.metricToPatterns("meterCthing"), new PrototypeMeasurementFilter.IncludeExcludePatterns( meterPatternC.getValues(), emptyList)); }
/** * Constructor. */ public PrototypeMeasurementFilter(PrototypeMeasurementFilterSpecification specification) { for (Map.Entry<String, PrototypeMeasurementFilterSpecification.MeterFilterSpecification> entry : specification.getInclude().entrySet()) { includePatterns.add(new MeterFilterPattern(entry.getKey(), entry.getValue())); } for (Map.Entry<String, PrototypeMeasurementFilterSpecification.MeterFilterSpecification> entry : specification.getExclude().entrySet()) { excludePatterns.add(new MeterFilterPattern(entry.getKey(), entry.getValue())); } }
@Test public void meterNotOkBecauseNotIncluded() { PrototypeMeasurementFilterSpecification.MeterFilterSpecification meterSpec = new PrototypeMeasurementFilterSpecification.MeterFilterSpecification( Arrays.asList(valueSpecAyBx, valueSpecAzBy)); PrototypeMeasurementFilterSpecification spec = new PrototypeMeasurementFilterSpecification(); spec.getInclude().put("counter.+", meterSpec); PrototypeMeasurementFilter filter = new PrototypeMeasurementFilter(spec); Id idAXX = new TestId("counterA").withTag("tagA", "X").withTag("tagB", "X"); Id idBZX = new TestId("counterB").withTag("tagA", "Z").withTag("tagB", "X"); Assertions.assertFalse(filter.test(new Measurement(idAXX, 1, 1))); Assertions.assertFalse(filter.test(new Measurement(idBZX, 2, 2))); }
/** * Factory method building a filter from a specification file. */ public static PrototypeMeasurementFilter loadFromPath(String path) throws IOException { PrototypeMeasurementFilterSpecification spec = PrototypeMeasurementFilterSpecification.loadFromPath(path); return new PrototypeMeasurementFilter(spec); }
@Test public void meterOk() { PrototypeMeasurementFilterSpecification.MeterFilterSpecification meterSpec = new PrototypeMeasurementFilterSpecification.MeterFilterSpecification( Arrays.asList(valueSpecAyBx, valueSpecAzBy)); PrototypeMeasurementFilterSpecification spec = new PrototypeMeasurementFilterSpecification(); spec.getInclude().put("counter.+", meterSpec); PrototypeMeasurementFilter filter = new PrototypeMeasurementFilter(spec); Id idAYX = new TestId("counterA").withTag("tagA", "Y").withTag("tagB", "X"); Id idBZY = new TestId("counterB").withTag("tagA", "Z").withTag("tagB", "Y"); Assertions.assertTrue(filter.test(new Measurement(idAYX, 1, 1))); Assertions.assertTrue(filter.test(new Measurement(idBZY, 2, 2))); }