moira

Форк
0
52 строки · 1.6 Кб
1
package reply
2

3
import (
4
	"fmt"
5
	"strconv"
6
	"strings"
7

8
	"github.com/garyburd/redigo/redis"
9

10
	"go.avito.ru/DO/moira"
11
)
12

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)
16
	if err != nil {
17
		if err == redis.ErrNil {
18
			return make([]*moira.MetricValue, 0), nil
19
		}
20
		return nil, fmt.Errorf("Failed to read metricValues: %s", err.Error())
21
	}
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)
25
		if err != nil {
26
			return nil, err
27
		}
28
		valuesArr := strings.Split(val, " ")
29
		if len(valuesArr) != 2 {
30
			return nil, fmt.Errorf("Value format is not valid: %s", val)
31
		}
32
		timestamp, err := strconv.ParseInt(valuesArr[0], 10, 64)
33
		if err != nil {
34
			return nil, fmt.Errorf("Metric timestamp format is not valid: %s", err.Error())
35
		}
36
		value, err := strconv.ParseFloat(valuesArr[1], 64)
37
		if err != nil {
38
			return nil, fmt.Errorf("Metric value format is not valid: %s", err.Error())
39
		}
40
		retentionTimestamp, err := redis.Int64(resultByMetricArr[i+1], nil)
41
		if err != nil {
42
			return nil, fmt.Errorf("Retention timestamp format is not valid: %s", err.Error())
43
		}
44
		metricValue := moira.MetricValue{
45
			RetentionTimestamp: retentionTimestamp,
46
			Timestamp:          timestamp,
47
			Value:              value,
48
		}
49
		metricsValues = append(metricsValues, &metricValue)
50
	}
51
	return metricsValues, nil
52
}
53

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.