mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-03 20:12:58 +00:00
uppdate
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/trackeep/backend/config"
|
||||
)
|
||||
|
||||
var startTime = time.Now()
|
||||
|
||||
func HealthCheck(c *gin.Context) {
|
||||
db := config.GetDB()
|
||||
dbStatus := "connected"
|
||||
var dbPingTime time.Duration = 0
|
||||
|
||||
if db == nil {
|
||||
dbStatus = "disconnected"
|
||||
} else {
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
dbStatus = "error"
|
||||
} else {
|
||||
start := time.Now()
|
||||
if err := sqlDB.Ping(); err != nil {
|
||||
dbStatus = "error"
|
||||
} else {
|
||||
dbPingTime = time.Since(start)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sessionStatus := "ok"
|
||||
|
||||
var memStats runtime.MemStats
|
||||
runtime.ReadMemStats(&memStats)
|
||||
|
||||
uptime := time.Since(startTime)
|
||||
|
||||
health := gin.H{
|
||||
"status": "ok",
|
||||
"message": "Trackeep API is running",
|
||||
"version": "1.0.0",
|
||||
"uptime": uptime.String(),
|
||||
"database": gin.H{
|
||||
"status": dbStatus,
|
||||
"ping_time": dbPingTime.String(),
|
||||
},
|
||||
"sessions": gin.H{
|
||||
"status": sessionStatus,
|
||||
},
|
||||
"system": gin.H{
|
||||
"goroutines": runtime.NumGoroutine(),
|
||||
"memory": gin.H{
|
||||
"alloc_mb": memStats.Alloc / 1024 / 1024,
|
||||
"total_alloc_mb": memStats.TotalAlloc / 1024 / 1024,
|
||||
"sys_mb": memStats.Sys / 1024 / 1024,
|
||||
},
|
||||
},
|
||||
"timestamp": gin.H{
|
||||
"human": time.Now().Format(time.RFC3339),
|
||||
"unix": time.Now().Unix(),
|
||||
},
|
||||
}
|
||||
|
||||
overallStatus := "healthy"
|
||||
if dbStatus != "connected" {
|
||||
overallStatus = "degraded"
|
||||
health["status"] = "degraded"
|
||||
}
|
||||
if sessionStatus != "ok" {
|
||||
overallStatus = "degraded"
|
||||
health["status"] = "degraded"
|
||||
}
|
||||
|
||||
statusCode := 200
|
||||
if overallStatus == "degraded" {
|
||||
statusCode = 503
|
||||
}
|
||||
|
||||
c.JSON(statusCode, health)
|
||||
}
|
||||
|
||||
func ReadinessCheck(c *gin.Context) {
|
||||
db := config.GetDB()
|
||||
if db == nil {
|
||||
c.JSON(503, gin.H{"status": "not_ready", "reason": "database_not_connected"})
|
||||
return
|
||||
}
|
||||
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil || sqlDB.Ping() != nil {
|
||||
c.JSON(503, gin.H{"status": "not_ready", "reason": "database_ping_failed"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"status": "ready"})
|
||||
}
|
||||
|
||||
func LivenessCheck(c *gin.Context) {
|
||||
c.JSON(200, gin.H{"status": "alive", "timestamp": time.Now().Unix()})
|
||||
}
|
||||
Reference in New Issue
Block a user