72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
"zee/internal/helper/config"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// HealthHandler xử lý các endpoint liên quan đến sức khỏe hệ thống
|
|
type HealthHandler struct {
|
|
config *config.Config
|
|
startTime time.Time
|
|
appVersion string
|
|
}
|
|
|
|
// NewHealthHandler tạo một handler mới cho health endpoints
|
|
func NewHealthHandler(cfg *config.Config) *HealthHandler {
|
|
return &HealthHandler{
|
|
config: cfg,
|
|
startTime: time.Now(),
|
|
appVersion: cfg.App.Version,
|
|
}
|
|
}
|
|
|
|
// HealthCheck trả về trạng thái sức khỏe của hệ thống
|
|
// @Summary Kiểm tra trạng thái của hệ thống
|
|
// @Description Trả về thông tin về trạng thái của ứng dụng và các thành phần
|
|
// @Tags Health
|
|
// @Produce json
|
|
// @Success 200 {object} map[string]interface{}
|
|
// @Router /health [get]
|
|
func (h *HealthHandler) HealthCheck(c *gin.Context) {
|
|
uptime := time.Since(h.startTime).String()
|
|
|
|
// Tạo response
|
|
resp := gin.H{
|
|
"status": "ok",
|
|
"app": gin.H{
|
|
"name": h.config.App.Name,
|
|
"version": h.appVersion,
|
|
"env": h.config.App.Environment,
|
|
},
|
|
"uptime": uptime,
|
|
// Trong môi trường thực tế, thêm kiểm tra trạng thái của database và các dịch vụ bên ngoài
|
|
"components": gin.H{
|
|
"database": "ok", // Giả định - trong thực tế sẽ kiểm tra kết nối
|
|
"cache": "ok", // Giả định
|
|
},
|
|
"timestamp": time.Now().Format(time.RFC3339),
|
|
}
|
|
|
|
c.JSON(http.StatusOK, resp)
|
|
}
|
|
|
|
// Ping endpoint đơn giản để kiểm tra server đang chạy
|
|
// @Summary Ping server
|
|
// @Description Endpoint đơn giản để kiểm tra server đang hoạt động
|
|
// @Tags Health
|
|
// @Produce json
|
|
// @Success 200 {object} map[string]string
|
|
// @Router /ping [get]
|
|
func (h *HealthHandler) Ping(c *gin.Context) {
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"status": "ok",
|
|
"message": "pong",
|
|
"timestamp": time.Now().Format(time.RFC3339),
|
|
})
|
|
}
|