Skip to content

Commit a42da9c

Browse files
authoredDec 19, 2022
feat:新增单机版本 (#163)
* refactor: * fix:新增CLS链接信息 * feat:单机版本 * feat:单机版本
1 parent 58408c6 commit a42da9c

File tree

6 files changed

+253
-25
lines changed

6 files changed

+253
-25
lines changed
 

‎.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ vendor
1717

1818
polaris_console_package
1919
polaris-frontend.tar.gz
20-
.vscode
20+
.vscode
21+
polaris.bolt

‎common/model/alarm/types.go

-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ type AlarmRule struct {
8787
CreateTime time.Time
8888
ModifyTime time.Time
8989
EnableTime time.Time
90-
Valid bool
9190
}
9291

9392
type AlterExpr struct {

‎handlers/alarm_rule.go

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
var (
3838
_alarmRuleSearchFilter = map[string]struct{}{
3939
"name": {},
40+
"id": {},
4041
}
4142
)
4243

‎plugins.go

+1
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@
1818
package main
1919

2020
import (
21+
_ "github.com/polarismesh/polaris-console/store/boltdb"
2122
_ "github.com/polarismesh/polaris-console/store/mysql"
2223
)

‎polaris-console.yaml

+15-15
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,19 @@ monitorServer:
3131
# 存储配置
3232
store:
3333
# 单机文件存储插件
34-
# name: boltdbStore
35-
# option:
36-
# path: ./polaris.bolt
37-
# 数据库存储插件
38-
name: defaultStore
34+
name: boltdbStore
3935
option:
40-
master:
41-
dbType: mysql
42-
dbName: polaris_console
43-
dbUser: root ##DB_USER##
44-
dbPwd: 528LcT528 ##DB_PWD##
45-
dbAddr: 9.135.223.132:3306 ##DB_ADDR##
46-
maxOpenConns: 300
47-
maxIdleConns: 50
48-
connMaxLifetime: 300 # 单位秒
49-
txIsolationLevel: 2 #LevelReadCommitted
36+
path: ./polaris.bolt
37+
# 数据库存储插件
38+
# name: defaultStore
39+
# option:
40+
# master:
41+
# dbType: mysql
42+
# dbName: polaris_console
43+
# dbUser: ##DB_USER##
44+
# dbPwd: ##DB_PWD##
45+
# dbAddr: ##DB_ADDR##
46+
# maxOpenConns: 300
47+
# maxIdleConns: 50
48+
# connMaxLifetime: 300 # 单位秒
49+
# txIsolationLevel: 2 #LevelReadCommitted

‎store/boltdb/alarm_rule.go

+234-8
Original file line numberDiff line numberDiff line change
@@ -17,42 +17,268 @@
1717

1818
package boltdb
1919

20-
import "github.com/polarismesh/polaris-console/common/model/alarm"
20+
import (
21+
"encoding/json"
22+
"errors"
23+
"sort"
24+
"strings"
25+
"time"
26+
27+
commonhttp "github.com/polarismesh/polaris-console/common/http"
28+
"github.com/polarismesh/polaris-console/common/model/alarm"
29+
)
30+
31+
var (
32+
ErrorMultiAlarmFound = errors.New("found multi alarm rule")
33+
)
34+
35+
const (
36+
tblAlarm = "alarm_rule"
37+
38+
alarmFieldID = "ID"
39+
alarmFieldName = "Name"
40+
alarmFieldEnable = "Enable"
41+
alarmFieldMonitorType = "MonitorType"
42+
alarmFieldAlterExpr = "AlterExpr"
43+
alarmFieldInterval = "Interval"
44+
alarmFieldTopic = "Topic"
45+
alarmFieldMessage = "Message"
46+
alarmFieldCallback = "Callback"
47+
alarmFieldRevision = "Revision"
48+
alarmFieldCreateTime = "CreateTime"
49+
alarmFieldModifyTime = "ModifyTime"
50+
alarmFieldEnableTime = "EnableTime"
51+
)
52+
53+
type alarmRuleForStore struct {
54+
ID string
55+
Name string
56+
Enable bool
57+
MonitorType string
58+
AlterExpr string
59+
Interval string
60+
Topic string
61+
Message string
62+
Callback string
63+
Revision string
64+
CreateTime time.Time
65+
ModifyTime time.Time
66+
EnableTime time.Time
67+
}
2168

2269
type alarmRuleStore struct {
2370
handle BoltHandler
2471
}
2572

2673
// AddAlarmRule add alarm rule
2774
func (a *alarmRuleStore) AddAlarmRule(rule *alarm.AlarmRule) error {
75+
if len(rule.ID) == 0 {
76+
return errors.New("invalid alarm rule id")
77+
}
78+
79+
tn := time.Now()
80+
rule.CreateTime = tn
81+
rule.ModifyTime = tn
2882

29-
return nil
83+
if rule.Enable {
84+
rule.EnableTime = tn
85+
} else {
86+
rule.EnableTime = time.Time{}
87+
}
88+
89+
return a.handle.SaveValue(tblAlarm, rule.ID, a.parseToStore(rule))
3090
}
3191

3292
// UpdateAlarmRule update alarm rule
3393
func (a *alarmRuleStore) UpdateAlarmRule(rule *alarm.AlarmRule) error {
34-
return nil
94+
if len(rule.ID) == 0 {
95+
return errors.New("invalid alarm rule id")
96+
}
97+
98+
alterExpr, _ := json.Marshal(rule.AlterExpr)
99+
callback, _ := json.Marshal(rule.Callback)
100+
101+
properties := map[string]interface{}{
102+
alarmFieldName: rule.Name,
103+
alarmFieldAlterExpr: alterExpr,
104+
alarmFieldCallback: callback,
105+
alarmFieldInterval: rule.Interval,
106+
alarmFieldTopic: rule.Topic,
107+
alarmFieldMessage: rule.Message,
108+
alarmFieldRevision: rule.Revision,
109+
alarmFieldMonitorType: rule.MonitorType,
110+
alarmFieldModifyTime: time.Now(),
111+
}
112+
113+
return a.handle.UpdateValue(tblAlarm, rule.ID, properties)
35114
}
36115

37116
// DeleteAlarmRule delete alarm rule
38117
func (a *alarmRuleStore) DeleteAlarmRule(rule *alarm.AlarmRule) error {
39-
return nil
118+
if len(rule.ID) == 0 {
119+
return errors.New("invalid alarm rule id")
120+
}
121+
return a.handle.DeleteValues(tblAlarm, []string{rule.ID})
40122
}
41123

42124
// EnableAlarmRule enable alarm rule
43125
func (a *alarmRuleStore) EnableAlarmRule(rule *alarm.AlarmRule) error {
44-
return nil
126+
if len(rule.ID) == 0 {
127+
return errors.New("invalid alarm rule id")
128+
}
129+
130+
if rule.Enable {
131+
rule.EnableTime = time.Now()
132+
} else {
133+
rule.EnableTime = time.Time{}
134+
}
135+
136+
properties := map[string]interface{}{
137+
alarmFieldEnable: rule.Enable,
138+
alarmFieldRevision: rule.Revision,
139+
alarmFieldEnableTime: rule.EnableTime,
140+
alarmFieldModifyTime: time.Now(),
141+
}
142+
143+
return a.handle.UpdateValue(tblAlarm, rule.ID, properties)
45144
}
46145

47146
func (a *alarmRuleStore) GetOneAlarmRule(id string) (*alarm.AlarmRule, error) {
48-
return nil, nil
147+
if len(id) == 0 {
148+
return nil, errors.New("invalid alarm rule id")
149+
}
150+
151+
val, err := a.handle.LoadValues(tblAlarm, []string{id}, &alarmRuleForStore{})
152+
if err != nil {
153+
return nil, err
154+
}
155+
156+
if len(val) == 0 {
157+
return nil, nil
158+
}
159+
160+
if len(val) > 1 {
161+
return nil, ErrorMultiAlarmFound
162+
}
163+
164+
return a.parseToModel(val[id].(*alarmRuleForStore)), nil
49165
}
50166

51167
// GetAlarmRules get alarm rules
52168
func (a *alarmRuleStore) GetAlarmRules(query map[string]string, offset, limit uint32) (uint32, []*alarm.AlarmRule, error) {
53-
return 0, nil, nil
169+
fields := []string{alarmFieldID, alarmFieldName}
170+
searchId, hasId := query["id"]
171+
searchName, hashName := query["name"]
172+
173+
ret, err := a.handle.LoadValuesByFilter(tblAlarm, fields, &alarmRuleForStore{}, func(m map[string]interface{}) bool {
174+
saveId, _ := m[alarmFieldID].(string)
175+
saveName, _ := m[alarmFieldName].(string)
176+
177+
if hasId && strings.Compare(saveId, searchId) != 0 {
178+
return false
179+
}
180+
181+
if hashName {
182+
searchName, wild := commonhttp.ParseWildName(searchName)
183+
if wild && !strings.Contains(saveName, searchName) {
184+
return false
185+
}
186+
return strings.Compare(searchName, saveName) == 0
187+
}
188+
189+
return true
190+
})
191+
if err != nil {
192+
return 0, nil, err
193+
}
194+
195+
return uint32(len(ret)), a.doAlarmRulePage(ret, offset, limit), nil
196+
}
197+
198+
// doAlarmRulePage 进行分页
199+
func (a *alarmRuleStore) doAlarmRulePage(ret map[string]interface{}, offset, limit uint32) []*alarm.AlarmRule {
200+
rules := make([]*alarm.AlarmRule, 0, len(ret))
201+
beginIndex := offset
202+
endIndex := beginIndex + limit
203+
totalCount := uint32(len(ret))
204+
205+
if totalCount == 0 {
206+
return rules
207+
}
208+
if beginIndex >= endIndex {
209+
return rules
210+
}
211+
if beginIndex >= totalCount {
212+
return rules
213+
}
214+
if endIndex > totalCount {
215+
endIndex = totalCount
216+
}
217+
for k := range ret {
218+
rules = append(rules, a.parseToModel(ret[k].(*alarmRuleForStore)))
219+
}
220+
221+
sort.Slice(rules, func(i, j int) bool {
222+
return rules[i].ModifyTime.After(rules[j].ModifyTime)
223+
})
224+
225+
return rules[beginIndex:endIndex]
54226
}
55227

56228
func (a *alarmRuleStore) GetAllAlarmRules() ([]*alarm.AlarmRule, error) {
57-
return nil, nil
229+
ret, err := a.handle.LoadValuesAll(tblAlarm, &alarmRuleForStore{})
230+
if err != nil {
231+
return nil, err
232+
}
233+
234+
values := make([]*alarm.AlarmRule, 0, len(ret))
235+
for k := range ret {
236+
values = append(values, a.parseToModel(ret[k].(*alarmRuleForStore)))
237+
}
238+
239+
return values, nil
240+
}
241+
242+
func (a *alarmRuleStore) parseToStore(r *alarm.AlarmRule) *alarmRuleForStore {
243+
alterExpr, _ := json.Marshal(r.AlterExpr)
244+
callback, _ := json.Marshal(r.Callback)
245+
246+
return &alarmRuleForStore{
247+
ID: r.ID,
248+
Name: r.Name,
249+
Enable: r.Enable,
250+
MonitorType: string(r.MonitorType),
251+
AlterExpr: string(alterExpr),
252+
Interval: r.Interval,
253+
Topic: r.Topic,
254+
Message: r.Message,
255+
Callback: string(callback),
256+
Revision: r.Revision,
257+
CreateTime: r.CreateTime,
258+
ModifyTime: r.ModifyTime,
259+
EnableTime: r.EnableTime,
260+
}
261+
}
262+
263+
func (a *alarmRuleStore) parseToModel(r *alarmRuleForStore) *alarm.AlarmRule {
264+
var alterExpr alarm.AlterExpr
265+
_ = json.Unmarshal([]byte(r.AlterExpr), &alterExpr)
266+
var callback alarm.Callback
267+
_ = json.Unmarshal([]byte(r.Callback), &callback)
268+
269+
return &alarm.AlarmRule{
270+
ID: r.ID,
271+
Name: r.Name,
272+
Enable: r.Enable,
273+
MonitorType: alarm.MonitorType(r.MonitorType),
274+
AlterExpr: alterExpr,
275+
Interval: r.Interval,
276+
Topic: r.Topic,
277+
Message: r.Message,
278+
Callback: callback,
279+
Revision: r.Revision,
280+
CreateTime: r.CreateTime,
281+
ModifyTime: r.ModifyTime,
282+
EnableTime: r.EnableTime,
283+
}
58284
}

0 commit comments

Comments
 (0)
Please sign in to comment.