Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

heath.go 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package routes
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "time"
  6. "github.com/gin-gonic/gin"
  7. "git.x2erp.com/qdy/go-base/types"
  8. )
  9. // HealthHandler 返回一个处理函数
  10. func HealthHandler(db *sql.DB, dbType string) gin.HandlerFunc {
  11. return func(c *gin.Context) {
  12. err := TestConnection(db, dbType)
  13. success := err == nil
  14. status := "DOWN"
  15. if success {
  16. status = "UP"
  17. }
  18. c.JSON(200, &types.QueryResult{
  19. Success: success,
  20. Data: map[string]interface{}{
  21. "status": status,
  22. "time": time.Now().Format(time.RFC3339),
  23. "database": dbType,
  24. "databaseStatus": status,
  25. },
  26. Error: func() string {
  27. if err != nil {
  28. return err.Error()
  29. }
  30. return ""
  31. }(),
  32. })
  33. }
  34. }
  35. // testConnection 测试数据库连接
  36. func TestConnection(db *sql.DB, dbType string) error {
  37. var query string
  38. switch dbType {
  39. case "mysql", "postgres", "sqlserver":
  40. query = "SELECT 1"
  41. case "oracle":
  42. query = "SELECT 1 FROM DUAL"
  43. default:
  44. query = "SELECT 1"
  45. }
  46. var result int
  47. err := db.QueryRow(query).Scan(&result)
  48. if err != nil {
  49. return err
  50. }
  51. if result != 1 {
  52. return fmt.Errorf("unexpected test result: %d", result)
  53. }
  54. return nil
  55. }