| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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
- }
|