feat: 工具配置增强、站点拨测与日志中心多项改进

- 工具配置:新增卸载 API/UI、Go 工具链、流水线构建自动安装依赖
- 修复 ListTools VerifyTool 递归栈溢出导致获取工具配置失败
- Node.js Alpine 安装改用 unofficial-builds musl 预编译包与 index.json 解析 LTS
- 站点拨测:详情页路由、告警自动恢复、并发拨测与默认可观测频率
- 日志中心:RBAC、查询构建器、ES/Loki 增强与审计 request/response 展示
- 发布配置:构建节点、流水线远程执行、Deploy RBAC 导航拆分
This commit is contained in:
Logan committed 2026-07-02 07:47:33 +08:00
1 parent cde7bbe540
commit 7e1c8f583c
84 files changed
+7729 -1507

No files matched your search

+30 -1
View File
@@ -215,6 +215,17 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
admin.POST("/users/:id/item-roles", itemRoleHandler.AssignItemRole)
admin.DELETE("/users/:id/item-roles/:roleId", itemRoleHandler.RemoveItemRole)
// 日志查询范围权限(正则匹配 ES 索引 / Loki Label)// Logan.Li
logScopeRoleHandler := controller.NewLogScopeRoleHandler(db)
admin.GET("/log-scope-roles", logScopeRoleHandler.ListLogScopeRoles)
admin.POST("/log-scope-roles", logScopeRoleHandler.CreateLogScopeRole)
admin.PUT("/log-scope-roles/:id", logScopeRoleHandler.UpdateLogScopeRole)
admin.DELETE("/log-scope-roles/:id", logScopeRoleHandler.DeleteLogScopeRole)
admin.GET("/log-scope-roles/users/:id", logScopeRoleHandler.ListUserLogScopeRoles)
admin.POST("/log-scope-roles/users/:id", logScopeRoleHandler.AssignLogScopeRole)
admin.DELETE("/log-scope-roles/users/:userId/:assignId", logScopeRoleHandler.RemoveLogScopeRole)
admin.POST("/log-scope-roles/preview", logScopeRoleHandler.PreviewLogScope)
// 审计策略(保留天数 + 立即清理) // Logan.Li
auditSettingsHandler := controller.NewAuditSettingsHandler(db)
admin.GET("/audit-settings", auditSettingsHandler.GetAuditSettings)
@@ -653,6 +664,17 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
environments.DELETE("/:id", pipelineHandler.DeleteEnvironment)
}
// 构建节点路由(Jenkins Agent 风格 SSH 节点) // Logan.Li
buildNodes := authorized.Group("/deploy/build-nodes")
{
buildNodes.GET("", pipelineHandler.ListBuildNodes)
buildNodes.PUT("/master", pipelineHandler.UpdateBuildMaster)
buildNodes.POST("", pipelineHandler.CreateBuildNode)
buildNodes.PUT("/:id", pipelineHandler.UpdateBuildNode)
buildNodes.DELETE("/:id", pipelineHandler.DeleteBuildNode)
buildNodes.POST("/:id/test", pipelineHandler.TestBuildNode)
}
// 应用发布路由
releases := authorized.Group("/releases")
{
@@ -690,6 +712,7 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
tools.GET("/:id", toolConfigHandler.GetTool)
tools.PUT("/:id", toolConfigHandler.UpdateTool)
tools.POST("/:id/install", toolConfigHandler.InstallTool)
tools.POST("/:id/uninstall", toolConfigHandler.UninstallTool)
tools.POST("/:id/check", toolConfigHandler.CheckToolStatus)
tools.GET("/:id/versions", toolConfigHandler.GetToolVersions)
}
@@ -745,7 +768,7 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
// 日志监控路由 // Logan.Li
logHandler := controller.NewLogHandler(db)
logProxyHandler := controller.NewLogProxyHandler(logDSHandler)
logProxyHandler := controller.NewLogProxyHandler(logDSHandler, db)
logs := authorized.Group("/logs")
{
logs.GET("", logHandler.QueryLogs)
@@ -754,11 +777,17 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
logs.DELETE("/sources/:id", logHandler.DeleteSource)
logs.POST("/loki/query", logProxyHandler.QueryLoki)
logs.POST("/elasticsearch/query", logProxyHandler.QueryES)
logs.GET("/loki/labels", logProxyHandler.ListLokiLabels)
logs.GET("/loki/labels/:name/values", logProxyHandler.ListLokiLabelValues)
logs.POST("/loki/histogram", logProxyHandler.LokiHistogram)
logs.POST("/elasticsearch/histogram", logProxyHandler.ESHistogram)
logs.GET("/elasticsearch/mapping", logProxyHandler.ESMapping)
}
logDSGroup := authorized.Group("/log-datasources")
{
logDSGroup.GET("", logDSHandler.List)
logDSGroup.GET("/indices", logDSHandler.ListIndices)
logDSGroup.GET("/:id/indices", logDSHandler.ListIndicesByID)
logDSGroup.GET("/:id", logDSHandler.Get)
logDSGroup.POST("", logDSHandler.Create)
logDSGroup.PUT("/:id", logDSHandler.Update)