/
RateDao.go
128 lines (116 loc) · 3.33 KB
/
RateDao.go
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package dao
import (
"goku-ce/server/conf"
"gopkg.in/yaml.v2"
)
// 新增流量限制
func AddRateLimit(strategyConfPath,strategyID,period string,startTime,endTime,priority,limitCount int,allow bool) bool {
rateLimitList,_,_ := conf.ParseRateLimitInfo(strategyConfPath,strategyID)
maxID := 1
for _,r := range rateLimitList {
if r.LimitID > maxID {
maxID = r.LimitID
}
}
rateLimitInfo := &conf.RateLimitInfo{
LimitID: maxID + 1,
Allow : allow,
Period : period,
Limit : limitCount,
Priority: priority,
StartTime : startTime,
EndTime : endTime,
}
rateLimitList = append(rateLimitList,rateLimitInfo)
_,strategy := conf.ParseStrategyInfo(strategyConfPath)
strategy[strategyID].RateLimitList = rateLimitList
strategyList := make([]*conf.StrategyInfo,0)
for _,value := range strategy {
strategyList = append(strategyList,value)
}
content, err := yaml.Marshal(conf.Strategy{
StrategyList: strategyList,
})
if err != nil {
return false
}
conf.WriteConfigToFile(strategyConfPath,content)
return true
}
// 修改流量限制
func EditRateLimit(strategyConfPath,strategyID,period string,rateLimitID,startTime,endTime,priority,limitCount int,allow bool) bool {
_,rateLimit,_ := conf.ParseRateLimitInfo(strategyConfPath,strategyID)
_,ok := rateLimit[rateLimitID]
if !ok {
return false
}
rateLimit[rateLimitID] = &conf.RateLimitInfo{
LimitID: rateLimitID,
Allow : allow,
Period : period,
Limit : limitCount,
Priority: priority,
StartTime : startTime,
EndTime : endTime,
}
rateLimitList := make([]*conf.RateLimitInfo,0)
for _,r := range rateLimit {
rateLimitList = append(rateLimitList,r)
}
_,strategy := conf.ParseStrategyInfo(strategyConfPath)
strategy[strategyID].RateLimitList = rateLimitList
strategyList := make([]*conf.StrategyInfo,0)
for _,value := range strategy {
strategyList = append(strategyList,value)
}
content, err := yaml.Marshal(conf.Strategy{
StrategyList: strategyList,
})
if err != nil {
return false
}
conf.WriteConfigToFile(strategyConfPath,content)
return true
}
// 删除流量限制
func DeleteRateLimit(strategyConfPath,strategyID string,rateLimitID int) bool {
_,rateLimit,_ := conf.ParseRateLimitInfo(strategyConfPath,strategyID)
_,ok := rateLimit[rateLimitID]
if !ok {
return false
}
delete(rateLimit,rateLimitID)
rateLimitList := make([]*conf.RateLimitInfo,0)
for key,r := range rateLimit {
r.LimitID = key
rateLimitList = append(rateLimitList,r)
}
_,strategy := conf.ParseStrategyInfo(strategyConfPath)
strategy[strategyID].RateLimitList = rateLimitList
strategyList := make([]*conf.StrategyInfo,0)
for _,value := range strategy {
strategyList = append(strategyList,value)
}
content, err := yaml.Marshal(conf.Strategy{
StrategyList: strategyList,
})
if err != nil {
return false
}
conf.WriteConfigToFile(strategyConfPath,content)
return true
}
// 获取流量限制列表
func GetRateLimitInfo(strategyConfPath,strategyID string,limitID int) (bool,*conf.RateLimitInfo) {
_,rateLimit,_ := conf.ParseRateLimitInfo(strategyConfPath,strategyID)
value,ok := rateLimit[limitID]
if !ok {
return false,&conf.RateLimitInfo{}
}
return true,value
}
// 获取流量限制列表
func GetRateLimitList(strategyConfPath,strategyID string) []map[string]interface{}{
_,_,rateLimitList := conf.ParseRateLimitInfo(strategyConfPath,strategyID)
return rateLimitList
}