aboutsummaryrefslogtreecommitdiffstats
path: root/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/MetricsTest.java
blob: 424fac92561cc35e43611a2484904ca9b5c8c8fa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.metricsproxy.metric;

import ai.vespa.metricsproxy.metric.model.StatusCode;
import ai.vespa.metricsproxy.service.DummyService;
import ai.vespa.metricsproxy.service.VespaService;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;
import static ai.vespa.metricsproxy.metric.model.MetricId.toMetricId;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

/**
 * @author Unknowm
 */
public class MetricsTest {
    private static final double EPSILON = 0.00000000001;
    @Test
    public void testIterator() {
        Metrics m = new Metrics();
        long now = System.currentTimeMillis() / 1000;
        m.add(new Metric(toMetricId("a"), 1, now));
        m.add(new Metric(toMetricId("b"), 2.5, now));

        //should expire after 0 seconds
        m.add(new Metric(toMetricId("c"), 2, now));

        Map<String, Number> map = new HashMap<>();

        for (Metric metric: m.list()) {
            String k = metric.getName().id;

            assertFalse(map.containsKey(k));
            map.put(k, metric.getValue());
        }

        assertEquals(1, map.get("a").intValue());
        assertEquals(2.5, map.get("b").doubleValue(), EPSILON);
    }

    @Test
    public void testBasicMetric() {
        Metrics m = new Metrics();
        m.add(new Metric(toMetricId("count"), 1, System.currentTimeMillis() / 1000));
        assertEquals(1, m.list().size());
        assertEquals(toMetricId("count"), m.list().get(0).getName());
    }

    @Test
    public void testHealthMetric() {
        HealthMetric m = HealthMetric.get(null, null);
        assertFalse(m.isOk());
        m = HealthMetric.get("up", "test message");
        assertTrue(m.isOk());
        assertEquals("test message", m.getMessage());
        m = HealthMetric.get("ok", "test message");
        assertTrue(m.isOk());
        assertEquals("test message", m.getMessage());

        m = HealthMetric.get("bad", "test message");
        assertFalse(m.isOk());
        assertEquals(StatusCode.UNKNOWN, m.getStatus());
    }

    @Test
    public void testMetricFormatter() {
        MetricsFormatter formatter = new MetricsFormatter(false, false);
        VespaService service = new DummyService(0, "config.id");
        String data = formatter.format(service, "key", 1);
        assertEquals("'config.id'.key=1", data);

        formatter = new MetricsFormatter(true, false);
        data = formatter.format(service, "key", 1);
        assertEquals("dummy.'config.id'.key=1", data);


        formatter = new MetricsFormatter(true, true);
        data = formatter.format(service, "key", 1);
        assertEquals("dummy.config.'id'.key=1", data);

        formatter = new MetricsFormatter(false, true);
        data = formatter.format(service, "key", 1);
        assertEquals("config.'id'.key=1", data);
    }

    @Test
    public void testTimeAdjustment() {
        assertEquals(0L, Metric.adjustTime(0L, 0L));
        assertEquals(59L, Metric.adjustTime(59L, 59L));
        assertEquals(60L, Metric.adjustTime(60L, 60L));
        assertEquals(60L, Metric.adjustTime(59L, 60L));
        assertEquals(60L, Metric.adjustTime(60L, 59L));
        assertEquals(59L, Metric.adjustTime(59L, 61L));
    }

}