Skip to content

Commit 6e368d6

Browse files
xiaochaoren1SongZhen0704
authored andcommitted
feat: tagrecorder add policy_info
1 parent b5ad192 commit 6e368d6

File tree

10 files changed

+130
-83
lines changed

10 files changed

+130
-83
lines changed

server/controller/db/metadb/migrator/schema/const.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ const (
2020
RAW_SQL_ROOT_DIR = "/etc/metadb/schema/rawsql"
2121

2222
DB_VERSION_TABLE = "db_version"
23-
DB_VERSION_EXPECTED = "7.1.0.18"
23+
DB_VERSION_EXPECTED = "7.1.0.19"
2424
)

server/controller/db/metadb/migrator/schema/rawsql/mysql/ddl_create_table.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2659,6 +2659,7 @@ TRUNCATE TABLE ch_npb_tunnel;
26592659
CREATE TABLE IF NOT EXISTS ch_alarm_policy (
26602660
`id` INTEGER NOT NULL PRIMARY KEY,
26612661
`name` VARCHAR(256),
2662+
`info` TEXT,
26622663
`user_id` INTEGER,
26632664
`team_id` INTEGER DEFAULT 1,
26642665
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
DROP TABLE IF EXISTS ch_alarm_policy;
2+
3+
CREATE TABLE IF NOT EXISTS ch_alarm_policy (
4+
`id` INTEGER NOT NULL PRIMARY KEY,
5+
`name` VARCHAR(256),
6+
`info` TEXT,
7+
`user_id` INTEGER,
8+
`team_id` INTEGER DEFAULT 1,
9+
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
10+
INDEX updated_at_index(`updated_at`)
11+
)ENGINE=innodb DEFAULT CHARSET=utf8;
12+
13+
UPDATE db_version SET version='7.1.0.19';

server/controller/db/metadb/migrator/schema/rawsql/postgres/ddl_create_table.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2231,6 +2231,7 @@ CREATE INDEX ch_npb_tunnel_updated_at_index ON ch_npb_tunnel(updated_at);
22312231
CREATE TABLE IF NOT EXISTS ch_alarm_policy (
22322232
id SERIAL PRIMARY KEY,
22332233
name VARCHAR(256),
2234+
info TEXT,
22342235
user_id INTEGER,
22352236
team_id INTEGER DEFAULT 1,
22362237
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

server/controller/db/metadb/model/ch_model.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,7 @@ type ChNpbTunnel struct {
639639
type ChAlarmPolicy struct {
640640
ID int `gorm:"primaryKey;column:id;type:int;not null" json:"ID"`
641641
Name string `gorm:"column:name;type:char(128)" json:"NAME"`
642+
Info string `gorm:"column:info;type:text" json:"INFO"`
642643
UserID int `gorm:"column:user_id;type:int" json:"USER_ID"`
643644
TeamID int `gorm:"column:team_id;type:int;default:1" json:"TEAM_ID"`
644645
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime:now,type:timestamp" json:"UPDATED_AT"`

server/controller/db/metadb/model/model.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -528,10 +528,12 @@ func (MailServer) TableName() string {
528528
}
529529

530530
type AlarmPolicy struct {
531-
ID int `gorm:"primaryKey;column:id;type:int;not null" json:"ID"`
532-
Name string `gorm:"column:name;type:char(128)" json:"NAME"`
533-
UserID int `gorm:"column:user_id;type:int" json:"USER_ID"`
534-
TeamID int `gorm:"column:team_id;type:int;default:1" json:"TEAM_ID"`
531+
ID int `gorm:"primaryKey;column:id;type:int;not null" json:"ID"`
532+
Name string `gorm:"column:name;type:char(128)" json:"NAME"`
533+
QueryConditions string `gorm:"column:query_conditions;type:text" json:"QUERY_CONDITIONS"`
534+
MonitoringInterval string `gorm:"column:monitoring_interval;type:char(64)" json:"MONITORING_INTERVAL"`
535+
UserID int `gorm:"column:user_id;type:int" json:"USER_ID"`
536+
TeamID int `gorm:"column:team_id;type:int;default:1" json:"TEAM_ID"`
535537
}
536538

537539
func (AlarmPolicy) TableName() string {

server/controller/tagrecorder/ch_alarm_policy.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package tagrecorder
1818

1919
import (
20+
"encoding/json"
21+
2022
"github.com/deepflowio/deepflow/server/controller/db/metadb"
2123
metadbmodel "github.com/deepflowio/deepflow/server/controller/db/metadb/model"
2224
)
@@ -46,9 +48,22 @@ func (p *ChAlarmPolicy) generateNewData(db *metadb.DB) (map[IDKey]metadbmodel.Ch
4648

4749
keyToItem := make(map[IDKey]metadbmodel.ChAlarmPolicy)
4850
for _, alarmPolicy := range alarmPolicys {
51+
info := map[string]interface{}{}
52+
if alarmPolicy.QueryConditions != "" {
53+
info["QUERY_CONDITIONS"] = alarmPolicy.QueryConditions
54+
}
55+
if alarmPolicy.MonitoringInterval != "" {
56+
info["MONITORING_INTERVAL"] = alarmPolicy.MonitoringInterval
57+
}
58+
infoBytes, err := json.Marshal(info)
59+
if err != nil {
60+
log.Errorf("marshal alarm policy info failed: %v, %s", err, db.LogPrefixORGID)
61+
return nil, false
62+
}
4963
keyToItem[IDKey{ID: alarmPolicy.ID}] = metadbmodel.ChAlarmPolicy{
5064
ID: alarmPolicy.ID,
5165
Name: alarmPolicy.Name,
66+
Info: string(infoBytes),
5267
UserID: alarmPolicy.UserID,
5368
TeamID: alarmPolicy.TeamID,
5469
}
@@ -68,6 +83,9 @@ func (p *ChAlarmPolicy) generateUpdateInfo(oldItem, newItem metadbmodel.ChAlarmP
6883
if oldItem.UserID != newItem.UserID {
6984
updateInfo["user_id"] = newItem.UserID
7085
}
86+
if oldItem.Info != newItem.Info {
87+
updateInfo["info"] = newItem.Info
88+
}
7189
if len(updateInfo) > 0 {
7290
return updateInfo, true
7391
}

server/controller/tagrecorder/ch_custom_biz_service_filter.go

Lines changed: 78 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -142,93 +142,93 @@ func (s *ChCustomBizServiceFilter) generateNewData(db *metadb.DB) (map[IDKey]met
142142
}
143143
}
144144
}
145-
146-
clientBody := map[string]interface{}{
147-
"conditions": map[string]interface{}{
148-
"RESOURCE_SETS": clientResourceSets,
149-
},
150-
"selects": map[string]interface{}{
151-
"TAGS": []interface{}{""},
152-
},
153-
"tableName": table,
154-
"paths": clientPaths,
155-
"db": database,
156-
}
157-
158-
serverBody := map[string]interface{}{
159-
"conditions": map[string]interface{}{
160-
"RESOURCE_SETS": serverResourceSets,
161-
},
162-
"selects": map[string]interface{}{
163-
"TAGS": []interface{}{""},
164-
},
165-
"tableName": table,
166-
"paths": serverPaths,
167-
"db": database,
168-
}
169-
170145
// client
171-
clientRes, clientErr := common.CURLPerform(
172-
"POST",
173-
fmt.Sprintf("http://%s:%d/create-business-sql", s.cfg.QuerierJSService.Host, s.cfg.QuerierJSService.Port),
174-
clientBody,
175-
)
176-
if clientErr != nil {
177-
log.Error(clientErr, db.LogPrefixORGID)
178-
return nil, false
179-
}
180-
for k, _ := range clientRes.Get("DATA").Get("path").MustArray() {
181-
query := clientRes.Get("DATA").Get("path").GetIndex(k)
182-
queryID := query.GetPath("sql", "QUERY_ID").MustString()
183-
queryIDSlice := strings.Split(queryID, "-")
184-
serviceIDStr := strings.TrimPrefix(queryIDSlice[0], "R")
185-
serviceIDInt, err := strconv.Atoi(serviceIDStr)
186-
if err != nil {
187-
log.Error(err, db.LogPrefixORGID)
146+
if len(clientResourceSets) > 0 {
147+
clientBody := map[string]interface{}{
148+
"conditions": map[string]interface{}{
149+
"RESOURCE_SETS": clientResourceSets,
150+
},
151+
"selects": map[string]interface{}{
152+
"TAGS": []interface{}{""},
153+
},
154+
"tableName": table,
155+
"paths": clientPaths,
156+
"db": database,
157+
}
158+
clientRes, clientErr := common.CURLPerform(
159+
"POST",
160+
fmt.Sprintf("http://%s:%d/create-business-sql", s.cfg.QuerierJSService.Host, s.cfg.QuerierJSService.Port),
161+
clientBody,
162+
)
163+
if clientErr != nil {
164+
log.Error(clientErr, db.LogPrefixORGID)
188165
return nil, false
189166
}
190-
clientFilter := query.GetPath("sql", "WHERE").MustString()
191-
serviceFilter, ok := keyToItem[IDKey{ID: serviceIDInt}]
192-
if ok {
193-
serviceFilter.ClientFilter = clientFilter
194-
keyToItem[IDKey{ID: serviceIDInt}] = serviceFilter
195-
} else {
196-
keyToItem[IDKey{ID: serviceIDInt}] = metadbmodel.ChCustomBizServiceFilter{
197-
ID: serviceIDInt,
198-
ClientFilter: clientFilter,
167+
for k, _ := range clientRes.Get("DATA").Get("path").MustArray() {
168+
query := clientRes.Get("DATA").Get("path").GetIndex(k)
169+
queryID := query.GetPath("sql", "QUERY_ID").MustString()
170+
queryIDSlice := strings.Split(queryID, "-")
171+
serviceIDStr := strings.TrimPrefix(queryIDSlice[0], "R")
172+
serviceIDInt, err := strconv.Atoi(serviceIDStr)
173+
if err != nil {
174+
log.Error(err, db.LogPrefixORGID)
175+
return nil, false
176+
}
177+
clientFilter := query.GetPath("sql", "WHERE").MustString()
178+
serviceFilter, ok := keyToItem[IDKey{ID: serviceIDInt}]
179+
if ok {
180+
serviceFilter.ClientFilter = clientFilter
181+
keyToItem[IDKey{ID: serviceIDInt}] = serviceFilter
182+
} else {
183+
keyToItem[IDKey{ID: serviceIDInt}] = metadbmodel.ChCustomBizServiceFilter{
184+
ID: serviceIDInt,
185+
ClientFilter: clientFilter,
186+
}
199187
}
200188
}
201189
}
202-
203190
// server
204-
serverRes, serverErr := common.CURLPerform(
205-
"POST",
206-
fmt.Sprintf("http://%s:%d/create-business-sql", s.cfg.QuerierJSService.Host, s.cfg.QuerierJSService.Port),
207-
serverBody,
208-
)
209-
if serverErr != nil {
210-
log.Error(serverErr, db.LogPrefixORGID)
211-
return nil, false
212-
}
213-
for l, _ := range serverRes.Get("DATA").Get("path").MustArray() {
214-
query := serverRes.Get("DATA").Get("path").GetIndex(l)
215-
queryID := query.GetPath("sql", "QUERY_ID").MustString()
216-
queryIDSlice := strings.Split(queryID, "-")
217-
serviceIDStr := strings.TrimPrefix(queryIDSlice[0], "R")
218-
serviceIDInt, err := strconv.Atoi(serviceIDStr)
219-
if err != nil {
220-
log.Error(err, db.LogPrefixORGID)
191+
if len(serverResourceSets) > 0 {
192+
serverBody := map[string]interface{}{
193+
"conditions": map[string]interface{}{
194+
"RESOURCE_SETS": serverResourceSets,
195+
},
196+
"selects": map[string]interface{}{
197+
"TAGS": []interface{}{""},
198+
},
199+
"tableName": table,
200+
"paths": serverPaths,
201+
"db": database,
202+
}
203+
serverRes, serverErr := common.CURLPerform(
204+
"POST",
205+
fmt.Sprintf("http://%s:%d/create-business-sql", s.cfg.QuerierJSService.Host, s.cfg.QuerierJSService.Port),
206+
serverBody,
207+
)
208+
if serverErr != nil {
209+
log.Error(serverErr, db.LogPrefixORGID)
221210
return nil, false
222211
}
223-
serverFilter := query.GetPath("sql", "WHERE").MustString()
224-
serviceFilter, ok := keyToItem[IDKey{ID: serviceIDInt}]
225-
if ok {
226-
serviceFilter.ServerFilter = serverFilter
227-
keyToItem[IDKey{ID: serviceIDInt}] = serviceFilter
228-
} else {
229-
keyToItem[IDKey{ID: serviceIDInt}] = metadbmodel.ChCustomBizServiceFilter{
230-
ID: serviceIDInt,
231-
ServerFilter: serverFilter,
212+
for l, _ := range serverRes.Get("DATA").Get("path").MustArray() {
213+
query := serverRes.Get("DATA").Get("path").GetIndex(l)
214+
queryID := query.GetPath("sql", "QUERY_ID").MustString()
215+
queryIDSlice := strings.Split(queryID, "-")
216+
serviceIDStr := strings.TrimPrefix(queryIDSlice[0], "R")
217+
serviceIDInt, err := strconv.Atoi(serviceIDStr)
218+
if err != nil {
219+
log.Error(err, db.LogPrefixORGID)
220+
return nil, false
221+
}
222+
serverFilter := query.GetPath("sql", "WHERE").MustString()
223+
serviceFilter, ok := keyToItem[IDKey{ID: serviceIDInt}]
224+
if ok {
225+
serviceFilter.ServerFilter = serverFilter
226+
keyToItem[IDKey{ID: serviceIDInt}] = serviceFilter
227+
} else {
228+
keyToItem[IDKey{ID: serviceIDInt}] = metadbmodel.ChCustomBizServiceFilter{
229+
ID: serviceIDInt,
230+
ServerFilter: serverFilter,
231+
}
232232
}
233233
}
234234
}

server/controller/tagrecorder/const.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,7 @@ const (
545545
"(\n" +
546546
" `id` Int64,\n" +
547547
" `name` String,\n" +
548+
" `info` String,\n" +
548549
" `user_id` Int64,\n" +
549550
" `team_id` UInt64\n" +
550551
")\n" +

server/querier/engine/clickhouse/tag/translation.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2301,6 +2301,16 @@ func GenerateAlarmEventTagResoureMap() map[string]map[string]*Tag {
23012301
),
23022302
}
23032303

2304+
tagResourceMap["policy_info"] = map[string]*Tag{
2305+
"default": NewTag(
2306+
"dictGetOrDefault('flow_tag.alarm_policy_map', 'info', (toUInt64(policy_id)), '{}')",
2307+
"",
2308+
"toUInt64(policy_id) GLOBAL IN (SELECT id FROM flow_tag.alarm_policy_map WHERE info %s %s)",
2309+
"toUInt64(policy_id) GLOBAL IN (SELECT id FROM flow_tag.alarm_policy_map WHERE %s(info,%s))",
2310+
"policy_id",
2311+
),
2312+
}
2313+
23042314
return tagResourceMap
23052315
}
23062316

0 commit comments

Comments
 (0)