feat: 新增日志中心、功能优化与代码重构

- 新增 log_datasource.go / log_proxy.go / user_api_token.go 后端控制器
- 新增 log_datasource.go model
- 新增 monitor/log-center.ts API 模块
- 新增 LogCenter 前端组件及页面
- 重构 deployment 相关组件 (HPDA/UpdateImageModal/bundle-yaml 等)
- 新增 ResetPasswordDialog / code-snippet-block / copy-button 等 UI 组件
- 重构多个 k8s 相关组件 (TopologyView/ResourceVisualEditor/PodFileBrowser 等)
- 更新多个 API 和工具函数 (auth.ts/monitor/index.ts/request.ts 等)
- 更新静态资源 (index.html + 新 JS/CSS bundle)
- 删除废弃静态资源文件
This commit is contained in:
Logan committed 2026-06-26 23:18:05 +08:00
1 parent 5ca0e6d83a
commit 8d46e8f352
197 files changed
+5014 -815

No files matched your search

+30 -6
View File
@@ -65,10 +65,10 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
// WebSocket终端 (JWT 鉴权,支持 ?token= 查询参数;终端会话录制) // Logan.Li
auditHub := controller.NewAuditHub()
webShellHandler := controller.NewWebShellHandler(db, auditHub)
r.GET("/ws/terminal", middleware.JWTAuth(&cfg.JWT), webShellHandler.Terminal)
r.GET("/ws/terminal", middleware.JWTAuth(&cfg.JWT, db), webShellHandler.Terminal)
// WebSocket 审计实时流 — 在线会话实时查看 // Logan.Li
r.GET("/ws/audit/:sessionId", middleware.JWTAuth(&cfg.JWT), func(c *gin.Context) {
r.GET("/ws/audit/:sessionId", middleware.JWTAuth(&cfg.JWT, db), func(c *gin.Context) {
idStr := c.Param("sessionId")
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil {
@@ -93,7 +93,7 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
// WebSocket 实时指标推送(JWT 鉴权) // Logan.Li
metricsHub := controller.NewMetricsHub()
metricsWSHandler := controller.NewMetricsWSHandler(metricsHub)
r.GET("/ws/metrics", middleware.JWTAuth(&cfg.JWT), metricsWSHandler.ServeWS)
r.GET("/ws/metrics", middleware.JWTAuth(&cfg.JWT, db), metricsWSHandler.ServeWS)
// WebSocket 流水线日志推流
wsLogHandler := controller.NewWSPipelineLogHandler(db, redisCache)
@@ -107,7 +107,7 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
// WebSocket K8s exec 交互终端 // Logan.Li
k8sHandler := controller.NewKubernetesHandler(db)
r.GET("/ws/kubernetes-exec/:id/namespaces/:namespace/pods/:podName", middleware.JWTAuth(&cfg.JWT), k8sHandler.ExecTerminal)
r.GET("/ws/kubernetes-exec/:id/namespaces/:namespace/pods/:podName", middleware.JWTAuth(&cfg.JWT, db), k8sHandler.ExecTerminal)
// ToolInstaller(工具懒加载服务 — kubectl/maven/node/helm)// Logan.Li
ti := toolinstaller.New(db)
@@ -117,7 +117,7 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
// WebSocket kubectl 命令行终端 // Logan.Li
kubectlShellHandler := controller.NewKubectlShellHandler(db, ti)
r.GET("/ws/kubectl", middleware.JWTAuth(&cfg.JWT), kubectlShellHandler.Terminal)
r.GET("/ws/kubectl", middleware.JWTAuth(&cfg.JWT, db), kubectlShellHandler.Terminal)
// 公开路由
authHandler := controller.NewUserHandler(db, cfg)
@@ -137,7 +137,7 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
// 需要认证的路由
authorized := api.Group("")
authorized.Use(middleware.JWTAuth(&cfg.JWT))
authorized.Use(middleware.JWTAuth(&cfg.JWT, db))
// 用户路由
user := authorized.Group("/user")
@@ -146,7 +146,13 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
user.GET("/permissions", authHandler.GetMyPermissions)
user.PUT("/profile", authHandler.UpdateProfile)
user.POST("/change-password", authHandler.ChangePassword)
user.PUT("/password", authHandler.ChangePassword) // 兼容前端 // Logan.Li
user.GET("/roles", authHandler.ListRoles)
user.GET("/api-access-key", authHandler.GetApiAccessKey)
user.PUT("/api-access-key", authHandler.UpdateApiAccessKey)
user.POST("/api-access-key/regenerate", authHandler.RegenerateApiAccessKey)
user.POST("/api-access-key/extend", authHandler.ExtendApiAccessKey)
user.DELETE("/api-access-key", authHandler.RevokeApiAccessKey)
}
// 管理员路由
@@ -158,6 +164,7 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
admin.POST("/users", authHandler.CreateUser)
admin.PUT("/users/:id", authHandler.UpdateUser)
admin.DELETE("/users/:id", authHandler.DeleteUser)
admin.POST("/users/:id/reset-password", authHandler.ResetUserPassword)
admin.POST("/users/batch-import", authHandler.BatchImportUsers)
admin.GET("/users/import-template", authHandler.ImportTemplate)
@@ -399,6 +406,9 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
// Ingresses
kubernetesRouter.GET("/:clusterCode/namespace/:namespace/ingresses", k8sHandler.ListIngressesNS)
// IngressClass 列表(可视化编辑 Ingress 时选择 ingressClassName 用) // Logan.Li
kubernetesRouter.GET("/:clusterCode/ingressclasses", k8sHandler.ListIngressClasses)
// HPA
kubernetesRouter.GET("/:clusterCode/namespace/:namespace/hpas", k8sHandler.ListHPAsNS)
kubernetesRouter.POST("/:clusterCode/namespace/:namespace/hpas", k8sHandler.CreateHPANS)
@@ -656,12 +666,26 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
// 日志监控路由 // Logan.Li
logHandler := controller.NewLogHandler(db)
logDSHandler := controller.NewLogDSHandler(db)
logProxyHandler := controller.NewLogProxyHandler(logDSHandler)
logs := authorized.Group("/logs")
{
logs.GET("", logHandler.QueryLogs)
logs.GET("/sources", logHandler.ListSources)
logs.POST("/sources", logHandler.CreateSource)
logs.DELETE("/sources/:id", logHandler.DeleteSource)
logs.POST("/loki/query", logProxyHandler.QueryLoki)
logs.POST("/elasticsearch/query", logProxyHandler.QueryES)
}
logDSGroup := authorized.Group("/log-datasources")
{
logDSGroup.GET("", logDSHandler.List)
logDSGroup.GET("/:id", logDSHandler.Get)
logDSGroup.POST("", logDSHandler.Create)
logDSGroup.PUT("/:id", logDSHandler.Update)
logDSGroup.DELETE("/:id", logDSHandler.Delete)
logDSGroup.POST("/:id/default", logDSHandler.SetDefault)
logDSGroup.POST("/test", logDSHandler.TestConnection)
}
// 审批流程路由