private void handleSubscriptions() { List<Subscription> subs = subManager.subscriptions(); if (!subs.isEmpty()) { List<TagsValuePair> ms = getMeasurements() .map(this::newTagsValuePair) .collect(Collectors.toList()); Evaluator evaluator = new Evaluator().addGroupSubscriptions("local", subs); EvalPayload payload = evaluator.eval("local", stepClock.wallTime(), ms); try { String json = jsonMapper.writeValueAsString(payload); client.post(evalUri) .withConnectTimeout(connectTimeout) .withReadTimeout(readTimeout) .withJsonContent(json) .send() .decompress(); } catch (Exception e) { logger.warn("failed to send metrics for subscriptions", e); } } }
@Test public void removeSub() { List<Subscription> subs = new ArrayList<>(); subs.add(new Subscription().withId("sum").withExpression(":true,:sum")); subs.add(new Subscription().withId("max").withExpression(":true,:max")); Evaluator evaluator = new Evaluator().addGroupSubscriptions("local", subs); evaluator.removeGroupSubscriptions("local"); EvalPayload payload = evaluator.eval("test", 0L, Collections.emptyList()); EvalPayload expected = new EvalPayload(0L, Collections.emptyList()); Assertions.assertEquals(expected, payload); }
@Test public void sumAndMaxForGroup() { List<Subscription> subs = new ArrayList<>(); subs.add(new Subscription().withId("sum").withExpression(":true,:sum")); subs.add(new Subscription().withId("max").withExpression(":true,:max")); Evaluator evaluator = new Evaluator().addGroupSubscriptions("local", subs); EvalPayload payload = evaluator.eval("local", 0L, data("foo", 1.0, 2.0, 3.0)); List<EvalPayload.Metric> metrics = new ArrayList<>(); metrics.add(new EvalPayload.Metric("sum", Collections.emptyMap(), 6.0)); metrics.add(new EvalPayload.Metric("max", Collections.emptyMap(), 3.0)); EvalPayload expected = new EvalPayload(0L, metrics); Assertions.assertEquals(expected, payload); }
@Test public void updateSub() { // Eval with sum List<Subscription> sumSub = new ArrayList<>(); sumSub.add(new Subscription().withId("sum").withExpression(":true,:sum")); Evaluator evaluator = new Evaluator().addGroupSubscriptions("local", sumSub); EvalPayload payload = evaluator.eval("local", 0L, data("foo", 1.0, 2.0, 3.0)); List<EvalPayload.Metric> metrics = new ArrayList<>(); metrics.add(new EvalPayload.Metric("sum", Collections.emptyMap(), 6.0)); EvalPayload expected = new EvalPayload(0L, metrics); Assertions.assertEquals(expected, payload); // Update to use max instead List<Subscription> maxSub = new ArrayList<>(); maxSub.add(new Subscription().withId("sum").withExpression(":true,:max")); evaluator.addGroupSubscriptions("local", maxSub); payload = evaluator.eval("local", 0L, data("foo", 1.0, 2.0, 3.0)); metrics = new ArrayList<>(); metrics.add(new EvalPayload.Metric("sum", Collections.emptyMap(), 3.0)); expected = new EvalPayload(0L, metrics); Assertions.assertEquals(expected, payload); } }