Newer
Older
Kevin Di Lallo
committed
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
/*
* Copyright (c) 2019 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package metricstore
import (
"encoding/json"
"errors"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
)
const metricLatency = "latency"
const metricTraffic = "traffic"
// SetLatencyMetric
func (ms *MetricStore) SetLatencyMetric(src string, dest string, lat int32, mean int32) error {
tags := map[string]string{"src": src, "dest": dest}
fields := map[string]interface{}{"lat": lat, "mean": mean}
return ms.SetMetric(metricLatency, tags, fields)
}
// GetLastLatencyMetric
func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, mean int32, err error) {
// Make sure we have set a store
if ms.name == "" {
err = errors.New("Store name not specified")
return
}
// Get latest Latency metric
tags := map[string]string{"src": src, "dest": dest}
fields := []string{"lat", "mean"}
var valuesArray []map[string]interface{}
valuesArray, err = ms.GetMetric(metricLatency, tags, fields, "", "", 1)
if err != nil {
log.Error("Failed to retrieve metrics with error: ", err.Error())
return
}
// Take first & only values
values := valuesArray[0]
lat = JsonNumToInt32(values["lat"].(json.Number))
mean = JsonNumToInt32(values["mean"].(json.Number))
return
}
// SetTrafficMetric
func (ms *MetricStore) SetTrafficMetric(src string, dest string, tput float64, loss float64) error {
tags := map[string]string{"src": src, "dest": dest}
fields := map[string]interface{}{"tput": tput, "loss": loss}
return ms.SetMetric(metricTraffic, tags, fields)
}
// GetLastTrafficMetric
func (ms *MetricStore) GetLastTrafficMetric(src string, dest string) (tput float64, loss float64, err error) {
// Make sure we have set a store
if ms.name == "" {
err = errors.New("Store name not specified")
return
}
// Get latest Net metric
tags := map[string]string{"src": src, "dest": dest}
fields := []string{"tput", "loss"}
var valuesArray []map[string]interface{}
valuesArray, err = ms.GetMetric(metricTraffic, tags, fields, "", "", 1)
if err != nil {
log.Error("Failed to retrieve metrics with error: ", err.Error())
return
}
// Take first & only values
values := valuesArray[0]
tput = JsonNumToFloat64(values["tput"].(json.Number))
loss = JsonNumToFloat64(values["loss"].(json.Number))
return
}