8
"github.com/garyburd/redigo/redis"
10
"go.avito.ru/DO/moira"
13
// MetricValues converts redis DB reply struct "RetentionTimestamp Value" "Timestamp" to moira.MetricValue object
14
func MetricValues(values interface{}) ([]*moira.MetricValue, error) {
15
resultByMetricArr, err := redis.Values(values, nil)
17
if err == redis.ErrNil {
18
return make([]*moira.MetricValue, 0), nil
20
return nil, fmt.Errorf("Failed to read metricValues: %s", err.Error())
22
metricsValues := make([]*moira.MetricValue, 0, len(resultByMetricArr)/2)
23
for i := 0; i < len(resultByMetricArr); i += 2 {
24
val, err := redis.String(resultByMetricArr[i], nil)
28
valuesArr := strings.Split(val, " ")
29
if len(valuesArr) != 2 {
30
return nil, fmt.Errorf("Value format is not valid: %s", val)
32
timestamp, err := strconv.ParseInt(valuesArr[0], 10, 64)
34
return nil, fmt.Errorf("Metric timestamp format is not valid: %s", err.Error())
36
value, err := strconv.ParseFloat(valuesArr[1], 64)
38
return nil, fmt.Errorf("Metric value format is not valid: %s", err.Error())
40
retentionTimestamp, err := redis.Int64(resultByMetricArr[i+1], nil)
42
return nil, fmt.Errorf("Retention timestamp format is not valid: %s", err.Error())
44
metricValue := moira.MetricValue{
45
RetentionTimestamp: retentionTimestamp,
49
metricsValues = append(metricsValues, &metricValue)
51
return metricsValues, nil