Files
NetworkAuth/controllers/admin/dashboard.go

107 lines
2.9 KiB
Go
Raw Normal View History

2025-10-24 00:09:45 +08:00
package admin
import (
2026-03-18 21:51:17 +08:00
"NetworkAuth/constants"
"NetworkAuth/controllers"
"NetworkAuth/middleware"
"NetworkAuth/models"
"NetworkAuth/utils/timeutil"
2025-10-24 00:09:45 +08:00
2025-10-26 14:48:02 +08:00
"github.com/gin-gonic/gin"
2025-10-24 00:09:45 +08:00
"github.com/spf13/viper"
)
2025-10-27 23:12:15 +08:00
// ============================================================================
// 全局变量
// ============================================================================
2025-10-26 14:48:02 +08:00
// 创建基础控制器实例
var handlersBaseController = controllers.NewBaseController()
2025-10-27 23:12:15 +08:00
// ============================================================================
// 辅助函数
// ============================================================================
2025-10-26 11:57:31 +08:00
// formatDBType 格式化数据库类型显示
// 将配置文件中的小写类型转换为友好的显示格式
func formatDBType(dbType string) string {
switch dbType {
case "mysql":
return "MySQL"
case "sqlite":
return "SQLite"
case "postgresql", "postgres":
return "PostgreSQL"
case "sqlserver":
return "SQL Server"
default:
return "SQLite" // 默认显示
}
}
2025-10-27 23:12:15 +08:00
// ============================================================================
// API处理器
// ============================================================================
2026-03-28 23:30:02 +08:00
// 返回系统运行状态的JSON数据用于前端定时刷新
2025-10-26 14:48:02 +08:00
func SystemInfoHandler(c *gin.Context) {
version := constants.AppVersion
mode := middleware.IsDevModeFromContext(c)
2025-10-24 00:09:45 +08:00
dbType := viper.GetString("database.type")
if dbType == "" {
dbType = "sqlite"
}
uptime := timeutil.GetServerUptimeString()
2026-03-28 23:30:02 +08:00
uptimeSeconds := int64(timeutil.GetServerUptime().Seconds())
2025-10-24 00:09:45 +08:00
2025-10-26 14:48:02 +08:00
data := gin.H{
2026-03-28 23:30:02 +08:00
"version": version,
"mode": mode,
"db_type": formatDBType(dbType),
"uptime": uptime,
"uptime_seconds": uptimeSeconds,
2025-10-24 00:09:45 +08:00
}
2025-10-26 14:48:02 +08:00
handlersBaseController.HandleSuccess(c, "ok", data)
2025-10-24 00:09:45 +08:00
}
2025-10-26 11:57:31 +08:00
// DashboardStatsHandler 仪表盘统计数据API接口
2026-03-28 23:30:02 +08:00
// - 返回应用统计数据的JSON数据包括全部/启用/变量数量
2025-10-26 14:48:02 +08:00
func DashboardStatsHandler(c *gin.Context) {
2025-10-26 11:57:31 +08:00
// 获取数据库连接
2025-10-26 14:48:02 +08:00
db, ok := handlersBaseController.GetDB(c)
if !ok {
2025-10-26 11:57:31 +08:00
return
}
// 统计应用数据
var totalApps int64
2026-03-28 23:30:02 +08:00
var totalFunctions int64
2025-10-26 11:57:31 +08:00
var totalVariables int64
// 统计全部应用数量
if err := db.Model(&models.App{}).Count(&totalApps).Error; err != nil {
2025-10-26 14:48:02 +08:00
handlersBaseController.HandleInternalError(c, "统计应用数量失败", err)
2025-10-26 11:57:31 +08:00
return
}
2026-03-28 23:30:02 +08:00
// 统计函数数量
if err := db.Model(&models.Function{}).Count(&totalFunctions).Error; err != nil {
handlersBaseController.HandleInternalError(c, "统计函数数量失败", err)
2025-10-26 11:57:31 +08:00
return
}
// 统计变量数量
if err := db.Model(&models.Variable{}).Count(&totalVariables).Error; err != nil {
2025-10-26 14:48:02 +08:00
handlersBaseController.HandleInternalError(c, "统计变量数量失败", err)
2025-10-26 11:57:31 +08:00
return
}
2025-10-26 14:48:02 +08:00
data := gin.H{
2025-10-26 11:57:31 +08:00
"total_apps": totalApps,
2026-03-28 23:30:02 +08:00
"total_functions": totalFunctions,
2025-10-26 11:57:31 +08:00
"total_variables": totalVariables,
}
2025-10-26 14:48:02 +08:00
handlersBaseController.HandleSuccess(c, "ok", data)
2025-10-26 11:57:31 +08:00
}