Skip to content

Commit 8634be2

Browse files
committed
Update.
1 parent e5713f1 commit 8634be2

File tree

3 files changed

+52
-15
lines changed

3 files changed

+52
-15
lines changed

db/badger.go

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,33 @@ func (b *BadgerDB) FindAll(prefix string, result interface{}) error {
252252

253253
log.Printf("FindAll (server case): 已处理 %d 条服务器记录. Final JSON to unmarshal to result: %s", len(servers), string(serversJSON))
254254
return json.Unmarshal(serversJSON, result)
255+
case "monitor":
256+
// 监控器记录也需要特殊处理布尔字段
257+
var monitors []*map[string]interface{}
258+
for i, item := range items {
259+
log.Printf("FindAll (monitor case): Processing item %d, raw data: %s", i, string(item))
260+
var data map[string]interface{}
261+
if err := json.Unmarshal(item, &data); err != nil {
262+
log.Printf("FindAll (monitor case): Item %d, 解析监控器数据失败: %v, 数据: %s", i, err, string(item))
263+
continue
264+
}
265+
log.Printf("FindAll (monitor case): Item %d, successfully unmarshalled to map: %v", i, data)
266+
267+
// 转换字段类型,确保布尔字段正确
268+
convertDbFieldTypes(&data)
269+
log.Printf("FindAll (monitor case): Item %d, after convertDbFieldTypes: %v", i, data)
270+
monitors = append(monitors, &data)
271+
}
272+
273+
// 重新序列化为 JSON
274+
monitorsJSON, err := json.Marshal(monitors)
275+
if err != nil {
276+
log.Printf("FindAll (monitor case): 重新序列化监控器数据失败: %v. Processed monitors data: %v", err, monitors)
277+
return err
278+
}
279+
280+
log.Printf("FindAll (monitor case): 已处理 %d 条监控器记录. Final JSON to unmarshal to result: %s", len(monitors), string(monitorsJSON))
281+
return json.Unmarshal(monitorsJSON, result)
255282
default:
256283
// 其他类型的记录,使用标准处理方式
257284
itemsJSON := "["
@@ -287,8 +314,16 @@ func convertDbFieldTypes(data *map[string]interface{}) {
287314
}
288315
}
289316

290-
// 处理布尔型字段
291-
boolFields := []string{"is_online", "is_disabled", "hide_for_guest", "show_all", "tasker"}
317+
// 处理布尔型字段 (支持多种命名格式)
318+
boolFields := []string{
319+
// Server fields
320+
"is_online", "is_disabled", "hide_for_guest", "show_all", "tasker",
321+
"HideForGuest", "EnableDDNS", "enable_ddns",
322+
// Monitor fields
323+
"notify", "Notify", "enable_trigger_task", "EnableTriggerTask",
324+
"enable_show_in_service", "EnableShowInService",
325+
"latency_notify", "LatencyNotify",
326+
}
292327
for _, field := range boolFields {
293328
if val, ok := d[field]; ok {
294329
switch v := val.(type) {
@@ -316,10 +351,7 @@ func convertDbFieldTypes(data *map[string]interface{}) {
316351
}
317352
}
318353

319-
// 确保必要的字段存在
320-
if _, ok := d["id"]; !ok {
321-
d["id"] = float64(0)
322-
}
354+
// 确保必要的字段存在,但不要覆盖已存在的id字段
323355
if _, ok := d["host_json"]; !ok {
324356
d["host_json"] = ""
325357
}

service/singleton/crontask.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,19 @@ func InitCronTask() {
4848
panic(err)
4949
}
5050

51-
// 改为每30分钟同步一次所有服务器的累计流量,降低频率
52-
if _, err := Cron.AddFunc("0 */30 * * * *", SyncAllServerTrafficFromDB); err != nil {
53-
panic(err)
54-
}
51+
// 以下任务仅在非BadgerDB模式下注册,因为它们依赖GORM
52+
if Conf == nil || Conf.DatabaseType != "badger" {
53+
// 改为每30分钟同步一次所有服务器的累计流量,降低频率
54+
if _, err := Cron.AddFunc("0 */30 * * * *", SyncAllServerTrafficFromDB); err != nil {
55+
panic(err)
56+
}
5557

56-
// 改为每15分钟保存一次流量数据到数据库,进一步降低频率
57-
if _, err := Cron.AddFunc("0 */15 * * * *", SaveAllTrafficToDB); err != nil {
58-
panic(err)
58+
// 改为每15分钟保存一次流量数据到数据库,进一步降低频率
59+
if _, err := Cron.AddFunc("0 */15 * * * *", SaveAllTrafficToDB); err != nil {
60+
panic(err)
61+
}
62+
} else {
63+
log.Println("BadgerDB模式:跳过注册GORM相关的定时任务")
5964
}
6065
}
6166

service/singleton/ddns.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,10 @@ func DDNSChangeNotificationCallback(serverName string, serverID uint64, domain s
116116
// 使用BadgerDB处理DDNS状态记录
117117
if db.DB != nil {
118118
ddnsOps := db.NewDDNSOps(db.DB)
119-
119+
120120
// 查询现有记录状态
121121
recordState, err := ddnsOps.GetDDNSRecordStateByParams(serverID, domain, recordType)
122-
122+
123123
if err != nil {
124124
// 记录不存在,创建新记录
125125
if err == db.ErrorNotFound {

0 commit comments

Comments
 (0)