aboutsummaryrefslogtreecommitdiffstats
path: root/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/HttpHandlerTestBase.java
blob: 4f9634a061a415509b3360c0b445a1f68a9f5da4 (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
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.metricsproxy.http;

import ai.vespa.metricsproxy.TestUtil;
import ai.vespa.metricsproxy.core.ConsumersConfig;
import ai.vespa.metricsproxy.core.MetricsConsumers;
import ai.vespa.metricsproxy.core.MetricsManager;
import ai.vespa.metricsproxy.metric.HealthMetric;
import ai.vespa.metricsproxy.metric.Metric;
import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensions;
import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensionsConfig;
import ai.vespa.metricsproxy.metric.dimensions.NodeDimensions;
import ai.vespa.metricsproxy.metric.dimensions.NodeDimensionsConfig;
import ai.vespa.metricsproxy.metric.model.MetricId;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import ai.vespa.metricsproxy.service.DownService;
import ai.vespa.metricsproxy.service.DummyService;
import ai.vespa.metricsproxy.service.VespaService;
import ai.vespa.metricsproxy.service.VespaServices;
import com.yahoo.container.jdisc.RequestHandlerTestDriver;

import java.time.Instant;
import java.util.List;

import static ai.vespa.metricsproxy.http.ValuesFetcher.defaultMetricsConsumerId;
import static ai.vespa.metricsproxy.metric.ExternalMetrics.VESPA_NODE_SERVICE_ID;
import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.REASON;
import static ai.vespa.metricsproxy.service.DummyService.METRIC_1;

/**
 * Base class for http handler tests.
 *
 * @author gjoranv
 */
public class HttpHandlerTestBase {

    protected static final List<VespaService> testServices = List.of(
            new DummyService(0, ""),
            new DummyService(1, ""),
            new DownService(HealthMetric.getDown("No response")));

    protected static final VespaServices vespaServices = new VespaServices(testServices);

    protected static final String DEFAULT_CONSUMER = "default";
    protected static final String CUSTOM_CONSUMER = "custom-consumer";

    protected static final String CPU_METRIC = "cpu";

    protected static final String URI_BASE = "http://localhost";

    protected static RequestHandlerTestDriver testDriver;


    protected static MetricsManager getMetricsManager() {
        MetricsManager metricsManager = TestUtil.createMetricsManager(vespaServices, getMetricsConsumers(), getApplicationDimensions(), getNodeDimensions());
        metricsManager.setExtraMetrics(List.of(
                new MetricsPacket.Builder(VESPA_NODE_SERVICE_ID)
                        .timestamp(Instant.now().getEpochSecond())
                        .putMetrics(List.of(new Metric(MetricId.toMetricId(CPU_METRIC), 12.345)))));
        return metricsManager;
    }

    protected static MetricsConsumers getMetricsConsumers() {
        // Must use a whitelisted dimension to avoid it being removed for the MetricsV2Handler
        var defaultConsumerDimension = new ConsumersConfig.Consumer.Metric.Dimension.Builder()
                .key(REASON).value("default-val");

        var customConsumerDimension = new ConsumersConfig.Consumer.Metric.Dimension.Builder()
                .key(REASON).value("custom-val");

        return new MetricsConsumers(new ConsumersConfig.Builder()
                                            .consumer(new ConsumersConfig.Consumer.Builder()
                                                              .name(defaultMetricsConsumerId.id)
                                                              .metric(new ConsumersConfig.Consumer.Metric.Builder()
                                                                              .name(CPU_METRIC)
                                                                              .outputname(CPU_METRIC))
                                                              .metric(new ConsumersConfig.Consumer.Metric.Builder()
                                                                              .name(METRIC_1)
                                                                              .outputname(METRIC_1)
                                                                              .dimension(defaultConsumerDimension)))
                                            .consumer(new ConsumersConfig.Consumer.Builder()
                                                              .name(CUSTOM_CONSUMER)
                                                              .metric(new ConsumersConfig.Consumer.Metric.Builder()
                                                                              .name(METRIC_1)
                                                                              .outputname(METRIC_1)
                                                                              .dimension(customConsumerDimension)))
                                            .build());
    }

    protected static ApplicationDimensions getApplicationDimensions() {
        return new ApplicationDimensions(new ApplicationDimensionsConfig.Builder().build());
    }

    protected static NodeDimensions getNodeDimensions() {
        return new NodeDimensions(new NodeDimensionsConfig.Builder().build());
    }

}