package routes import ( "database/sql" "fmt" "time" "github.com/gin-gonic/gin" "git.x2erp.com/qdy/go-base/types" ) // HealthHandler 返回一个处理函数 func HealthHandler(db *sql.DB, dbType string) gin.HandlerFunc { return func(c *gin.Context) { err := TestConnection(db, dbType) success := err == nil status := "DOWN" if success { status = "UP" } c.JSON(200, &types.QueryResult{ Success: success, Data: map[string]interface{}{ "status": status, "time": time.Now().Format(time.RFC3339), "database": dbType, "databaseStatus": status, }, Error: func() string { if err != nil { return err.Error() } return "" }(), }) } } // testConnection 测试数据库连接 func TestConnection(db *sql.DB, dbType string) error { var query string switch dbType { case "mysql", "postgres", "sqlserver": query = "SELECT 1" case "oracle": query = "SELECT 1 FROM DUAL" default: query = "SELECT 1" } var result int err := db.QueryRow(query).Scan(&result) if err != nil { return err } if result != 1 { return fmt.Errorf("unexpected test result: %d", result) } return nil }