fix(仪表盘): 增加对数据库驱动和仓储实例的有效性检查
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -17,6 +18,13 @@ type dashboardAggregationRepository struct {
|
|||||||
|
|
||||||
// NewDashboardAggregationRepository 创建仪表盘预聚合仓储。
|
// NewDashboardAggregationRepository 创建仪表盘预聚合仓储。
|
||||||
func NewDashboardAggregationRepository(sqlDB *sql.DB) service.DashboardAggregationRepository {
|
func NewDashboardAggregationRepository(sqlDB *sql.DB) service.DashboardAggregationRepository {
|
||||||
|
if sqlDB == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if !isPostgresDriver(sqlDB) {
|
||||||
|
log.Printf("[DashboardAggregation] 检测到非 PostgreSQL 驱动,已自动禁用预聚合")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
return newDashboardAggregationRepositoryWithSQL(sqlDB)
|
return newDashboardAggregationRepositoryWithSQL(sqlDB)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,6 +32,14 @@ func newDashboardAggregationRepositoryWithSQL(sqlq sqlExecutor) *dashboardAggreg
|
|||||||
return &dashboardAggregationRepository{sql: sqlq}
|
return &dashboardAggregationRepository{sql: sqlq}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isPostgresDriver(db *sql.DB) bool {
|
||||||
|
if db == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
_, ok := db.Driver().(*pq.Driver)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
func (r *dashboardAggregationRepository) AggregateRange(ctx context.Context, start, end time.Time) error {
|
func (r *dashboardAggregationRepository) AggregateRange(ctx context.Context, start, end time.Time) error {
|
||||||
startUTC := start.UTC()
|
startUTC := start.UTC()
|
||||||
endUTC := end.UTC()
|
endUTC := end.UTC()
|
||||||
|
|||||||
@@ -85,6 +85,9 @@ func NewDashboardService(usageRepo UsageLogRepository, aggRepo DashboardAggregat
|
|||||||
aggUsageDays = cfg.DashboardAgg.Retention.UsageLogsDays
|
aggUsageDays = cfg.DashboardAgg.Retention.UsageLogsDays
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if aggRepo == nil {
|
||||||
|
aggEnabled = false
|
||||||
|
}
|
||||||
return &DashboardService{
|
return &DashboardService{
|
||||||
usageRepo: usageRepo,
|
usageRepo: usageRepo,
|
||||||
aggRepo: aggRepo,
|
aggRepo: aggRepo,
|
||||||
|
|||||||
Reference in New Issue
Block a user