summaryrefslogtreecommitdiffstats
path: root/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/hardware/yamasreport/YamasHardwareReport.java
blob: c76edd39b3aa6c3885a26b87eb589197dd70cee7 (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
package com.yahoo.vespa.hosted.node.verification.hardware.yamasreport;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.yahoo.vespa.hosted.node.verification.hardware.benchmarks.BenchmarkResults;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by sgrostad on 12/07/2017.
 * JSON-mapped class for reporting to YAMAS
 */
public class YamasHardwareReport {

    @JsonProperty
    private long timestamp;
    @JsonProperty
    private HardwareReportDimensions dimensions;
    @JsonProperty
    private HardwareReportMetrics metrics;
    @JsonProperty
    JsonObjectWrapper<JsonObjectWrapper<String[]>> routing;

    public YamasHardwareReport() {
        this.timestamp = System.currentTimeMillis() / 1000L;
        setRouting();
    }

    public HardwareReportDimensions getDimensions() {
        return dimensions;
    }

    public void setDimensions(HardwareReportDimensions dimensions) {
        this.dimensions = dimensions;
    }

    public HardwareReportMetrics getMetrics() {
        return metrics;
    }

    public void setMetrics(HardwareReportMetrics metrics) {
        this.metrics = metrics;
    }

    private void setRouting() {
        JsonObjectWrapper<String[]> wrap = new JsonObjectWrapper<>("namespace", new String[]{"Vespa"});
        routing = new JsonObjectWrapper<>("yamas", wrap);
    }

    public void createReportFromBenchmarkResults(BenchmarkResults benchmarkResults) {
        metrics = new HardwareReportMetrics();
        dimensions = new HardwareReportDimensions();
        metrics.setCpuCyclesPerSec(benchmarkResults.getCpuCyclesPerSec());
        metrics.setDiskSpeedMbs(benchmarkResults.getDiskSpeedMbs());
        metrics.setMemoryWriteSpeedGBs(benchmarkResults.getMemoryWriteSpeedGBs());
        metrics.setMemoryReadSpeedGBs(benchmarkResults.getMemoryReadSpeedGBs());
    }

    class JsonObjectWrapper<T> {
        private Map<String, T> wrappedObjects = new HashMap<String, T>();

        public JsonObjectWrapper(String name, T wrappedObject) {
            this.wrappedObjects.put(name, wrappedObject);
        }

        @JsonAnyGetter
        public Map<String, T> any() {
            return wrappedObjects;
        }

        @JsonAnySetter
        public void set(String name, T value) {
            wrappedObjects.put(name, value);
        }
    }

}