297ocsadapter

Форк
0
104 строки · 2.1 Кб
1
package redis
2

3
import (
4
	"github.com/go-redis/redis"
5
	"istio.io/pkg/log"
6
	"os"
7
	"strconv"
8
)
9

10
var client *redis.Client
11

12
func GetUsedUnits(applicationId string) int {
13
	val, err := getRedisClient().HGet(applicationId, "used").Result()
14
	if err == redis.Nil {
15
		return 0
16
	}
17
	units, parseErr := strconv.Atoi(val)
18
	if parseErr != nil {
19
		log.Fatalf(parseErr.Error())
20
	}
21
	return units
22
}
23

24
func GetRemainingUnits(applicationId string) int {
25
	val, err := getRedisClient().HGet(applicationId, "remaining").Result()
26
	if err == redis.Nil {
27
		return 0
28
	}
29
	units, parseErr := strconv.Atoi(val)
30
	if parseErr != nil {
31
		log.Fatalf(parseErr.Error())
32
	}
33
	return units
34
}
35

36
func SetUsedUnits(applicationId string, used int) {
37
	_, err := getRedisClient().HSet(applicationId, "used", used).Result()
38
	if err != nil {
39
		log.Errorf(err.Error())
40
	}
41
}
42

43
func SetRemainingUnits(applicationId string, remaining int) {
44
	_, err := getRedisClient().HSet(applicationId, "remaining", remaining).Result()
45
	if err != nil {
46
		log.Errorf(err.Error())
47
	}
48
}
49

50
func GetUsageInfo() map[string]int {
51
	resultMap := make(map[string]int)
52
	keys, _, err := getRedisClient().Scan(0, "*", 0).Result()
53
	if err != nil {
54
		log.Errorf(err.Error())
55
	}
56
	for _, key := range keys {
57
		val := GetUsedUnits(key)
58
		resultMap[key] = val
59
	}
60
	return resultMap
61
}
62

63
func IncreaseUsedValue(applicationId string) {
64
	val := GetUsedUnits(applicationId)
65
	SetUsedUnits(applicationId, val+1)
66
}
67

68
func DecreaseRemainingValue(applicationId string) {
69
	val := GetRemainingUnits(applicationId)
70
	SetRemainingUnits(applicationId, val-1)
71
}
72

73
func getRedisClient() *redis.Client {
74
	if client != nil {
75
		return client
76
	}
77

78
	var (
79
		host     = getEnv("REDIS_HOST", "localhost")
80
		port     = getEnv("REDIS_PORT", "6379")
81
		password = getEnv("REDIS_PASSWORD", "")
82
	)
83

84
	client = redis.NewClient(&redis.Options{
85
		Addr:     host + ":" + port,
86
		Password: password,
87
		DB:       0,
88
	})
89

90
	_, err := client.Ping().Result()
91
	if err != nil {
92
		log.Fatalf(err.Error())
93
	}
94

95
	return client
96
}
97

98
func getEnv(key, defaultValue string) string {
99
	value := os.Getenv(key)
100
	if value == "" {
101
		return defaultValue
102
	}
103
	return value
104
}
105

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

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

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

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