@@ -457,26 +457,26 @@ func (m *MonitorAPIService) GetMonitorHistories(search map[string]any) []*model.
457457 return make ([]* model.MonitorHistory , 0 )
458458 }
459459
460- // 获取时间范围(默认最近30天 )
460+ // 性能优化: 获取时间范围(减少到最近3天 )
461461 endTime := time .Now ()
462- startTime := endTime .AddDate (0 , 0 , - 30 )
462+ startTime := endTime .AddDate (0 , 0 , - 3 )
463463
464- // 从BadgerDB查询监控历史记录
465- // 注意:这里需要查询所有监控历史记录,然后按server_id过滤
464+ // 使用更高效的查询方法,避免全表扫描
466465 monitorOps := db .NewMonitorHistoryOps (db .DB )
467466
468- // 获取所有监控历史记录并过滤
469- allHistories , err := monitorOps .GetAllMonitorHistoriesInRange (startTime , endTime )
470- if err != nil {
471- log .Printf ("MonitorAPIService.GetMonitorHistories: 从BadgerDB查询失败: %v" , err )
472- return make ([]* model.MonitorHistory , 0 )
473- }
474-
475- // 过滤出指定服务器的记录
467+ // 获取该服务器相关的监控器ID列表,针对性查询
476468 var histories []* model.MonitorHistory
477- for _ , history := range allHistories {
478- if history .ServerID == serverID {
479- histories = append (histories , history )
469+ if ServiceSentinelShared != nil {
470+ monitors := ServiceSentinelShared .Monitors ()
471+ for _ , monitor := range monitors {
472+ // 使用针对性查询,限制每个监控器的记录数量
473+ monitorHistories , err := monitorOps .GetMonitorHistoriesByServerAndMonitor (
474+ serverID , monitor .ID , startTime , endTime , 500 ) // 限制每个监控器最多500条
475+ if err != nil {
476+ log .Printf ("MonitorAPIService.GetMonitorHistories: 查询监控器 %d 失败: %v" , monitor .ID , err )
477+ continue
478+ }
479+ histories = append (histories , monitorHistories ... )
480480 }
481481 }
482482
@@ -495,50 +495,8 @@ func (m *MonitorAPIService) GetMonitorHistories(search map[string]any) []*model.
495495 return make ([]* model.MonitorHistory , 0 )
496496 }
497497
498- // 根据数据库类型选择不同的查询方式
499- if Conf .DatabaseType == "badger" {
500- // 使用BadgerDB查询监控历史记录
501- if db .DB != nil {
502- // 获取服务器ID
503- var serverID uint64
504- if sid , ok := search ["server_id" ]; ok {
505- if sidVal , ok := sid .(uint64 ); ok {
506- serverID = sidVal
507- }
508- }
509-
510- if serverID == 0 {
511- log .Printf ("MonitorAPIService.GetMonitorHistories: 无效的服务器ID" )
512- return make ([]* model.MonitorHistory , 0 )
513- }
514-
515- // 获取时间范围(默认最近30天)
516- endTime := time .Now ()
517- startTime := endTime .AddDate (0 , 0 , - 30 )
518-
519- // 从BadgerDB查询监控历史记录
520- monitorOps := db .NewMonitorHistoryOps (db .DB )
521-
522- // 获取所有监控历史记录并过滤
523- allHistories , err := monitorOps .GetAllMonitorHistoriesInRange (startTime , endTime )
524- if err != nil {
525- log .Printf ("MonitorAPIService.GetMonitorHistories: 从BadgerDB查询失败: %v" , err )
526- return make ([]* model.MonitorHistory , 0 )
527- }
528-
529- // 过滤出指定服务器的记录
530- var filteredHistories []* model.MonitorHistory
531- for _ , h := range allHistories {
532- if h != nil && h .ServerID == serverID {
533- filteredHistories = append (filteredHistories , h )
534- }
535- }
536-
537- return filteredHistories
538- } else {
539- return make ([]* model.MonitorHistory , 0 )
540- }
541- } else if DB != nil {
498+ // SQLite模式查询
499+ if DB != nil {
542500 // SQLite模式
543501 if err := DB .Model (& model.MonitorHistory {}).
544502 Where (search ).
0 commit comments