From 08ff39170a9a5b1e5f83d919a5cc68e79c70eb26 Mon Sep 17 00:00:00 2001 From: Bamboo <13664854532@163.com> Date: Wed, 1 Oct 2025 09:45:37 +0800 Subject: [PATCH 1/6] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 4 +- go.sum | 8 +- internal/cron/executor/ssh_executor.go | 24 +-- internal/cron/handler/executors.go | 26 +-- internal/k8s/api/clusterrole.go | 50 +++--- internal/k8s/api/clusterrolebinding.go | 50 +++--- internal/k8s/api/configmap.go | 8 +- internal/k8s/api/daemonset.go | 74 ++++---- internal/k8s/api/deployment.go | 100 ++++++----- internal/k8s/api/event.go | 80 ++++----- internal/k8s/api/ingress.go | 50 +++--- internal/k8s/api/namespace.go | 34 ++-- internal/k8s/api/pod.go | 87 +++++----- internal/k8s/api/pv.go | 56 +++--- internal/k8s/api/pvc.go | 62 +++---- internal/k8s/api/rbac.go | 14 +- internal/k8s/api/resource.go | 48 ++--- internal/k8s/api/role.go | 50 +++--- internal/k8s/api/rolebinding.go | 50 +++--- internal/k8s/api/serviceaccount.go | 62 +++---- internal/k8s/api/statefulset.go | 80 ++++----- internal/k8s/api/svc.go | 56 +++--- internal/k8s/api/yaml_task.go | 32 ++-- internal/k8s/api/yaml_template.go | 38 ++-- internal/k8s/dao/cluster_dao.go | 76 ++++---- internal/k8s/dao/yaml_task_dao.go | 38 ++-- internal/k8s/dao/yaml_template_dao.go | 36 ++-- internal/k8s/manager/clusterrole_manager.go | 48 ++--- .../k8s/manager/clusterrolebinding_manager.go | 58 +++---- internal/k8s/manager/daemonset_manager.go | 100 +++++------ internal/k8s/manager/deployment_manager.go | 116 ++++++------- internal/k8s/manager/ingress_manager.go | 46 ++--- internal/k8s/manager/pod_manager.go | 142 +++++++-------- internal/k8s/manager/pv_manager.go | 102 +++++------ internal/k8s/manager/pvc_manager.go | 108 ++++++------ internal/k8s/manager/role_manager.go | 58 +++---- internal/k8s/manager/rolebinding_manager.go | 48 ++--- .../k8s/manager/serviceaccount_manager.go | 106 +++++------ internal/k8s/manager/statefulset_manager.go | 108 ++++++------ internal/k8s/service/cluster_service.go | 70 ++++---- internal/k8s/service/clusterrole_service.go | 50 +++--- .../k8s/service/clusterrolebinding_service.go | 44 ++--- internal/k8s/service/configmap_service.go | 12 +- internal/k8s/service/daemonset_service.go | 104 +++++------ internal/k8s/service/deployment_service.go | 116 ++++++------- internal/k8s/service/event_service.go | 64 +++---- internal/k8s/service/ingress_service.go | 76 ++++---- internal/k8s/service/namespace_service.go | 46 ++--- internal/k8s/service/node_service.go | 62 +++---- internal/k8s/service/pod_service.go | 144 +++++++-------- internal/k8s/service/pv_service.go | 98 +++++------ internal/k8s/service/pvc_service.go | 130 +++++++------- internal/k8s/service/rbac_service.go | 10 +- internal/k8s/service/resource_service.go | 164 +++++++++--------- internal/k8s/service/role_service.go | 40 ++--- internal/k8s/service/taint_service.go | 46 ++--- internal/k8s/service/yaml_task_service.go | 20 +-- internal/k8s/service/yaml_template_service.go | 24 +-- internal/prometheus/api/alert_event.go | 26 +-- internal/prometheus/api/alert_pool.go | 32 ++-- internal/prometheus/api/alert_rule.go | 38 ++-- internal/prometheus/api/onduty_group.go | 56 +++--- internal/prometheus/api/record_rule.go | 32 ++-- internal/prometheus/api/scrape_job.go | 32 ++-- internal/prometheus/api/scrape_pool.go | 32 ++-- internal/prometheus/api/send_group.go | 32 ++-- internal/prometheus/dao/alert/event_dao.go | 60 +++---- internal/prometheus/dao/alert/pool_dao.go | 52 +++--- internal/prometheus/dao/alert/record_dao.go | 56 +++--- internal/prometheus/dao/alert/rule_dao.go | 62 +++---- internal/prometheus/dao/alert/send_dao.go | 114 ++++++------ internal/prometheus/dao/scrape/job_dao.go | 58 +++---- internal/prometheus/dao/scrape/pool_dao.go | 68 ++++---- internal/system/api/api_handler.go | 24 +-- internal/system/api/role_handler.go | 86 ++++----- internal/system/dao/api_dao.go | 36 ++-- internal/system/dao/role_dao.go | 76 ++++---- internal/system/service/api_service.go | 42 ++--- internal/tree/service/tree_local_service.go | 74 ++++---- internal/tree/service/tree_node_service.go | 72 ++++---- internal/user/api/user_handler.go | 84 ++++----- internal/user/dao/user_dao.go | 74 ++++---- internal/workorder/dao/form_design_dao.go | 56 +++--- .../workorder/dao/instance_time_line_dao.go | 52 +++--- internal/workorder/dao/notification_dao.go | 70 ++++---- internal/workorder/dao/template_dao.go | 58 +++---- .../workorder/service/form_design_service.go | 64 +++---- .../service/instance_time_line_service.go | 18 +- .../workorder/service/notification_service.go | 152 ++++++++-------- internal/workorder/service/process_service.go | 82 ++++----- .../workorder/service/template_service.go | 72 ++++---- 91 files changed, 2801 insertions(+), 2794 deletions(-) diff --git a/go.mod b/go.mod index 874e27c5..69c5198a 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,6 @@ require ( github.com/imdario/mergo v0.3.16 github.com/joho/godotenv v1.5.1 github.com/jonboulle/clockwork v0.5.0 - github.com/mark3labs/mcp-go v0.25.0 github.com/openkruise/kruise-api v1.7.0 github.com/pkg/errors v0.9.1 github.com/prometheus/alertmanager v0.28.1 @@ -31,6 +30,7 @@ require ( github.com/swaggo/files v1.0.1 github.com/swaggo/gin-swagger v1.6.0 github.com/swaggo/swag v1.16.6 + go.uber.org/fx v1.24.0 go.uber.org/zap v1.27.0 golang.org/x/crypto v0.41.0 golang.org/x/sync v0.16.0 @@ -58,7 +58,6 @@ require ( github.com/go-redis/redis/v8 v8.11.2 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/robfig/cron/v3 v3.0.1 - github.com/yosida95/uritemplate/v3 v3.0.2 // indirect ) require ( @@ -202,6 +201,7 @@ require ( go.opentelemetry.io/otel/metric v1.36.0 // indirect go.opentelemetry.io/otel/trace v1.36.0 // indirect go.uber.org/atomic v1.11.0 // indirect + go.uber.org/dig v1.19.0 // indirect go.uber.org/goleak v1.3.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect diff --git a/go.sum b/go.sum index ced5c160..f9b045cd 100644 --- a/go.sum +++ b/go.sum @@ -468,8 +468,6 @@ github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0V github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mark3labs/mcp-go v0.25.0 h1:UUpcMT3L5hIhuDy7aifj4Bphw4Pfx1Rf8mzMXDe8RQw= -github.com/mark3labs/mcp-go v0.25.0/go.mod h1:rXqOudj/djTORU/ThxYx8fqEVj/5pvTuuebQ2RC7uk4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -675,8 +673,6 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= -github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= -github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -697,6 +693,10 @@ go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKr go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4= +go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= +go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg= +go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo= go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= diff --git a/internal/cron/executor/ssh_executor.go b/internal/cron/executor/ssh_executor.go index e23adfc9..50adfc26 100644 --- a/internal/cron/executor/ssh_executor.go +++ b/internal/cron/executor/ssh_executor.go @@ -52,13 +52,13 @@ func NewSSHExecutor(logger *zap.Logger, treeLocalDAO dao.TreeLocalDAO) *SSHExecu } // ExecuteSSHJob 执行SSH任务 -func (e *SSHExecutor) ExecuteSSHJob(ctx context.Context, job *model.CronJob) (string, error) { +func (s *SSHExecutor) ExecuteSSHJob(ctx context.Context, job *model.CronJob) (string, error) { resourceID := 0 if job.SSHResourceID != nil { resourceID = *job.SSHResourceID } - e.logger.Info("开始执行SSH任务", + s.logger.Info("开始执行SSH任务", zap.String("任务名称", job.Name), zap.Int("资源ID", resourceID)) @@ -76,9 +76,9 @@ func (e *SSHExecutor) ExecuteSSHJob(ctx context.Context, job *model.CronJob) (st } // 获取SSH资源信息 - resource, err := e.treeLocalDAO.GetByID(ctx, *job.SSHResourceID) + resource, err := s.treeLocalDAO.GetByID(ctx, *job.SSHResourceID) if err != nil { - e.logger.Error("获取SSH资源失败", + s.logger.Error("获取SSH资源失败", zap.Int("资源ID", *job.SSHResourceID), zap.Error(err)) return "", fmt.Errorf("获取SSH资源失败: %w", err) @@ -94,10 +94,10 @@ func (e *SSHExecutor) ExecuteSSHJob(ctx context.Context, job *model.CronJob) (st } // 创建SSH连接 - sshClient := ssh.NewSSH(e.logger) + sshClient := ssh.NewSSH(s.logger) defer func() { if closeErr := sshClient.Close(); closeErr != nil { - e.logger.Error("关闭SSH连接失败", zap.Error(closeErr)) + s.logger.Error("关闭SSH连接失败", zap.Error(closeErr)) } }() @@ -119,7 +119,7 @@ func (e *SSHExecutor) ExecuteSSHJob(ctx context.Context, job *model.CronJob) (st 0, // 系统任务使用用户ID 0 ) if err != nil { - e.logger.Error("SSH连接失败", + s.logger.Error("SSH连接失败", zap.String("地址", resource.IpAddr), zap.Int("端口", resource.Port), zap.String("用户名", resource.Username), @@ -127,10 +127,10 @@ func (e *SSHExecutor) ExecuteSSHJob(ctx context.Context, job *model.CronJob) (st return "", fmt.Errorf("SSH连接失败: %w", err) } - e.logger.Info("SSH连接成功", zap.String("地址", resource.IpAddr)) + s.logger.Info("SSH连接成功", zap.String("地址", resource.IpAddr)) // 构建执行命令 - command := e.buildSSHCommand(job) + command := s.buildSSHCommand(job) // 设置超时控制 cmdCtx, cancel := context.WithTimeout(ctx, time.Duration(job.Timeout)*time.Second) @@ -154,12 +154,12 @@ func (e *SSHExecutor) ExecuteSSHJob(ctx context.Context, job *model.CronJob) (st case <-cmdCtx.Done(): return "", fmt.Errorf("SSH命令执行超时: %d秒", job.Timeout) case err := <-errorCh: - e.logger.Error("SSH命令执行失败", + s.logger.Error("SSH命令执行失败", zap.String("命令", command), zap.Error(err)) return "", fmt.Errorf("SSH命令执行失败: %w", err) case output := <-resultCh: - e.logger.Info("SSH命令执行成功", + s.logger.Info("SSH命令执行成功", zap.String("命令", command), zap.String("输出长度", fmt.Sprintf("%d字符", len(output)))) return output, nil @@ -167,7 +167,7 @@ func (e *SSHExecutor) ExecuteSSHJob(ctx context.Context, job *model.CronJob) (st } // buildSSHCommand 构建SSH执行命令 -func (e *SSHExecutor) buildSSHCommand(job *model.CronJob) string { +func (s *SSHExecutor) buildSSHCommand(job *model.CronJob) string { var commandParts []string // 设置工作目录 diff --git a/internal/cron/handler/executors.go b/internal/cron/handler/executors.go index d0c34d98..fac7768f 100644 --- a/internal/cron/handler/executors.go +++ b/internal/cron/handler/executors.go @@ -62,7 +62,7 @@ type CommandTask struct { } // Execute 执行命令,返回输出字符串 -func (e *CommandExecutor) Execute(ctx context.Context, task *CommandTask) (string, error) { +func (h *CommandExecutor) Execute(ctx context.Context, task *CommandTask) (string, error) { // 设置超时 timeout := time.Duration(task.Timeout) * time.Second if timeout <= 0 { @@ -103,7 +103,7 @@ func (e *CommandExecutor) Execute(ctx context.Context, task *CommandTask) (strin cmd.Stdout = &stdout cmd.Stderr = &stderr - e.logger.Info("执行命令", + h.logger.Info("执行命令", zap.String("command", task.Command), zap.Any("args", task.Args)) @@ -120,13 +120,13 @@ func (e *CommandExecutor) Execute(ctx context.Context, task *CommandTask) (strin } if err != nil { - e.logger.Error("命令执行失败", + h.logger.Error("命令执行失败", zap.String("command", task.Command), zap.Error(err)) return output, fmt.Errorf("命令执行失败: %w", err) } - e.logger.Info("命令执行成功", zap.String("command", task.Command)) + h.logger.Info("命令执行成功", zap.String("command", task.Command)) return output, nil } @@ -156,7 +156,7 @@ type HTTPTask struct { } // Execute 执行HTTP请求,返回响应字符串 -func (e *HTTPExecutor) Execute(ctx context.Context, task *HTTPTask) (string, error) { +func (h *HTTPExecutor) Execute(ctx context.Context, task *HTTPTask) (string, error) { // 设置超时 timeout := time.Duration(task.Timeout) * time.Second if timeout <= 0 { @@ -182,14 +182,14 @@ func (e *HTTPExecutor) Execute(ctx context.Context, task *HTTPTask) (string, err req.Header.Set(header.Key, header.Value) } - e.logger.Info("执行HTTP请求", + h.logger.Info("执行HTTP请求", zap.String("method", task.Method), zap.String("url", task.URL)) // 发送请求 - resp, err := e.client.Do(req) + resp, err := h.client.Do(req) if err != nil { - e.logger.Error("HTTP请求失败", zap.Error(err)) + h.logger.Error("HTTP请求失败", zap.Error(err)) return "", fmt.Errorf("HTTP请求失败: %w", err) } defer resp.Body.Close() @@ -202,7 +202,7 @@ func (e *HTTPExecutor) Execute(ctx context.Context, task *HTTPTask) (string, err response := string(body) - e.logger.Info("HTTP请求完成", + h.logger.Info("HTTP请求完成", zap.String("url", task.URL), zap.Int("statusCode", resp.StatusCode)) @@ -234,7 +234,7 @@ type ScriptTask struct { } // Execute 执行脚本,返回输出字符串 -func (e *ScriptExecutor) Execute(ctx context.Context, task *ScriptTask) (string, error) { +func (h *ScriptExecutor) Execute(ctx context.Context, task *ScriptTask) (string, error) { // 设置超时 timeout := time.Duration(task.Timeout) * time.Second if timeout <= 0 { @@ -265,7 +265,7 @@ func (e *ScriptExecutor) Execute(ctx context.Context, task *ScriptTask) (string, cmd.Stdout = &stdout cmd.Stderr = &stderr - e.logger.Info("执行脚本", + h.logger.Info("执行脚本", zap.String("type", task.Type), zap.String("interpreter", interpreter)) @@ -282,12 +282,12 @@ func (e *ScriptExecutor) Execute(ctx context.Context, task *ScriptTask) (string, } if err != nil { - e.logger.Error("脚本执行失败", + h.logger.Error("脚本执行失败", zap.String("type", task.Type), zap.Error(err)) return output, fmt.Errorf("脚本执行失败: %w", err) } - e.logger.Info("脚本执行成功", zap.String("type", task.Type)) + h.logger.Info("脚本执行成功", zap.String("type", task.Type)) return output, nil } diff --git a/internal/k8s/api/clusterrole.go b/internal/k8s/api/clusterrole.go index 879b51f9..29712614 100644 --- a/internal/k8s/api/clusterrole.go +++ b/internal/k8s/api/clusterrole.go @@ -42,22 +42,22 @@ func NewK8sClusterRoleHandler(clusterRoleService service.ClusterRoleService) *K8 } } -func (k *K8sClusterRoleHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sClusterRoleHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/clusterrole/:cluster_id/list", k.GetClusterRoleList) - k8sGroup.GET("/clusterrole/:cluster_id/:name/detail", k.GetClusterRoleDetails) - k8sGroup.GET("/clusterrole/:cluster_id/:name/detail/yaml", k.GetClusterRoleYaml) - k8sGroup.POST("/clusterrole/:cluster_id/create", k.CreateClusterRole) - k8sGroup.POST("/clusterrole/:cluster_id/create/yaml", k.CreateClusterRoleByYaml) - k8sGroup.PUT("/clusterrole/:cluster_id/:name/update", k.UpdateClusterRole) - k8sGroup.PUT("/clusterrole/:cluster_id/:name/update/yaml", k.UpdateClusterRoleByYaml) - k8sGroup.DELETE("/clusterrole/:cluster_id/:name/delete", k.DeleteClusterRole) + k8sGroup.GET("/clusterrole/:cluster_id/list", h.GetClusterRoleList) + k8sGroup.GET("/clusterrole/:cluster_id/:name/detail", h.GetClusterRoleDetails) + k8sGroup.GET("/clusterrole/:cluster_id/:name/detail/yaml", h.GetClusterRoleYaml) + k8sGroup.POST("/clusterrole/:cluster_id/create", h.CreateClusterRole) + k8sGroup.POST("/clusterrole/:cluster_id/create/yaml", h.CreateClusterRoleByYaml) + k8sGroup.PUT("/clusterrole/:cluster_id/:name/update", h.UpdateClusterRole) + k8sGroup.PUT("/clusterrole/:cluster_id/:name/update/yaml", h.UpdateClusterRoleByYaml) + k8sGroup.DELETE("/clusterrole/:cluster_id/:name/delete", h.DeleteClusterRole) } } // GetClusterRoleList 获取ClusterRole列表 -func (k *K8sClusterRoleHandler) GetClusterRoleList(ctx *gin.Context) { +func (h *K8sClusterRoleHandler) GetClusterRoleList(ctx *gin.Context) { var req model.GetClusterRoleListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -69,12 +69,12 @@ func (k *K8sClusterRoleHandler) GetClusterRoleList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.clusterRoleService.GetClusterRoleList(ctx, &req) + return h.clusterRoleService.GetClusterRoleList(ctx, &req) }) } // GetClusterRoleDetails 获取ClusterRole详情 -func (k *K8sClusterRoleHandler) GetClusterRoleDetails(ctx *gin.Context) { +func (h *K8sClusterRoleHandler) GetClusterRoleDetails(ctx *gin.Context) { var req model.GetClusterRoleDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -93,12 +93,12 @@ func (k *K8sClusterRoleHandler) GetClusterRoleDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.clusterRoleService.GetClusterRoleDetails(ctx, &req) + return h.clusterRoleService.GetClusterRoleDetails(ctx, &req) }) } // GetClusterRoleYaml 获取ClusterRole的YAML配置 -func (k *K8sClusterRoleHandler) GetClusterRoleYaml(ctx *gin.Context) { +func (h *K8sClusterRoleHandler) GetClusterRoleYaml(ctx *gin.Context) { var req model.GetClusterRoleYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -117,12 +117,12 @@ func (k *K8sClusterRoleHandler) GetClusterRoleYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.clusterRoleService.GetClusterRoleYaml(ctx, &req) + return h.clusterRoleService.GetClusterRoleYaml(ctx, &req) }) } // CreateClusterRole 创建ClusterRole -func (k *K8sClusterRoleHandler) CreateClusterRole(ctx *gin.Context) { +func (h *K8sClusterRoleHandler) CreateClusterRole(ctx *gin.Context) { var req model.CreateClusterRoleReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -134,12 +134,12 @@ func (k *K8sClusterRoleHandler) CreateClusterRole(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleService.CreateClusterRole(ctx, &req) + return nil, h.clusterRoleService.CreateClusterRole(ctx, &req) }) } // CreateClusterRoleByYaml 通过YAML创建ClusterRole -func (k *K8sClusterRoleHandler) CreateClusterRoleByYaml(ctx *gin.Context) { +func (h *K8sClusterRoleHandler) CreateClusterRoleByYaml(ctx *gin.Context) { var req model.CreateClusterRoleByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -151,12 +151,12 @@ func (k *K8sClusterRoleHandler) CreateClusterRoleByYaml(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleService.CreateClusterRoleByYaml(ctx, &req) + return nil, h.clusterRoleService.CreateClusterRoleByYaml(ctx, &req) }) } // UpdateClusterRole 更新ClusterRole -func (k *K8sClusterRoleHandler) UpdateClusterRole(ctx *gin.Context) { +func (h *K8sClusterRoleHandler) UpdateClusterRole(ctx *gin.Context) { var req model.UpdateClusterRoleReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -175,12 +175,12 @@ func (k *K8sClusterRoleHandler) UpdateClusterRole(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleService.UpdateClusterRole(ctx, &req) + return nil, h.clusterRoleService.UpdateClusterRole(ctx, &req) }) } // UpdateClusterRoleYaml 通过YAML更新ClusterRole -func (k *K8sClusterRoleHandler) UpdateClusterRoleByYaml(ctx *gin.Context) { +func (h *K8sClusterRoleHandler) UpdateClusterRoleByYaml(ctx *gin.Context) { var req model.UpdateClusterRoleByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -199,12 +199,12 @@ func (k *K8sClusterRoleHandler) UpdateClusterRoleByYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleService.UpdateClusterRoleYaml(ctx, &req) + return nil, h.clusterRoleService.UpdateClusterRoleYaml(ctx, &req) }) } // DeleteClusterRole 删除ClusterRole -func (k *K8sClusterRoleHandler) DeleteClusterRole(ctx *gin.Context) { +func (h *K8sClusterRoleHandler) DeleteClusterRole(ctx *gin.Context) { var req model.DeleteClusterRoleReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -223,6 +223,6 @@ func (k *K8sClusterRoleHandler) DeleteClusterRole(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleService.DeleteClusterRole(ctx, &req) + return nil, h.clusterRoleService.DeleteClusterRole(ctx, &req) }) } diff --git a/internal/k8s/api/clusterrolebinding.go b/internal/k8s/api/clusterrolebinding.go index 882766fc..5802387c 100644 --- a/internal/k8s/api/clusterrolebinding.go +++ b/internal/k8s/api/clusterrolebinding.go @@ -42,21 +42,21 @@ func NewK8sClusterRoleBindingHandler(clusterRoleBindingService service.ClusterRo } } -func (k *K8sClusterRoleBindingHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sClusterRoleBindingHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/clusterrolebinding/:cluster_id/list", k.GetClusterRoleBindingList) - k8sGroup.GET("/clusterrolebinding/:cluster_id/:name/detail", k.GetClusterRoleBindingDetails) - k8sGroup.GET("/clusterrolebinding/:cluster_id/:name/detail/yaml", k.GetClusterRoleBindingYaml) - k8sGroup.POST("/clusterrolebinding/:cluster_id/create", k.CreateClusterRoleBinding) - k8sGroup.POST("/clusterrolebinding/:cluster_id/create/yaml", k.CreateClusterRoleBindingByYaml) - k8sGroup.PUT("/clusterrolebinding/:cluster_id/:name/update", k.UpdateClusterRoleBinding) - k8sGroup.PUT("/clusterrolebinding/:cluster_id/:name/update/yaml", k.UpdateClusterRoleBindingYaml) - k8sGroup.DELETE("/clusterrolebinding/:cluster_id/:name/delete", k.DeleteClusterRoleBinding) + k8sGroup.GET("/clusterrolebinding/:cluster_id/list", h.GetClusterRoleBindingList) + k8sGroup.GET("/clusterrolebinding/:cluster_id/:name/detail", h.GetClusterRoleBindingDetails) + k8sGroup.GET("/clusterrolebinding/:cluster_id/:name/detail/yaml", h.GetClusterRoleBindingYaml) + k8sGroup.POST("/clusterrolebinding/:cluster_id/create", h.CreateClusterRoleBinding) + k8sGroup.POST("/clusterrolebinding/:cluster_id/create/yaml", h.CreateClusterRoleBindingByYaml) + k8sGroup.PUT("/clusterrolebinding/:cluster_id/:name/update", h.UpdateClusterRoleBinding) + k8sGroup.PUT("/clusterrolebinding/:cluster_id/:name/update/yaml", h.UpdateClusterRoleBindingYaml) + k8sGroup.DELETE("/clusterrolebinding/:cluster_id/:name/delete", h.DeleteClusterRoleBinding) } } -func (k *K8sClusterRoleBindingHandler) GetClusterRoleBindingList(ctx *gin.Context) { +func (h *K8sClusterRoleBindingHandler) GetClusterRoleBindingList(ctx *gin.Context) { var req model.GetClusterRoleBindingListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -67,11 +67,11 @@ func (k *K8sClusterRoleBindingHandler) GetClusterRoleBindingList(ctx *gin.Contex req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.clusterRoleBindingService.GetClusterRoleBindingList(ctx, &req) + return h.clusterRoleBindingService.GetClusterRoleBindingList(ctx, &req) }) } -func (k *K8sClusterRoleBindingHandler) GetClusterRoleBindingDetails(ctx *gin.Context) { +func (h *K8sClusterRoleBindingHandler) GetClusterRoleBindingDetails(ctx *gin.Context) { var req model.GetClusterRoleBindingDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -90,20 +90,20 @@ func (k *K8sClusterRoleBindingHandler) GetClusterRoleBindingDetails(ctx *gin.Con req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.clusterRoleBindingService.GetClusterRoleBindingDetails(ctx, &req) + return h.clusterRoleBindingService.GetClusterRoleBindingDetails(ctx, &req) }) } -func (k *K8sClusterRoleBindingHandler) CreateClusterRoleBinding(ctx *gin.Context) { +func (h *K8sClusterRoleBindingHandler) CreateClusterRoleBinding(ctx *gin.Context) { var req model.CreateClusterRoleBindingReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleBindingService.CreateClusterRoleBinding(ctx, &req) + return nil, h.clusterRoleBindingService.CreateClusterRoleBinding(ctx, &req) }) } // CreateClusterRoleBindingByYaml 通过YAML创建ClusterRoleBinding -func (k *K8sClusterRoleBindingHandler) CreateClusterRoleBindingByYaml(ctx *gin.Context) { +func (h *K8sClusterRoleBindingHandler) CreateClusterRoleBindingByYaml(ctx *gin.Context) { var req model.CreateClusterRoleBindingByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -115,11 +115,11 @@ func (k *K8sClusterRoleBindingHandler) CreateClusterRoleBindingByYaml(ctx *gin.C req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleBindingService.CreateClusterRoleBindingByYaml(ctx, &req) + return nil, h.clusterRoleBindingService.CreateClusterRoleBindingByYaml(ctx, &req) }) } -func (k *K8sClusterRoleBindingHandler) UpdateClusterRoleBinding(ctx *gin.Context) { +func (h *K8sClusterRoleBindingHandler) UpdateClusterRoleBinding(ctx *gin.Context) { var req model.UpdateClusterRoleBindingReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -138,11 +138,11 @@ func (k *K8sClusterRoleBindingHandler) UpdateClusterRoleBinding(ctx *gin.Context req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleBindingService.UpdateClusterRoleBinding(ctx, &req) + return nil, h.clusterRoleBindingService.UpdateClusterRoleBinding(ctx, &req) }) } -func (k *K8sClusterRoleBindingHandler) DeleteClusterRoleBinding(ctx *gin.Context) { +func (h *K8sClusterRoleBindingHandler) DeleteClusterRoleBinding(ctx *gin.Context) { var req model.DeleteClusterRoleBindingReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -161,11 +161,11 @@ func (k *K8sClusterRoleBindingHandler) DeleteClusterRoleBinding(ctx *gin.Context req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleBindingService.DeleteClusterRoleBinding(ctx, &req) + return nil, h.clusterRoleBindingService.DeleteClusterRoleBinding(ctx, &req) }) } -func (k *K8sClusterRoleBindingHandler) GetClusterRoleBindingYaml(ctx *gin.Context) { +func (h *K8sClusterRoleBindingHandler) GetClusterRoleBindingYaml(ctx *gin.Context) { var req model.GetClusterRoleBindingYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -184,11 +184,11 @@ func (k *K8sClusterRoleBindingHandler) GetClusterRoleBindingYaml(ctx *gin.Contex req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.clusterRoleBindingService.GetClusterRoleBindingYaml(ctx, &req) + return h.clusterRoleBindingService.GetClusterRoleBindingYaml(ctx, &req) }) } -func (k *K8sClusterRoleBindingHandler) UpdateClusterRoleBindingYaml(ctx *gin.Context) { +func (h *K8sClusterRoleBindingHandler) UpdateClusterRoleBindingYaml(ctx *gin.Context) { var req model.UpdateClusterRoleBindingByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -207,6 +207,6 @@ func (k *K8sClusterRoleBindingHandler) UpdateClusterRoleBindingYaml(ctx *gin.Con req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.clusterRoleBindingService.UpdateClusterRoleBindingYaml(ctx, &req) + return nil, h.clusterRoleBindingService.UpdateClusterRoleBindingYaml(ctx, &req) }) } diff --git a/internal/k8s/api/configmap.go b/internal/k8s/api/configmap.go index cb443f57..d4895ed0 100644 --- a/internal/k8s/api/configmap.go +++ b/internal/k8s/api/configmap.go @@ -71,7 +71,7 @@ func (h *K8sConfigMapHandler) GetConfigMapList(ctx *gin.Context) { req.ClusterID = clusterID - utils.HandleRequest(ctx, nil, func() (interface{}, error) { + utils.HandleRequest(ctx, &req, func() (interface{}, error) { return h.configMapService.GetConfigMapList(ctx, &req) }) } @@ -107,7 +107,7 @@ func (h *K8sConfigMapHandler) GetConfigMap(ctx *gin.Context) { return } - utils.HandleRequest(ctx, nil, func() (interface{}, error) { + utils.HandleRequest(ctx, &req, func() (interface{}, error) { return h.configMapService.GetConfigMap(ctx, &req) }) } @@ -186,7 +186,7 @@ func (h *K8sConfigMapHandler) DeleteConfigMap(ctx *gin.Context) { req.Namespace = ns req.Name = name - utils.HandleRequest(ctx, nil, func() (interface{}, error) { + utils.HandleRequest(ctx, &req, func() (interface{}, error) { return nil, h.configMapService.DeleteConfigMap(ctx, &req) }) } @@ -217,7 +217,7 @@ func (h *K8sConfigMapHandler) GetConfigMapYAML(ctx *gin.Context) { req.Namespace = ns req.Name = name - utils.HandleRequest(ctx, nil, func() (interface{}, error) { + utils.HandleRequest(ctx, &req, func() (interface{}, error) { return h.configMapService.GetConfigMapYAML(ctx, &req) }) } diff --git a/internal/k8s/api/daemonset.go b/internal/k8s/api/daemonset.go index 9b890750..68f22cc1 100644 --- a/internal/k8s/api/daemonset.go +++ b/internal/k8s/api/daemonset.go @@ -42,27 +42,27 @@ func NewK8sDaemonSetHandler(daemonSetService service.DaemonSetService) *K8sDaemo } } -func (k *K8sDaemonSetHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sDaemonSetHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { // DaemonSet基础管理 - k8sGroup.GET("/daemonset/:cluster_id/list", k.GetDaemonSetList) // 获取DaemonSet列表 - k8sGroup.GET("/daemonset/:cluster_id/:namespace/:name/detail", k.GetDaemonSetDetails) // 获取DaemonSet详情 - k8sGroup.GET("/daemonset/:cluster_id/:namespace/:name/detail/yaml", k.GetDaemonSetYaml) // 获取DaemonSet YAML - k8sGroup.POST("/daemonset/:cluster_id/create", k.CreateDaemonSet) // 创建DaemonSet - k8sGroup.POST("/daemonset/:cluster_id/create/yaml", k.CreateDaemonSetByYaml) // 通过YAML创建DaemonSet - k8sGroup.PUT("/daemonset/:cluster_id/:namespace/:name/update", k.UpdateDaemonSet) // 更新DaemonSet - k8sGroup.PUT("/daemonset/:cluster_id/:namespace/:name/update/yaml", k.UpdateDaemonSetByYaml) // 通过YAML更新DaemonSet - k8sGroup.DELETE("/daemonset/:cluster_id/:namespace/:name/delete", k.DeleteDaemonSet) // 删除DaemonSet - k8sGroup.POST("/daemonset/:cluster_id/:namespace/:name/restart", k.RestartDaemonSet) // 重启DaemonSet - k8sGroup.POST("/daemonset/:cluster_id/:namespace/:name/rollback", k.RollbackDaemonSet) // 回滚DaemonSet - k8sGroup.GET("/daemonset/:cluster_id/:namespace/:name/pods", k.GetDaemonSetPods) // 获取DaemonSet Pod列表 - k8sGroup.GET("/daemonset/:cluster_id/:namespace/:name/history", k.GetDaemonSetHistory) // 获取DaemonSet版本历史 + k8sGroup.GET("/daemonset/:cluster_id/list", h.GetDaemonSetList) // 获取DaemonSet列表 + k8sGroup.GET("/daemonset/:cluster_id/:namespace/:name/detail", h.GetDaemonSetDetails) // 获取DaemonSet详情 + k8sGroup.GET("/daemonset/:cluster_id/:namespace/:name/detail/yaml", h.GetDaemonSetYaml) // 获取DaemonSet YAML + k8sGroup.POST("/daemonset/:cluster_id/create", h.CreateDaemonSet) // 创建DaemonSet + k8sGroup.POST("/daemonset/:cluster_id/create/yaml", h.CreateDaemonSetByYaml) // 通过YAML创建DaemonSet + k8sGroup.PUT("/daemonset/:cluster_id/:namespace/:name/update", h.UpdateDaemonSet) // 更新DaemonSet + k8sGroup.PUT("/daemonset/:cluster_id/:namespace/:name/update/yaml", h.UpdateDaemonSetByYaml) // 通过YAML更新DaemonSet + k8sGroup.DELETE("/daemonset/:cluster_id/:namespace/:name/delete", h.DeleteDaemonSet) // 删除DaemonSet + k8sGroup.POST("/daemonset/:cluster_id/:namespace/:name/restart", h.RestartDaemonSet) // 重启DaemonSet + k8sGroup.POST("/daemonset/:cluster_id/:namespace/:name/rollback", h.RollbackDaemonSet) // 回滚DaemonSet + k8sGroup.GET("/daemonset/:cluster_id/:namespace/:name/pods", h.GetDaemonSetPods) // 获取DaemonSet Pod列表 + k8sGroup.GET("/daemonset/:cluster_id/:namespace/:name/history", h.GetDaemonSetHistory) // 获取DaemonSet版本历史 } } // GetDaemonSetList 获取DaemonSet列表 -func (k *K8sDaemonSetHandler) GetDaemonSetList(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) GetDaemonSetList(ctx *gin.Context) { var req model.GetDaemonSetListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -74,12 +74,12 @@ func (k *K8sDaemonSetHandler) GetDaemonSetList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.daemonSetService.GetDaemonSetList(ctx, &req) + return h.daemonSetService.GetDaemonSetList(ctx, &req) }) } // GetDaemonSetDetails 获取DaemonSet详情 -func (k *K8sDaemonSetHandler) GetDaemonSetDetails(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) GetDaemonSetDetails(ctx *gin.Context) { var req model.GetDaemonSetDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -105,12 +105,12 @@ func (k *K8sDaemonSetHandler) GetDaemonSetDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.daemonSetService.GetDaemonSetDetails(ctx, &req) + return h.daemonSetService.GetDaemonSetDetails(ctx, &req) }) } // GetDaemonSetYaml 获取DaemonSet YAML -func (k *K8sDaemonSetHandler) GetDaemonSetYaml(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) GetDaemonSetYaml(ctx *gin.Context) { var req model.GetDaemonSetYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -136,12 +136,12 @@ func (k *K8sDaemonSetHandler) GetDaemonSetYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.daemonSetService.GetDaemonSetYaml(ctx, &req) + return h.daemonSetService.GetDaemonSetYaml(ctx, &req) }) } // CreateDaemonSet 创建DaemonSet -func (k *K8sDaemonSetHandler) CreateDaemonSet(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) CreateDaemonSet(ctx *gin.Context) { var req model.CreateDaemonSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -153,12 +153,12 @@ func (k *K8sDaemonSetHandler) CreateDaemonSet(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.daemonSetService.CreateDaemonSet(ctx, &req) + return nil, h.daemonSetService.CreateDaemonSet(ctx, &req) }) } // CreateDaemonSetByYaml 通过YAML创建DaemonSet -func (k *K8sDaemonSetHandler) CreateDaemonSetByYaml(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) CreateDaemonSetByYaml(ctx *gin.Context) { var req model.CreateDaemonSetByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -170,12 +170,12 @@ func (k *K8sDaemonSetHandler) CreateDaemonSetByYaml(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.daemonSetService.CreateDaemonSetByYaml(ctx, &req) + return nil, h.daemonSetService.CreateDaemonSetByYaml(ctx, &req) }) } // UpdateDaemonSet 更新DaemonSet -func (k *K8sDaemonSetHandler) UpdateDaemonSet(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) UpdateDaemonSet(ctx *gin.Context) { var req model.UpdateDaemonSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -201,12 +201,12 @@ func (k *K8sDaemonSetHandler) UpdateDaemonSet(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.daemonSetService.UpdateDaemonSet(ctx, &req) + return nil, h.daemonSetService.UpdateDaemonSet(ctx, &req) }) } // UpdateDaemonSetByYaml 通过YAML更新DaemonSet -func (k *K8sDaemonSetHandler) UpdateDaemonSetByYaml(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) UpdateDaemonSetByYaml(ctx *gin.Context) { var req model.UpdateDaemonSetByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -232,12 +232,12 @@ func (k *K8sDaemonSetHandler) UpdateDaemonSetByYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.daemonSetService.UpdateDaemonSetByYaml(ctx, &req) + return nil, h.daemonSetService.UpdateDaemonSetByYaml(ctx, &req) }) } // DeleteDaemonSet 删除DaemonSet -func (k *K8sDaemonSetHandler) DeleteDaemonSet(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) DeleteDaemonSet(ctx *gin.Context) { var req model.DeleteDaemonSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -263,12 +263,12 @@ func (k *K8sDaemonSetHandler) DeleteDaemonSet(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.daemonSetService.DeleteDaemonSet(ctx, &req) + return nil, h.daemonSetService.DeleteDaemonSet(ctx, &req) }) } // RestartDaemonSet 重启DaemonSet -func (k *K8sDaemonSetHandler) RestartDaemonSet(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) RestartDaemonSet(ctx *gin.Context) { var req model.RestartDaemonSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -294,12 +294,12 @@ func (k *K8sDaemonSetHandler) RestartDaemonSet(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.daemonSetService.RestartDaemonSet(ctx, &req) + return nil, h.daemonSetService.RestartDaemonSet(ctx, &req) }) } // GetDaemonSetPods 获取DaemonSet下的Pod列表 -func (k *K8sDaemonSetHandler) GetDaemonSetPods(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) GetDaemonSetPods(ctx *gin.Context) { var req model.GetDaemonSetPodsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -325,12 +325,12 @@ func (k *K8sDaemonSetHandler) GetDaemonSetPods(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.daemonSetService.GetDaemonSetPods(ctx, &req) + return h.daemonSetService.GetDaemonSetPods(ctx, &req) }) } // GetDaemonSetHistory 获取DaemonSet历史 -func (k *K8sDaemonSetHandler) GetDaemonSetHistory(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) GetDaemonSetHistory(ctx *gin.Context) { var req model.GetDaemonSetHistoryReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -356,12 +356,12 @@ func (k *K8sDaemonSetHandler) GetDaemonSetHistory(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.daemonSetService.GetDaemonSetHistory(ctx, &req) + return h.daemonSetService.GetDaemonSetHistory(ctx, &req) }) } // RollbackDaemonSet 回滚DaemonSet -func (k *K8sDaemonSetHandler) RollbackDaemonSet(ctx *gin.Context) { +func (h *K8sDaemonSetHandler) RollbackDaemonSet(ctx *gin.Context) { var req model.RollbackDaemonSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -387,6 +387,6 @@ func (k *K8sDaemonSetHandler) RollbackDaemonSet(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.daemonSetService.RollbackDaemonSet(ctx, &req) + return nil, h.daemonSetService.RollbackDaemonSet(ctx, &req) }) } diff --git a/internal/k8s/api/deployment.go b/internal/k8s/api/deployment.go index cb7c2122..d500829b 100644 --- a/internal/k8s/api/deployment.go +++ b/internal/k8s/api/deployment.go @@ -42,30 +42,30 @@ func NewK8sDeploymentHandler(deploymentService service.DeploymentService) *K8sDe } } -func (k *K8sDeploymentHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sDeploymentHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { // Deployment基础管理 - k8sGroup.GET("/deployment/:cluster_id/list", k.GetDeploymentList) // 获取Deployment列表 - k8sGroup.GET("/deployment/:cluster_id/:namespace/:name/detail", k.GetDeploymentDetails) // 获取Deployment详情 - k8sGroup.GET("/deployment/:cluster_id/:namespace/:name/detail/yaml", k.GetDeploymentYaml) // 获取Deployment YAML - k8sGroup.POST("/deployment/:cluster_id/create", k.CreateDeployment) // 创建Deployment - k8sGroup.POST("/deployment/:cluster_id/create/yaml", k.CreateDeploymentByYaml) // 通过YAML创建Deployment - k8sGroup.PUT("/deployment/:cluster_id/:namespace/:name/update", k.UpdateDeployment) // 更新Deployment - k8sGroup.PUT("/deployment/:cluster_id/:namespace/:name/update/yaml", k.UpdateDeploymentByYaml) // 通过YAML更新Deployment - k8sGroup.DELETE("/deployment/:cluster_id/:namespace/:name/delete", k.DeleteDeployment) // 删除Deployment - k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/restart", k.RestartDeployment) // 重启Deployment - k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/scale", k.ScaleDeployment) // 扩缩容Deployment - k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/pause", k.PauseDeployment) // 暂停Deployment - k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/resume", k.ResumeDeployment) // 恢复Deployment - k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/rollback", k.RollbackDeployment) // 回滚Deployment - k8sGroup.GET("/deployment/:cluster_id/:namespace/:name/pods", k.GetDeploymentPods) // 获取Deployment Pod列表 - k8sGroup.GET("/deployment/:cluster_id/:namespace/:name/history", k.GetDeploymentHistory) // 获取Deployment版本历史 + k8sGroup.GET("/deployment/:cluster_id/list", h.GetDeploymentList) // 获取Deployment列表 + k8sGroup.GET("/deployment/:cluster_id/:namespace/:name/detail", h.GetDeploymentDetails) // 获取Deployment详情 + k8sGroup.GET("/deployment/:cluster_id/:namespace/:name/detail/yaml", h.GetDeploymentYaml) // 获取Deployment YAML + k8sGroup.POST("/deployment/:cluster_id/create", h.CreateDeployment) // 创建Deployment + k8sGroup.POST("/deployment/:cluster_id/create/yaml", h.CreateDeploymentByYaml) // 通过YAML创建Deployment + k8sGroup.PUT("/deployment/:cluster_id/:namespace/:name/update", h.UpdateDeployment) // 更新Deployment + k8sGroup.PUT("/deployment/:cluster_id/:namespace/:name/update/yaml", h.UpdateDeploymentByYaml) // 通过YAML更新Deployment + k8sGroup.DELETE("/deployment/:cluster_id/:namespace/:name/delete", h.DeleteDeployment) // 删除Deployment + k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/restart", h.RestartDeployment) // 重启Deployment + k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/scale", h.ScaleDeployment) // 扩缩容Deployment + k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/pause", h.PauseDeployment) // 暂停Deployment + k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/resume", h.ResumeDeployment) // 恢复Deployment + k8sGroup.POST("/deployment/:cluster_id/:namespace/:name/rollback", h.RollbackDeployment) // 回滚Deployment + k8sGroup.GET("/deployment/:cluster_id/:namespace/:name/pods", h.GetDeploymentPods) // 获取Deployment Pod列表 + k8sGroup.GET("/deployment/:cluster_id/:namespace/:name/history", h.GetDeploymentHistory) // 获取Deployment版本历史 } } // GetDeploymentList 获取Deployment列表 -func (k *K8sDeploymentHandler) GetDeploymentList(ctx *gin.Context) { +func (h *K8sDeploymentHandler) GetDeploymentList(ctx *gin.Context) { var req model.GetDeploymentListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -77,12 +77,12 @@ func (k *K8sDeploymentHandler) GetDeploymentList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.deploymentService.GetDeploymentList(ctx, &req) + return h.deploymentService.GetDeploymentList(ctx, &req) }) } // GetDeploymentDetails 获取Deployment详情 -func (k *K8sDeploymentHandler) GetDeploymentDetails(ctx *gin.Context) { +func (h *K8sDeploymentHandler) GetDeploymentDetails(ctx *gin.Context) { var req model.GetDeploymentDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -108,12 +108,12 @@ func (k *K8sDeploymentHandler) GetDeploymentDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.deploymentService.GetDeploymentDetails(ctx, &req) + return h.deploymentService.GetDeploymentDetails(ctx, &req) }) } // GetDeploymentYaml 获取Deployment YAML -func (k *K8sDeploymentHandler) GetDeploymentYaml(ctx *gin.Context) { +func (h *K8sDeploymentHandler) GetDeploymentYaml(ctx *gin.Context) { var req model.GetDeploymentYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -139,12 +139,12 @@ func (k *K8sDeploymentHandler) GetDeploymentYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.deploymentService.GetDeploymentYaml(ctx, &req) + return h.deploymentService.GetDeploymentYaml(ctx, &req) }) } // CreateDeployment 创建Deployment -func (k *K8sDeploymentHandler) CreateDeployment(ctx *gin.Context) { +func (h *K8sDeploymentHandler) CreateDeployment(ctx *gin.Context) { var req model.CreateDeploymentReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -156,12 +156,12 @@ func (k *K8sDeploymentHandler) CreateDeployment(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.CreateDeployment(ctx, &req) + return nil, h.deploymentService.CreateDeployment(ctx, &req) }) } // UpdateDeployment 更新Deployment -func (k *K8sDeploymentHandler) UpdateDeployment(ctx *gin.Context) { +func (h *K8sDeploymentHandler) UpdateDeployment(ctx *gin.Context) { var req model.UpdateDeploymentReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -187,11 +187,12 @@ func (k *K8sDeploymentHandler) UpdateDeployment(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.UpdateDeployment(ctx, &req) + return nil, h.deploymentService.UpdateDeployment(ctx, &req) }) } -func (k *K8sDeploymentHandler) DeleteDeployment(ctx *gin.Context) { +// DeleteDeployment 删除Deployment +func (h *K8sDeploymentHandler) DeleteDeployment(ctx *gin.Context) { var req model.DeleteDeploymentReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -217,11 +218,12 @@ func (k *K8sDeploymentHandler) DeleteDeployment(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.DeleteDeployment(ctx, &req) + return nil, h.deploymentService.DeleteDeployment(ctx, &req) }) } -func (k *K8sDeploymentHandler) RestartDeployment(ctx *gin.Context) { +// RestartDeployment 重启Deployment +func (h *K8sDeploymentHandler) RestartDeployment(ctx *gin.Context) { var req model.RestartDeploymentReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -247,11 +249,12 @@ func (k *K8sDeploymentHandler) RestartDeployment(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.RestartDeployment(ctx, &req) + return nil, h.deploymentService.RestartDeployment(ctx, &req) }) } -func (k *K8sDeploymentHandler) ScaleDeployment(ctx *gin.Context) { +// ScaleDeployment 伸缩Deployment +func (h *K8sDeploymentHandler) ScaleDeployment(ctx *gin.Context) { var req model.ScaleDeploymentReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -277,11 +280,12 @@ func (k *K8sDeploymentHandler) ScaleDeployment(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.ScaleDeployment(ctx, &req) + return nil, h.deploymentService.ScaleDeployment(ctx, &req) }) } -func (k *K8sDeploymentHandler) GetDeploymentPods(ctx *gin.Context) { +// GetDeploymentPods 获取Deployment的Pod列表 +func (h *K8sDeploymentHandler) GetDeploymentPods(ctx *gin.Context) { var req model.GetDeploymentPodsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -307,11 +311,12 @@ func (k *K8sDeploymentHandler) GetDeploymentPods(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.deploymentService.GetDeploymentPods(ctx, &req) + return h.deploymentService.GetDeploymentPods(ctx, &req) }) } -func (k *K8sDeploymentHandler) GetDeploymentHistory(ctx *gin.Context) { +// GetDeploymentHistory 获取Deployment版本历史 +func (h *K8sDeploymentHandler) GetDeploymentHistory(ctx *gin.Context) { var req model.GetDeploymentHistoryReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -337,11 +342,12 @@ func (k *K8sDeploymentHandler) GetDeploymentHistory(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.deploymentService.GetDeploymentHistory(ctx, &req) + return h.deploymentService.GetDeploymentHistory(ctx, &req) }) } -func (k *K8sDeploymentHandler) RollbackDeployment(ctx *gin.Context) { +// RollbackDeployment 回滚Deployment +func (h *K8sDeploymentHandler) RollbackDeployment(ctx *gin.Context) { var req model.RollbackDeploymentReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -367,11 +373,12 @@ func (k *K8sDeploymentHandler) RollbackDeployment(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.RollbackDeployment(ctx, &req) + return nil, h.deploymentService.RollbackDeployment(ctx, &req) }) } -func (k *K8sDeploymentHandler) PauseDeployment(ctx *gin.Context) { +// PauseDeployment 暂停Deployment +func (h *K8sDeploymentHandler) PauseDeployment(ctx *gin.Context) { var req model.PauseDeploymentReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -397,11 +404,12 @@ func (k *K8sDeploymentHandler) PauseDeployment(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.PauseDeployment(ctx, &req) + return nil, h.deploymentService.PauseDeployment(ctx, &req) }) } -func (k *K8sDeploymentHandler) ResumeDeployment(ctx *gin.Context) { +// ResumeDeployment 恢复Deployment +func (h *K8sDeploymentHandler) ResumeDeployment(ctx *gin.Context) { var req model.ResumeDeploymentReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -427,23 +435,23 @@ func (k *K8sDeploymentHandler) ResumeDeployment(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.ResumeDeployment(ctx, &req) + return nil, h.deploymentService.ResumeDeployment(ctx, &req) }) } // YAML操作方法 // CreateDeploymentByYaml 通过YAML创建deployment -func (k *K8sDeploymentHandler) CreateDeploymentByYaml(ctx *gin.Context) { +func (h *K8sDeploymentHandler) CreateDeploymentByYaml(ctx *gin.Context) { var req model.CreateDeploymentByYamlReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.CreateDeploymentByYaml(ctx, &req) + return nil, h.deploymentService.CreateDeploymentByYaml(ctx, &req) }) } // UpdateDeploymentByYaml 通过YAML更新deployment -func (k *K8sDeploymentHandler) UpdateDeploymentByYaml(ctx *gin.Context) { +func (h *K8sDeploymentHandler) UpdateDeploymentByYaml(ctx *gin.Context) { var req model.UpdateDeploymentByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -469,6 +477,6 @@ func (k *K8sDeploymentHandler) UpdateDeploymentByYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.deploymentService.UpdateDeploymentByYaml(ctx, &req) + return nil, h.deploymentService.UpdateDeploymentByYaml(ctx, &req) }) } diff --git a/internal/k8s/api/event.go b/internal/k8s/api/event.go index 10a37402..892d6ca2 100644 --- a/internal/k8s/api/event.go +++ b/internal/k8s/api/event.go @@ -42,28 +42,28 @@ func NewK8sEventHandler(eventService service.EventService) *K8sEventHandler { } } -func (k *K8sEventHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sEventHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { // Event基础管理 - k8sGroup.GET("/clusters/:cluster_id/events", k.GetEventList) // 获取事件列表 - k8sGroup.GET("/clusters/:cluster_id/events/:namespace/:name", k.GetEventDetail) // 获取单个事件详情 - k8sGroup.DELETE("/clusters/:cluster_id/events/:namespace/:name", k.DeleteEvent) // 删除单个事件 - k8sGroup.GET("/clusters/:cluster_id/events/:namespace/pods/:pod_name", k.GetEventsByPod) // 获取Pod相关事件 - k8sGroup.GET("/clusters/:cluster_id/events/:namespace/deployments/:deployment_name", k.GetEventsByDeployment) // 获取Deployment相关事件 - k8sGroup.GET("/clusters/:cluster_id/events/:namespace/services/:service_name", k.GetEventsByService) // 获取Service相关事件 - k8sGroup.GET("/clusters/:cluster_id/events/nodes/:node_name", k.GetEventsByNode) // 获取Node相关事件 - k8sGroup.GET("/clusters/:cluster_id/events/statistics", k.GetEventStatistics) // 获取事件统计信息 - k8sGroup.GET("/clusters/:cluster_id/events/summary", k.GetEventSummary) // 获取事件汇总 - k8sGroup.GET("/clusters/:cluster_id/events/timeline", k.GetEventTimeline) // 获取事件时间线 - k8sGroup.GET("/clusters/:cluster_id/events/trends", k.GetEventTrends) // 获取事件趋势 - k8sGroup.GET("/clusters/:cluster_id/events/groups", k.GetEventGroupData) // 获取事件分组数据 - k8sGroup.POST("/clusters/:cluster_id/events/cleanup", k.CleanupOldEvents) // 清理旧事件 + k8sGroup.GET("/clusters/:cluster_id/events", h.GetEventList) // 获取事件列表 + k8sGroup.GET("/clusters/:cluster_id/events/:namespace/:name", h.GetEventDetail) // 获取单个事件详情 + k8sGroup.DELETE("/clusters/:cluster_id/events/:namespace/:name", h.DeleteEvent) // 删除单个事件 + k8sGroup.GET("/clusters/:cluster_id/events/:namespace/pods/:pod_name", h.GetEventsByPod) // 获取Pod相关事件 + k8sGroup.GET("/clusters/:cluster_id/events/:namespace/deployments/:deployment_name", h.GetEventsByDeployment) // 获取Deployment相关事件 + k8sGroup.GET("/clusters/:cluster_id/events/:namespace/services/:service_name", h.GetEventsByService) // 获取Service相关事件 + k8sGroup.GET("/clusters/:cluster_id/events/nodes/:node_name", h.GetEventsByNode) // 获取Node相关事件 + k8sGroup.GET("/clusters/:cluster_id/events/statistics", h.GetEventStatistics) // 获取事件统计信息 + k8sGroup.GET("/clusters/:cluster_id/events/summary", h.GetEventSummary) // 获取事件汇总 + k8sGroup.GET("/clusters/:cluster_id/events/timeline", h.GetEventTimeline) // 获取事件时间线 + k8sGroup.GET("/clusters/:cluster_id/events/trends", h.GetEventTrends) // 获取事件趋势 + k8sGroup.GET("/clusters/:cluster_id/events/groups", h.GetEventGroupData) // 获取事件分组数据 + k8sGroup.POST("/clusters/:cluster_id/events/cleanup", h.CleanupOldEvents) // 清理旧事件 } } // GetEventList 获取Event列表 -func (k *K8sEventHandler) GetEventList(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventList(ctx *gin.Context) { var req model.GetEventListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -75,12 +75,12 @@ func (k *K8sEventHandler) GetEventList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventList(ctx, &req) + return h.eventService.GetEventList(ctx, &req) }) } // GetEventDetail 获取Event详情 -func (k *K8sEventHandler) GetEventDetail(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventDetail(ctx *gin.Context) { var req model.GetEventDetailReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -106,12 +106,12 @@ func (k *K8sEventHandler) GetEventDetail(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEvent(ctx, &req) + return h.eventService.GetEvent(ctx, &req) }) } // GetEventsByPod 获取Pod相关事件 -func (k *K8sEventHandler) GetEventsByPod(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventsByPod(ctx *gin.Context) { var req model.GetEventsByPodReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -137,12 +137,12 @@ func (k *K8sEventHandler) GetEventsByPod(ctx *gin.Context) { req.PodName = podName utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventsByPod(ctx, &req) + return h.eventService.GetEventsByPod(ctx, &req) }) } // GetEventsByDeployment 获取Deployment相关事件 -func (k *K8sEventHandler) GetEventsByDeployment(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventsByDeployment(ctx *gin.Context) { var req model.GetEventsByDeploymentReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -168,12 +168,12 @@ func (k *K8sEventHandler) GetEventsByDeployment(ctx *gin.Context) { req.DeploymentName = deploymentName utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventsByDeployment(ctx, &req) + return h.eventService.GetEventsByDeployment(ctx, &req) }) } // GetEventsByService 获取Service相关事件 -func (k *K8sEventHandler) GetEventsByService(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventsByService(ctx *gin.Context) { var req model.GetEventsByServiceReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -199,12 +199,12 @@ func (k *K8sEventHandler) GetEventsByService(ctx *gin.Context) { req.ServiceName = serviceName utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventsByService(ctx, &req) + return h.eventService.GetEventsByService(ctx, &req) }) } // GetEventsByNode 获取Node相关事件 -func (k *K8sEventHandler) GetEventsByNode(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventsByNode(ctx *gin.Context) { var req model.GetEventsByNodeReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -223,57 +223,57 @@ func (k *K8sEventHandler) GetEventsByNode(ctx *gin.Context) { req.NodeName = nodeName utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventsByNode(ctx, &req) + return h.eventService.GetEventsByNode(ctx, &req) }) } // GetEventStatistics 获取事件统计 -func (k *K8sEventHandler) GetEventStatistics(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventStatistics(ctx *gin.Context) { var req model.GetEventStatisticsReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventStatistics(ctx, &req) + return h.eventService.GetEventStatistics(ctx, &req) }) } // GetEventSummary 获取事件汇总 -func (k *K8sEventHandler) GetEventSummary(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventSummary(ctx *gin.Context) { var req model.GetEventSummaryReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventSummary(ctx, &req) + return h.eventService.GetEventSummary(ctx, &req) }) } // GetEventTimeline 获取事件时间线 -func (k *K8sEventHandler) GetEventTimeline(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventTimeline(ctx *gin.Context) { var req model.GetEventTimelineReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventTimeline(ctx, &req) + return h.eventService.GetEventTimeline(ctx, &req) }) } // GetEventTrends 获取事件趋势 -func (k *K8sEventHandler) GetEventTrends(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventTrends(ctx *gin.Context) { var req model.GetEventTrendsReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventTrends(ctx, &req) + return h.eventService.GetEventTrends(ctx, &req) }) } // GetEventGroupData 获取事件分组数据 -func (k *K8sEventHandler) GetEventGroupData(ctx *gin.Context) { +func (h *K8sEventHandler) GetEventGroupData(ctx *gin.Context) { var req model.GetEventGroupDataReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.eventService.GetEventGroupData(ctx, &req) + return h.eventService.GetEventGroupData(ctx, &req) }) } // DeleteEvent 删除单个事件 -func (k *K8sEventHandler) DeleteEvent(ctx *gin.Context) { +func (h *K8sEventHandler) DeleteEvent(ctx *gin.Context) { var req model.DeleteEventReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -299,15 +299,15 @@ func (k *K8sEventHandler) DeleteEvent(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.eventService.DeleteEvent(ctx, &req) + return nil, h.eventService.DeleteEvent(ctx, &req) }) } // CleanupOldEvents 清理旧事件 -func (k *K8sEventHandler) CleanupOldEvents(ctx *gin.Context) { +func (h *K8sEventHandler) CleanupOldEvents(ctx *gin.Context) { var req model.CleanupOldEventsReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.eventService.CleanupOldEvents(ctx, &req) + return nil, h.eventService.CleanupOldEvents(ctx, &req) }) } diff --git a/internal/k8s/api/ingress.go b/internal/k8s/api/ingress.go index d74d9e71..bdc1898d 100644 --- a/internal/k8s/api/ingress.go +++ b/internal/k8s/api/ingress.go @@ -42,23 +42,23 @@ func NewK8sIngressHandler(ingressService service.IngressService) *K8sIngressHand } } -func (k *K8sIngressHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sIngressHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { // Ingress基础管理 - k8sGroup.GET("/ingress/:cluster_id/list", k.GetIngressList) // 获取Ingress列表 - k8sGroup.GET("/ingress/:cluster_id/:namespace/:name/detail", k.GetIngressDetails) // 获取Ingress详情 - k8sGroup.GET("/ingress/:cluster_id/:namespace/:name/detail/yaml", k.GetIngressYaml) // 获取Ingress YAML - k8sGroup.POST("/ingress/:cluster_id/create", k.CreateIngress) // 创建Ingress - k8sGroup.POST("/ingress/:cluster_id/create/yaml", k.CreateIngressByYaml) // 通过YAML创建Ingress - k8sGroup.PUT("/ingress/:cluster_id/:namespace/:name/update", k.UpdateIngress) // 更新Ingress - k8sGroup.PUT("/ingress/:cluster_id/:namespace/:name/update/yaml", k.UpdateIngressByYaml) // 通过YAML更新Ingress - k8sGroup.DELETE("/ingress/:cluster_id/:namespace/:name/delete", k.DeleteIngress) // 删除Ingress + k8sGroup.GET("/ingress/:cluster_id/list", h.GetIngressList) // 获取Ingress列表 + k8sGroup.GET("/ingress/:cluster_id/:namespace/:name/detail", h.GetIngressDetails) // 获取Ingress详情 + k8sGroup.GET("/ingress/:cluster_id/:namespace/:name/detail/yaml", h.GetIngressYaml) // 获取Ingress YAML + k8sGroup.POST("/ingress/:cluster_id/create", h.CreateIngress) // 创建Ingress + k8sGroup.POST("/ingress/:cluster_id/create/yaml", h.CreateIngressByYaml) // 通过YAML创建Ingress + k8sGroup.PUT("/ingress/:cluster_id/:namespace/:name/update", h.UpdateIngress) // 更新Ingress + k8sGroup.PUT("/ingress/:cluster_id/:namespace/:name/update/yaml", h.UpdateIngressByYaml) // 通过YAML更新Ingress + k8sGroup.DELETE("/ingress/:cluster_id/:namespace/:name/delete", h.DeleteIngress) // 删除Ingress } } // GetIngressList 获取Ingress列表 -func (k *K8sIngressHandler) GetIngressList(ctx *gin.Context) { +func (h *K8sIngressHandler) GetIngressList(ctx *gin.Context) { var req model.GetIngressListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -70,12 +70,12 @@ func (k *K8sIngressHandler) GetIngressList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.ingressService.GetIngressList(ctx, &req) + return h.ingressService.GetIngressList(ctx, &req) }) } // GetIngressDetails 获取Ingress详情 -func (k *K8sIngressHandler) GetIngressDetails(ctx *gin.Context) { +func (h *K8sIngressHandler) GetIngressDetails(ctx *gin.Context) { var req model.GetIngressDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -101,12 +101,12 @@ func (k *K8sIngressHandler) GetIngressDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.ingressService.GetIngressDetails(ctx, &req) + return h.ingressService.GetIngressDetails(ctx, &req) }) } // GetIngressYaml 获取Ingress的YAML配置 -func (k *K8sIngressHandler) GetIngressYaml(ctx *gin.Context) { +func (h *K8sIngressHandler) GetIngressYaml(ctx *gin.Context) { var req model.GetIngressYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -132,12 +132,12 @@ func (k *K8sIngressHandler) GetIngressYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.ingressService.GetIngressYaml(ctx, &req) + return h.ingressService.GetIngressYaml(ctx, &req) }) } // CreateIngress 创建Ingress -func (k *K8sIngressHandler) CreateIngress(ctx *gin.Context) { +func (h *K8sIngressHandler) CreateIngress(ctx *gin.Context) { var req model.CreateIngressReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -149,12 +149,12 @@ func (k *K8sIngressHandler) CreateIngress(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.ingressService.CreateIngress(ctx, &req) + return nil, h.ingressService.CreateIngress(ctx, &req) }) } // CreateIngressByYaml 通过YAML创建Ingress -func (k *K8sIngressHandler) CreateIngressByYaml(ctx *gin.Context) { +func (h *K8sIngressHandler) CreateIngressByYaml(ctx *gin.Context) { var req model.CreateIngressByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -166,12 +166,12 @@ func (k *K8sIngressHandler) CreateIngressByYaml(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.ingressService.CreateIngressByYaml(ctx, &req) + return nil, h.ingressService.CreateIngressByYaml(ctx, &req) }) } // UpdateIngress 更新Ingress -func (k *K8sIngressHandler) UpdateIngress(ctx *gin.Context) { +func (h *K8sIngressHandler) UpdateIngress(ctx *gin.Context) { var req model.UpdateIngressReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -197,12 +197,12 @@ func (k *K8sIngressHandler) UpdateIngress(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.ingressService.UpdateIngress(ctx, &req) + return nil, h.ingressService.UpdateIngress(ctx, &req) }) } // UpdateIngressByYaml 通过YAML更新Ingress -func (k *K8sIngressHandler) UpdateIngressByYaml(ctx *gin.Context) { +func (h *K8sIngressHandler) UpdateIngressByYaml(ctx *gin.Context) { var req model.UpdateIngressByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -228,12 +228,12 @@ func (k *K8sIngressHandler) UpdateIngressByYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.ingressService.UpdateIngressByYaml(ctx, &req) + return nil, h.ingressService.UpdateIngressByYaml(ctx, &req) }) } // DeleteIngress 删除Ingress -func (k *K8sIngressHandler) DeleteIngress(ctx *gin.Context) { +func (h *K8sIngressHandler) DeleteIngress(ctx *gin.Context) { var req model.DeleteIngressReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -259,6 +259,6 @@ func (k *K8sIngressHandler) DeleteIngress(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.ingressService.DeleteIngress(ctx, &req) + return nil, h.ingressService.DeleteIngress(ctx, &req) }) } diff --git a/internal/k8s/api/namespace.go b/internal/k8s/api/namespace.go index 3504aac7..e885775f 100644 --- a/internal/k8s/api/namespace.go +++ b/internal/k8s/api/namespace.go @@ -42,20 +42,20 @@ func NewK8sNamespaceHandler(namespaceService service.NamespaceService) *K8sNames } } -func (k *K8sNamespaceHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sNamespaceHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { // Namespace基础管理 - k8sGroup.GET("/clusters/:cluster_id/namespace/list", k.ListNamespaces) // 获取Namespace列表 - k8sGroup.GET("/clusters/:cluster_id/namespace/:name/detail", k.GetNamespaceDetails) // 获取Namespace详情 - k8sGroup.POST("/clusters/:cluster_id/namespace/create", k.CreateNamespace) // 创建Namespace - k8sGroup.PUT("/clusters/:cluster_id/namespace/:name/update", k.UpdateNamespace) // 更新Namespace - k8sGroup.DELETE("/clusters/:cluster_id/namespace/:name/delete", k.DeleteNamespace) // 删除Namespace + k8sGroup.GET("/clusters/:cluster_id/namespace/list", h.ListNamespaces) // 获取Namespace列表 + k8sGroup.GET("/clusters/:cluster_id/namespace/:name/detail", h.GetNamespaceDetails) // 获取Namespace详情 + k8sGroup.POST("/clusters/:cluster_id/namespace/create", h.CreateNamespace) // 创建Namespace + k8sGroup.PUT("/clusters/:cluster_id/namespace/:name/update", h.UpdateNamespace) // 更新Namespace + k8sGroup.DELETE("/clusters/:cluster_id/namespace/:name/delete", h.DeleteNamespace) // 删除Namespace } } // CreateNamespace 创建Namespace -func (k *K8sNamespaceHandler) CreateNamespace(ctx *gin.Context) { +func (h *K8sNamespaceHandler) CreateNamespace(ctx *gin.Context) { var req model.K8sNamespaceCreateReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -67,12 +67,12 @@ func (k *K8sNamespaceHandler) CreateNamespace(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.namespaceService.CreateNamespace(ctx, &req) + return nil, h.namespaceService.CreateNamespace(ctx, &req) }) } // DeleteNamespace 删除Namespace -func (k *K8sNamespaceHandler) DeleteNamespace(ctx *gin.Context) { +func (h *K8sNamespaceHandler) DeleteNamespace(ctx *gin.Context) { var req model.K8sNamespaceDeleteReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -90,13 +90,13 @@ func (k *K8sNamespaceHandler) DeleteNamespace(ctx *gin.Context) { req.ClusterID = clusterID req.Name = name - utils.HandleRequest(ctx, nil, func() (interface{}, error) { - return nil, k.namespaceService.DeleteNamespace(ctx, &req) + utils.HandleRequest(ctx, &req, func() (interface{}, error) { + return nil, h.namespaceService.DeleteNamespace(ctx, &req) }) } // GetNamespaceDetails 获取Namespace详情 -func (k *K8sNamespaceHandler) GetNamespaceDetails(ctx *gin.Context) { +func (h *K8sNamespaceHandler) GetNamespaceDetails(ctx *gin.Context) { var req model.K8sNamespaceGetDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -115,12 +115,12 @@ func (k *K8sNamespaceHandler) GetNamespaceDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.namespaceService.GetNamespaceDetails(ctx, &req) + return h.namespaceService.GetNamespaceDetails(ctx, &req) }) } // UpdateNamespace 更新Namespace -func (k *K8sNamespaceHandler) UpdateNamespace(ctx *gin.Context) { +func (h *K8sNamespaceHandler) UpdateNamespace(ctx *gin.Context) { var req model.K8sNamespaceUpdateReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -139,12 +139,12 @@ func (k *K8sNamespaceHandler) UpdateNamespace(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.namespaceService.UpdateNamespace(ctx, &req) + return nil, h.namespaceService.UpdateNamespace(ctx, &req) }) } // ListNamespaces 获取Namespace列表 -func (k *K8sNamespaceHandler) ListNamespaces(ctx *gin.Context) { +func (h *K8sNamespaceHandler) ListNamespaces(ctx *gin.Context) { var req model.K8sNamespaceListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -156,6 +156,6 @@ func (k *K8sNamespaceHandler) ListNamespaces(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.namespaceService.ListNamespaces(ctx, &req) + return h.namespaceService.ListNamespaces(ctx, &req) }) } diff --git a/internal/k8s/api/pod.go b/internal/k8s/api/pod.go index e20543b9..7acd6a49 100644 --- a/internal/k8s/api/pod.go +++ b/internal/k8s/api/pod.go @@ -41,34 +41,33 @@ type K8sPodHandler struct { func NewK8sPodHandler(podService service.PodService) *K8sPodHandler { return &K8sPodHandler{ - podService: podService, } } -func (k *K8sPodHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sPodHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { // Pod相关接口 - k8sGroup.GET("/pod/:cluster_id/list", k.GetPodList) - k8sGroup.GET("/pod/:cluster_id/:namespace/:name/detail", k.GetPodDetails) - k8sGroup.GET("/pod/:cluster_id/:namespace/:name/detail/yaml", k.GetPodYaml) - k8sGroup.POST("/pod/:cluster_id/create", k.CreatePod) - k8sGroup.POST("/pod/:cluster_id/create/yaml", k.CreatePodByYaml) - k8sGroup.PUT("/pod/:cluster_id/:namespace/:name/update", k.UpdatePod) - k8sGroup.PUT("/pod/:cluster_id/:namespace/:name/update/yaml", k.UpdatePodByYaml) - k8sGroup.DELETE("/pod/:cluster_id/:namespace/:name/delete", k.DeletePod) - k8sGroup.GET("/pod/:cluster_id/:namespace/:name/containers", k.GetPodContainers) - k8sGroup.GET("/pod/:cluster_id/:namespace/:name/containers/:container/logs", k.GetPodLogs) - k8sGroup.GET("/pod/:cluster_id/:namespace/:name/containers/:container/exec", k.PodExec) - k8sGroup.POST("/pod/:cluster_id/:namespace/:name/port-forward", k.PodPortForward) - k8sGroup.POST("/pod/:cluster_id/:namespace/:name/containers/:container/files/upload", k.PodFileUpload) - k8sGroup.GET("/pod/:cluster_id/:namespace/:name/containers/:container/files/download", k.PodFileDownload) + k8sGroup.GET("/pod/:cluster_id/list", h.GetPodList) + k8sGroup.GET("/pod/:cluster_id/:namespace/:name/detail", h.GetPodDetails) + k8sGroup.GET("/pod/:cluster_id/:namespace/:name/detail/yaml", h.GetPodYaml) + k8sGroup.POST("/pod/:cluster_id/create", h.CreatePod) + k8sGroup.POST("/pod/:cluster_id/create/yaml", h.CreatePodByYaml) + k8sGroup.PUT("/pod/:cluster_id/:namespace/:name/update", h.UpdatePod) + k8sGroup.PUT("/pod/:cluster_id/:namespace/:name/update/yaml", h.UpdatePodByYaml) + k8sGroup.DELETE("/pod/:cluster_id/:namespace/:name/delete", h.DeletePod) + k8sGroup.GET("/pod/:cluster_id/:namespace/:name/containers", h.GetPodContainers) + k8sGroup.GET("/pod/:cluster_id/:namespace/:name/containers/:container/logs", h.GetPodLogs) + k8sGroup.GET("/pod/:cluster_id/:namespace/:name/containers/:container/exec", h.PodExec) + k8sGroup.POST("/pod/:cluster_id/:namespace/:name/port-forward", h.PodPortForward) + k8sGroup.POST("/pod/:cluster_id/:namespace/:name/containers/:container/files/upload", h.PodFileUpload) + k8sGroup.GET("/pod/:cluster_id/:namespace/:name/containers/:container/files/download", h.PodFileDownload) } } // GetPodDetails 获取Pod详情 -func (k *K8sPodHandler) GetPodDetails(ctx *gin.Context) { +func (h *K8sPodHandler) GetPodDetails(ctx *gin.Context) { var req model.GetPodDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -94,12 +93,12 @@ func (k *K8sPodHandler) GetPodDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.podService.GetPodDetails(ctx, &req) + return h.podService.GetPodDetails(ctx, &req) }) } // GetPodList 获取Pod列表 -func (k *K8sPodHandler) GetPodList(ctx *gin.Context) { +func (h *K8sPodHandler) GetPodList(ctx *gin.Context) { var req model.GetPodListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -111,12 +110,12 @@ func (k *K8sPodHandler) GetPodList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.podService.GetPodList(ctx, &req) + return h.podService.GetPodList(ctx, &req) }) } // GetPodContainers 获取Pod容器列表 -func (k *K8sPodHandler) GetPodContainers(ctx *gin.Context) { +func (h *K8sPodHandler) GetPodContainers(ctx *gin.Context) { var req model.GetPodContainersReq // 绑定路径参数 @@ -126,12 +125,12 @@ func (k *K8sPodHandler) GetPodContainers(ctx *gin.Context) { } utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.podService.GetPodContainers(ctx, &req) + return h.podService.GetPodContainers(ctx, &req) }) } // GetPodLogs 获取容器日志 -func (k *K8sPodHandler) GetPodLogs(ctx *gin.Context) { +func (h *K8sPodHandler) GetPodLogs(ctx *gin.Context) { var req model.GetPodLogsReq // 绑定路径参数 @@ -154,14 +153,14 @@ func (k *K8sPodHandler) GetPodLogs(ctx *gin.Context) { ctx.Header("Access-Control-Allow-Headers", "Cache-Control") // 调用service层进行流式推送 - if err := k.podService.GetPodLogs(ctx, &req); err != nil { + if err := h.podService.GetPodLogs(ctx, &req); err != nil { utils.BadRequestError(ctx, err.Error()) return } } // GetPodYaml 获取Pod的YAML配置 -func (k *K8sPodHandler) GetPodYaml(ctx *gin.Context) { +func (h *K8sPodHandler) GetPodYaml(ctx *gin.Context) { var req model.GetPodYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -187,12 +186,12 @@ func (k *K8sPodHandler) GetPodYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.podService.GetPodYaml(ctx, &req) + return h.podService.GetPodYaml(ctx, &req) }) } // CreatePod 创建Pod -func (k *K8sPodHandler) CreatePod(ctx *gin.Context) { +func (h *K8sPodHandler) CreatePod(ctx *gin.Context) { var req model.CreatePodReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -204,12 +203,12 @@ func (k *K8sPodHandler) CreatePod(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.podService.CreatePod(ctx, &req) + return nil, h.podService.CreatePod(ctx, &req) }) } // CreatePodByYaml 通过YAML创建Pod -func (k *K8sPodHandler) CreatePodByYaml(ctx *gin.Context) { +func (h *K8sPodHandler) CreatePodByYaml(ctx *gin.Context) { var req model.CreatePodByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -221,12 +220,12 @@ func (k *K8sPodHandler) CreatePodByYaml(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.podService.CreatePodByYaml(ctx, &req) + return nil, h.podService.CreatePodByYaml(ctx, &req) }) } // UpdatePod 更新Pod -func (k *K8sPodHandler) UpdatePod(ctx *gin.Context) { +func (h *K8sPodHandler) UpdatePod(ctx *gin.Context) { var req model.UpdatePodReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -252,12 +251,12 @@ func (k *K8sPodHandler) UpdatePod(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.podService.UpdatePod(ctx, &req) + return nil, h.podService.UpdatePod(ctx, &req) }) } // UpdatePodByYaml 通过YAML更新Pod -func (k *K8sPodHandler) UpdatePodByYaml(ctx *gin.Context) { +func (h *K8sPodHandler) UpdatePodByYaml(ctx *gin.Context) { var req model.UpdatePodByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -283,12 +282,12 @@ func (k *K8sPodHandler) UpdatePodByYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.podService.UpdatePodByYaml(ctx, &req) + return nil, h.podService.UpdatePodByYaml(ctx, &req) }) } // DeletePod 删除Pod -func (k *K8sPodHandler) DeletePod(ctx *gin.Context) { +func (h *K8sPodHandler) DeletePod(ctx *gin.Context) { var req model.DeletePodReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -314,12 +313,12 @@ func (k *K8sPodHandler) DeletePod(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.podService.DeletePod(ctx, &req) + return nil, h.podService.DeletePod(ctx, &req) }) } // PodExec Pod终端连接 -func (k *K8sPodHandler) PodExec(ctx *gin.Context) { +func (h *K8sPodHandler) PodExec(ctx *gin.Context) { var req model.PodExecReq // 获取路径参数 @@ -392,14 +391,14 @@ func (k *K8sPodHandler) PodExec(ctx *gin.Context) { req.Shell = shell // 建立WebSocket连接 - if err := k.podService.PodExec(ctx, &req); err != nil { + if err := h.podService.PodExec(ctx, &req); err != nil { utils.BadRequestError(ctx, "建立终端连接失败: "+err.Error()) return } } // PodPortForward Pod端口转发 -func (k *K8sPodHandler) PodPortForward(ctx *gin.Context) { +func (h *K8sPodHandler) PodPortForward(ctx *gin.Context) { var req model.PodPortForwardReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -425,12 +424,12 @@ func (k *K8sPodHandler) PodPortForward(ctx *gin.Context) { req.PodName = podName utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.podService.PodPortForward(ctx, &req) + return nil, h.podService.PodPortForward(ctx, &req) }) } // PodFileUpload 上传文件到Pod -func (k *K8sPodHandler) PodFileUpload(ctx *gin.Context) { +func (h *K8sPodHandler) PodFileUpload(ctx *gin.Context) { var req model.PodFileUploadReq // 获取路径参数 @@ -513,7 +512,7 @@ func (k *K8sPodHandler) PodFileUpload(ctx *gin.Context) { req.FilePath = filePath // 调用文件上传服务 - if err := k.podService.PodFileUpload(ctx, &req); err != nil { + if err := h.podService.PodFileUpload(ctx, &req); err != nil { utils.BadRequestError(ctx, "文件上传失败: "+err.Error()) return } @@ -522,7 +521,7 @@ func (k *K8sPodHandler) PodFileUpload(ctx *gin.Context) { } // PodFileDownload 从Pod下载文件 -func (k *K8sPodHandler) PodFileDownload(ctx *gin.Context) { +func (h *K8sPodHandler) PodFileDownload(ctx *gin.Context) { var req model.PodFileDownloadReq // 获取路径参数 @@ -592,7 +591,7 @@ func (k *K8sPodHandler) PodFileDownload(ctx *gin.Context) { req.FilePath = filePath // 调用文件下载服务 - if err := k.podService.PodFileDownload(ctx, &req); err != nil { + if err := h.podService.PodFileDownload(ctx, &req); err != nil { utils.BadRequestError(ctx, "文件下载失败: "+err.Error()) return } diff --git a/internal/k8s/api/pv.go b/internal/k8s/api/pv.go index 34981b8a..b37470a2 100644 --- a/internal/k8s/api/pv.go +++ b/internal/k8s/api/pv.go @@ -42,22 +42,22 @@ func NewK8sPVHandler(pvService service.PVService) *K8sPVHandler { } } -func (k *K8sPVHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sPVHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/pv/:cluster_id/list", k.GetPVList) // 获取PV列表 - k8sGroup.GET("/pv/:cluster_id/:name/detail", k.GetPVDetails) // 获取PV详情 - k8sGroup.GET("/pv/:cluster_id/:name/detail/yaml", k.GetPVYaml) // 获取PV YAML - k8sGroup.POST("/pv/:cluster_id/create", k.CreatePV) // 创建PV - k8sGroup.POST("/pv/:cluster_id/create/yaml", k.CreatePVByYaml) // 通过YAML创建PV - k8sGroup.PUT("/pv/:cluster_id/:name/update", k.UpdatePV) // 更新PV - k8sGroup.PUT("/pv/:cluster_id/:name/update/yaml", k.UpdatePVByYaml) // 通过YAML更新PV - k8sGroup.DELETE("/pv/:cluster_id/:name/delete", k.DeletePV) // 删除PV - k8sGroup.POST("/pv/:cluster_id/:name/reclaim", k.ReclaimPV) // 回收PV + k8sGroup.GET("/pv/:cluster_id/list", h.GetPVList) // 获取PV列表 + k8sGroup.GET("/pv/:cluster_id/:name/detail", h.GetPVDetails) // 获取PV详情 + k8sGroup.GET("/pv/:cluster_id/:name/detail/yaml", h.GetPVYaml) // 获取PV YAML + k8sGroup.POST("/pv/:cluster_id/create", h.CreatePV) // 创建PV + k8sGroup.POST("/pv/:cluster_id/create/yaml", h.CreatePVByYaml) // 通过YAML创建PV + k8sGroup.PUT("/pv/:cluster_id/:name/update", h.UpdatePV) // 更新PV + k8sGroup.PUT("/pv/:cluster_id/:name/update/yaml", h.UpdatePVByYaml) // 通过YAML更新PV + k8sGroup.DELETE("/pv/:cluster_id/:name/delete", h.DeletePV) // 删除PV + k8sGroup.POST("/pv/:cluster_id/:name/reclaim", h.ReclaimPV) // 回收PV } } -func (k *K8sPVHandler) GetPVList(ctx *gin.Context) { +func (h *K8sPVHandler) GetPVList(ctx *gin.Context) { var req model.GetPVListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -69,11 +69,11 @@ func (k *K8sPVHandler) GetPVList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.pvService.GetPVList(ctx, &req) + return h.pvService.GetPVList(ctx, &req) }) } -func (k *K8sPVHandler) GetPVDetails(ctx *gin.Context) { +func (h *K8sPVHandler) GetPVDetails(ctx *gin.Context) { var req model.GetPVDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -92,11 +92,11 @@ func (k *K8sPVHandler) GetPVDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.pvService.GetPV(ctx, req.ClusterID, req.Name) + return h.pvService.GetPV(ctx, req.ClusterID, req.Name) }) } -func (k *K8sPVHandler) GetPVYaml(ctx *gin.Context) { +func (h *K8sPVHandler) GetPVYaml(ctx *gin.Context) { var req model.GetPVYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -115,11 +115,11 @@ func (k *K8sPVHandler) GetPVYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.pvService.GetPVYaml(ctx, req.ClusterID, req.Name) + return h.pvService.GetPVYaml(ctx, req.ClusterID, req.Name) }) } -func (k *K8sPVHandler) CreatePV(ctx *gin.Context) { +func (h *K8sPVHandler) CreatePV(ctx *gin.Context) { var req model.CreatePVReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -131,11 +131,11 @@ func (k *K8sPVHandler) CreatePV(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvService.CreatePV(ctx, &req) + return nil, h.pvService.CreatePV(ctx, &req) }) } -func (k *K8sPVHandler) CreatePVByYaml(ctx *gin.Context) { +func (h *K8sPVHandler) CreatePVByYaml(ctx *gin.Context) { var req model.CreatePVByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -147,11 +147,11 @@ func (k *K8sPVHandler) CreatePVByYaml(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvService.CreatePVByYaml(ctx, &req) + return nil, h.pvService.CreatePVByYaml(ctx, &req) }) } -func (k *K8sPVHandler) UpdatePV(ctx *gin.Context) { +func (h *K8sPVHandler) UpdatePV(ctx *gin.Context) { var req model.UpdatePVReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -170,11 +170,11 @@ func (k *K8sPVHandler) UpdatePV(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvService.UpdatePV(ctx, &req) + return nil, h.pvService.UpdatePV(ctx, &req) }) } -func (k *K8sPVHandler) UpdatePVByYaml(ctx *gin.Context) { +func (h *K8sPVHandler) UpdatePVByYaml(ctx *gin.Context) { var req model.UpdatePVByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -193,11 +193,11 @@ func (k *K8sPVHandler) UpdatePVByYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvService.UpdatePVByYaml(ctx, &req) + return nil, h.pvService.UpdatePVByYaml(ctx, &req) }) } -func (k *K8sPVHandler) DeletePV(ctx *gin.Context) { +func (h *K8sPVHandler) DeletePV(ctx *gin.Context) { var req model.DeletePVReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -216,11 +216,11 @@ func (k *K8sPVHandler) DeletePV(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvService.DeletePV(ctx, &req) + return nil, h.pvService.DeletePV(ctx, &req) }) } -func (k *K8sPVHandler) ReclaimPV(ctx *gin.Context) { +func (h *K8sPVHandler) ReclaimPV(ctx *gin.Context) { var req model.ReclaimPVReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -239,6 +239,6 @@ func (k *K8sPVHandler) ReclaimPV(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvService.ReclaimPV(ctx, &req) + return nil, h.pvService.ReclaimPV(ctx, &req) }) } diff --git a/internal/k8s/api/pvc.go b/internal/k8s/api/pvc.go index 4430d897..9aa4d20f 100644 --- a/internal/k8s/api/pvc.go +++ b/internal/k8s/api/pvc.go @@ -40,23 +40,23 @@ func NewK8sPVCHandler(pvcService service.PVCService) *K8sPVCHandler { return &K8sPVCHandler{pvcService: pvcService} } -func (k *K8sPVCHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sPVCHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/pvc/:cluster_id/list", k.GetPVCList) // 获取PVC列表 - k8sGroup.GET("/pvc/:cluster_id/:namespace/:name/detail", k.GetPVCDetails) // 获取PVC详情 - k8sGroup.GET("/pvc/:cluster_id/:namespace/:name/detail/yaml", k.GetPVCYaml) // 获取PVC YAML - k8sGroup.POST("/pvc/:cluster_id/create", k.CreatePVC) // 创建PVC - k8sGroup.POST("/pvc/:cluster_id/create/yaml", k.CreatePVCByYaml) // 通过YAML创建PVC - k8sGroup.PUT("/pvc/:cluster_id/:namespace/:name/update", k.UpdatePVC) // 更新PVC - k8sGroup.PUT("/pvc/:cluster_id/:namespace/:name/update/yaml", k.UpdatePVCByYaml) // 通过YAML更新PVC - k8sGroup.DELETE("/pvc/:cluster_id/:namespace/:name/delete", k.DeletePVC) // 删除PVC - k8sGroup.POST("/pvc/:cluster_id/:namespace/:name/expand", k.ExpandPVC) // 扩容PVC - k8sGroup.GET("/pvc/:cluster_id/:namespace/:name/pods", k.GetPVCPods) // 获取使用PVC的Pod列表 + k8sGroup.GET("/pvc/:cluster_id/list", h.GetPVCList) // 获取PVC列表 + k8sGroup.GET("/pvc/:cluster_id/:namespace/:name/detail", h.GetPVCDetails) // 获取PVC详情 + k8sGroup.GET("/pvc/:cluster_id/:namespace/:name/detail/yaml", h.GetPVCYaml) // 获取PVC YAML + k8sGroup.POST("/pvc/:cluster_id/create", h.CreatePVC) // 创建PVC + k8sGroup.POST("/pvc/:cluster_id/create/yaml", h.CreatePVCByYaml) // 通过YAML创建PVC + k8sGroup.PUT("/pvc/:cluster_id/:namespace/:name/update", h.UpdatePVC) // 更新PVC + k8sGroup.PUT("/pvc/:cluster_id/:namespace/:name/update/yaml", h.UpdatePVCByYaml) // 通过YAML更新PVC + k8sGroup.DELETE("/pvc/:cluster_id/:namespace/:name/delete", h.DeletePVC) // 删除PVC + k8sGroup.POST("/pvc/:cluster_id/:namespace/:name/expand", h.ExpandPVC) // 扩容PVC + k8sGroup.GET("/pvc/:cluster_id/:namespace/:name/pods", h.GetPVCPods) // 获取使用PVC的Pod列表 } } -func (k *K8sPVCHandler) GetPVCList(ctx *gin.Context) { +func (h *K8sPVCHandler) GetPVCList(ctx *gin.Context) { var req model.GetPVCListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -65,11 +65,11 @@ func (k *K8sPVCHandler) GetPVCList(ctx *gin.Context) { } req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.pvcService.GetPVCList(ctx, &req) + return h.pvcService.GetPVCList(ctx, &req) }) } -func (k *K8sPVCHandler) GetPVCDetails(ctx *gin.Context) { +func (h *K8sPVCHandler) GetPVCDetails(ctx *gin.Context) { var req model.GetPVCDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -90,11 +90,11 @@ func (k *K8sPVCHandler) GetPVCDetails(ctx *gin.Context) { req.Namespace = ns req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.pvcService.GetPVC(ctx, &req) + return h.pvcService.GetPVC(ctx, &req) }) } -func (k *K8sPVCHandler) GetPVCYaml(ctx *gin.Context) { +func (h *K8sPVCHandler) GetPVCYaml(ctx *gin.Context) { var req model.GetPVCYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -115,11 +115,11 @@ func (k *K8sPVCHandler) GetPVCYaml(ctx *gin.Context) { req.Namespace = ns req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.pvcService.GetPVCYaml(ctx, &req) + return h.pvcService.GetPVCYaml(ctx, &req) }) } -func (k *K8sPVCHandler) CreatePVC(ctx *gin.Context) { +func (h *K8sPVCHandler) CreatePVC(ctx *gin.Context) { var req model.CreatePVCReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -128,11 +128,11 @@ func (k *K8sPVCHandler) CreatePVC(ctx *gin.Context) { } req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvcService.CreatePVC(ctx, &req) + return nil, h.pvcService.CreatePVC(ctx, &req) }) } -func (k *K8sPVCHandler) UpdatePVC(ctx *gin.Context) { +func (h *K8sPVCHandler) UpdatePVC(ctx *gin.Context) { var req model.UpdatePVCReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -153,11 +153,11 @@ func (k *K8sPVCHandler) UpdatePVC(ctx *gin.Context) { req.Namespace = ns req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvcService.UpdatePVC(ctx, &req) + return nil, h.pvcService.UpdatePVC(ctx, &req) }) } -func (k *K8sPVCHandler) DeletePVC(ctx *gin.Context) { +func (h *K8sPVCHandler) DeletePVC(ctx *gin.Context) { var req model.DeletePVCReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -178,11 +178,11 @@ func (k *K8sPVCHandler) DeletePVC(ctx *gin.Context) { req.Namespace = ns req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvcService.DeletePVC(ctx, &req) + return nil, h.pvcService.DeletePVC(ctx, &req) }) } -func (k *K8sPVCHandler) CreatePVCByYaml(ctx *gin.Context) { +func (h *K8sPVCHandler) CreatePVCByYaml(ctx *gin.Context) { var req model.CreatePVCByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -191,11 +191,11 @@ func (k *K8sPVCHandler) CreatePVCByYaml(ctx *gin.Context) { } req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvcService.CreatePVCByYaml(ctx, &req) + return nil, h.pvcService.CreatePVCByYaml(ctx, &req) }) } -func (k *K8sPVCHandler) UpdatePVCByYaml(ctx *gin.Context) { +func (h *K8sPVCHandler) UpdatePVCByYaml(ctx *gin.Context) { var req model.UpdatePVCByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -216,11 +216,11 @@ func (k *K8sPVCHandler) UpdatePVCByYaml(ctx *gin.Context) { req.Namespace = ns req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvcService.UpdatePVCByYaml(ctx, &req) + return nil, h.pvcService.UpdatePVCByYaml(ctx, &req) }) } -func (k *K8sPVCHandler) ExpandPVC(ctx *gin.Context) { +func (h *K8sPVCHandler) ExpandPVC(ctx *gin.Context) { var req model.ExpandPVCReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -241,11 +241,11 @@ func (k *K8sPVCHandler) ExpandPVC(ctx *gin.Context) { req.Namespace = ns req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.pvcService.ExpandPVC(ctx, &req) + return nil, h.pvcService.ExpandPVC(ctx, &req) }) } -func (k *K8sPVCHandler) GetPVCPods(ctx *gin.Context) { +func (h *K8sPVCHandler) GetPVCPods(ctx *gin.Context) { var req model.GetPVCPodsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -266,6 +266,6 @@ func (k *K8sPVCHandler) GetPVCPods(ctx *gin.Context) { req.Namespace = ns req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.pvcService.GetPVCPods(ctx, &req) + return h.pvcService.GetPVCPods(ctx, &req) }) } diff --git a/internal/k8s/api/rbac.go b/internal/k8s/api/rbac.go index 0b03db69..99b988a8 100644 --- a/internal/k8s/api/rbac.go +++ b/internal/k8s/api/rbac.go @@ -45,17 +45,17 @@ func NewK8sRBACHandler(rbacService service.RBACService) *K8sRBACHandler { } // RegisterRouters 注册路由 -func (r *K8sRBACHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sRBACHandler) RegisterRouters(server *gin.Engine) { rbacGroup := server.Group("/api/k8s") { // RBAC权限分析 - rbacGroup.POST("/rbac/:cluster_id/analyze", r.AnalyzeRBACPermissions) - rbacGroup.POST("/rbac/:cluster_id/check-permission", r.CheckRBACPermission) + rbacGroup.POST("/rbac/:cluster_id/analyze", h.AnalyzeRBACPermissions) + rbacGroup.POST("/rbac/:cluster_id/check-permission", h.CheckRBACPermission) } } // AnalyzeRBACPermissions 分析RBAC权限 -func (r *K8sRBACHandler) AnalyzeRBACPermissions(ctx *gin.Context) { +func (h *K8sRBACHandler) AnalyzeRBACPermissions(ctx *gin.Context) { var req model.AnalyzeRBACPermissionsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -67,12 +67,12 @@ func (r *K8sRBACHandler) AnalyzeRBACPermissions(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.rbacService.AnalyzeRBACPermissions(ctx, &req) + return h.rbacService.AnalyzeRBACPermissions(ctx, &req) }) } // CheckRBACPermission 检查RBAC权限 -func (r *K8sRBACHandler) CheckRBACPermission(ctx *gin.Context) { +func (h *K8sRBACHandler) CheckRBACPermission(ctx *gin.Context) { var req model.CheckRBACPermissionReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -84,6 +84,6 @@ func (r *K8sRBACHandler) CheckRBACPermission(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.rbacService.CheckRBACPermission(ctx, &req) + return h.rbacService.CheckRBACPermission(ctx, &req) }) } diff --git a/internal/k8s/api/resource.go b/internal/k8s/api/resource.go index 2e81b91d..ac5989ab 100644 --- a/internal/k8s/api/resource.go +++ b/internal/k8s/api/resource.go @@ -46,26 +46,26 @@ package api // k8sGroup := server.Group("/api/k8s") // { // // 资源概览相关路由 -// k8sGroup.GET("/resources/overview/:cluster_id", k.GetResourceOverview) -// k8sGroup.GET("/resources/statistics/:cluster_id", k.GetResourceStatistics) -// k8sGroup.GET("/resources/distribution/:cluster_id", k.GetResourceDistribution) +// k8sGroup.GET("/resources/overview/:cluster_id", h.GetResourceOverview) +// k8sGroup.GET("/resources/statistics/:cluster_id", h.GetResourceStatistics) +// k8sGroup.GET("/resources/distribution/:cluster_id", h.GetResourceDistribution) // // 资源分析和趋势路由 -// k8sGroup.GET("/resources/trend/:cluster_id", k.GetResourceTrend) -// k8sGroup.GET("/resources/utilization/:cluster_id", k.GetResourceUtilization) -// k8sGroup.GET("/resources/health/:cluster_id", k.GetResourceHealth) +// k8sGroup.GET("/resources/trend/:cluster_id", h.GetResourceTrend) +// k8sGroup.GET("/resources/utilization/:cluster_id", h.GetResourceUtilization) +// k8sGroup.GET("/resources/health/:cluster_id", h.GetResourceHealth) // // 工作负载分布路由 -// k8sGroup.GET("/resources/workloads/:cluster_id", k.GetWorkloadDistribution) -// k8sGroup.GET("/resources/namespaces/:cluster_id", k.GetNamespaceResources) +// k8sGroup.GET("/resources/workloads/:cluster_id", h.GetWorkloadDistribution) +// k8sGroup.GET("/resources/namespaces/:cluster_id", h.GetNamespaceResources) // // 存储和网络资源路由 -// k8sGroup.GET("/resources/storage/:cluster_id", k.GetStorageOverview) -// k8sGroup.GET("/resources/network/:cluster_id", k.GetNetworkOverview) +// k8sGroup.GET("/resources/storage/:cluster_id", h.GetStorageOverview) +// k8sGroup.GET("/resources/network/:cluster_id", h.GetNetworkOverview) // // 多集群资源对比 -// k8sGroup.POST("/resources/clusters/compare", k.CompareClusterResources) -// k8sGroup.GET("/resources/clusters/summary", k.GetAllClustersSummary) +// k8sGroup.POST("/resources/clusters/compare", h.CompareClusterResources) +// k8sGroup.GET("/resources/clusters/summary", h.GetAllClustersSummary) // } // } @@ -78,7 +78,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetResourceOverview(ctx, req.ClusterID) +// return h.resourceService.GetResourceOverview(ctx, req.ClusterID) // }) // } @@ -91,7 +91,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetResourceStatistics(ctx, req.ClusterID) +// return h.resourceService.GetResourceStatistics(ctx, req.ClusterID) // }) // } @@ -104,7 +104,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetResourceDistribution(ctx, req.ClusterID) +// return h.resourceService.GetResourceDistribution(ctx, req.ClusterID) // }) // } @@ -121,7 +121,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetResourceTrend(ctx, &req) +// return h.resourceService.GetResourceTrend(ctx, &req) // }) // } @@ -134,7 +134,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetResourceUtilization(ctx, req.ClusterID) +// return h.resourceService.GetResourceUtilization(ctx, req.ClusterID) // }) // } @@ -147,7 +147,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetResourceHealth(ctx, req.ClusterID) +// return h.resourceService.GetResourceHealth(ctx, req.ClusterID) // }) // } @@ -160,7 +160,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetWorkloadDistribution(ctx, req.ClusterID) +// return h.resourceService.GetWorkloadDistribution(ctx, req.ClusterID) // }) // } @@ -173,7 +173,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetNamespaceResources(ctx, req.ClusterID) +// return h.resourceService.GetNamespaceResources(ctx, req.ClusterID) // }) // } @@ -186,7 +186,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetStorageOverview(ctx, req.ClusterID) +// return h.resourceService.GetStorageOverview(ctx, req.ClusterID) // }) // } @@ -199,7 +199,7 @@ package api // } // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetNetworkOverview(ctx, req.ClusterID) +// return h.resourceService.GetNetworkOverview(ctx, req.ClusterID) // }) // } @@ -208,13 +208,13 @@ package api // var req model.CompareClusterResourcesReq // utils.HandleRequest(ctx, &req, func() (interface{}, error) { -// return k.resourceService.CompareClusterResources(ctx, req.ClusterIDs) +// return h.resourceService.CompareClusterResources(ctx, req.ClusterIDs) // }) // } // // GetAllClustersSummary 获取所有集群资源汇总 // func (k *K8sResourceHandler) GetAllClustersSummary(ctx *gin.Context) { // utils.HandleRequest(ctx, nil, func() (interface{}, error) { -// return k.resourceService.GetAllClustersSummary(ctx) +// return h.resourceService.GetAllClustersSummary(ctx) // }) // } diff --git a/internal/k8s/api/role.go b/internal/k8s/api/role.go index d6e361ad..d19590ff 100644 --- a/internal/k8s/api/role.go +++ b/internal/k8s/api/role.go @@ -42,21 +42,21 @@ func NewK8sRoleHandler(roleService service.RoleService) *K8sRoleHandler { } } -func (k *K8sRoleHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sRoleHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/role/:cluster_id/list", k.GetRoleList) - k8sGroup.GET("/role/:cluster_id/:namespace/:name/detail", k.GetRoleDetails) - k8sGroup.GET("/role/:cluster_id/:namespace/:name/detail/yaml", k.GetRoleYaml) - k8sGroup.POST("/role/:cluster_id/create", k.CreateRole) - k8sGroup.POST("/role/:cluster_id/create/yaml", k.CreateRoleByYaml) - k8sGroup.PUT("/role/:cluster_id/:namespace/:name/update", k.UpdateRole) - k8sGroup.PUT("/role/:cluster_id/:namespace/:name/update/yaml", k.UpdateRoleByYaml) - k8sGroup.DELETE("/role/:cluster_id/:namespace/:name/delete", k.DeleteRole) + k8sGroup.GET("/role/:cluster_id/list", h.GetRoleList) + k8sGroup.GET("/role/:cluster_id/:namespace/:name/detail", h.GetRoleDetails) + k8sGroup.GET("/role/:cluster_id/:namespace/:name/detail/yaml", h.GetRoleYaml) + k8sGroup.POST("/role/:cluster_id/create", h.CreateRole) + k8sGroup.POST("/role/:cluster_id/create/yaml", h.CreateRoleByYaml) + k8sGroup.PUT("/role/:cluster_id/:namespace/:name/update", h.UpdateRole) + k8sGroup.PUT("/role/:cluster_id/:namespace/:name/update/yaml", h.UpdateRoleByYaml) + k8sGroup.DELETE("/role/:cluster_id/:namespace/:name/delete", h.DeleteRole) } } -func (k *K8sRoleHandler) GetRoleList(ctx *gin.Context) { +func (h *K8sRoleHandler) GetRoleList(ctx *gin.Context) { var req model.GetRoleListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -68,11 +68,11 @@ func (k *K8sRoleHandler) GetRoleList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.roleService.GetRoleList(ctx, &req) + return h.roleService.GetRoleList(ctx, &req) }) } -func (k *K8sRoleHandler) GetRoleDetails(ctx *gin.Context) { +func (h *K8sRoleHandler) GetRoleDetails(ctx *gin.Context) { var req model.GetRoleDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -98,11 +98,11 @@ func (k *K8sRoleHandler) GetRoleDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.roleService.GetRoleDetails(ctx, &req) + return h.roleService.GetRoleDetails(ctx, &req) }) } -func (k *K8sRoleHandler) GetRoleYaml(ctx *gin.Context) { +func (h *K8sRoleHandler) GetRoleYaml(ctx *gin.Context) { var req model.GetRoleYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -128,11 +128,11 @@ func (k *K8sRoleHandler) GetRoleYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.roleService.GetRoleYaml(ctx, &req) + return h.roleService.GetRoleYaml(ctx, &req) }) } -func (k *K8sRoleHandler) CreateRole(ctx *gin.Context) { +func (h *K8sRoleHandler) CreateRole(ctx *gin.Context) { var req model.CreateRoleReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -144,11 +144,11 @@ func (k *K8sRoleHandler) CreateRole(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleService.CreateRole(ctx, &req) + return nil, h.roleService.CreateRole(ctx, &req) }) } -func (k *K8sRoleHandler) CreateRoleByYaml(ctx *gin.Context) { +func (h *K8sRoleHandler) CreateRoleByYaml(ctx *gin.Context) { var req model.CreateRoleByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -160,11 +160,11 @@ func (k *K8sRoleHandler) CreateRoleByYaml(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleService.CreateRoleByYaml(ctx, &req) + return nil, h.roleService.CreateRoleByYaml(ctx, &req) }) } -func (k *K8sRoleHandler) UpdateRole(ctx *gin.Context) { +func (h *K8sRoleHandler) UpdateRole(ctx *gin.Context) { var req model.UpdateRoleReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -190,11 +190,11 @@ func (k *K8sRoleHandler) UpdateRole(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleService.UpdateRole(ctx, &req) + return nil, h.roleService.UpdateRole(ctx, &req) }) } -func (k *K8sRoleHandler) UpdateRoleByYaml(ctx *gin.Context) { +func (h *K8sRoleHandler) UpdateRoleByYaml(ctx *gin.Context) { var req model.UpdateRoleByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -220,11 +220,11 @@ func (k *K8sRoleHandler) UpdateRoleByYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleService.UpdateRoleYaml(ctx, &req) + return nil, h.roleService.UpdateRoleYaml(ctx, &req) }) } -func (k *K8sRoleHandler) DeleteRole(ctx *gin.Context) { +func (h *K8sRoleHandler) DeleteRole(ctx *gin.Context) { var req model.DeleteRoleReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -250,6 +250,6 @@ func (k *K8sRoleHandler) DeleteRole(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleService.DeleteRole(ctx, &req) + return nil, h.roleService.DeleteRole(ctx, &req) }) } diff --git a/internal/k8s/api/rolebinding.go b/internal/k8s/api/rolebinding.go index 81862cb5..6c7c8841 100644 --- a/internal/k8s/api/rolebinding.go +++ b/internal/k8s/api/rolebinding.go @@ -42,22 +42,22 @@ func NewK8sRoleBindingHandler(roleBindingService service.RoleBindingService) *K8 } } -func (k *K8sRoleBindingHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sRoleBindingHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/rolebinding/:cluster_id/list", k.GetRoleBindingList) - k8sGroup.GET("/rolebinding/:cluster_id/:namespace/:name/detail", k.GetRoleBindingDetails) - k8sGroup.GET("/rolebinding/:cluster_id/:namespace/:name/detail/yaml", k.GetRoleBindingYaml) - k8sGroup.POST("/rolebinding/:cluster_id/create", k.CreateRoleBinding) - k8sGroup.POST("/rolebinding/:cluster_id/create/yaml", k.CreateRoleBindingByYaml) - k8sGroup.PUT("/rolebinding/:cluster_id/:namespace/:name/update", k.UpdateRoleBinding) - k8sGroup.PUT("/rolebinding/:cluster_id/:namespace/:name/update/yaml", k.UpdateRoleBindingYaml) - k8sGroup.DELETE("/rolebinding/:cluster_id/:namespace/:name/delete", k.DeleteRoleBinding) + k8sGroup.GET("/rolebinding/:cluster_id/list", h.GetRoleBindingList) + k8sGroup.GET("/rolebinding/:cluster_id/:namespace/:name/detail", h.GetRoleBindingDetails) + k8sGroup.GET("/rolebinding/:cluster_id/:namespace/:name/detail/yaml", h.GetRoleBindingYaml) + k8sGroup.POST("/rolebinding/:cluster_id/create", h.CreateRoleBinding) + k8sGroup.POST("/rolebinding/:cluster_id/create/yaml", h.CreateRoleBindingByYaml) + k8sGroup.PUT("/rolebinding/:cluster_id/:namespace/:name/update", h.UpdateRoleBinding) + k8sGroup.PUT("/rolebinding/:cluster_id/:namespace/:name/update/yaml", h.UpdateRoleBindingYaml) + k8sGroup.DELETE("/rolebinding/:cluster_id/:namespace/:name/delete", h.DeleteRoleBinding) } } // GetRoleBindingList 获取 RoleBinding 列表 -func (k *K8sRoleBindingHandler) GetRoleBindingList(ctx *gin.Context) { +func (h *K8sRoleBindingHandler) GetRoleBindingList(ctx *gin.Context) { var req model.GetRoleBindingListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -68,12 +68,12 @@ func (k *K8sRoleBindingHandler) GetRoleBindingList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.roleBindingService.GetRoleBindingList(ctx, &req) + return h.roleBindingService.GetRoleBindingList(ctx, &req) }) } // GetRoleBindingDetails 获取 RoleBinding 详情 -func (k *K8sRoleBindingHandler) GetRoleBindingDetails(ctx *gin.Context) { +func (h *K8sRoleBindingHandler) GetRoleBindingDetails(ctx *gin.Context) { var req model.GetRoleBindingDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -99,21 +99,21 @@ func (k *K8sRoleBindingHandler) GetRoleBindingDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.roleBindingService.GetRoleBindingDetails(ctx, &req) + return h.roleBindingService.GetRoleBindingDetails(ctx, &req) }) } // CreateRoleBinding 创建 RoleBinding -func (k *K8sRoleBindingHandler) CreateRoleBinding(ctx *gin.Context) { +func (h *K8sRoleBindingHandler) CreateRoleBinding(ctx *gin.Context) { var req model.CreateRoleBindingReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleBindingService.CreateRoleBinding(ctx, &req) + return nil, h.roleBindingService.CreateRoleBinding(ctx, &req) }) } // CreateRoleBindingByYaml 通过YAML创建 RoleBinding -func (k *K8sRoleBindingHandler) CreateRoleBindingByYaml(ctx *gin.Context) { +func (h *K8sRoleBindingHandler) CreateRoleBindingByYaml(ctx *gin.Context) { var req model.CreateRoleBindingByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -125,21 +125,21 @@ func (k *K8sRoleBindingHandler) CreateRoleBindingByYaml(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleBindingService.CreateRoleBindingByYaml(ctx, &req) + return nil, h.roleBindingService.CreateRoleBindingByYaml(ctx, &req) }) } // UpdateRoleBinding 更新 RoleBinding -func (k *K8sRoleBindingHandler) UpdateRoleBinding(ctx *gin.Context) { +func (h *K8sRoleBindingHandler) UpdateRoleBinding(ctx *gin.Context) { var req model.UpdateRoleBindingReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleBindingService.UpdateRoleBinding(ctx, &req) + return nil, h.roleBindingService.UpdateRoleBinding(ctx, &req) }) } // DeleteRoleBinding 删除 RoleBinding -func (k *K8sRoleBindingHandler) DeleteRoleBinding(ctx *gin.Context) { +func (h *K8sRoleBindingHandler) DeleteRoleBinding(ctx *gin.Context) { var req model.DeleteRoleBindingReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -165,12 +165,12 @@ func (k *K8sRoleBindingHandler) DeleteRoleBinding(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleBindingService.DeleteRoleBinding(ctx, &req) + return nil, h.roleBindingService.DeleteRoleBinding(ctx, &req) }) } // GetRoleBindingYaml 获取 RoleBinding YAML -func (k *K8sRoleBindingHandler) GetRoleBindingYaml(ctx *gin.Context) { +func (h *K8sRoleBindingHandler) GetRoleBindingYaml(ctx *gin.Context) { var req model.GetRoleBindingYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -196,15 +196,15 @@ func (k *K8sRoleBindingHandler) GetRoleBindingYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.roleBindingService.GetRoleBindingYaml(ctx, &req) + return h.roleBindingService.GetRoleBindingYaml(ctx, &req) }) } // UpdateRoleBindingYaml 更新 RoleBinding YAML -func (k *K8sRoleBindingHandler) UpdateRoleBindingYaml(ctx *gin.Context) { +func (h *K8sRoleBindingHandler) UpdateRoleBindingYaml(ctx *gin.Context) { var req model.UpdateRoleBindingByYamlReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.roleBindingService.UpdateRoleBindingYaml(ctx, &req) + return nil, h.roleBindingService.UpdateRoleBindingYaml(ctx, &req) }) } diff --git a/internal/k8s/api/serviceaccount.go b/internal/k8s/api/serviceaccount.go index f3803408..e20f02cc 100644 --- a/internal/k8s/api/serviceaccount.go +++ b/internal/k8s/api/serviceaccount.go @@ -42,24 +42,24 @@ func NewK8sServiceAccountHandler(serviceAccountService service.ServiceAccountSer } } -func (s *K8sServiceAccountHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sServiceAccountHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/serviceaccount/:cluster_id/list", s.GetServiceAccountList) - k8sGroup.GET("/serviceaccount/:cluster_id/:namespace/:name/detail", s.GetServiceAccountDetails) - k8sGroup.GET("/serviceaccount/:cluster_id/:namespace/:name/detail/yaml", s.GetServiceAccountYaml) - k8sGroup.POST("/serviceaccount/:cluster_id/create", s.CreateServiceAccount) - k8sGroup.POST("/serviceaccount/:cluster_id/create/yaml", s.CreateServiceAccountByYaml) - k8sGroup.PUT("/serviceaccount/:cluster_id/:namespace/:name/update", s.UpdateServiceAccount) - k8sGroup.PUT("/serviceaccount/:cluster_id/:namespace/:name/update/yaml", s.UpdateServiceAccountYaml) - k8sGroup.DELETE("/serviceaccount/:cluster_id/:namespace/:name/delete", s.DeleteServiceAccount) - k8sGroup.GET("/serviceaccount/:cluster_id/:namespace/:name/token", s.GetServiceAccountToken) - k8sGroup.POST("/serviceaccount/:cluster_id/:namespace/:name/token", s.CreateServiceAccountToken) + k8sGroup.GET("/serviceaccount/:cluster_id/list", h.GetServiceAccountList) + k8sGroup.GET("/serviceaccount/:cluster_id/:namespace/:name/detail", h.GetServiceAccountDetails) + k8sGroup.GET("/serviceaccount/:cluster_id/:namespace/:name/detail/yaml", h.GetServiceAccountYaml) + k8sGroup.POST("/serviceaccount/:cluster_id/create", h.CreateServiceAccount) + k8sGroup.POST("/serviceaccount/:cluster_id/create/yaml", h.CreateServiceAccountByYaml) + k8sGroup.PUT("/serviceaccount/:cluster_id/:namespace/:name/update", h.UpdateServiceAccount) + k8sGroup.PUT("/serviceaccount/:cluster_id/:namespace/:name/update/yaml", h.UpdateServiceAccountYaml) + k8sGroup.DELETE("/serviceaccount/:cluster_id/:namespace/:name/delete", h.DeleteServiceAccount) + k8sGroup.GET("/serviceaccount/:cluster_id/:namespace/:name/token", h.GetServiceAccountToken) + k8sGroup.POST("/serviceaccount/:cluster_id/:namespace/:name/token", h.CreateServiceAccountToken) } } // GetServiceAccountList 获取 ServiceAccount 列表 -func (s *K8sServiceAccountHandler) GetServiceAccountList(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) GetServiceAccountList(ctx *gin.Context) { var req model.GetServiceAccountListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -71,12 +71,12 @@ func (s *K8sServiceAccountHandler) GetServiceAccountList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.serviceAccountService.GetServiceAccountList(ctx, &req) + return h.serviceAccountService.GetServiceAccountList(ctx, &req) }) } // GetServiceAccountDetails 获取 ServiceAccount 详情 -func (s *K8sServiceAccountHandler) GetServiceAccountDetails(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) GetServiceAccountDetails(ctx *gin.Context) { var req model.GetServiceAccountDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -102,12 +102,12 @@ func (s *K8sServiceAccountHandler) GetServiceAccountDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.serviceAccountService.GetServiceAccountDetails(ctx, &req) + return h.serviceAccountService.GetServiceAccountDetails(ctx, &req) }) } // CreateServiceAccount 创建 ServiceAccount -func (s *K8sServiceAccountHandler) CreateServiceAccount(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) CreateServiceAccount(ctx *gin.Context) { var req model.CreateServiceAccountReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -119,12 +119,12 @@ func (s *K8sServiceAccountHandler) CreateServiceAccount(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.serviceAccountService.CreateServiceAccount(ctx, &req) + return nil, h.serviceAccountService.CreateServiceAccount(ctx, &req) }) } // CreateServiceAccountByYaml 通过YAML创建 ServiceAccount -func (s *K8sServiceAccountHandler) CreateServiceAccountByYaml(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) CreateServiceAccountByYaml(ctx *gin.Context) { var req model.CreateServiceAccountByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -136,12 +136,12 @@ func (s *K8sServiceAccountHandler) CreateServiceAccountByYaml(ctx *gin.Context) req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.serviceAccountService.CreateServiceAccountByYaml(ctx, &req) + return nil, h.serviceAccountService.CreateServiceAccountByYaml(ctx, &req) }) } // UpdateServiceAccount 更新 ServiceAccount -func (s *K8sServiceAccountHandler) UpdateServiceAccount(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) UpdateServiceAccount(ctx *gin.Context) { var req model.UpdateServiceAccountReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -167,12 +167,12 @@ func (s *K8sServiceAccountHandler) UpdateServiceAccount(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.serviceAccountService.UpdateServiceAccount(ctx, &req) + return nil, h.serviceAccountService.UpdateServiceAccount(ctx, &req) }) } // DeleteServiceAccount 删除 ServiceAccount -func (s *K8sServiceAccountHandler) DeleteServiceAccount(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) DeleteServiceAccount(ctx *gin.Context) { var req model.DeleteServiceAccountReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -198,12 +198,12 @@ func (s *K8sServiceAccountHandler) DeleteServiceAccount(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.serviceAccountService.DeleteServiceAccount(ctx, &req) + return nil, h.serviceAccountService.DeleteServiceAccount(ctx, &req) }) } // GetServiceAccountYaml 获取 ServiceAccount YAML -func (s *K8sServiceAccountHandler) GetServiceAccountYaml(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) GetServiceAccountYaml(ctx *gin.Context) { var req model.GetServiceAccountYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -229,12 +229,12 @@ func (s *K8sServiceAccountHandler) GetServiceAccountYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.serviceAccountService.GetServiceAccountYaml(ctx, &req) + return h.serviceAccountService.GetServiceAccountYaml(ctx, &req) }) } // UpdateServiceAccountYaml 更新 ServiceAccount YAML -func (s *K8sServiceAccountHandler) UpdateServiceAccountYaml(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) UpdateServiceAccountYaml(ctx *gin.Context) { var req model.UpdateServiceAccountByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -260,12 +260,12 @@ func (s *K8sServiceAccountHandler) UpdateServiceAccountYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.serviceAccountService.UpdateServiceAccountYaml(ctx, &req) + return nil, h.serviceAccountService.UpdateServiceAccountYaml(ctx, &req) }) } // GetServiceAccountToken 获取 ServiceAccount 令牌 -func (s *K8sServiceAccountHandler) GetServiceAccountToken(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) GetServiceAccountToken(ctx *gin.Context) { var req model.GetServiceAccountTokenReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -291,12 +291,12 @@ func (s *K8sServiceAccountHandler) GetServiceAccountToken(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.serviceAccountService.GetServiceAccountToken(ctx, &req) + return h.serviceAccountService.GetServiceAccountToken(ctx, &req) }) } // CreateServiceAccountToken 创建 ServiceAccount 令牌 -func (s *K8sServiceAccountHandler) CreateServiceAccountToken(ctx *gin.Context) { +func (h *K8sServiceAccountHandler) CreateServiceAccountToken(ctx *gin.Context) { var req model.CreateServiceAccountTokenReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -322,6 +322,6 @@ func (s *K8sServiceAccountHandler) CreateServiceAccountToken(ctx *gin.Context) { req.ServiceAccountName = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.serviceAccountService.CreateServiceAccountToken(ctx, &req) + return h.serviceAccountService.CreateServiceAccountToken(ctx, &req) }) } diff --git a/internal/k8s/api/statefulset.go b/internal/k8s/api/statefulset.go index 586bf5c2..f01cb7a1 100644 --- a/internal/k8s/api/statefulset.go +++ b/internal/k8s/api/statefulset.go @@ -42,28 +42,28 @@ func NewK8sStatefulSetHandler(statefulSetService service.StatefulSetService) *K8 } } -func (k *K8sStatefulSetHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sStatefulSetHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { // StatefulSet基础管理 - k8sGroup.GET("/statefulset/:cluster_id/list", k.GetStatefulSetList) // 获取StatefulSet列表 - k8sGroup.GET("/statefulset/:cluster_id/:namespace/:name/detail", k.GetStatefulSetDetails) // 获取StatefulSet详情 - k8sGroup.GET("/statefulset/:cluster_id/:namespace/:name/detail/yaml", k.GetStatefulSetYaml) // 获取StatefulSet YAML - k8sGroup.POST("/statefulset/:cluster_id/create", k.CreateStatefulSet) // 创建StatefulSet - k8sGroup.POST("/statefulset/:cluster_id/create/yaml", k.CreateStatefulSetByYaml) // 通过YAML创建StatefulSet - k8sGroup.PUT("/statefulset/:cluster_id/:namespace/:name/update", k.UpdateStatefulSet) // 更新StatefulSet - k8sGroup.PUT("/statefulset/:cluster_id/:namespace/:name/update/yaml", k.UpdateStatefulSetByYaml) // 通过YAML更新StatefulSet - k8sGroup.DELETE("/statefulset/:cluster_id/:namespace/:name/delete", k.DeleteStatefulSet) // 删除StatefulSet - k8sGroup.POST("/statefulset/:cluster_id/:namespace/:name/restart", k.RestartStatefulSet) // 重启StatefulSet - k8sGroup.POST("/statefulset/:cluster_id/:namespace/:name/scale", k.ScaleStatefulSet) // 扩缩容StatefulSet - k8sGroup.POST("/statefulset/:cluster_id/:namespace/:name/rollback", k.RollbackStatefulSet) // 回滚StatefulSet - k8sGroup.GET("/statefulset/:cluster_id/:namespace/:name/pods", k.GetStatefulSetPods) // 获取StatefulSet Pod列表 - k8sGroup.GET("/statefulset/:cluster_id/:namespace/:name/history", k.GetStatefulSetHistory) // 获取StatefulSet版本历史 + k8sGroup.GET("/statefulset/:cluster_id/list", h.GetStatefulSetList) // 获取StatefulSet列表 + k8sGroup.GET("/statefulset/:cluster_id/:namespace/:name/detail", h.GetStatefulSetDetails) // 获取StatefulSet详情 + k8sGroup.GET("/statefulset/:cluster_id/:namespace/:name/detail/yaml", h.GetStatefulSetYaml) // 获取StatefulSet YAML + k8sGroup.POST("/statefulset/:cluster_id/create", h.CreateStatefulSet) // 创建StatefulSet + k8sGroup.POST("/statefulset/:cluster_id/create/yaml", h.CreateStatefulSetByYaml) // 通过YAML创建StatefulSet + k8sGroup.PUT("/statefulset/:cluster_id/:namespace/:name/update", h.UpdateStatefulSet) // 更新StatefulSet + k8sGroup.PUT("/statefulset/:cluster_id/:namespace/:name/update/yaml", h.UpdateStatefulSetByYaml) // 通过YAML更新StatefulSet + k8sGroup.DELETE("/statefulset/:cluster_id/:namespace/:name/delete", h.DeleteStatefulSet) // 删除StatefulSet + k8sGroup.POST("/statefulset/:cluster_id/:namespace/:name/restart", h.RestartStatefulSet) // 重启StatefulSet + k8sGroup.POST("/statefulset/:cluster_id/:namespace/:name/scale", h.ScaleStatefulSet) // 扩缩容StatefulSet + k8sGroup.POST("/statefulset/:cluster_id/:namespace/:name/rollback", h.RollbackStatefulSet) // 回滚StatefulSet + k8sGroup.GET("/statefulset/:cluster_id/:namespace/:name/pods", h.GetStatefulSetPods) // 获取StatefulSet Pod列表 + k8sGroup.GET("/statefulset/:cluster_id/:namespace/:name/history", h.GetStatefulSetHistory) // 获取StatefulSet版本历史 } } // GetStatefulSetList 获取StatefulSet列表 -func (k *K8sStatefulSetHandler) GetStatefulSetList(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) GetStatefulSetList(ctx *gin.Context) { var req model.GetStatefulSetListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -75,12 +75,12 @@ func (k *K8sStatefulSetHandler) GetStatefulSetList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.statefulSetService.GetStatefulSetList(ctx, &req) + return h.statefulSetService.GetStatefulSetList(ctx, &req) }) } // GetStatefulSetDetails 获取StatefulSet详情 -func (k *K8sStatefulSetHandler) GetStatefulSetDetails(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) GetStatefulSetDetails(ctx *gin.Context) { var req model.GetStatefulSetDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -106,12 +106,12 @@ func (k *K8sStatefulSetHandler) GetStatefulSetDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.statefulSetService.GetStatefulSetDetails(ctx, &req) + return h.statefulSetService.GetStatefulSetDetails(ctx, &req) }) } // GetStatefulSetYaml 获取StatefulSet YAML -func (k *K8sStatefulSetHandler) GetStatefulSetYaml(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) GetStatefulSetYaml(ctx *gin.Context) { var req model.GetStatefulSetYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -137,12 +137,12 @@ func (k *K8sStatefulSetHandler) GetStatefulSetYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.statefulSetService.GetStatefulSetYaml(ctx, &req) + return h.statefulSetService.GetStatefulSetYaml(ctx, &req) }) } // CreateStatefulSet 创建StatefulSet -func (k *K8sStatefulSetHandler) CreateStatefulSet(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) CreateStatefulSet(ctx *gin.Context) { var req model.CreateStatefulSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -154,12 +154,12 @@ func (k *K8sStatefulSetHandler) CreateStatefulSet(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.statefulSetService.CreateStatefulSet(ctx, &req) + return nil, h.statefulSetService.CreateStatefulSet(ctx, &req) }) } // CreateStatefulSetByYaml 通过YAML创建StatefulSet -func (k *K8sStatefulSetHandler) CreateStatefulSetByYaml(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) CreateStatefulSetByYaml(ctx *gin.Context) { var req model.CreateStatefulSetByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -171,12 +171,12 @@ func (k *K8sStatefulSetHandler) CreateStatefulSetByYaml(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.statefulSetService.CreateStatefulSetByYaml(ctx, &req) + return nil, h.statefulSetService.CreateStatefulSetByYaml(ctx, &req) }) } // UpdateStatefulSet 更新StatefulSet -func (k *K8sStatefulSetHandler) UpdateStatefulSet(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) UpdateStatefulSet(ctx *gin.Context) { var req model.UpdateStatefulSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -202,12 +202,12 @@ func (k *K8sStatefulSetHandler) UpdateStatefulSet(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.statefulSetService.UpdateStatefulSet(ctx, &req) + return nil, h.statefulSetService.UpdateStatefulSet(ctx, &req) }) } // UpdateStatefulSetByYaml 通过YAML更新StatefulSet -func (k *K8sStatefulSetHandler) UpdateStatefulSetByYaml(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) UpdateStatefulSetByYaml(ctx *gin.Context) { var req model.UpdateStatefulSetByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -233,12 +233,12 @@ func (k *K8sStatefulSetHandler) UpdateStatefulSetByYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.statefulSetService.UpdateStatefulSetByYaml(ctx, &req) + return nil, h.statefulSetService.UpdateStatefulSetByYaml(ctx, &req) }) } // DeleteStatefulSet 删除StatefulSet -func (k *K8sStatefulSetHandler) DeleteStatefulSet(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) DeleteStatefulSet(ctx *gin.Context) { var req model.DeleteStatefulSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -264,12 +264,12 @@ func (k *K8sStatefulSetHandler) DeleteStatefulSet(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.statefulSetService.DeleteStatefulSet(ctx, &req) + return nil, h.statefulSetService.DeleteStatefulSet(ctx, &req) }) } // RestartStatefulSet 重启StatefulSet -func (k *K8sStatefulSetHandler) RestartStatefulSet(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) RestartStatefulSet(ctx *gin.Context) { var req model.RestartStatefulSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -295,12 +295,12 @@ func (k *K8sStatefulSetHandler) RestartStatefulSet(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.statefulSetService.RestartStatefulSet(ctx, &req) + return nil, h.statefulSetService.RestartStatefulSet(ctx, &req) }) } // ScaleStatefulSet 缩放StatefulSet -func (k *K8sStatefulSetHandler) ScaleStatefulSet(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) ScaleStatefulSet(ctx *gin.Context) { var req model.ScaleStatefulSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -326,12 +326,12 @@ func (k *K8sStatefulSetHandler) ScaleStatefulSet(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.statefulSetService.ScaleStatefulSet(ctx, &req) + return nil, h.statefulSetService.ScaleStatefulSet(ctx, &req) }) } // RollbackStatefulSet 回滚StatefulSet -func (k *K8sStatefulSetHandler) RollbackStatefulSet(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) RollbackStatefulSet(ctx *gin.Context) { var req model.RollbackStatefulSetReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -357,12 +357,12 @@ func (k *K8sStatefulSetHandler) RollbackStatefulSet(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.statefulSetService.RollbackStatefulSet(ctx, &req) + return nil, h.statefulSetService.RollbackStatefulSet(ctx, &req) }) } // GetStatefulSetPods 获取StatefulSet下的Pod列表 -func (k *K8sStatefulSetHandler) GetStatefulSetPods(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) GetStatefulSetPods(ctx *gin.Context) { var req model.GetStatefulSetPodsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -388,12 +388,12 @@ func (k *K8sStatefulSetHandler) GetStatefulSetPods(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.statefulSetService.GetStatefulSetPods(ctx, &req) + return h.statefulSetService.GetStatefulSetPods(ctx, &req) }) } // GetStatefulSetHistory 获取StatefulSet历史 -func (k *K8sStatefulSetHandler) GetStatefulSetHistory(ctx *gin.Context) { +func (h *K8sStatefulSetHandler) GetStatefulSetHistory(ctx *gin.Context) { var req model.GetStatefulSetHistoryReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -419,6 +419,6 @@ func (k *K8sStatefulSetHandler) GetStatefulSetHistory(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.statefulSetService.GetStatefulSetHistory(ctx, &req) + return h.statefulSetService.GetStatefulSetHistory(ctx, &req) }) } diff --git a/internal/k8s/api/svc.go b/internal/k8s/api/svc.go index a6b3d77f..aa53e371 100644 --- a/internal/k8s/api/svc.go +++ b/internal/k8s/api/svc.go @@ -42,23 +42,23 @@ func NewK8sSvcHandler(svcService service.SvcService) *K8sSvcHandler { } } -func (k *K8sSvcHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sSvcHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/service/:cluster_id/list", k.GetServiceList) // 获取Service列表 - k8sGroup.GET("/service/:cluster_id/:namespace/:name/detail", k.GetServiceDetails) // 获取Service详情 - k8sGroup.GET("/service/:cluster_id/:namespace/:name/detail/yaml", k.GetServiceYaml) // 获取Service YAML - k8sGroup.POST("/service/:cluster_id/create", k.CreateService) // 创建Service - k8sGroup.POST("/service/:cluster_id/create/yaml", k.CreateServiceByYaml) // 通过YAML创建Service - k8sGroup.PUT("/service/:cluster_id/:namespace/:name/update", k.UpdateService) // 更新Service - k8sGroup.PUT("/service/:cluster_id/:namespace/:name/update/yaml", k.UpdateServiceByYaml) // 通过YAML更新Service - k8sGroup.DELETE("/service/:cluster_id/:namespace/:name/delete", k.DeleteService) // 删除Service - k8sGroup.GET("/service/:cluster_id/:namespace/:name/endpoints", k.GetServiceEndpoints) // 获取Service端点 + k8sGroup.GET("/service/:cluster_id/list", h.GetServiceList) // 获取Service列表 + k8sGroup.GET("/service/:cluster_id/:namespace/:name/detail", h.GetServiceDetails) // 获取Service详情 + k8sGroup.GET("/service/:cluster_id/:namespace/:name/detail/yaml", h.GetServiceYaml) // 获取Service YAML + k8sGroup.POST("/service/:cluster_id/create", h.CreateService) // 创建Service + k8sGroup.POST("/service/:cluster_id/create/yaml", h.CreateServiceByYaml) // 通过YAML创建Service + k8sGroup.PUT("/service/:cluster_id/:namespace/:name/update", h.UpdateService) // 更新Service + k8sGroup.PUT("/service/:cluster_id/:namespace/:name/update/yaml", h.UpdateServiceByYaml) // 通过YAML更新Service + k8sGroup.DELETE("/service/:cluster_id/:namespace/:name/delete", h.DeleteService) // 删除Service + k8sGroup.GET("/service/:cluster_id/:namespace/:name/endpoints", h.GetServiceEndpoints) // 获取Service端点 } } // GetServiceList 获取Service列表 -func (k *K8sSvcHandler) GetServiceList(ctx *gin.Context) { +func (h *K8sSvcHandler) GetServiceList(ctx *gin.Context) { var req model.GetServiceListReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -70,12 +70,12 @@ func (k *K8sSvcHandler) GetServiceList(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.svcService.GetServiceList(ctx, &req) + return h.svcService.GetServiceList(ctx, &req) }) } // GetServiceDetails 获取Service详情 -func (k *K8sSvcHandler) GetServiceDetails(ctx *gin.Context) { +func (h *K8sSvcHandler) GetServiceDetails(ctx *gin.Context) { var req model.GetServiceDetailsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -101,12 +101,12 @@ func (k *K8sSvcHandler) GetServiceDetails(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.svcService.GetServiceDetails(ctx, &req) + return h.svcService.GetServiceDetails(ctx, &req) }) } // GetServiceYaml 获取Service YAML -func (k *K8sSvcHandler) GetServiceYaml(ctx *gin.Context) { +func (h *K8sSvcHandler) GetServiceYaml(ctx *gin.Context) { var req model.GetServiceYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -132,12 +132,12 @@ func (k *K8sSvcHandler) GetServiceYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.svcService.GetServiceYaml(ctx, &req) + return h.svcService.GetServiceYaml(ctx, &req) }) } // CreateService 创建Service -func (k *K8sSvcHandler) CreateService(ctx *gin.Context) { +func (h *K8sSvcHandler) CreateService(ctx *gin.Context) { var req model.CreateServiceReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -149,12 +149,12 @@ func (k *K8sSvcHandler) CreateService(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.svcService.CreateService(ctx, &req) + return nil, h.svcService.CreateService(ctx, &req) }) } // UpdateService 更新Service -func (k *K8sSvcHandler) UpdateService(ctx *gin.Context) { +func (h *K8sSvcHandler) UpdateService(ctx *gin.Context) { var req model.UpdateServiceReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -180,12 +180,12 @@ func (k *K8sSvcHandler) UpdateService(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.svcService.UpdateService(ctx, &req) + return nil, h.svcService.UpdateService(ctx, &req) }) } // DeleteService 删除Service -func (k *K8sSvcHandler) DeleteService(ctx *gin.Context) { +func (h *K8sSvcHandler) DeleteService(ctx *gin.Context) { var req model.DeleteServiceReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -211,12 +211,12 @@ func (k *K8sSvcHandler) DeleteService(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.svcService.DeleteService(ctx, &req) + return nil, h.svcService.DeleteService(ctx, &req) }) } // GetServiceEndpoints 获取Service端点 -func (k *K8sSvcHandler) GetServiceEndpoints(ctx *gin.Context) { +func (h *K8sSvcHandler) GetServiceEndpoints(ctx *gin.Context) { var req model.GetServiceEndpointsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -242,14 +242,14 @@ func (k *K8sSvcHandler) GetServiceEndpoints(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.svcService.GetServiceEndpoints(ctx, &req) + return h.svcService.GetServiceEndpoints(ctx, &req) }) } // YAML操作方法 // CreateServiceByYaml 通过YAML创建Service -func (k *K8sSvcHandler) CreateServiceByYaml(ctx *gin.Context) { +func (h *K8sSvcHandler) CreateServiceByYaml(ctx *gin.Context) { var req model.CreateServiceByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -261,12 +261,12 @@ func (k *K8sSvcHandler) CreateServiceByYaml(ctx *gin.Context) { req.ClusterID = clusterID utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.svcService.CreateServiceByYaml(ctx, &req) + return nil, h.svcService.CreateServiceByYaml(ctx, &req) }) } // UpdateServiceByYaml 通过YAML更新Service -func (k *K8sSvcHandler) UpdateServiceByYaml(ctx *gin.Context) { +func (h *K8sSvcHandler) UpdateServiceByYaml(ctx *gin.Context) { var req model.UpdateServiceByYamlReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -292,6 +292,6 @@ func (k *K8sSvcHandler) UpdateServiceByYaml(ctx *gin.Context) { req.Name = name utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.svcService.UpdateServiceByYaml(ctx, &req) + return nil, h.svcService.UpdateServiceByYaml(ctx, &req) }) } diff --git a/internal/k8s/api/yaml_task.go b/internal/k8s/api/yaml_task.go index 781eb10a..daa6931a 100644 --- a/internal/k8s/api/yaml_task.go +++ b/internal/k8s/api/yaml_task.go @@ -42,19 +42,19 @@ func NewK8sYamlTaskHandler(yamlTaskService service.YamlTaskService) *K8sYamlTask } } -func (k *K8sYamlTaskHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sYamlTaskHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/yaml_task/:cluster_id/list", k.GetYamlTaskList) // 获取 YAML 任务列表 - k8sGroup.POST("/yaml_task/:cluster_id/create", k.CreateYamlTask) // 创建新的 YAML 任务 - k8sGroup.POST("/yaml_task/:cluster_id/:id/update", k.UpdateYamlTask) // 更新指定 ID 的 YAML 任务 - k8sGroup.POST("/yaml_task/:cluster_id/:id/apply", k.ApplyYamlTask) // 应用指定 ID 的 YAML 任务 - k8sGroup.DELETE("/yaml_task/:cluster_id/:id/delete", k.DeleteYamlTask) // 删除指定 ID 的 YAML 任务 + k8sGroup.GET("/yaml_task/:cluster_id/list", h.GetYamlTaskList) // 获取 YAML 任务列表 + k8sGroup.POST("/yaml_task/:cluster_id/create", h.CreateYamlTask) // 创建新的 YAML 任务 + k8sGroup.POST("/yaml_task/:cluster_id/:id/update", h.UpdateYamlTask) // 更新指定 ID 的 YAML 任务 + k8sGroup.POST("/yaml_task/:cluster_id/:id/apply", h.ApplyYamlTask) // 应用指定 ID 的 YAML 任务 + k8sGroup.DELETE("/yaml_task/:cluster_id/:id/delete", h.DeleteYamlTask) // 删除指定 ID 的 YAML 任务 } } // GetYamlTaskList 获取 YAML 任务列表 -func (k *K8sYamlTaskHandler) GetYamlTaskList(ctx *gin.Context) { +func (h *K8sYamlTaskHandler) GetYamlTaskList(ctx *gin.Context) { var req model.YamlTaskListReq clusterId, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -66,12 +66,12 @@ func (k *K8sYamlTaskHandler) GetYamlTaskList(ctx *gin.Context) { req.ClusterID = clusterId utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.yamlTaskService.GetYamlTaskList(ctx, &req) + return h.yamlTaskService.GetYamlTaskList(ctx, &req) }) } // CreateYamlTask 创建新的 YAML 任务 -func (k *K8sYamlTaskHandler) CreateYamlTask(ctx *gin.Context) { +func (h *K8sYamlTaskHandler) CreateYamlTask(ctx *gin.Context) { var req model.YamlTaskCreateReq clusterId, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -85,12 +85,12 @@ func (k *K8sYamlTaskHandler) CreateYamlTask(ctx *gin.Context) { req.ClusterID = clusterId utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.yamlTaskService.CreateYamlTask(ctx, &req) + return nil, h.yamlTaskService.CreateYamlTask(ctx, &req) }) } // UpdateYamlTask 更新指定 ID 的 YAML 任务 -func (k *K8sYamlTaskHandler) UpdateYamlTask(ctx *gin.Context) { +func (h *K8sYamlTaskHandler) UpdateYamlTask(ctx *gin.Context) { var req model.YamlTaskUpdateReq clusterId, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -111,12 +111,12 @@ func (k *K8sYamlTaskHandler) UpdateYamlTask(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.yamlTaskService.UpdateYamlTask(ctx, &req) + return nil, h.yamlTaskService.UpdateYamlTask(ctx, &req) }) } // ApplyYamlTask 应用指定 ID 的 YAML 任务 -func (k *K8sYamlTaskHandler) ApplyYamlTask(ctx *gin.Context) { +func (h *K8sYamlTaskHandler) ApplyYamlTask(ctx *gin.Context) { var req model.YamlTaskExecuteReq id, err := utils.GetParamID(ctx) @@ -135,12 +135,12 @@ func (k *K8sYamlTaskHandler) ApplyYamlTask(ctx *gin.Context) { req.ClusterID = clusterId utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.yamlTaskService.ApplyYamlTask(ctx, &req) + return nil, h.yamlTaskService.ApplyYamlTask(ctx, &req) }) } // DeleteYamlTask 删除指定 ID 的 YAML 任务 -func (k *K8sYamlTaskHandler) DeleteYamlTask(ctx *gin.Context) { +func (h *K8sYamlTaskHandler) DeleteYamlTask(ctx *gin.Context) { var req model.YamlTaskDeleteReq id, err := utils.GetParamID(ctx) @@ -159,6 +159,6 @@ func (k *K8sYamlTaskHandler) DeleteYamlTask(ctx *gin.Context) { req.ClusterID = clusterId utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.yamlTaskService.DeleteYamlTask(ctx, &req) + return nil, h.yamlTaskService.DeleteYamlTask(ctx, &req) }) } diff --git a/internal/k8s/api/yaml_template.go b/internal/k8s/api/yaml_template.go index 80287116..c8d00df4 100644 --- a/internal/k8s/api/yaml_template.go +++ b/internal/k8s/api/yaml_template.go @@ -42,20 +42,20 @@ func NewK8sYamlTemplateHandler(yamlTemplateService service.YamlTemplateService) } } -func (k *K8sYamlTemplateHandler) RegisterRouters(server *gin.Engine) { +func (h *K8sYamlTemplateHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - k8sGroup.GET("/yaml_template/:cluster_id/list", k.GetYamlTemplateList) // 获取 YAML 模板列表 - k8sGroup.POST("/yaml_template/:cluster_id/create", k.CreateYamlTemplate) // 创建新的 YAML 模板 - k8sGroup.POST("/yaml_template/:cluster_id/check", k.CheckYamlTemplate) // 检查 YAML 模板是否可用 - k8sGroup.POST("/yaml_template/:cluster_id/:id/update", k.UpdateYamlTemplate) // 更新指定 ID 的 YAML 模板 - k8sGroup.DELETE("/yaml_template/:cluster_id/:id/delete", k.DeleteYamlTemplate) // 删除指定 ID 的 YAML 模板 - k8sGroup.GET("/yaml_template/:cluster_id/:id/yaml", k.GetYamlTemplateDetail) + k8sGroup.GET("/yaml_template/:cluster_id/list", h.GetYamlTemplateList) // 获取 YAML 模板列表 + k8sGroup.POST("/yaml_template/:cluster_id/create", h.CreateYamlTemplate) // 创建新的 YAML 模板 + k8sGroup.POST("/yaml_template/:cluster_id/check", h.CheckYamlTemplate) // 检查 YAML 模板是否可用 + k8sGroup.POST("/yaml_template/:cluster_id/:id/update", h.UpdateYamlTemplate) // 更新指定 ID 的 YAML 模板 + k8sGroup.DELETE("/yaml_template/:cluster_id/:id/delete", h.DeleteYamlTemplate) // 删除指定 ID 的 YAML 模板 + k8sGroup.GET("/yaml_template/:cluster_id/:id/yaml", h.GetYamlTemplateDetail) } } // GetYamlTemplateList 获取 YAML 模板列表 -func (k *K8sYamlTemplateHandler) GetYamlTemplateList(ctx *gin.Context) { +func (h *K8sYamlTemplateHandler) GetYamlTemplateList(ctx *gin.Context) { var req model.YamlTemplateListReq clusterId, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -67,12 +67,12 @@ func (k *K8sYamlTemplateHandler) GetYamlTemplateList(ctx *gin.Context) { req.ClusterID = clusterId utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.yamlTemplateService.GetYamlTemplateList(ctx, &req) + return h.yamlTemplateService.GetYamlTemplateList(ctx, &req) }) } // CreateYamlTemplate 创建新的 YAML 模板 -func (k *K8sYamlTemplateHandler) CreateYamlTemplate(ctx *gin.Context) { +func (h *K8sYamlTemplateHandler) CreateYamlTemplate(ctx *gin.Context) { var req model.YamlTemplateCreateReq clusterId, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -86,12 +86,12 @@ func (k *K8sYamlTemplateHandler) CreateYamlTemplate(ctx *gin.Context) { req.UserID = uc.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.yamlTemplateService.CreateYamlTemplate(ctx, &req) + return nil, h.yamlTemplateService.CreateYamlTemplate(ctx, &req) }) } // UpdateYamlTemplate 更新指定 ID 的 YAML 模板 -func (k *K8sYamlTemplateHandler) UpdateYamlTemplate(ctx *gin.Context) { +func (h *K8sYamlTemplateHandler) UpdateYamlTemplate(ctx *gin.Context) { var req model.YamlTemplateUpdateReq clusterId, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -112,12 +112,12 @@ func (k *K8sYamlTemplateHandler) UpdateYamlTemplate(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.yamlTemplateService.UpdateYamlTemplate(ctx, &req) + return nil, h.yamlTemplateService.UpdateYamlTemplate(ctx, &req) }) } // DeleteYamlTemplate 删除指定 ID 的 YAML 模板 -func (k *K8sYamlTemplateHandler) DeleteYamlTemplate(ctx *gin.Context) { +func (h *K8sYamlTemplateHandler) DeleteYamlTemplate(ctx *gin.Context) { var req model.YamlTemplateDeleteReq id, err := utils.GetParamID(ctx) @@ -136,12 +136,12 @@ func (k *K8sYamlTemplateHandler) DeleteYamlTemplate(ctx *gin.Context) { req.ClusterID = clusterId utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.yamlTemplateService.DeleteYamlTemplate(ctx, &req) + return nil, h.yamlTemplateService.DeleteYamlTemplate(ctx, &req) }) } // CheckYamlTemplate 检查 YAML 模板 -func (k *K8sYamlTemplateHandler) CheckYamlTemplate(ctx *gin.Context) { +func (h *K8sYamlTemplateHandler) CheckYamlTemplate(ctx *gin.Context) { var req model.YamlTemplateCheckReq clusterId, err := utils.GetCustomParamID(ctx, "cluster_id") @@ -153,12 +153,12 @@ func (k *K8sYamlTemplateHandler) CheckYamlTemplate(ctx *gin.Context) { req.ClusterID = clusterId utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, k.yamlTemplateService.CheckYamlTemplate(ctx, &req) + return nil, h.yamlTemplateService.CheckYamlTemplate(ctx, &req) }) } // GetYamlTemplateDetail 获取 YAML 模板详情 -func (k *K8sYamlTemplateHandler) GetYamlTemplateDetail(ctx *gin.Context) { +func (h *K8sYamlTemplateHandler) GetYamlTemplateDetail(ctx *gin.Context) { var req model.YamlTemplateDetailReq id, err := utils.GetParamID(ctx) @@ -177,6 +177,6 @@ func (k *K8sYamlTemplateHandler) GetYamlTemplateDetail(ctx *gin.Context) { req.ClusterID = clusterId utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return k.yamlTemplateService.GetYamlTemplateDetail(ctx, &req) + return h.yamlTemplateService.GetYamlTemplateDetail(ctx, &req) }) } diff --git a/internal/k8s/dao/cluster_dao.go b/internal/k8s/dao/cluster_dao.go index 00c6b29d..25fcce5d 100644 --- a/internal/k8s/dao/cluster_dao.go +++ b/internal/k8s/dao/cluster_dao.go @@ -58,9 +58,9 @@ func NewClusterDAO(db *gorm.DB, l *zap.Logger) ClusterDAO { } // GetClusterList 获取集群列表 -func (c *clusterDAO) GetClusterList(ctx context.Context, req *model.ListClustersReq) ([]*model.K8sCluster, int64, error) { +func (d *clusterDAO) GetClusterList(ctx context.Context, req *model.ListClustersReq) ([]*model.K8sCluster, int64, error) { if req == nil { - c.l.Error("GetClusterList: 请求参数不能为空") + d.l.Error("GetClusterList: 请求参数不能为空") return nil, 0, errors.New("请求参数不能为空") } @@ -68,7 +68,7 @@ func (c *clusterDAO) GetClusterList(ctx context.Context, req *model.ListClusters var total int64 // 构建基础查询 - query := c.db.WithContext(ctx).Model(&model.K8sCluster{}) + query := d.db.WithContext(ctx).Model(&model.K8sCluster{}) // 应用过滤条件 if req.Status != "" { @@ -86,7 +86,7 @@ func (c *clusterDAO) GetClusterList(ctx context.Context, req *model.ListClusters // 获取总数 if err := query.Count(&total).Error; err != nil { - c.l.Error("GetClusterList: 统计集群总数失败", + d.l.Error("GetClusterList: 统计集群总数失败", zap.String("status", req.Status), zap.String("env", req.Env), zap.String("search", req.Search), @@ -107,7 +107,7 @@ func (c *clusterDAO) GetClusterList(ctx context.Context, req *model.ListClusters // 执行查询并排序 if err := query.Order("updated_at DESC, id DESC").Find(&clusters).Error; err != nil { - c.l.Error("GetClusterList: 查询集群列表失败", + d.l.Error("GetClusterList: 查询集群列表失败", zap.Int("page", req.Page), zap.Int("size", req.Size), zap.Error(err)) @@ -118,19 +118,19 @@ func (c *clusterDAO) GetClusterList(ctx context.Context, req *model.ListClusters } // CreateCluster 创建集群 -func (c *clusterDAO) CreateCluster(ctx context.Context, cluster *model.K8sCluster) error { +func (d *clusterDAO) CreateCluster(ctx context.Context, cluster *model.K8sCluster) error { if cluster == nil { - c.l.Error("CreateCluster: 集群信息不能为空") + d.l.Error("CreateCluster: 集群信息不能为空") return errors.New("集群信息不能为空") } if cluster.Name == "" { - c.l.Error("CreateCluster: 集群名称不能为空") + d.l.Error("CreateCluster: 集群名称不能为空") return errors.New("集群名称不能为空") } - if err := c.db.WithContext(ctx).Create(cluster).Error; err != nil { - c.l.Error("CreateCluster: 创建集群失败", + if err := d.db.WithContext(ctx).Create(cluster).Error; err != nil { + d.l.Error("CreateCluster: 创建集群失败", zap.String("name", cluster.Name), zap.String("api_server", cluster.ApiServerAddr), zap.Error(err)) @@ -141,26 +141,26 @@ func (c *clusterDAO) CreateCluster(ctx context.Context, cluster *model.K8sCluste } // UpdateCluster 更新集群 -func (c *clusterDAO) UpdateCluster(ctx context.Context, cluster *model.K8sCluster) error { +func (d *clusterDAO) UpdateCluster(ctx context.Context, cluster *model.K8sCluster) error { if cluster == nil { - c.l.Error("UpdateCluster: 集群信息不能为空") + d.l.Error("UpdateCluster: 集群信息不能为空") return errors.New("集群信息不能为空") } if cluster.ID <= 0 { - c.l.Error("UpdateCluster: 集群ID不有效", zap.Int("id", cluster.ID)) + d.l.Error("UpdateCluster: 集群ID不有效", zap.Int("id", cluster.ID)) return errors.New("集群ID不有效") } if cluster.Name == "" { - c.l.Error("UpdateCluster: 集群名称不能为空") + d.l.Error("UpdateCluster: 集群名称不能为空") return errors.New("集群名称不能为空") } // 使用普通更新而非事务,除非必要 - result := c.db.WithContext(ctx).Model(cluster).Where("id = ?", cluster.ID).Updates(cluster) + result := d.db.WithContext(ctx).Model(cluster).Where("id = ?", cluster.ID).Updates(cluster) if result.Error != nil { - c.l.Error("UpdateCluster: 更新集群失败", + d.l.Error("UpdateCluster: 更新集群失败", zap.Int("id", cluster.ID), zap.String("name", cluster.Name), zap.Error(result.Error)) @@ -168,7 +168,7 @@ func (c *clusterDAO) UpdateCluster(ctx context.Context, cluster *model.K8sCluste } if result.RowsAffected == 0 { - c.l.Warn("UpdateCluster: 未找到要更新的集群", zap.Int("id", cluster.ID)) + d.l.Warn("UpdateCluster: 未找到要更新的集群", zap.Int("id", cluster.ID)) return fmt.Errorf("集群不存在,ID: %d", cluster.ID) } @@ -176,23 +176,23 @@ func (c *clusterDAO) UpdateCluster(ctx context.Context, cluster *model.K8sCluste } // UpdateClusterStatus 更新集群状态 -func (c *clusterDAO) UpdateClusterStatus(ctx context.Context, id int, status model.ClusterStatus) error { +func (d *clusterDAO) UpdateClusterStatus(ctx context.Context, id int, status model.ClusterStatus) error { if id <= 0 { - c.l.Error("UpdateClusterStatus: 集群ID不有效", zap.Int("id", id)) + d.l.Error("UpdateClusterStatus: 集群ID不有效", zap.Int("id", id)) return errors.New("集群ID不有效") } if status <= 0 { - c.l.Error("UpdateClusterStatus: 状态值无效", zap.Int8("status", int8(status))) + d.l.Error("UpdateClusterStatus: 状态值无效", zap.Int8("status", int8(status))) return errors.New("状态值无效") } - result := c.db.WithContext(ctx).Model(&model.K8sCluster{}).Where("id = ?", id).Updates(map[string]interface{}{ + result := d.db.WithContext(ctx).Model(&model.K8sCluster{}).Where("id = ?", id).Updates(map[string]interface{}{ "status": int8(status), }) if result.Error != nil { - c.l.Error("UpdateClusterStatus: 更新集群状态失败", + d.l.Error("UpdateClusterStatus: 更新集群状态失败", zap.Int("id", id), zap.Int8("status", int8(status)), zap.Error(result.Error)) @@ -200,7 +200,7 @@ func (c *clusterDAO) UpdateClusterStatus(ctx context.Context, id int, status mod } if result.RowsAffected == 0 { - c.l.Warn("UpdateClusterStatus: 未找到要更新的集群", zap.Int("id", id)) + d.l.Warn("UpdateClusterStatus: 未找到要更新的集群", zap.Int("id", id)) return fmt.Errorf("集群不存在,ID: %d", id) } @@ -208,22 +208,22 @@ func (c *clusterDAO) UpdateClusterStatus(ctx context.Context, id int, status mod } // DeleteCluster 删除集群 -func (c *clusterDAO) DeleteCluster(ctx context.Context, id int) error { +func (d *clusterDAO) DeleteCluster(ctx context.Context, id int) error { if id <= 0 { - c.l.Error("DeleteCluster: 集群ID不有效", zap.Int("id", id)) + d.l.Error("DeleteCluster: 集群ID不有效", zap.Int("id", id)) return errors.New("集群ID不有效") } - result := c.db.WithContext(ctx).Where("id = ?", id).Delete(&model.K8sCluster{}) + result := d.db.WithContext(ctx).Where("id = ?", id).Delete(&model.K8sCluster{}) if result.Error != nil { - c.l.Error("DeleteCluster: 删除集群失败", + d.l.Error("DeleteCluster: 删除集群失败", zap.Int("id", id), zap.Error(result.Error)) return fmt.Errorf("删除集群失败: %w", result.Error) } if result.RowsAffected == 0 { - c.l.Warn("DeleteCluster: 未找到要删除的集群", zap.Int("id", id)) + d.l.Warn("DeleteCluster: 未找到要删除的集群", zap.Int("id", id)) return fmt.Errorf("集群不存在,ID: %d", id) } @@ -231,19 +231,19 @@ func (c *clusterDAO) DeleteCluster(ctx context.Context, id int) error { } // GetClusterByID 根据ID获取集群 -func (c *clusterDAO) GetClusterByID(ctx context.Context, id int) (*model.K8sCluster, error) { +func (d *clusterDAO) GetClusterByID(ctx context.Context, id int) (*model.K8sCluster, error) { if id <= 0 { - c.l.Error("GetClusterByID: 集群ID不有效", zap.Int("id", id)) + d.l.Error("GetClusterByID: 集群ID不有效", zap.Int("id", id)) return nil, errors.New("集群ID不有效") } var cluster model.K8sCluster - if err := c.db.WithContext(ctx).Where("id = ?", id).First(&cluster).Error; err != nil { + if err := d.db.WithContext(ctx).Where("id = ?", id).First(&cluster).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { - c.l.Debug("GetClusterByID: 集群不存在", zap.Int("id", id)) + d.l.Debug("GetClusterByID: 集群不存在", zap.Int("id", id)) return nil, err } - c.l.Error("GetClusterByID: 查询集群失败", + d.l.Error("GetClusterByID: 查询集群失败", zap.Int("id", id), zap.Error(err)) return nil, fmt.Errorf("查询集群失败: %w", err) @@ -253,19 +253,19 @@ func (c *clusterDAO) GetClusterByID(ctx context.Context, id int) (*model.K8sClus } // GetClusterByName 根据名称获取集群 -func (c *clusterDAO) GetClusterByName(ctx context.Context, name string) (*model.K8sCluster, error) { +func (d *clusterDAO) GetClusterByName(ctx context.Context, name string) (*model.K8sCluster, error) { if name == "" { - c.l.Error("GetClusterByName: 集群名称不能为空") + d.l.Error("GetClusterByName: 集群名称不能为空") return nil, errors.New("集群名称不能为空") } var cluster model.K8sCluster - if err := c.db.WithContext(ctx).Where("name = ?", name).First(&cluster).Error; err != nil { + if err := d.db.WithContext(ctx).Where("name = ?", name).First(&cluster).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { - c.l.Debug("GetClusterByName: 集群不存在", zap.String("name", name)) + d.l.Debug("GetClusterByName: 集群不存在", zap.String("name", name)) return nil, err } - c.l.Error("GetClusterByName: 查询集群失败", + d.l.Error("GetClusterByName: 查询集群失败", zap.String("name", name), zap.Error(err)) return nil, fmt.Errorf("查询集群失败: %w", err) diff --git a/internal/k8s/dao/yaml_task_dao.go b/internal/k8s/dao/yaml_task_dao.go index 3ee04da5..4493d8a9 100644 --- a/internal/k8s/dao/yaml_task_dao.go +++ b/internal/k8s/dao/yaml_task_dao.go @@ -56,10 +56,10 @@ func NewYamlTaskDAO(db *gorm.DB, logger *zap.Logger) YamlTaskDAO { } // ListAllYamlTasks 查询所有 YAML 任务 -func (y *yamlTaskDAO) ListAllYamlTasks(ctx context.Context, req *model.YamlTaskListReq) ([]*model.K8sYamlTask, error) { +func (d *yamlTaskDAO) ListAllYamlTasks(ctx context.Context, req *model.YamlTaskListReq) ([]*model.K8sYamlTask, error) { var tasks []*model.K8sYamlTask - query := y.db.WithContext(ctx) + query := d.db.WithContext(ctx) // 根据集群ID过滤 if req.ClusterID > 0 { @@ -91,7 +91,7 @@ func (y *yamlTaskDAO) ListAllYamlTasks(ctx context.Context, req *model.YamlTaskL query = query.Order("created_at DESC") if err := query.Find(&tasks).Error; err != nil { - y.logger.Error("ListAllYamlTasks 查询所有Yaml任务失败", zap.Error(err)) + d.logger.Error("ListAllYamlTasks 查询所有Yaml任务失败", zap.Error(err)) return nil, err } @@ -99,9 +99,9 @@ func (y *yamlTaskDAO) ListAllYamlTasks(ctx context.Context, req *model.YamlTaskL } // CreateYamlTask 创建 YAML 任务 -func (y *yamlTaskDAO) CreateYamlTask(ctx context.Context, task *model.K8sYamlTask) error { - if err := y.db.WithContext(ctx).Create(task).Error; err != nil { - y.logger.Error("CreateYamlTask 创建Yaml任务失败", zap.Error(err), zap.Any("task", task)) +func (d *yamlTaskDAO) CreateYamlTask(ctx context.Context, task *model.K8sYamlTask) error { + if err := d.db.WithContext(ctx).Create(task).Error; err != nil { + d.logger.Error("CreateYamlTask 创建Yaml任务失败", zap.Error(err), zap.Any("task", task)) return err } @@ -109,9 +109,9 @@ func (y *yamlTaskDAO) CreateYamlTask(ctx context.Context, task *model.K8sYamlTas } // UpdateYamlTask 更新 YAML 任务 -func (y *yamlTaskDAO) UpdateYamlTask(ctx context.Context, task *model.K8sYamlTask) error { - if err := y.db.WithContext(ctx).Model(&model.K8sYamlTask{}).Where("id = ?", task.ID).Updates(task).Error; err != nil { - y.logger.Error("UpdateYamlTask 更新Yaml任务失败", zap.Int("taskID", task.ID), zap.Error(err)) +func (d *yamlTaskDAO) UpdateYamlTask(ctx context.Context, task *model.K8sYamlTask) error { + if err := d.db.WithContext(ctx).Model(&model.K8sYamlTask{}).Where("id = ?", task.ID).Updates(task).Error; err != nil { + d.logger.Error("UpdateYamlTask 更新Yaml任务失败", zap.Int("taskID", task.ID), zap.Error(err)) return err } @@ -119,9 +119,9 @@ func (y *yamlTaskDAO) UpdateYamlTask(ctx context.Context, task *model.K8sYamlTas } // DeleteYamlTask 删除 YAML 任务 -func (y *yamlTaskDAO) DeleteYamlTask(ctx context.Context, id int) error { - if err := y.db.WithContext(ctx).Where("id = ?", id).Delete(&model.K8sYamlTask{}).Error; err != nil { - y.logger.Error("DeleteYamlTask 删除Yaml任务失败", zap.Int("taskID", id), zap.Error(err)) +func (d *yamlTaskDAO) DeleteYamlTask(ctx context.Context, id int) error { + if err := d.db.WithContext(ctx).Where("id = ?", id).Delete(&model.K8sYamlTask{}).Error; err != nil { + d.logger.Error("DeleteYamlTask 删除Yaml任务失败", zap.Int("taskID", id), zap.Error(err)) return err } @@ -129,11 +129,11 @@ func (y *yamlTaskDAO) DeleteYamlTask(ctx context.Context, id int) error { } // GetYamlTaskByID 根据 ID 查询 YAML 任务 -func (y *yamlTaskDAO) GetYamlTaskByID(ctx context.Context, id int) (*model.K8sYamlTask, error) { +func (d *yamlTaskDAO) GetYamlTaskByID(ctx context.Context, id int) (*model.K8sYamlTask, error) { var task model.K8sYamlTask - if err := y.db.WithContext(ctx).Where("id = ?", id).First(&task).Error; err != nil { - y.logger.Error("GetYamlTaskByID 查询Yaml任务失败", zap.Int("taskID", id), zap.Error(err)) + if err := d.db.WithContext(ctx).Where("id = ?", id).First(&task).Error; err != nil { + d.logger.Error("GetYamlTaskByID 查询Yaml任务失败", zap.Int("taskID", id), zap.Error(err)) return nil, fmt.Errorf("YAML 任务 ID %d 未找到: %w", id, err) } @@ -141,17 +141,17 @@ func (y *yamlTaskDAO) GetYamlTaskByID(ctx context.Context, id int) (*model.K8sYa } // GetYamlTaskByTemplateID 根据模板 ID 查询 YAML 任务 -func (y *yamlTaskDAO) GetYamlTaskByTemplateID(ctx context.Context, templateID int) ([]*model.K8sYamlTask, error) { +func (d *yamlTaskDAO) GetYamlTaskByTemplateID(ctx context.Context, templateID int) ([]*model.K8sYamlTask, error) { var tasks []*model.K8sYamlTask - if err := y.db.WithContext(ctx).Where("template_id = ?", templateID).Find(&tasks).Error; err != nil { - y.logger.Error("GetYamlTaskByTemplateID 查询Yaml任务失败", zap.Int("templateID", templateID), zap.Error(err)) + if err := d.db.WithContext(ctx).Where("template_id = ?", templateID).Find(&tasks).Error; err != nil { + d.logger.Error("GetYamlTaskByTemplateID 查询Yaml任务失败", zap.Int("templateID", templateID), zap.Error(err)) return nil, err } // 若未找到任务,记录信息日志 if len(tasks) == 0 { - y.logger.Info("GetYamlTaskByTemplateID 未找到相关Yaml任务", zap.Int("templateID", templateID)) + d.logger.Info("GetYamlTaskByTemplateID 未找到相关Yaml任务", zap.Int("templateID", templateID)) } return tasks, nil diff --git a/internal/k8s/dao/yaml_template_dao.go b/internal/k8s/dao/yaml_template_dao.go index 3b28d13f..c42e94de 100644 --- a/internal/k8s/dao/yaml_template_dao.go +++ b/internal/k8s/dao/yaml_template_dao.go @@ -55,10 +55,10 @@ func NewYamlTemplateDAO(db *gorm.DB, l *zap.Logger) YamlTemplateDAO { } // ListAllYamlTemplates 查询所有 YAML 模板 -func (y *yamlTemplateDAO) ListAllYamlTemplates(ctx context.Context, req *model.YamlTemplateListReq) ([]*model.K8sYamlTemplate, error) { +func (d *yamlTemplateDAO) ListAllYamlTemplates(ctx context.Context, req *model.YamlTemplateListReq) ([]*model.K8sYamlTemplate, error) { var yamls []*model.K8sYamlTemplate - query := y.db.WithContext(ctx) + query := d.db.WithContext(ctx) // 根据集群ID过滤 if req.ClusterID > 0 { @@ -80,7 +80,7 @@ func (y *yamlTemplateDAO) ListAllYamlTemplates(ctx context.Context, req *model.Y query = query.Order("created_at DESC") if err := query.Find(&yamls).Error; err != nil { - y.l.Error("ListAllYamlTemplates 查询所有Yaml模板失败", zap.Error(err)) + d.l.Error("ListAllYamlTemplates 查询所有Yaml模板失败", zap.Error(err)) return nil, err } @@ -88,9 +88,9 @@ func (y *yamlTemplateDAO) ListAllYamlTemplates(ctx context.Context, req *model.Y } // CreateYamlTemplate 创建 YAML 模板 -func (y *yamlTemplateDAO) CreateYamlTemplate(ctx context.Context, yaml *model.K8sYamlTemplate) error { - if err := y.db.WithContext(ctx).Create(&yaml).Error; err != nil { - y.l.Error("CreateYamlTemplate 创建Yaml模板失败", zap.Error(err), zap.Any("yaml", yaml)) +func (d *yamlTemplateDAO) CreateYamlTemplate(ctx context.Context, yaml *model.K8sYamlTemplate) error { + if err := d.db.WithContext(ctx).Create(&yaml).Error; err != nil { + d.l.Error("CreateYamlTemplate 创建Yaml模板失败", zap.Error(err), zap.Any("yaml", yaml)) return err } @@ -98,14 +98,14 @@ func (y *yamlTemplateDAO) CreateYamlTemplate(ctx context.Context, yaml *model.K8 } // UpdateYamlTemplate 更新 YAML 模板 -func (y *yamlTemplateDAO) UpdateYamlTemplate(ctx context.Context, yaml *model.K8sYamlTemplate) error { +func (d *yamlTemplateDAO) UpdateYamlTemplate(ctx context.Context, yaml *model.K8sYamlTemplate) error { if yaml.ID == 0 { - y.l.Error("UpdateYamlTemplate ID 不能为空", zap.Any("yaml", yaml)) + d.l.Error("UpdateYamlTemplate ID 不能为空", zap.Any("yaml", yaml)) return fmt.Errorf("invalid yaml ID") } - if err := y.db.WithContext(ctx).Where("id = ? AND cluster_id = ?", yaml.ID, yaml.ClusterID).Updates(yaml).Error; err != nil { - y.l.Error("UpdateYamlTemplate 更新Yaml模板失败", zap.Int("yamlID", yaml.ID), zap.Error(err)) + if err := d.db.WithContext(ctx).Where("id = ? AND cluster_id = ?", yaml.ID, yaml.ClusterID).Updates(yaml).Error; err != nil { + d.l.Error("UpdateYamlTemplate 更新Yaml模板失败", zap.Int("yamlID", yaml.ID), zap.Error(err)) return err } @@ -113,14 +113,14 @@ func (y *yamlTemplateDAO) UpdateYamlTemplate(ctx context.Context, yaml *model.K8 } // DeleteYamlTemplate 删除 YAML 模板 -func (y *yamlTemplateDAO) DeleteYamlTemplate(ctx context.Context, id int, clusterId int) error { +func (d *yamlTemplateDAO) DeleteYamlTemplate(ctx context.Context, id int, clusterId int) error { if id == 0 { - y.l.Error("DeleteYamlTemplate ID 不能为空", zap.Int("id", id)) + d.l.Error("DeleteYamlTemplate ID 不能为空", zap.Int("id", id)) return fmt.Errorf("invalid yaml template ID") } - if err := y.db.WithContext(ctx).Where("id = ? AND cluster_id = ?", id, clusterId).Delete(&model.K8sYamlTemplate{}).Error; err != nil { - y.l.Error("DeleteYamlTemplate 删除Yaml模板失败", zap.Int("yamlID", id), zap.Error(err)) + if err := d.db.WithContext(ctx).Where("id = ? AND cluster_id = ?", id, clusterId).Delete(&model.K8sYamlTemplate{}).Error; err != nil { + d.l.Error("DeleteYamlTemplate 删除Yaml模板失败", zap.Int("yamlID", id), zap.Error(err)) return err } @@ -128,16 +128,16 @@ func (y *yamlTemplateDAO) DeleteYamlTemplate(ctx context.Context, id int, cluste } // GetYamlTemplateByID 根据 ID 查询 YAML 模板 -func (y *yamlTemplateDAO) GetYamlTemplateByID(ctx context.Context, id int, clusterId int) (*model.K8sYamlTemplate, error) { +func (d *yamlTemplateDAO) GetYamlTemplateByID(ctx context.Context, id int, clusterId int) (*model.K8sYamlTemplate, error) { if id == 0 { - y.l.Error("GetYamlTemplateByID ID 不能为空", zap.Int("id", id)) + d.l.Error("GetYamlTemplateByID ID 不能为空", zap.Int("id", id)) return nil, fmt.Errorf("invalid yaml template ID") } var yaml *model.K8sYamlTemplate - if err := y.db.WithContext(ctx).Where("id = ? AND cluster_id = ?", id, clusterId).First(&yaml).Error; err != nil { - y.l.Error("GetYamlTemplateByID 查询Yaml模板失败", zap.Int("yamlID", id), zap.Error(err)) + if err := d.db.WithContext(ctx).Where("id = ? AND cluster_id = ?", id, clusterId).First(&yaml).Error; err != nil { + d.l.Error("GetYamlTemplateByID 查询Yaml模板失败", zap.Int("yamlID", id), zap.Error(err)) return nil, err } diff --git a/internal/k8s/manager/clusterrole_manager.go b/internal/k8s/manager/clusterrole_manager.go index 4f9c2cd0..dcf224b6 100644 --- a/internal/k8s/manager/clusterrole_manager.go +++ b/internal/k8s/manager/clusterrole_manager.go @@ -61,36 +61,36 @@ func NewClusterRoleManager(client client.K8sClient, logger *zap.Logger) ClusterR } // CreateClusterRole 创建ClusterRole -func (c *clusterRoleManager) CreateClusterRole(ctx context.Context, clusterID int, clusterRole *rbacv1.ClusterRole) error { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleManager) CreateClusterRole(ctx context.Context, clusterID int, clusterRole *rbacv1.ClusterRole) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } _, err = clientset.RbacV1().ClusterRoles().Create(ctx, clusterRole, metav1.CreateOptions{}) if err != nil { - c.logger.Error("创建ClusterRole失败", zap.Error(err), + m.logger.Error("创建ClusterRole失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("name", clusterRole.Name)) return fmt.Errorf("创建ClusterRole %s 失败: %w", clusterRole.Name, err) } - c.logger.Info("成功创建ClusterRole", + m.logger.Info("成功创建ClusterRole", zap.Int("cluster_id", clusterID), zap.String("name", clusterRole.Name)) return nil } // GetClusterRole 获取单个ClusterRole -func (c *clusterRoleManager) GetClusterRole(ctx context.Context, clusterID int, name string) (*rbacv1.ClusterRole, error) { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleManager) GetClusterRole(ctx context.Context, clusterID int, name string) (*rbacv1.ClusterRole, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } clusterRole, err := clientset.RbacV1().ClusterRoles().Get(ctx, name, metav1.GetOptions{}) if err != nil { - c.logger.Error("获取ClusterRole失败", zap.Error(err), + m.logger.Error("获取ClusterRole失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("name", name)) return nil, fmt.Errorf("获取ClusterRole %s 失败: %w", name, err) } @@ -99,16 +99,16 @@ func (c *clusterRoleManager) GetClusterRole(ctx context.Context, clusterID int, } // GetClusterRoleList 获取ClusterRole列表 -func (c *clusterRoleManager) GetClusterRoleList(ctx context.Context, clusterID int, listOptions metav1.ListOptions) ([]*model.K8sClusterRole, error) { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleManager) GetClusterRoleList(ctx context.Context, clusterID int, listOptions metav1.ListOptions) ([]*model.K8sClusterRole, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } clusterRoles, err := clientset.RbacV1().ClusterRoles().List(ctx, listOptions) if err != nil { - c.logger.Error("获取ClusterRole列表失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取ClusterRole列表失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取ClusterRole列表失败: %w", err) } @@ -128,48 +128,48 @@ func (c *clusterRoleManager) GetClusterRoleList(ctx context.Context, clusterID i k8sClusterRoles = append(k8sClusterRoles, k8sClusterRole) } - c.logger.Debug("成功获取ClusterRole列表", + m.logger.Debug("成功获取ClusterRole列表", zap.Int("cluster_id", clusterID), zap.Int("count", len(clusterRoles.Items))) return k8sClusterRoles, nil } // UpdateClusterRole 更新ClusterRole -func (c *clusterRoleManager) UpdateClusterRole(ctx context.Context, clusterID int, clusterRole *rbacv1.ClusterRole) error { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleManager) UpdateClusterRole(ctx context.Context, clusterID int, clusterRole *rbacv1.ClusterRole) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } _, err = clientset.RbacV1().ClusterRoles().Update(ctx, clusterRole, metav1.UpdateOptions{}) if err != nil { - c.logger.Error("更新ClusterRole失败", zap.Error(err), + m.logger.Error("更新ClusterRole失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("name", clusterRole.Name)) return fmt.Errorf("更新ClusterRole %s 失败: %w", clusterRole.Name, err) } - c.logger.Info("成功更新ClusterRole", + m.logger.Info("成功更新ClusterRole", zap.Int("cluster_id", clusterID), zap.String("name", clusterRole.Name)) return nil } // DeleteClusterRole 删除ClusterRole -func (c *clusterRoleManager) DeleteClusterRole(ctx context.Context, clusterID int, name string, deleteOptions metav1.DeleteOptions) error { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleManager) DeleteClusterRole(ctx context.Context, clusterID int, name string, deleteOptions metav1.DeleteOptions) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } err = clientset.RbacV1().ClusterRoles().Delete(ctx, name, deleteOptions) if err != nil { - c.logger.Error("删除ClusterRole失败", zap.Error(err), + m.logger.Error("删除ClusterRole失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("name", name)) return fmt.Errorf("删除ClusterRole %s 失败: %w", name, err) } - c.logger.Info("成功删除ClusterRole", + m.logger.Info("成功删除ClusterRole", zap.Int("cluster_id", clusterID), zap.String("name", name)) return nil } diff --git a/internal/k8s/manager/clusterrolebinding_manager.go b/internal/k8s/manager/clusterrolebinding_manager.go index ee696cf4..ff96b779 100644 --- a/internal/k8s/manager/clusterrolebinding_manager.go +++ b/internal/k8s/manager/clusterrolebinding_manager.go @@ -63,36 +63,36 @@ func NewClusterRoleBindingManager(client client.K8sClient, logger *zap.Logger) C } // CreateClusterRoleBinding 创建ClusterRoleBinding -func (c *clusterRoleBindingManager) CreateClusterRoleBinding(ctx context.Context, clusterID int, clusterRoleBinding *rbacv1.ClusterRoleBinding) error { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleBindingManager) CreateClusterRoleBinding(ctx context.Context, clusterID int, clusterRoleBinding *rbacv1.ClusterRoleBinding) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } _, err = clientset.RbacV1().ClusterRoleBindings().Create(ctx, clusterRoleBinding, metav1.CreateOptions{}) if err != nil { - c.logger.Error("创建ClusterRoleBinding失败", zap.Error(err), + m.logger.Error("创建ClusterRoleBinding失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("name", clusterRoleBinding.Name)) return fmt.Errorf("创建ClusterRoleBinding %s 失败: %w", clusterRoleBinding.Name, err) } - c.logger.Info("成功创建ClusterRoleBinding", + m.logger.Info("成功创建ClusterRoleBinding", zap.Int("cluster_id", clusterID), zap.String("name", clusterRoleBinding.Name)) return nil } // GetClusterRoleBinding 获取单个ClusterRoleBinding -func (c *clusterRoleBindingManager) GetClusterRoleBinding(ctx context.Context, clusterID int, name string) (*rbacv1.ClusterRoleBinding, error) { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleBindingManager) GetClusterRoleBinding(ctx context.Context, clusterID int, name string) (*rbacv1.ClusterRoleBinding, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } clusterRoleBinding, err := clientset.RbacV1().ClusterRoleBindings().Get(ctx, name, metav1.GetOptions{}) if err != nil { - c.logger.Error("获取ClusterRoleBinding失败", zap.Error(err), + m.logger.Error("获取ClusterRoleBinding失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("name", name)) return nil, fmt.Errorf("获取ClusterRoleBinding %s 失败: %w", name, err) } @@ -101,16 +101,16 @@ func (c *clusterRoleBindingManager) GetClusterRoleBinding(ctx context.Context, c } // GetClusterRoleBindingList 获取ClusterRoleBinding列表(转换为模型) -func (c *clusterRoleBindingManager) GetClusterRoleBindingList(ctx context.Context, clusterID int, listOptions metav1.ListOptions) ([]*model.K8sClusterRoleBinding, error) { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleBindingManager) GetClusterRoleBindingList(ctx context.Context, clusterID int, listOptions metav1.ListOptions) ([]*model.K8sClusterRoleBinding, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } clusterRoleBindings, err := clientset.RbacV1().ClusterRoleBindings().List(ctx, listOptions) if err != nil { - c.logger.Error("获取ClusterRoleBinding列表失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取ClusterRoleBinding列表失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取ClusterRoleBinding列表失败: %w", err) } @@ -126,68 +126,68 @@ func (c *clusterRoleBindingManager) GetClusterRoleBindingList(ctx context.Contex k8sClusterRoleBindings = append(k8sClusterRoleBindings, &k8sClusterRoleBinding) } - c.logger.Debug("成功获取ClusterRoleBinding列表", + m.logger.Debug("成功获取ClusterRoleBinding列表", zap.Int("cluster_id", clusterID), zap.Int("count", len(clusterRoleBindings.Items))) return k8sClusterRoleBindings, nil } // GetClusterRoleBindingListRaw 获取ClusterRoleBinding原始列表 -func (c *clusterRoleBindingManager) GetClusterRoleBindingListRaw(ctx context.Context, clusterID int, listOptions metav1.ListOptions) (*rbacv1.ClusterRoleBindingList, error) { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleBindingManager) GetClusterRoleBindingListRaw(ctx context.Context, clusterID int, listOptions metav1.ListOptions) (*rbacv1.ClusterRoleBindingList, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } clusterRoleBindings, err := clientset.RbacV1().ClusterRoleBindings().List(ctx, listOptions) if err != nil { - c.logger.Error("获取ClusterRoleBinding列表失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取ClusterRoleBinding列表失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取ClusterRoleBinding列表失败: %w", err) } - c.logger.Debug("成功获取ClusterRoleBinding列表", + m.logger.Debug("成功获取ClusterRoleBinding列表", zap.Int("cluster_id", clusterID), zap.Int("count", len(clusterRoleBindings.Items))) return clusterRoleBindings, nil } // UpdateClusterRoleBinding 更新ClusterRoleBinding -func (c *clusterRoleBindingManager) UpdateClusterRoleBinding(ctx context.Context, clusterID int, clusterRoleBinding *rbacv1.ClusterRoleBinding) error { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleBindingManager) UpdateClusterRoleBinding(ctx context.Context, clusterID int, clusterRoleBinding *rbacv1.ClusterRoleBinding) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } _, err = clientset.RbacV1().ClusterRoleBindings().Update(ctx, clusterRoleBinding, metav1.UpdateOptions{}) if err != nil { - c.logger.Error("更新ClusterRoleBinding失败", zap.Error(err), + m.logger.Error("更新ClusterRoleBinding失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("name", clusterRoleBinding.Name)) return fmt.Errorf("更新ClusterRoleBinding %s 失败: %w", clusterRoleBinding.Name, err) } - c.logger.Info("成功更新ClusterRoleBinding", + m.logger.Info("成功更新ClusterRoleBinding", zap.Int("cluster_id", clusterID), zap.String("name", clusterRoleBinding.Name)) return nil } // DeleteClusterRoleBinding 删除ClusterRoleBinding -func (c *clusterRoleBindingManager) DeleteClusterRoleBinding(ctx context.Context, clusterID int, name string, deleteOptions metav1.DeleteOptions) error { - clientset, err := c.client.GetKubeClient(clusterID) +func (m *clusterRoleBindingManager) DeleteClusterRoleBinding(ctx context.Context, clusterID int, name string, deleteOptions metav1.DeleteOptions) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - c.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } err = clientset.RbacV1().ClusterRoleBindings().Delete(ctx, name, deleteOptions) if err != nil { - c.logger.Error("删除ClusterRoleBinding失败", zap.Error(err), + m.logger.Error("删除ClusterRoleBinding失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("name", name)) return fmt.Errorf("删除ClusterRoleBinding %s 失败: %w", name, err) } - c.logger.Info("成功删除ClusterRoleBinding", + m.logger.Info("成功删除ClusterRoleBinding", zap.Int("cluster_id", clusterID), zap.String("name", name)) return nil } diff --git a/internal/k8s/manager/daemonset_manager.go b/internal/k8s/manager/daemonset_manager.go index f085dfb4..db5d9f6b 100644 --- a/internal/k8s/manager/daemonset_manager.go +++ b/internal/k8s/manager/daemonset_manager.go @@ -70,29 +70,29 @@ func NewDaemonSetManager(clientFactory client.K8sClient, logger *zap.Logger) Dae } // getKubeClient 获取 Kubernetes 客户端 -func (d *daemonSetManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { - kubeClient, err := d.clientFactory.GetKubeClient(clusterID) +func (m *daemonSetManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { + kubeClient, err := m.clientFactory.GetKubeClient(clusterID) if err != nil { - d.logger.Error("获取 Kubernetes 客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) + m.logger.Error("获取 Kubernetes 客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, fmt.Errorf("获取 Kubernetes 客户端失败: %w", err) } return kubeClient, nil } // CreateDaemonSet 创建 DaemonSet -func (d *daemonSetManager) CreateDaemonSet(ctx context.Context, clusterID int, namespace string, daemonSet *appsv1.DaemonSet) error { +func (m *daemonSetManager) CreateDaemonSet(ctx context.Context, clusterID int, namespace string, daemonSet *appsv1.DaemonSet) error { if daemonSet == nil { return fmt.Errorf("daemonSet 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } _, err = kubeClient.AppsV1().DaemonSets(namespace).Create(ctx, daemonSet, metav1.CreateOptions{}) if err != nil { - d.logger.Error("创建 DaemonSet 失败", + m.logger.Error("创建 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSet.Name), @@ -100,7 +100,7 @@ func (d *daemonSetManager) CreateDaemonSet(ctx context.Context, clusterID int, n return fmt.Errorf("创建 DaemonSet 失败: %w", err) } - d.logger.Info("成功创建 DaemonSet", + m.logger.Info("成功创建 DaemonSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSet.Name)) @@ -109,19 +109,19 @@ func (d *daemonSetManager) CreateDaemonSet(ctx context.Context, clusterID int, n } // GetDaemonSet 获取单个 DaemonSet -func (d *daemonSetManager) GetDaemonSet(ctx context.Context, clusterID int, namespace, name string) (*appsv1.DaemonSet, error) { +func (m *daemonSetManager) GetDaemonSet(ctx context.Context, clusterID int, namespace, name string) (*appsv1.DaemonSet, error) { if name == "" { return nil, fmt.Errorf("DaemonSet name 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } daemonSet, err := kubeClient.AppsV1().DaemonSets(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - d.logger.Error("获取 DaemonSet 失败", + m.logger.Error("获取 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -133,15 +133,15 @@ func (d *daemonSetManager) GetDaemonSet(ctx context.Context, clusterID int, name } // GetDaemonSetList 获取 DaemonSet 列表 -func (d *daemonSetManager) GetDaemonSetList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sDaemonSet, error) { - kubeClient, err := d.getKubeClient(clusterID) +func (m *daemonSetManager) GetDaemonSetList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sDaemonSet, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } daemonSetList, err := kubeClient.AppsV1().DaemonSets(namespace).List(ctx, listOptions) if err != nil { - d.logger.Error("获取 DaemonSet 列表失败", + m.logger.Error("获取 DaemonSet 列表失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Error(err)) @@ -152,7 +152,7 @@ func (d *daemonSetManager) GetDaemonSetList(ctx context.Context, clusterID int, for _, daemonSet := range daemonSetList.Items { k8sDaemonSet, err := utils.BuildK8sDaemonSet(ctx, clusterID, daemonSet) if err != nil { - d.logger.Warn("构建 K8sDaemonSet 失败", + m.logger.Warn("构建 K8sDaemonSet 失败", zap.String("daemonSetName", daemonSet.Name), zap.Error(err)) continue @@ -164,19 +164,19 @@ func (d *daemonSetManager) GetDaemonSetList(ctx context.Context, clusterID int, } // UpdateDaemonSet 更新 DaemonSet -func (d *daemonSetManager) UpdateDaemonSet(ctx context.Context, clusterID int, namespace string, daemonSet *appsv1.DaemonSet) error { +func (m *daemonSetManager) UpdateDaemonSet(ctx context.Context, clusterID int, namespace string, daemonSet *appsv1.DaemonSet) error { if daemonSet == nil { return fmt.Errorf("daemonSet 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } _, err = kubeClient.AppsV1().DaemonSets(namespace).Update(ctx, daemonSet, metav1.UpdateOptions{}) if err != nil { - d.logger.Error("更新 DaemonSet 失败", + m.logger.Error("更新 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSet.Name), @@ -184,7 +184,7 @@ func (d *daemonSetManager) UpdateDaemonSet(ctx context.Context, clusterID int, n return fmt.Errorf("更新 DaemonSet 失败: %w", err) } - d.logger.Info("成功更新 DaemonSet", + m.logger.Info("成功更新 DaemonSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSet.Name)) @@ -193,19 +193,19 @@ func (d *daemonSetManager) UpdateDaemonSet(ctx context.Context, clusterID int, n } // DeleteDaemonSet 删除 DaemonSet -func (d *daemonSetManager) DeleteDaemonSet(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { +func (m *daemonSetManager) DeleteDaemonSet(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { if name == "" { return fmt.Errorf("DaemonSet name 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } err = kubeClient.AppsV1().DaemonSets(namespace).Delete(ctx, name, deleteOptions) if err != nil { - d.logger.Error("删除 DaemonSet 失败", + m.logger.Error("删除 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -213,7 +213,7 @@ func (d *daemonSetManager) DeleteDaemonSet(ctx context.Context, clusterID int, n return fmt.Errorf("删除 DaemonSet 失败: %w", err) } - d.logger.Info("成功删除 DaemonSet", + m.logger.Info("成功删除 DaemonSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -222,12 +222,12 @@ func (d *daemonSetManager) DeleteDaemonSet(ctx context.Context, clusterID int, n } // RestartDaemonSet 重启 DaemonSet -func (d *daemonSetManager) RestartDaemonSet(ctx context.Context, clusterID int, namespace, name string) error { +func (m *daemonSetManager) RestartDaemonSet(ctx context.Context, clusterID int, namespace, name string) error { if name == "" { return fmt.Errorf("DaemonSet name 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -237,7 +237,7 @@ func (d *daemonSetManager) RestartDaemonSet(ctx context.Context, clusterID int, _, err = kubeClient.AppsV1().DaemonSets(namespace).Patch(ctx, name, types.StrategicMergePatchType, []byte(patchData), metav1.PatchOptions{}) if err != nil { - d.logger.Error("重启 DaemonSet 失败", + m.logger.Error("重启 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -245,7 +245,7 @@ func (d *daemonSetManager) RestartDaemonSet(ctx context.Context, clusterID int, return fmt.Errorf("重启 DaemonSet 失败: %w", err) } - d.logger.Info("成功重启 DaemonSet", + m.logger.Info("成功重启 DaemonSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -254,12 +254,12 @@ func (d *daemonSetManager) RestartDaemonSet(ctx context.Context, clusterID int, } // BatchDeleteDaemonSets 批量删除 DaemonSets -func (d *daemonSetManager) BatchDeleteDaemonSets(ctx context.Context, clusterID int, namespace string, daemonSetNames []string) error { +func (m *daemonSetManager) BatchDeleteDaemonSets(ctx context.Context, clusterID int, namespace string, daemonSetNames []string) error { if len(daemonSetNames) == 0 { return fmt.Errorf("DaemonSet names 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -280,13 +280,13 @@ func (d *daemonSetManager) BatchDeleteDaemonSets(ctx context.Context, clusterID mu.Lock() errors = append(errors, fmt.Sprintf("删除 DaemonSet %s 失败: %v", daemonSetName, err)) mu.Unlock() - d.logger.Error("批量删除 DaemonSet 失败", + m.logger.Error("批量删除 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSetName), zap.Error(err)) } else { - d.logger.Info("成功删除 DaemonSet", + m.logger.Info("成功删除 DaemonSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSetName)) @@ -304,12 +304,12 @@ func (d *daemonSetManager) BatchDeleteDaemonSets(ctx context.Context, clusterID } // BatchRestartDaemonSets 批量重启 DaemonSets -func (d *daemonSetManager) BatchRestartDaemonSets(ctx context.Context, clusterID int, namespace string, daemonSetNames []string) error { +func (m *daemonSetManager) BatchRestartDaemonSets(ctx context.Context, clusterID int, namespace string, daemonSetNames []string) error { if len(daemonSetNames) == 0 { return fmt.Errorf("DaemonSet names 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -331,13 +331,13 @@ func (d *daemonSetManager) BatchRestartDaemonSets(ctx context.Context, clusterID mu.Lock() errors = append(errors, fmt.Sprintf("重启 DaemonSet %s 失败: %v", daemonSetName, err)) mu.Unlock() - d.logger.Error("批量重启 DaemonSet 失败", + m.logger.Error("批量重启 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSetName), zap.Error(err)) } else { - d.logger.Info("成功重启 DaemonSet", + m.logger.Info("成功重启 DaemonSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSetName)) @@ -355,12 +355,12 @@ func (d *daemonSetManager) BatchRestartDaemonSets(ctx context.Context, clusterID } // GetDaemonSetHistory 获取 DaemonSet 历史版本 -func (d *daemonSetManager) GetDaemonSetHistory(ctx context.Context, clusterID int, namespace, daemonSetName string) ([]*model.K8sDaemonSetHistory, int64, error) { +func (m *daemonSetManager) GetDaemonSetHistory(ctx context.Context, clusterID int, namespace, daemonSetName string) ([]*model.K8sDaemonSetHistory, int64, error) { if daemonSetName == "" { return nil, 0, fmt.Errorf("DaemonSet name 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, 0, err } @@ -368,7 +368,7 @@ func (d *daemonSetManager) GetDaemonSetHistory(ctx context.Context, clusterID in // 先获取 DaemonSet 本身以获取其标签选择器 daemonSet, err := kubeClient.AppsV1().DaemonSets(namespace).Get(ctx, daemonSetName, metav1.GetOptions{}) if err != nil { - d.logger.Error("获取 DaemonSet 失败", + m.logger.Error("获取 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSetName), @@ -380,7 +380,7 @@ func (d *daemonSetManager) GetDaemonSetHistory(ctx context.Context, clusterID in listOptions := metav1.ListOptions{} revisionList, err := kubeClient.AppsV1().ControllerRevisions(namespace).List(ctx, listOptions) if err != nil { - d.logger.Error("获取 DaemonSet 历史版本失败", + m.logger.Error("获取 DaemonSet 历史版本失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("daemonSetName", daemonSetName), @@ -404,7 +404,7 @@ func (d *daemonSetManager) GetDaemonSetHistory(ctx context.Context, clusterID in if belongsToDaemonSet { k8sHistory, err := utils.BuildK8sDaemonSetHistory(revision) if err != nil { - d.logger.Warn("构建 K8sDaemonSetHistory 失败", + m.logger.Warn("构建 K8sDaemonSetHistory 失败", zap.String("revisionName", revision.Name), zap.Error(err)) continue @@ -422,12 +422,12 @@ func (d *daemonSetManager) GetDaemonSetHistory(ctx context.Context, clusterID in } // GetDaemonSetPods 获取 DaemonSet 管理的 Pods -func (d *daemonSetManager) GetDaemonSetPods(ctx context.Context, clusterID int, namespace, daemonSetName string) ([]*model.K8sPod, int64, error) { +func (m *daemonSetManager) GetDaemonSetPods(ctx context.Context, clusterID int, namespace, daemonSetName string) ([]*model.K8sPod, int64, error) { if daemonSetName == "" { return nil, 0, fmt.Errorf("DaemonSet name 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, 0, err } @@ -435,7 +435,7 @@ func (d *daemonSetManager) GetDaemonSetPods(ctx context.Context, clusterID int, // 首先获取 DaemonSet 以获取其标签选择器 daemonSet, err := kubeClient.AppsV1().DaemonSets(namespace).Get(ctx, daemonSetName, metav1.GetOptions{}) if err != nil { - d.logger.Error("获取 DaemonSet 失败", + m.logger.Error("获取 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", daemonSetName), @@ -452,7 +452,7 @@ func (d *daemonSetManager) GetDaemonSetPods(ctx context.Context, clusterID int, podList, err := kubeClient.CoreV1().Pods(namespace).List(ctx, listOptions) if err != nil { - d.logger.Error("获取 DaemonSet Pods 失败", + m.logger.Error("获取 DaemonSet Pods 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("daemonSetName", daemonSetName), @@ -471,7 +471,7 @@ func (d *daemonSetManager) GetDaemonSetPods(ctx context.Context, clusterID int, } // RollbackDaemonSet 回滚 DaemonSet 到指定版本 -func (d *daemonSetManager) RollbackDaemonSet(ctx context.Context, clusterID int, namespace, name string, revision int64) error { +func (m *daemonSetManager) RollbackDaemonSet(ctx context.Context, clusterID int, namespace, name string, revision int64) error { if name == "" { return fmt.Errorf("DaemonSet name 不能为空") } @@ -479,7 +479,7 @@ func (d *daemonSetManager) RollbackDaemonSet(ctx context.Context, clusterID int, return fmt.Errorf("revision 必须大于 0") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -487,7 +487,7 @@ func (d *daemonSetManager) RollbackDaemonSet(ctx context.Context, clusterID int, // 获取当前 DaemonSet currentDaemonSet, err := kubeClient.AppsV1().DaemonSets(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - d.logger.Error("获取当前 DaemonSet 失败", + m.logger.Error("获取当前 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -514,7 +514,7 @@ func (d *daemonSetManager) RollbackDaemonSet(ctx context.Context, clusterID int, revisionList, err := kubeClient.AppsV1().ControllerRevisions(namespace).List(ctx, listOptions) if err != nil { - d.logger.Error("获取 ControllerRevision 列表失败", + m.logger.Error("获取 ControllerRevision 列表失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("daemonSetName", name), @@ -543,7 +543,7 @@ func (d *daemonSetManager) RollbackDaemonSet(ctx context.Context, clusterID int, } if targetRevision == nil { - d.logger.Error("找不到指定版本的 ControllerRevision", + m.logger.Error("找不到指定版本的 ControllerRevision", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("daemonSetName", name), @@ -564,7 +564,7 @@ func (d *daemonSetManager) RollbackDaemonSet(ctx context.Context, clusterID int, // 执行更新 _, err = kubeClient.AppsV1().DaemonSets(namespace).Update(ctx, currentDaemonSet, metav1.UpdateOptions{}) if err != nil { - d.logger.Error("回滚 DaemonSet 失败", + m.logger.Error("回滚 DaemonSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -573,7 +573,7 @@ func (d *daemonSetManager) RollbackDaemonSet(ctx context.Context, clusterID int, return fmt.Errorf("回滚 DaemonSet 失败: %w", err) } - d.logger.Info("成功回滚 DaemonSet", + m.logger.Info("成功回滚 DaemonSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), diff --git a/internal/k8s/manager/deployment_manager.go b/internal/k8s/manager/deployment_manager.go index 7410ce02..be703fae 100644 --- a/internal/k8s/manager/deployment_manager.go +++ b/internal/k8s/manager/deployment_manager.go @@ -71,10 +71,10 @@ func NewDeploymentManager(clientFactory client.K8sClient, logger *zap.Logger) De } // getKubeClient 私有方法:获取Kubernetes客户端 -func (d *deploymentManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { - kubeClient, err := d.clientFactory.GetKubeClient(clusterID) +func (m *deploymentManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { + kubeClient, err := m.clientFactory.GetKubeClient(clusterID) if err != nil { - d.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) @@ -83,12 +83,12 @@ func (d *deploymentManager) getKubeClient(clusterID int) (*kubernetes.Clientset, } // CreateDeployment 创建deployment -func (d *deploymentManager) CreateDeployment(ctx context.Context, clusterID int, namespace string, deployment *appsv1.Deployment) error { +func (m *deploymentManager) CreateDeployment(ctx context.Context, clusterID int, namespace string, deployment *appsv1.Deployment) error { if deployment == nil { return fmt.Errorf("deployment 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -102,7 +102,7 @@ func (d *deploymentManager) CreateDeployment(ctx context.Context, clusterID int, _, err = kubeClient.AppsV1().Deployments(targetNamespace).Create(ctx, deployment, metav1.CreateOptions{}) if err != nil { - d.logger.Error("创建 Deployment 失败", + m.logger.Error("创建 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", deployment.Name), @@ -110,7 +110,7 @@ func (d *deploymentManager) CreateDeployment(ctx context.Context, clusterID int, return fmt.Errorf("创建 Deployment 失败: %w", err) } - d.logger.Info("成功创建 Deployment", + m.logger.Info("成功创建 Deployment", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", deployment.Name)) @@ -118,15 +118,15 @@ func (d *deploymentManager) CreateDeployment(ctx context.Context, clusterID int, } // GetDeployment 获取deployment -func (d *deploymentManager) GetDeployment(ctx context.Context, clusterID int, namespace, name string) (*appsv1.Deployment, error) { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) GetDeployment(ctx context.Context, clusterID int, namespace, name string) (*appsv1.Deployment, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } deployment, err := kubeClient.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - d.logger.Error("获取 Deployment 失败", + m.logger.Error("获取 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -134,7 +134,7 @@ func (d *deploymentManager) GetDeployment(ctx context.Context, clusterID int, na return nil, fmt.Errorf("获取 Deployment 失败: %w", err) } - d.logger.Debug("成功获取 Deployment", + m.logger.Debug("成功获取 Deployment", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -142,15 +142,15 @@ func (d *deploymentManager) GetDeployment(ctx context.Context, clusterID int, na } // GetDeploymentList 获取deployment列表 -func (d *deploymentManager) GetDeploymentList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sDeployment, error) { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) GetDeploymentList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sDeployment, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } deploymentList, err := kubeClient.AppsV1().Deployments(namespace).List(ctx, listOptions) if err != nil { - d.logger.Error("获取 Deployment 列表失败", + m.logger.Error("获取 Deployment 列表失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Error(err)) @@ -164,7 +164,7 @@ func (d *deploymentManager) GetDeploymentList(ctx context.Context, clusterID int k8sDeployments = append(k8sDeployments, k8sDeployment) } - d.logger.Debug("成功获取 Deployment 列表", + m.logger.Debug("成功获取 Deployment 列表", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Int("count", len(k8sDeployments))) @@ -172,19 +172,19 @@ func (d *deploymentManager) GetDeploymentList(ctx context.Context, clusterID int } // UpdateDeployment 更新deployment -func (d *deploymentManager) UpdateDeployment(ctx context.Context, clusterID int, namespace string, deployment *appsv1.Deployment) error { +func (m *deploymentManager) UpdateDeployment(ctx context.Context, clusterID int, namespace string, deployment *appsv1.Deployment) error { if deployment == nil { return fmt.Errorf("deployment 不能为空") } - kubeClient, err := d.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } _, err = kubeClient.AppsV1().Deployments(namespace).Update(ctx, deployment, metav1.UpdateOptions{}) if err != nil { - d.logger.Error("更新 Deployment 失败", + m.logger.Error("更新 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", deployment.Name), @@ -192,7 +192,7 @@ func (d *deploymentManager) UpdateDeployment(ctx context.Context, clusterID int, return fmt.Errorf("更新 Deployment 失败: %w", err) } - d.logger.Info("成功更新 Deployment", + m.logger.Info("成功更新 Deployment", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", deployment.Name)) @@ -200,15 +200,15 @@ func (d *deploymentManager) UpdateDeployment(ctx context.Context, clusterID int, } // DeleteDeployment 删除deployment -func (d *deploymentManager) DeleteDeployment(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) DeleteDeployment(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } err = kubeClient.AppsV1().Deployments(namespace).Delete(ctx, name, deleteOptions) if err != nil { - d.logger.Error("删除 Deployment 失败", + m.logger.Error("删除 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -216,7 +216,7 @@ func (d *deploymentManager) DeleteDeployment(ctx context.Context, clusterID int, return fmt.Errorf("删除 Deployment 失败: %w", err) } - d.logger.Info("成功删除 Deployment", + m.logger.Info("成功删除 Deployment", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -224,8 +224,8 @@ func (d *deploymentManager) DeleteDeployment(ctx context.Context, clusterID int, } // RestartDeployment 重启deployment -func (d *deploymentManager) RestartDeployment(ctx context.Context, clusterID int, namespace, name string) error { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) RestartDeployment(ctx context.Context, clusterID int, namespace, name string) error { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -236,7 +236,7 @@ func (d *deploymentManager) RestartDeployment(ctx context.Context, clusterID int _, err = kubeClient.AppsV1().Deployments(namespace).Patch(ctx, name, types.StrategicMergePatchType, []byte(patchData), metav1.PatchOptions{}) if err != nil { - d.logger.Error("重启 Deployment 失败", + m.logger.Error("重启 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -244,7 +244,7 @@ func (d *deploymentManager) RestartDeployment(ctx context.Context, clusterID int return fmt.Errorf("重启 Deployment 失败: %w", err) } - d.logger.Info("成功重启 Deployment", + m.logger.Info("成功重启 Deployment", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -252,8 +252,8 @@ func (d *deploymentManager) RestartDeployment(ctx context.Context, clusterID int } // ScaleDeployment 扩缩容deployment -func (d *deploymentManager) ScaleDeployment(ctx context.Context, clusterID int, namespace, name string, replicas int32) error { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) ScaleDeployment(ctx context.Context, clusterID int, namespace, name string, replicas int32) error { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -261,7 +261,7 @@ func (d *deploymentManager) ScaleDeployment(ctx context.Context, clusterID int, // 获取当前 Deployment deployment, err := kubeClient.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - d.logger.Error("获取 Deployment 失败", + m.logger.Error("获取 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -273,7 +273,7 @@ func (d *deploymentManager) ScaleDeployment(ctx context.Context, clusterID int, deployment.Spec.Replicas = &replicas _, err = kubeClient.AppsV1().Deployments(namespace).Update(ctx, deployment, metav1.UpdateOptions{}) if err != nil { - d.logger.Error("扩缩容 Deployment 失败", + m.logger.Error("扩缩容 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -282,7 +282,7 @@ func (d *deploymentManager) ScaleDeployment(ctx context.Context, clusterID int, return fmt.Errorf("扩缩容 Deployment 失败: %w", err) } - d.logger.Info("成功扩缩容 Deployment", + m.logger.Info("成功扩缩容 Deployment", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -291,15 +291,15 @@ func (d *deploymentManager) ScaleDeployment(ctx context.Context, clusterID int, } // GetDeploymentHistory 获取deployment历史 -func (d *deploymentManager) GetDeploymentHistory(ctx context.Context, clusterID int, namespace, deploymentName string) ([]*model.K8sDeploymentHistory, int64, error) { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) GetDeploymentHistory(ctx context.Context, clusterID int, namespace, deploymentName string) ([]*model.K8sDeploymentHistory, int64, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, 0, err } history, total, err := utils.GetDeploymentHistory(ctx, kubeClient, namespace, deploymentName) if err != nil { - d.logger.Error("获取 Deployment 历史失败", + m.logger.Error("获取 Deployment 历史失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("deploymentName", deploymentName), @@ -307,7 +307,7 @@ func (d *deploymentManager) GetDeploymentHistory(ctx context.Context, clusterID return nil, 0, fmt.Errorf("获取 Deployment 历史失败: %w", err) } - d.logger.Debug("成功获取 Deployment 历史", + m.logger.Debug("成功获取 Deployment 历史", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("deploymentName", deploymentName), @@ -317,15 +317,15 @@ func (d *deploymentManager) GetDeploymentHistory(ctx context.Context, clusterID } // GetDeploymentPods 获取deployment的pod列表 -func (d *deploymentManager) GetDeploymentPods(ctx context.Context, clusterID int, namespace, deploymentName string) ([]*model.K8sPod, int64, error) { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) GetDeploymentPods(ctx context.Context, clusterID int, namespace, deploymentName string) ([]*model.K8sPod, int64, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, 0, err } pods, total, err := utils.GetDeploymentPods(ctx, kubeClient, namespace, deploymentName) if err != nil { - d.logger.Error("获取 Deployment Pods 失败", + m.logger.Error("获取 Deployment Pods 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("deploymentName", deploymentName), @@ -333,7 +333,7 @@ func (d *deploymentManager) GetDeploymentPods(ctx context.Context, clusterID int return nil, 0, fmt.Errorf("获取 Deployment Pods 失败: %w", err) } - d.logger.Debug("成功获取 Deployment Pods", + m.logger.Debug("成功获取 Deployment Pods", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("deploymentName", deploymentName), @@ -343,8 +343,8 @@ func (d *deploymentManager) GetDeploymentPods(ctx context.Context, clusterID int } // RollbackDeployment 回滚 Deployment 到指定版本 -func (d *deploymentManager) RollbackDeployment(ctx context.Context, clusterID int, namespace, name string, revision int64) error { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) RollbackDeployment(ctx context.Context, clusterID int, namespace, name string, revision int64) error { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -352,7 +352,7 @@ func (d *deploymentManager) RollbackDeployment(ctx context.Context, clusterID in // 获取 ReplicaSet 列表,找到指定版本的 ReplicaSet replicaSets, err := kubeClient.AppsV1().ReplicaSets(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - d.logger.Error("获取 ReplicaSet 列表失败", + m.logger.Error("获取 ReplicaSet 列表失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -389,7 +389,7 @@ func (d *deploymentManager) RollbackDeployment(ctx context.Context, clusterID in // 获取当前 Deployment deployment, err := kubeClient.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - d.logger.Error("获取 Deployment 失败", + m.logger.Error("获取 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -403,7 +403,7 @@ func (d *deploymentManager) RollbackDeployment(ctx context.Context, clusterID in // 更新 Deployment _, err = kubeClient.AppsV1().Deployments(namespace).Update(ctx, deployment, metav1.UpdateOptions{}) if err != nil { - d.logger.Error("回滚 Deployment 失败", + m.logger.Error("回滚 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -412,7 +412,7 @@ func (d *deploymentManager) RollbackDeployment(ctx context.Context, clusterID in return fmt.Errorf("回滚 Deployment 失败: %w", err) } - d.logger.Info("成功回滚 Deployment", + m.logger.Info("成功回滚 Deployment", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -421,8 +421,8 @@ func (d *deploymentManager) RollbackDeployment(ctx context.Context, clusterID in } // PauseDeployment 暂停 Deployment -func (d *deploymentManager) PauseDeployment(ctx context.Context, clusterID int, namespace, name string) error { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) PauseDeployment(ctx context.Context, clusterID int, namespace, name string) error { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -430,7 +430,7 @@ func (d *deploymentManager) PauseDeployment(ctx context.Context, clusterID int, // 获取当前 Deployment deployment, err := kubeClient.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - d.logger.Error("获取 Deployment 失败", + m.logger.Error("获取 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -440,7 +440,7 @@ func (d *deploymentManager) PauseDeployment(ctx context.Context, clusterID int, // 检查是否已经暂停 if deployment.Spec.Paused { - d.logger.Info("Deployment 已经处于暂停状态", + m.logger.Info("Deployment 已经处于暂停状态", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -453,7 +453,7 @@ func (d *deploymentManager) PauseDeployment(ctx context.Context, clusterID int, // 更新 Deployment _, err = kubeClient.AppsV1().Deployments(namespace).Update(ctx, deployment, metav1.UpdateOptions{}) if err != nil { - d.logger.Error("暂停 Deployment 失败", + m.logger.Error("暂停 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -461,7 +461,7 @@ func (d *deploymentManager) PauseDeployment(ctx context.Context, clusterID int, return fmt.Errorf("暂停 Deployment 失败: %w", err) } - d.logger.Info("成功暂停 Deployment", + m.logger.Info("成功暂停 Deployment", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -469,8 +469,8 @@ func (d *deploymentManager) PauseDeployment(ctx context.Context, clusterID int, } // ResumeDeployment 恢复 Deployment -func (d *deploymentManager) ResumeDeployment(ctx context.Context, clusterID int, namespace, name string) error { - kubeClient, err := d.getKubeClient(clusterID) +func (m *deploymentManager) ResumeDeployment(ctx context.Context, clusterID int, namespace, name string) error { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -478,7 +478,7 @@ func (d *deploymentManager) ResumeDeployment(ctx context.Context, clusterID int, // 获取当前 Deployment deployment, err := kubeClient.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - d.logger.Error("获取 Deployment 失败", + m.logger.Error("获取 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -488,7 +488,7 @@ func (d *deploymentManager) ResumeDeployment(ctx context.Context, clusterID int, // 检查是否已经恢复 if !deployment.Spec.Paused { - d.logger.Info("Deployment 已经处于运行状态", + m.logger.Info("Deployment 已经处于运行状态", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -501,7 +501,7 @@ func (d *deploymentManager) ResumeDeployment(ctx context.Context, clusterID int, // 更新 Deployment _, err = kubeClient.AppsV1().Deployments(namespace).Update(ctx, deployment, metav1.UpdateOptions{}) if err != nil { - d.logger.Error("恢复 Deployment 失败", + m.logger.Error("恢复 Deployment 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -509,7 +509,7 @@ func (d *deploymentManager) ResumeDeployment(ctx context.Context, clusterID int, return fmt.Errorf("恢复 Deployment 失败: %w", err) } - d.logger.Info("成功恢复 Deployment", + m.logger.Info("成功恢复 Deployment", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) diff --git a/internal/k8s/manager/ingress_manager.go b/internal/k8s/manager/ingress_manager.go index 28301f48..3d6b56e8 100644 --- a/internal/k8s/manager/ingress_manager.go +++ b/internal/k8s/manager/ingress_manager.go @@ -59,10 +59,10 @@ func NewIngressManager(clientFactory client.K8sClient, logger *zap.Logger) Ingre } // getKubeClient 获取Kubernetes客户端 -func (i *ingressManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { - kubeClient, err := i.clientFactory.GetKubeClient(clusterID) +func (m *ingressManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { + kubeClient, err := m.clientFactory.GetKubeClient(clusterID) if err != nil { - i.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) @@ -71,12 +71,12 @@ func (i *ingressManager) getKubeClient(clusterID int) (*kubernetes.Clientset, er } // CreateIngress 创建Ingress -func (i *ingressManager) CreateIngress(ctx context.Context, clusterID int, namespace string, ingress *networkingv1.Ingress) error { +func (m *ingressManager) CreateIngress(ctx context.Context, clusterID int, namespace string, ingress *networkingv1.Ingress) error { if ingress == nil { return fmt.Errorf("ingress 不能为空") } - kubeClient, err := i.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -90,7 +90,7 @@ func (i *ingressManager) CreateIngress(ctx context.Context, clusterID int, names _, err = kubeClient.NetworkingV1().Ingresses(targetNamespace).Create(ctx, ingress, metav1.CreateOptions{}) if err != nil { - i.logger.Error("创建 Ingress 失败", + m.logger.Error("创建 Ingress 失败", zap.Int("clusterID", clusterID), zap.String("namespace", targetNamespace), zap.String("name", ingress.Name), @@ -98,7 +98,7 @@ func (i *ingressManager) CreateIngress(ctx context.Context, clusterID int, names return fmt.Errorf("创建 Ingress 失败: %w", err) } - i.logger.Info("成功创建 Ingress", + m.logger.Info("成功创建 Ingress", zap.Int("clusterID", clusterID), zap.String("namespace", targetNamespace), zap.String("name", ingress.Name)) @@ -106,15 +106,15 @@ func (i *ingressManager) CreateIngress(ctx context.Context, clusterID int, names } // GetIngress 获取指定Ingress -func (i *ingressManager) GetIngress(ctx context.Context, clusterID int, namespace, name string) (*networkingv1.Ingress, error) { - kubeClient, err := i.getKubeClient(clusterID) +func (m *ingressManager) GetIngress(ctx context.Context, clusterID int, namespace, name string) (*networkingv1.Ingress, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } ingress, err := kubeClient.NetworkingV1().Ingresses(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - i.logger.Error("获取 Ingress 失败", + m.logger.Error("获取 Ingress 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -122,7 +122,7 @@ func (i *ingressManager) GetIngress(ctx context.Context, clusterID int, namespac return nil, fmt.Errorf("获取 Ingress 失败: %w", err) } - i.logger.Debug("成功获取 Ingress", + m.logger.Debug("成功获取 Ingress", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -130,15 +130,15 @@ func (i *ingressManager) GetIngress(ctx context.Context, clusterID int, namespac } // GetIngressList 获取Ingress列表 -func (i *ingressManager) GetIngressList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sIngress, error) { - kubeClient, err := i.getKubeClient(clusterID) +func (m *ingressManager) GetIngressList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sIngress, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } ingressList, err := kubeClient.NetworkingV1().Ingresses(namespace).List(ctx, listOptions) if err != nil { - i.logger.Error("获取 Ingress 列表失败", + m.logger.Error("获取 Ingress 列表失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Error(err)) @@ -152,7 +152,7 @@ func (i *ingressManager) GetIngressList(ctx context.Context, clusterID int, name k8sIngresses = append(k8sIngresses, k8sIngress) } - i.logger.Debug("成功获取 Ingress 列表", + m.logger.Debug("成功获取 Ingress 列表", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Int("count", len(k8sIngresses))) @@ -160,12 +160,12 @@ func (i *ingressManager) GetIngressList(ctx context.Context, clusterID int, name } // UpdateIngress 更新Ingress -func (i *ingressManager) UpdateIngress(ctx context.Context, clusterID int, namespace string, ingress *networkingv1.Ingress) error { +func (m *ingressManager) UpdateIngress(ctx context.Context, clusterID int, namespace string, ingress *networkingv1.Ingress) error { if ingress == nil { return fmt.Errorf("ingress 不能为空") } - kubeClient, err := i.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -179,7 +179,7 @@ func (i *ingressManager) UpdateIngress(ctx context.Context, clusterID int, names _, err = kubeClient.NetworkingV1().Ingresses(targetNamespace).Update(ctx, ingress, metav1.UpdateOptions{}) if err != nil { - i.logger.Error("更新 Ingress 失败", + m.logger.Error("更新 Ingress 失败", zap.Int("clusterID", clusterID), zap.String("namespace", targetNamespace), zap.String("name", ingress.Name), @@ -187,7 +187,7 @@ func (i *ingressManager) UpdateIngress(ctx context.Context, clusterID int, names return fmt.Errorf("更新 Ingress 失败: %w", err) } - i.logger.Info("成功更新 Ingress", + m.logger.Info("成功更新 Ingress", zap.Int("clusterID", clusterID), zap.String("namespace", targetNamespace), zap.String("name", ingress.Name)) @@ -195,15 +195,15 @@ func (i *ingressManager) UpdateIngress(ctx context.Context, clusterID int, names } // DeleteIngress 删除Ingress -func (i *ingressManager) DeleteIngress(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { - kubeClient, err := i.getKubeClient(clusterID) +func (m *ingressManager) DeleteIngress(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } err = kubeClient.NetworkingV1().Ingresses(namespace).Delete(ctx, name, deleteOptions) if err != nil { - i.logger.Error("删除 Ingress 失败", + m.logger.Error("删除 Ingress 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -211,7 +211,7 @@ func (i *ingressManager) DeleteIngress(ctx context.Context, clusterID int, names return fmt.Errorf("删除 Ingress 失败: %w", err) } - i.logger.Info("成功删除 Ingress", + m.logger.Info("成功删除 Ingress", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) diff --git a/internal/k8s/manager/pod_manager.go b/internal/k8s/manager/pod_manager.go index a444fe8f..56eeb43e 100644 --- a/internal/k8s/manager/pod_manager.go +++ b/internal/k8s/manager/pod_manager.go @@ -85,10 +85,10 @@ func NewPodManager(clientFactory client.K8sClient, logger *zap.Logger) PodManage } // getKubeClient 获取Kubernetes客户端 -func (p *podManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { - kubeClient, err := p.clientFactory.GetKubeClient(clusterID) +func (m *podManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { + kubeClient, err := m.clientFactory.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) @@ -97,15 +97,15 @@ func (p *podManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) } // GetPod 获取单个 Pod -func (p *podManager) GetPod(ctx context.Context, clusterID int, namespace, name string) (*corev1.Pod, error) { - kubeClient, err := p.getKubeClient(clusterID) +func (m *podManager) GetPod(ctx context.Context, clusterID int, namespace, name string) (*corev1.Pod, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } pod, err := kubeClient.CoreV1().Pods(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取 Pod 失败", + m.logger.Error("获取 Pod 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -113,7 +113,7 @@ func (p *podManager) GetPod(ctx context.Context, clusterID int, namespace, name return nil, fmt.Errorf("获取 Pod 失败: %w", err) } - p.logger.Debug("成功获取 Pod", + m.logger.Debug("成功获取 Pod", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -121,15 +121,15 @@ func (p *podManager) GetPod(ctx context.Context, clusterID int, namespace, name } // GetPodList 获取Pod列表 -func (p *podManager) GetPodList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sPod, error) { - kubeClient, err := p.getKubeClient(clusterID) +func (m *podManager) GetPodList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sPod, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } podList, err := kubeClient.CoreV1().Pods(namespace).List(ctx, listOptions) if err != nil { - p.logger.Error("获取Pod列表失败", + m.logger.Error("获取Pod列表失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Error(err)) @@ -146,7 +146,7 @@ func (p *podManager) GetPodList(ctx context.Context, clusterID int, namespace st } } - p.logger.Debug("成功获取Pod列表", + m.logger.Debug("成功获取Pod列表", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Int("count", len(k8sPods))) @@ -154,8 +154,8 @@ func (p *podManager) GetPodList(ctx context.Context, clusterID int, namespace st } // GetPodsByNodeName 获取指定节点上的Pod列表 -func (p *podManager) GetPodsByNodeName(ctx context.Context, clusterID int, nodeName string) ([]*model.K8sPod, error) { - kubeClient, err := p.getKubeClient(clusterID) +func (m *podManager) GetPodsByNodeName(ctx context.Context, clusterID int, nodeName string) ([]*model.K8sPod, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } @@ -166,7 +166,7 @@ func (p *podManager) GetPodsByNodeName(ctx context.Context, clusterID int, nodeN pods, err := kubeClient.CoreV1().Pods("").List(ctx, listOptions) if err != nil { - p.logger.Error("获取节点Pod列表失败", + m.logger.Error("获取节点Pod列表失败", zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName), zap.Error(err)) @@ -183,7 +183,7 @@ func (p *podManager) GetPodsByNodeName(ctx context.Context, clusterID int, nodeN } } - p.logger.Debug("成功获取节点Pod列表", + m.logger.Debug("成功获取节点Pod列表", zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName), zap.Int("count", len(k8sPods))) @@ -191,15 +191,15 @@ func (p *podManager) GetPodsByNodeName(ctx context.Context, clusterID int, nodeN } // DeletePod 删除 Pod -func (p *podManager) DeletePod(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { - kubeClient, err := p.getKubeClient(clusterID) +func (m *podManager) DeletePod(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } err = kubeClient.CoreV1().Pods(namespace).Delete(ctx, name, deleteOptions) if err != nil { - p.logger.Error("删除 Pod 失败", + m.logger.Error("删除 Pod 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -207,7 +207,7 @@ func (p *podManager) DeletePod(ctx context.Context, clusterID int, namespace, na return fmt.Errorf("删除 Pod 失败: %w", err) } - p.logger.Info("成功删除 Pod", + m.logger.Info("成功删除 Pod", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -215,8 +215,8 @@ func (p *podManager) DeletePod(ctx context.Context, clusterID int, namespace, na } // GetPodLogs 获取 Pod 日志 -func (p *podManager) GetPodLogs(ctx context.Context, clusterID int, namespace, name string, logOptions *corev1.PodLogOptions) (io.ReadCloser, error) { - kubeClient, err := p.getKubeClient(clusterID) +func (m *podManager) GetPodLogs(ctx context.Context, clusterID int, namespace, name string, logOptions *corev1.PodLogOptions) (io.ReadCloser, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err @@ -226,7 +226,7 @@ func (p *podManager) GetPodLogs(ctx context.Context, clusterID int, namespace, n stream, err := podLogRequest.Stream(ctx) if err != nil { - p.logger.Error("获取 Pod 日志流失败", + m.logger.Error("获取 Pod 日志流失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -237,8 +237,8 @@ func (p *podManager) GetPodLogs(ctx context.Context, clusterID int, namespace, n } // BatchDeletePods 批量删除 Pod -func (p *podManager) BatchDeletePods(ctx context.Context, clusterID int, namespace string, podNames []string, deleteOpts metav1.DeleteOptions) error { - kubeClient, err := p.getKubeClient(clusterID) +func (m *podManager) BatchDeletePods(ctx context.Context, clusterID int, namespace string, podNames []string, deleteOpts metav1.DeleteOptions) error { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err @@ -252,7 +252,7 @@ func (p *podManager) BatchDeletePods(ctx context.Context, clusterID int, namespa Task: func(ctx context.Context) error { if err := kubeClient.CoreV1().Pods(namespace).Delete(ctx, name, deleteOpts); err != nil { - p.logger.Error("删除Pod失败", zap.Error(err), + m.logger.Error("删除Pod失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -269,7 +269,7 @@ func (p *podManager) BatchDeletePods(ctx context.Context, clusterID int, namespa } err = retry.RunRetryWithConcurrency(ctx, 3, tasks) if err != nil { - p.logger.Warn("批量删除Pod失败", + m.logger.Warn("批量删除Pod失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sResourceDelete, "批量删除Pod失败") @@ -277,21 +277,21 @@ func (p *podManager) BatchDeletePods(ctx context.Context, clusterID int, namespa return nil } -func (p *podManager) PodTerminalSession( +func (m *podManager) PodTerminalSession( ctx context.Context, clusterID int, namespace, pod, container, shell string, conn *websocket.Conn, ) error { - kubeClient, err := p.clientFactory.GetKubeClient(clusterID) + kubeClient, err := m.clientFactory.GetKubeClient(clusterID) if err != nil { return err } - restConfig, err := p.clientFactory.GetRestConfig(clusterID) + restConfig, err := m.clientFactory.GetRestConfig(clusterID) if err != nil { - p.logger.Error("获取集群配置失败", zap.Int("clusterID", clusterID), zap.Error(err)) + m.logger.Error("获取集群配置失败", zap.Int("clusterID", clusterID), zap.Error(err)) return fmt.Errorf("获取集群配置失败: %w", err) } @@ -299,12 +299,12 @@ func (p *podManager) PodTerminalSession( shell = "sh" } - terminal.NewTerminalHandler(kubeClient, restConfig, p.logger). + terminal.NewTerminalHandler(kubeClient, restConfig, m.logger). HandleSession(ctx, shell, namespace, pod, container, conn) return nil } -func (p *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, pod, container, filePath string) error { +func (m *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, pod, container, filePath string) error { // 参数验证 if namespace == "" { return fmt.Errorf("命名空间不能为空") @@ -316,21 +316,21 @@ func (p *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, return fmt.Errorf("容器名称不能为空") } - kubeClient, err := p.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } - restConfig, err := p.clientFactory.GetRestConfig(clusterID) + restConfig, err := m.clientFactory.GetRestConfig(clusterID) if err != nil { - p.logger.Error("获取集群配置失败", zap.Int("clusterID", clusterID), zap.Error(err)) + m.logger.Error("获取集群配置失败", zap.Int("clusterID", clusterID), zap.Error(err)) return fmt.Errorf("获取集群配置失败: %w", err) } // 验证Pod是否存在并且正在运行 podObj, err := kubeClient.CoreV1().Pods(namespace).Get(ctx.Request.Context(), pod, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取Pod信息失败", + m.logger.Error("获取Pod信息失败", zap.Error(err), zap.String("namespace", namespace), zap.String("pod", pod)) @@ -361,7 +361,7 @@ func (p *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, // 解析上传的文件 files, err := parseMultipartFiles(ctx) if err != nil { - p.logger.Error("解析上传文件失败", zap.Error(err)) + m.logger.Error("解析上传文件失败", zap.Error(err)) return fmt.Errorf("解析上传文件失败: %w", err) } @@ -369,7 +369,7 @@ func (p *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, return fmt.Errorf("没有找到要上传的文件") } - p.logger.Info("开始上传文件到Pod", + m.logger.Info("开始上传文件到Pod", zap.String("namespace", namespace), zap.String("pod", pod), zap.String("container", container), @@ -382,7 +382,7 @@ func (p *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, go func() { defer writer.Close() if tarErr = writeFilesToTar(files, writer); tarErr != nil { - p.logger.Error("打包文件成 tar 失败", zap.Error(tarErr)) + m.logger.Error("打包文件成 tar 失败", zap.Error(tarErr)) _ = writer.CloseWithError(tarErr) } }() @@ -414,7 +414,7 @@ func (p *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, Stderr: &stderr, }) if err != nil { - p.logger.Warn("创建目录失败,可能目录已存在", + m.logger.Warn("创建目录失败,可能目录已存在", zap.Error(err), zap.String("stdout", stdout.String()), zap.String("stderr", stderr.String())) @@ -449,7 +449,7 @@ func (p *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, }) if err != nil { - p.logger.Error("执行上传失败", + m.logger.Error("执行上传失败", zap.Error(err), zap.String("stderr", uploadStderr.String())) return fmt.Errorf("执行上传失败: %w, stderr: %s", err, uploadStderr.String()) @@ -459,7 +459,7 @@ func (p *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, return fmt.Errorf("打包tar文件失败: %w", tarErr) } - p.logger.Info("成功上传文件到Pod", + m.logger.Info("成功上传文件到Pod", zap.String("namespace", namespace), zap.String("pod", pod), zap.String("container", container), @@ -469,7 +469,7 @@ func (p *podManager) UploadFileToPod(ctx *gin.Context, clusterID int, namespace, return nil } -func (p *podManager) PortForward(ctx context.Context, ports []string, dialer httpstream.Dialer) error { +func (m *podManager) PortForward(ctx context.Context, ports []string, dialer httpstream.Dialer) error { // 创建 PortForwarder stopChan := make(chan struct{}, 1) @@ -489,7 +489,7 @@ func (p *podManager) PortForward(ctx context.Context, ports []string, dialer htt // 异步开启转发 go func() { if err := forwarder.ForwardPorts(); err != nil { - p.logger.Error("创建端口转发失败", + m.logger.Error("创建端口转发失败", zap.Error(err), zap.Strings("ports", ports), ) @@ -502,23 +502,23 @@ func (p *podManager) PortForward(ctx context.Context, ports []string, dialer htt } // PodPortForward Pod端口转发 -func (p *podManager) PodPortForward(ctx context.Context, clusterID int, namespace, podName string, ports []model.PodPortForwardPort) error { +func (m *podManager) PodPortForward(ctx context.Context, clusterID int, namespace, podName string, ports []model.PodPortForwardPort) error { if len(ports) == 0 { return fmt.Errorf("端口转发配置不能为空") } // 获取Kubernetes客户端和配置 - kubeClient, err := p.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("clusterID", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } - restConfig, err := p.clientFactory.GetRestConfig(clusterID) + restConfig, err := m.clientFactory.GetRestConfig(clusterID) if err != nil { - p.logger.Error("获取集群配置失败", + m.logger.Error("获取集群配置失败", zap.Error(err), zap.Int("clusterID", clusterID)) return fmt.Errorf("获取集群配置失败: %w", err) @@ -527,7 +527,7 @@ func (p *podManager) PodPortForward(ctx context.Context, clusterID int, namespac // 验证Pod是否存在 pod, err := kubeClient.CoreV1().Pods(namespace).Get(ctx, podName, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取Pod失败", + m.logger.Error("获取Pod失败", zap.Error(err), zap.String("namespace", namespace), zap.String("podName", podName)) @@ -548,7 +548,7 @@ func (p *podManager) PodPortForward(ctx context.Context, clusterID int, namespac // 创建SPDY升级器和拨号器 transport, upgrader, err := spdy.RoundTripperFor(restConfig) if err != nil { - p.logger.Error("创建SPDY升级器失败", + m.logger.Error("创建SPDY升级器失败", zap.Error(err)) return fmt.Errorf("创建SPDY升级器失败: %w", err) } @@ -561,22 +561,22 @@ func (p *podManager) PodPortForward(ctx context.Context, clusterID int, namespac portSpecs[i] = fmt.Sprintf("%d:%d", port.LocalPort, port.RemotePort) } - p.logger.Info("开始端口转发", + m.logger.Info("开始端口转发", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("podName", podName), zap.Strings("ports", portSpecs)) // 调用底层端口转发方法 - err = p.PortForward(ctx, portSpecs, dialer) + err = m.PortForward(ctx, portSpecs, dialer) if err != nil { - p.logger.Error("端口转发失败", + m.logger.Error("端口转发失败", zap.Error(err), zap.Strings("ports", portSpecs)) return fmt.Errorf("端口转发失败: %w", err) } - p.logger.Info("端口转发成功建立", + m.logger.Info("端口转发成功建立", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("podName", podName), @@ -585,7 +585,7 @@ func (p *podManager) PodPortForward(ctx context.Context, clusterID int, namespac return nil } -func (p *podManager) DownloadPodFile(ctx context.Context, clusterID int, namespace, pod, container, filePath string) (*k8sutils.PodFileStreamPipe, error) { +func (m *podManager) DownloadPodFile(ctx context.Context, clusterID int, namespace, pod, container, filePath string) (*k8sutils.PodFileStreamPipe, error) { // 参数验证 if namespace == "" { return nil, fmt.Errorf("命名空间不能为空") @@ -600,21 +600,21 @@ func (p *podManager) DownloadPodFile(ctx context.Context, clusterID int, namespa return nil, fmt.Errorf("文件路径不能为空") } - kubeClient, err := p.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } - restConfig, err := p.clientFactory.GetRestConfig(clusterID) + restConfig, err := m.clientFactory.GetRestConfig(clusterID) if err != nil { - p.logger.Error("获取集群配置失败", zap.Int("clusterID", clusterID), zap.Error(err)) + m.logger.Error("获取集群配置失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, fmt.Errorf("获取集群配置失败: %w", err) } // 验证Pod是否存在并且正在运行 podObj, err := kubeClient.CoreV1().Pods(namespace).Get(ctx, pod, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取Pod信息失败", + m.logger.Error("获取Pod信息失败", zap.Error(err), zap.String("namespace", namespace), zap.String("pod", pod)) @@ -637,7 +637,7 @@ func (p *podManager) DownloadPodFile(ctx context.Context, clusterID int, namespa return nil, fmt.Errorf("容器 %s 在Pod中不存在", container) } - p.logger.Info("开始下载Pod文件", + m.logger.Info("开始下载Pod文件", zap.String("namespace", namespace), zap.String("pod", pod), zap.String("container", container), @@ -647,7 +647,7 @@ func (p *podManager) DownloadPodFile(ctx context.Context, clusterID int, namespa ctx, restConfig, kubeClient, namespace, pod, container, filePath) if err != nil { - p.logger.Error("创建Pod文件流失败", + m.logger.Error("创建Pod文件流失败", zap.Error(err), zap.String("namespace", namespace), zap.String("podName", pod), @@ -656,7 +656,7 @@ func (p *podManager) DownloadPodFile(ctx context.Context, clusterID int, namespa return nil, fmt.Errorf("创建Pod文件流失败: %w", err) } - p.logger.Info("成功创建Pod文件流", + m.logger.Info("成功创建Pod文件流", zap.String("namespace", namespace), zap.String("pod", pod), zap.String("container", container), @@ -666,12 +666,12 @@ func (p *podManager) DownloadPodFile(ctx context.Context, clusterID int, namespa } // CreatePod 创建Pod -func (p *podManager) CreatePod(ctx context.Context, clusterID int, namespace string, pod *corev1.Pod) (*corev1.Pod, error) { +func (m *podManager) CreatePod(ctx context.Context, clusterID int, namespace string, pod *corev1.Pod) (*corev1.Pod, error) { if pod == nil { return nil, fmt.Errorf("pod不能为空") } - kubeClient, err := p.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } @@ -685,7 +685,7 @@ func (p *podManager) CreatePod(ctx context.Context, clusterID int, namespace str createdPod, err := kubeClient.CoreV1().Pods(targetNamespace).Create(ctx, pod, metav1.CreateOptions{}) if err != nil { - p.logger.Error("创建Pod失败", + m.logger.Error("创建Pod失败", zap.Int("clusterID", clusterID), zap.String("namespace", targetNamespace), zap.String("name", pod.Name), @@ -693,7 +693,7 @@ func (p *podManager) CreatePod(ctx context.Context, clusterID int, namespace str return nil, fmt.Errorf("创建Pod失败: %w", err) } - p.logger.Info("成功创建Pod", + m.logger.Info("成功创建Pod", zap.Int("clusterID", clusterID), zap.String("namespace", targetNamespace), zap.String("name", pod.Name)) @@ -701,19 +701,19 @@ func (p *podManager) CreatePod(ctx context.Context, clusterID int, namespace str } // UpdatePod 更新Pod -func (p *podManager) UpdatePod(ctx context.Context, clusterID int, namespace string, pod *corev1.Pod) (*corev1.Pod, error) { +func (m *podManager) UpdatePod(ctx context.Context, clusterID int, namespace string, pod *corev1.Pod) (*corev1.Pod, error) { if pod == nil { return nil, fmt.Errorf("pod不能为空") } - kubeClient, err := p.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } updatedPod, err := kubeClient.CoreV1().Pods(namespace).Update(ctx, pod, metav1.UpdateOptions{}) if err != nil { - p.logger.Error("更新Pod失败", + m.logger.Error("更新Pod失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", pod.Name), @@ -721,7 +721,7 @@ func (p *podManager) UpdatePod(ctx context.Context, clusterID int, namespace str return nil, fmt.Errorf("更新Pod失败: %w", err) } - p.logger.Info("成功更新Pod", + m.logger.Info("成功更新Pod", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", pod.Name)) diff --git a/internal/k8s/manager/pv_manager.go b/internal/k8s/manager/pv_manager.go index 7ee32f15..e70f44b4 100644 --- a/internal/k8s/manager/pv_manager.go +++ b/internal/k8s/manager/pv_manager.go @@ -46,10 +46,10 @@ func NewPVManager(logger *zap.Logger, client client.K8sClient) PVManager { } // CreatePV 创建PersistentVolume -func (p *pvManager) CreatePV(ctx context.Context, clusterID int, pv *corev1.PersistentVolume) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvManager) CreatePV(ctx context.Context, clusterID int, pv *corev1.PersistentVolume) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -57,14 +57,14 @@ func (p *pvManager) CreatePV(ctx context.Context, clusterID int, pv *corev1.Pers _, err = kubeClient.CoreV1().PersistentVolumes().Create(ctx, pv, metav1.CreateOptions{}) if err != nil { - p.logger.Error("创建PersistentVolume失败", + m.logger.Error("创建PersistentVolume失败", zap.Int("clusterID", clusterID), zap.String("name", pv.Name), zap.Error(err)) return err } - p.logger.Info("成功创建PersistentVolume", + m.logger.Info("成功创建PersistentVolume", zap.Int("clusterID", clusterID), zap.String("name", pv.Name)) @@ -72,10 +72,10 @@ func (p *pvManager) CreatePV(ctx context.Context, clusterID int, pv *corev1.Pers } // GetPV 获取指定PersistentVolume -func (p *pvManager) GetPV(ctx context.Context, clusterID int, name string) (*corev1.PersistentVolume, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvManager) GetPV(ctx context.Context, clusterID int, name string) (*corev1.PersistentVolume, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -83,7 +83,7 @@ func (p *pvManager) GetPV(ctx context.Context, clusterID int, name string) (*cor pv, err := kubeClient.CoreV1().PersistentVolumes().Get(ctx, name, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取PersistentVolume失败", + m.logger.Error("获取PersistentVolume失败", zap.Int("clusterID", clusterID), zap.String("name", name), zap.Error(err)) @@ -94,10 +94,10 @@ func (p *pvManager) GetPV(ctx context.Context, clusterID int, name string) (*cor } // GetPVList 获取PersistentVolume列表 -func (p *pvManager) GetPVList(ctx context.Context, clusterID int, listOptions metav1.ListOptions) (*corev1.PersistentVolumeList, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvManager) GetPVList(ctx context.Context, clusterID int, listOptions metav1.ListOptions) (*corev1.PersistentVolumeList, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -105,13 +105,13 @@ func (p *pvManager) GetPVList(ctx context.Context, clusterID int, listOptions me pvList, err := kubeClient.CoreV1().PersistentVolumes().List(ctx, listOptions) if err != nil { - p.logger.Error("获取PersistentVolume列表失败", + m.logger.Error("获取PersistentVolume列表失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err } - p.logger.Debug("成功获取PersistentVolume列表", + m.logger.Debug("成功获取PersistentVolume列表", zap.Int("clusterID", clusterID), zap.Int("count", len(pvList.Items))) @@ -119,10 +119,10 @@ func (p *pvManager) GetPVList(ctx context.Context, clusterID int, listOptions me } // UpdatePV 更新PersistentVolume -func (p *pvManager) UpdatePV(ctx context.Context, clusterID int, pv *corev1.PersistentVolume) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvManager) UpdatePV(ctx context.Context, clusterID int, pv *corev1.PersistentVolume) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -130,14 +130,14 @@ func (p *pvManager) UpdatePV(ctx context.Context, clusterID int, pv *corev1.Pers _, err = kubeClient.CoreV1().PersistentVolumes().Update(ctx, pv, metav1.UpdateOptions{}) if err != nil { - p.logger.Error("更新PersistentVolume失败", + m.logger.Error("更新PersistentVolume失败", zap.Int("clusterID", clusterID), zap.String("name", pv.Name), zap.Error(err)) return err } - p.logger.Info("成功更新PersistentVolume", + m.logger.Info("成功更新PersistentVolume", zap.Int("clusterID", clusterID), zap.String("name", pv.Name)) @@ -145,10 +145,10 @@ func (p *pvManager) UpdatePV(ctx context.Context, clusterID int, pv *corev1.Pers } // DeletePV 删除PersistentVolume -func (p *pvManager) DeletePV(ctx context.Context, clusterID int, name string, deleteOptions metav1.DeleteOptions) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvManager) DeletePV(ctx context.Context, clusterID int, name string, deleteOptions metav1.DeleteOptions) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -156,14 +156,14 @@ func (p *pvManager) DeletePV(ctx context.Context, clusterID int, name string, de err = kubeClient.CoreV1().PersistentVolumes().Delete(ctx, name, deleteOptions) if err != nil { - p.logger.Error("删除PersistentVolume失败", + m.logger.Error("删除PersistentVolume失败", zap.Int("clusterID", clusterID), zap.String("name", name), zap.Error(err)) return err } - p.logger.Info("成功删除PersistentVolume", + m.logger.Info("成功删除PersistentVolume", zap.Int("clusterID", clusterID), zap.String("name", name)) @@ -171,10 +171,10 @@ func (p *pvManager) DeletePV(ctx context.Context, clusterID int, name string, de } // BatchDeletePVs 批量删除PersistentVolume -func (p *pvManager) BatchDeletePVs(ctx context.Context, clusterID int, pvNames []string) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvManager) BatchDeletePVs(ctx context.Context, clusterID int, pvNames []string) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -186,26 +186,26 @@ func (p *pvManager) BatchDeletePVs(ctx context.Context, clusterID int, pvNames [ for _, name := range pvNames { err := kubeClient.CoreV1().PersistentVolumes().Delete(ctx, name, deleteOptions) if err != nil { - p.logger.Error("删除PersistentVolume失败", + m.logger.Error("删除PersistentVolume失败", zap.Int("clusterID", clusterID), zap.String("name", name), zap.Error(err)) failedDeletions = append(failedDeletions, name) } else { - p.logger.Info("成功删除PersistentVolume", + m.logger.Info("成功删除PersistentVolume", zap.Int("clusterID", clusterID), zap.String("name", name)) } } if len(failedDeletions) > 0 { - p.logger.Warn("部分PersistentVolume删除失败", + m.logger.Warn("部分PersistentVolume删除失败", zap.Int("clusterID", clusterID), zap.Strings("failedDeletions", failedDeletions)) return err // 返回最后一个错误 } - p.logger.Info("批量删除PersistentVolume完成", + m.logger.Info("批量删除PersistentVolume完成", zap.Int("clusterID", clusterID), zap.Int("count", len(pvNames))) @@ -213,10 +213,10 @@ func (p *pvManager) BatchDeletePVs(ctx context.Context, clusterID int, pvNames [ } // PatchPV 部分更新PersistentVolume -func (p *pvManager) PatchPV(ctx context.Context, clusterID int, name string, data []byte, patchType string) (*corev1.PersistentVolume, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvManager) PatchPV(ctx context.Context, clusterID int, name string, data []byte, patchType string) (*corev1.PersistentVolume, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -226,7 +226,7 @@ func (p *pvManager) PatchPV(ctx context.Context, clusterID int, name string, dat pt := types.PatchType(patchType) pv, err := kubeClient.CoreV1().PersistentVolumes().Patch(ctx, name, pt, data, metav1.PatchOptions{}) if err != nil { - p.logger.Error("Patch PersistentVolume失败", + m.logger.Error("Patch PersistentVolume失败", zap.Int("clusterID", clusterID), zap.String("name", name), zap.String("patchType", patchType), @@ -234,7 +234,7 @@ func (p *pvManager) PatchPV(ctx context.Context, clusterID int, name string, dat return nil, err } - p.logger.Info("成功Patch PersistentVolume", + m.logger.Info("成功Patch PersistentVolume", zap.Int("clusterID", clusterID), zap.String("name", name)) @@ -242,10 +242,10 @@ func (p *pvManager) PatchPV(ctx context.Context, clusterID int, name string, dat } // UpdatePVStatus 更新PersistentVolume状态 -func (p *pvManager) UpdatePVStatus(ctx context.Context, clusterID int, pv *corev1.PersistentVolume) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvManager) UpdatePVStatus(ctx context.Context, clusterID int, pv *corev1.PersistentVolume) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -253,14 +253,14 @@ func (p *pvManager) UpdatePVStatus(ctx context.Context, clusterID int, pv *corev _, err = kubeClient.CoreV1().PersistentVolumes().UpdateStatus(ctx, pv, metav1.UpdateOptions{}) if err != nil { - p.logger.Error("更新PersistentVolume状态失败", + m.logger.Error("更新PersistentVolume状态失败", zap.Int("clusterID", clusterID), zap.String("name", pv.Name), zap.Error(err)) return err } - p.logger.Info("成功更新PersistentVolume状态", + m.logger.Info("成功更新PersistentVolume状态", zap.Int("clusterID", clusterID), zap.String("name", pv.Name)) @@ -268,17 +268,17 @@ func (p *pvManager) UpdatePVStatus(ctx context.Context, clusterID int, pv *corev } // GetAvailablePVs 获取可用的PersistentVolume -func (p *pvManager) GetAvailablePVs(ctx context.Context, clusterID int) (*corev1.PersistentVolumeList, error) { +func (m *pvManager) GetAvailablePVs(ctx context.Context, clusterID int) (*corev1.PersistentVolumeList, error) { listOptions := metav1.ListOptions{ FieldSelector: "status.phase=Available", } - return p.GetPVList(ctx, clusterID, listOptions) + return m.GetPVList(ctx, clusterID, listOptions) } // GetPVByStorageClass 根据存储类获取PersistentVolume -func (p *pvManager) GetPVByStorageClass(ctx context.Context, clusterID int, storageClass string) (*corev1.PersistentVolumeList, error) { - pvList, err := p.GetPVList(ctx, clusterID, metav1.ListOptions{}) +func (m *pvManager) GetPVByStorageClass(ctx context.Context, clusterID int, storageClass string) (*corev1.PersistentVolumeList, error) { + pvList, err := m.GetPVList(ctx, clusterID, metav1.ListOptions{}) if err != nil { return nil, err } @@ -297,7 +297,7 @@ func (p *pvManager) GetPVByStorageClass(ctx context.Context, clusterID int, stor Items: filteredPVs, } - p.logger.Debug("根据存储类过滤PV", + m.logger.Debug("根据存储类过滤PV", zap.Int("clusterID", clusterID), zap.String("storageClass", storageClass), zap.Int("filteredCount", len(filteredPVs))) @@ -306,9 +306,9 @@ func (p *pvManager) GetPVByStorageClass(ctx context.Context, clusterID int, stor } // ReclaimPV 回收PersistentVolume -func (p *pvManager) ReclaimPV(ctx context.Context, clusterID int, name string) error { +func (m *pvManager) ReclaimPV(ctx context.Context, clusterID int, name string) error { // 获取PV - pv, err := p.GetPV(ctx, clusterID, name) + pv, err := m.GetPV(ctx, clusterID, name) if err != nil { return err } @@ -317,16 +317,16 @@ func (p *pvManager) ReclaimPV(ctx context.Context, clusterID int, name string) e pv.Spec.ClaimRef = nil // 更新PV - err = p.UpdatePV(ctx, clusterID, pv) + err = m.UpdatePV(ctx, clusterID, pv) if err != nil { - p.logger.Error("回收PersistentVolume失败", + m.logger.Error("回收PersistentVolume失败", zap.Int("clusterID", clusterID), zap.String("name", name), zap.Error(err)) return err } - p.logger.Info("成功回收PersistentVolume", + m.logger.Info("成功回收PersistentVolume", zap.Int("clusterID", clusterID), zap.String("name", name)) diff --git a/internal/k8s/manager/pvc_manager.go b/internal/k8s/manager/pvc_manager.go index d3c74003..581e663c 100644 --- a/internal/k8s/manager/pvc_manager.go +++ b/internal/k8s/manager/pvc_manager.go @@ -48,10 +48,10 @@ func NewPVCManager(logger *zap.Logger, client client.K8sClient) PVCManager { } // CreatePVC 创建PersistentVolumeClaim -func (p *pvcManager) CreatePVC(ctx context.Context, clusterID int, namespace string, pvc *corev1.PersistentVolumeClaim) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvcManager) CreatePVC(ctx context.Context, clusterID int, namespace string, pvc *corev1.PersistentVolumeClaim) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -59,7 +59,7 @@ func (p *pvcManager) CreatePVC(ctx context.Context, clusterID int, namespace str _, err = kubeClient.CoreV1().PersistentVolumeClaims(namespace).Create(ctx, pvc, metav1.CreateOptions{}) if err != nil { - p.logger.Error("创建PersistentVolumeClaim失败", + m.logger.Error("创建PersistentVolumeClaim失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", pvc.Name), @@ -67,7 +67,7 @@ func (p *pvcManager) CreatePVC(ctx context.Context, clusterID int, namespace str return err } - p.logger.Info("成功创建PersistentVolumeClaim", + m.logger.Info("成功创建PersistentVolumeClaim", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", pvc.Name)) @@ -76,10 +76,10 @@ func (p *pvcManager) CreatePVC(ctx context.Context, clusterID int, namespace str } // GetPVC 获取指定PersistentVolumeClaim -func (p *pvcManager) GetPVC(ctx context.Context, clusterID int, namespace, name string) (*corev1.PersistentVolumeClaim, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvcManager) GetPVC(ctx context.Context, clusterID int, namespace, name string) (*corev1.PersistentVolumeClaim, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -87,7 +87,7 @@ func (p *pvcManager) GetPVC(ctx context.Context, clusterID int, namespace, name pvc, err := kubeClient.CoreV1().PersistentVolumeClaims(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取PersistentVolumeClaim失败", + m.logger.Error("获取PersistentVolumeClaim失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -99,10 +99,10 @@ func (p *pvcManager) GetPVC(ctx context.Context, clusterID int, namespace, name } // GetPVCList 获取PersistentVolumeClaim列表 -func (p *pvcManager) GetPVCList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) (*corev1.PersistentVolumeClaimList, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvcManager) GetPVCList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) (*corev1.PersistentVolumeClaimList, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -110,14 +110,14 @@ func (p *pvcManager) GetPVCList(ctx context.Context, clusterID int, namespace st pvcList, err := kubeClient.CoreV1().PersistentVolumeClaims(namespace).List(ctx, listOptions) if err != nil { - p.logger.Error("获取PersistentVolumeClaim列表失败", + m.logger.Error("获取PersistentVolumeClaim列表失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Error(err)) return nil, err } - p.logger.Debug("成功获取PersistentVolumeClaim列表", + m.logger.Debug("成功获取PersistentVolumeClaim列表", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Int("count", len(pvcList.Items))) @@ -126,10 +126,10 @@ func (p *pvcManager) GetPVCList(ctx context.Context, clusterID int, namespace st } // UpdatePVC 更新PersistentVolumeClaim -func (p *pvcManager) UpdatePVC(ctx context.Context, clusterID int, namespace string, pvc *corev1.PersistentVolumeClaim) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvcManager) UpdatePVC(ctx context.Context, clusterID int, namespace string, pvc *corev1.PersistentVolumeClaim) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -137,7 +137,7 @@ func (p *pvcManager) UpdatePVC(ctx context.Context, clusterID int, namespace str _, err = kubeClient.CoreV1().PersistentVolumeClaims(namespace).Update(ctx, pvc, metav1.UpdateOptions{}) if err != nil { - p.logger.Error("更新PersistentVolumeClaim失败", + m.logger.Error("更新PersistentVolumeClaim失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", pvc.Name), @@ -145,7 +145,7 @@ func (p *pvcManager) UpdatePVC(ctx context.Context, clusterID int, namespace str return err } - p.logger.Info("成功更新PersistentVolumeClaim", + m.logger.Info("成功更新PersistentVolumeClaim", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", pvc.Name)) @@ -154,10 +154,10 @@ func (p *pvcManager) UpdatePVC(ctx context.Context, clusterID int, namespace str } // DeletePVC 删除PersistentVolumeClaim -func (p *pvcManager) DeletePVC(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvcManager) DeletePVC(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -165,7 +165,7 @@ func (p *pvcManager) DeletePVC(ctx context.Context, clusterID int, namespace, na err = kubeClient.CoreV1().PersistentVolumeClaims(namespace).Delete(ctx, name, deleteOptions) if err != nil { - p.logger.Error("删除PersistentVolumeClaim失败", + m.logger.Error("删除PersistentVolumeClaim失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -173,7 +173,7 @@ func (p *pvcManager) DeletePVC(ctx context.Context, clusterID int, namespace, na return err } - p.logger.Info("成功删除PersistentVolumeClaim", + m.logger.Info("成功删除PersistentVolumeClaim", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -182,10 +182,10 @@ func (p *pvcManager) DeletePVC(ctx context.Context, clusterID int, namespace, na } // BatchDeletePVCs 批量删除PersistentVolumeClaim -func (p *pvcManager) BatchDeletePVCs(ctx context.Context, clusterID int, namespace string, pvcNames []string) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvcManager) BatchDeletePVCs(ctx context.Context, clusterID int, namespace string, pvcNames []string) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -197,14 +197,14 @@ func (p *pvcManager) BatchDeletePVCs(ctx context.Context, clusterID int, namespa for _, name := range pvcNames { err := kubeClient.CoreV1().PersistentVolumeClaims(namespace).Delete(ctx, name, deleteOptions) if err != nil { - p.logger.Error("删除PersistentVolumeClaim失败", + m.logger.Error("删除PersistentVolumeClaim失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), zap.Error(err)) failedDeletions = append(failedDeletions, name) } else { - p.logger.Info("成功删除PersistentVolumeClaim", + m.logger.Info("成功删除PersistentVolumeClaim", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -212,14 +212,14 @@ func (p *pvcManager) BatchDeletePVCs(ctx context.Context, clusterID int, namespa } if len(failedDeletions) > 0 { - p.logger.Warn("部分PersistentVolumeClaim删除失败", + m.logger.Warn("部分PersistentVolumeClaim删除失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Strings("failedDeletions", failedDeletions)) return err // 返回最后一个错误 } - p.logger.Info("批量删除PersistentVolumeClaim完成", + m.logger.Info("批量删除PersistentVolumeClaim完成", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Int("count", len(pvcNames))) @@ -228,10 +228,10 @@ func (p *pvcManager) BatchDeletePVCs(ctx context.Context, clusterID int, namespa } // PatchPVC 部分更新PersistentVolumeClaim -func (p *pvcManager) PatchPVC(ctx context.Context, clusterID int, namespace, name string, data []byte, patchType string) (*corev1.PersistentVolumeClaim, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvcManager) PatchPVC(ctx context.Context, clusterID int, namespace, name string, data []byte, patchType string) (*corev1.PersistentVolumeClaim, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -241,7 +241,7 @@ func (p *pvcManager) PatchPVC(ctx context.Context, clusterID int, namespace, nam pt := types.PatchType(patchType) pvc, err := kubeClient.CoreV1().PersistentVolumeClaims(namespace).Patch(ctx, name, pt, data, metav1.PatchOptions{}) if err != nil { - p.logger.Error("Patch PersistentVolumeClaim失败", + m.logger.Error("Patch PersistentVolumeClaim失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -250,7 +250,7 @@ func (p *pvcManager) PatchPVC(ctx context.Context, clusterID int, namespace, nam return nil, err } - p.logger.Info("成功Patch PersistentVolumeClaim", + m.logger.Info("成功Patch PersistentVolumeClaim", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -259,10 +259,10 @@ func (p *pvcManager) PatchPVC(ctx context.Context, clusterID int, namespace, nam } // UpdatePVCStatus 更新PersistentVolumeClaim状态 -func (p *pvcManager) UpdatePVCStatus(ctx context.Context, clusterID int, namespace string, pvc *corev1.PersistentVolumeClaim) error { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (m *pvcManager) UpdatePVCStatus(ctx context.Context, clusterID int, namespace string, pvc *corev1.PersistentVolumeClaim) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -270,7 +270,7 @@ func (p *pvcManager) UpdatePVCStatus(ctx context.Context, clusterID int, namespa _, err = kubeClient.CoreV1().PersistentVolumeClaims(namespace).UpdateStatus(ctx, pvc, metav1.UpdateOptions{}) if err != nil { - p.logger.Error("更新PersistentVolumeClaim状态失败", + m.logger.Error("更新PersistentVolumeClaim状态失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", pvc.Name), @@ -278,7 +278,7 @@ func (p *pvcManager) UpdatePVCStatus(ctx context.Context, clusterID int, namespa return err } - p.logger.Info("成功更新PersistentVolumeClaim状态", + m.logger.Info("成功更新PersistentVolumeClaim状态", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", pvc.Name)) @@ -287,8 +287,8 @@ func (p *pvcManager) UpdatePVCStatus(ctx context.Context, clusterID int, namespa } // GetPVCsByStorageClass 根据存储类获取PersistentVolumeClaim -func (p *pvcManager) GetPVCsByStorageClass(ctx context.Context, clusterID int, namespace, storageClass string) (*corev1.PersistentVolumeClaimList, error) { - pvcList, err := p.GetPVCList(ctx, clusterID, namespace, metav1.ListOptions{}) +func (m *pvcManager) GetPVCsByStorageClass(ctx context.Context, clusterID int, namespace, storageClass string) (*corev1.PersistentVolumeClaimList, error) { + pvcList, err := m.GetPVCList(ctx, clusterID, namespace, metav1.ListOptions{}) if err != nil { return nil, err } @@ -307,7 +307,7 @@ func (p *pvcManager) GetPVCsByStorageClass(ctx context.Context, clusterID int, n Items: filteredPVCs, } - p.logger.Debug("根据存储类过滤PVC", + m.logger.Debug("根据存储类过滤PVC", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("storageClass", storageClass), @@ -317,27 +317,27 @@ func (p *pvcManager) GetPVCsByStorageClass(ctx context.Context, clusterID int, n } // GetPendingPVCs 获取Pending状态的PersistentVolumeClaim -func (p *pvcManager) GetPendingPVCs(ctx context.Context, clusterID int, namespace string) (*corev1.PersistentVolumeClaimList, error) { +func (m *pvcManager) GetPendingPVCs(ctx context.Context, clusterID int, namespace string) (*corev1.PersistentVolumeClaimList, error) { listOptions := metav1.ListOptions{ FieldSelector: "status.phase=Pending", } - return p.GetPVCList(ctx, clusterID, namespace, listOptions) + return m.GetPVCList(ctx, clusterID, namespace, listOptions) } // GetBoundPVCs 获取Bound状态的PersistentVolumeClaim -func (p *pvcManager) GetBoundPVCs(ctx context.Context, clusterID int, namespace string) (*corev1.PersistentVolumeClaimList, error) { +func (m *pvcManager) GetBoundPVCs(ctx context.Context, clusterID int, namespace string) (*corev1.PersistentVolumeClaimList, error) { listOptions := metav1.ListOptions{ FieldSelector: "status.phase=Bound", } - return p.GetPVCList(ctx, clusterID, namespace, listOptions) + return m.GetPVCList(ctx, clusterID, namespace, listOptions) } // ExpandPVC 扩容PersistentVolumeClaim -func (p *pvcManager) ExpandPVC(ctx context.Context, clusterID int, namespace, name, newSize string) error { +func (m *pvcManager) ExpandPVC(ctx context.Context, clusterID int, namespace, name, newSize string) error { // 获取PVC - pvc, err := p.GetPVC(ctx, clusterID, namespace, name) + pvc, err := m.GetPVC(ctx, clusterID, namespace, name) if err != nil { return err } @@ -345,7 +345,7 @@ func (p *pvcManager) ExpandPVC(ctx context.Context, clusterID int, namespace, na // 解析新的存储大小 newQuantity, err := resource.ParseQuantity(newSize) if err != nil { - p.logger.Error("解析存储大小失败", + m.logger.Error("解析存储大小失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -361,9 +361,9 @@ func (p *pvcManager) ExpandPVC(ctx context.Context, clusterID int, namespace, na pvc.Spec.Resources.Requests[corev1.ResourceStorage] = newQuantity // 更新PVC - err = p.UpdatePVC(ctx, clusterID, namespace, pvc) + err = m.UpdatePVC(ctx, clusterID, namespace, pvc) if err != nil { - p.logger.Error("扩容PersistentVolumeClaim失败", + m.logger.Error("扩容PersistentVolumeClaim失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -372,7 +372,7 @@ func (p *pvcManager) ExpandPVC(ctx context.Context, clusterID int, namespace, na return err } - p.logger.Info("成功扩容PersistentVolumeClaim", + m.logger.Info("成功扩容PersistentVolumeClaim", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), diff --git a/internal/k8s/manager/role_manager.go b/internal/k8s/manager/role_manager.go index ce56a48e..68bccffa 100644 --- a/internal/k8s/manager/role_manager.go +++ b/internal/k8s/manager/role_manager.go @@ -62,36 +62,36 @@ func NewRoleManager(client client.K8sClient, logger *zap.Logger) RoleManager { } // CreateRole 创建Role -func (r *roleManager) CreateRole(ctx context.Context, clusterID int, namespace string, role *rbacv1.Role) error { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleManager) CreateRole(ctx context.Context, clusterID int, namespace string, role *rbacv1.Role) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } _, err = clientset.RbacV1().Roles(namespace).Create(ctx, role, metav1.CreateOptions{}) if err != nil { - r.logger.Error("创建Role失败", zap.Error(err), + m.logger.Error("创建Role失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", role.Name)) return fmt.Errorf("创建Role %s/%s 失败: %w", namespace, role.Name, err) } - r.logger.Info("成功创建Role", + m.logger.Info("成功创建Role", zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", role.Name)) return nil } // GetRole 获取单个Role -func (r *roleManager) GetRole(ctx context.Context, clusterID int, namespace, name string) (*rbacv1.Role, error) { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleManager) GetRole(ctx context.Context, clusterID int, namespace, name string) (*rbacv1.Role, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } role, err := clientset.RbacV1().Roles(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - r.logger.Error("获取Role失败", zap.Error(err), + m.logger.Error("获取Role失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", name)) return nil, fmt.Errorf("获取Role %s/%s 失败: %w", namespace, name, err) } @@ -100,16 +100,16 @@ func (r *roleManager) GetRole(ctx context.Context, clusterID int, namespace, nam } // GetRoleList 获取Role列表(转换为模型) -func (r *roleManager) GetRoleList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sRole, error) { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleManager) GetRoleList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sRole, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } roles, err := clientset.RbacV1().Roles(namespace).List(ctx, listOptions) if err != nil { - r.logger.Error("获取Role列表失败", zap.Error(err), + m.logger.Error("获取Role列表失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace)) return nil, fmt.Errorf("获取Role列表失败: %w", err) } @@ -131,69 +131,69 @@ func (r *roleManager) GetRoleList(ctx context.Context, clusterID int, namespace k8sRoles = append(k8sRoles, k8sRole) } - r.logger.Debug("成功获取Role列表", + m.logger.Debug("成功获取Role列表", zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.Int("count", len(roles.Items))) return k8sRoles, nil } // GetRoleListRaw 获取Role原始列表 -func (r *roleManager) GetRoleListRaw(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) (*rbacv1.RoleList, error) { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleManager) GetRoleListRaw(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) (*rbacv1.RoleList, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } roles, err := clientset.RbacV1().Roles(namespace).List(ctx, listOptions) if err != nil { - r.logger.Error("获取Role列表失败", zap.Error(err), + m.logger.Error("获取Role列表失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace)) return nil, fmt.Errorf("获取Role列表失败: %w", err) } - r.logger.Debug("成功获取Role列表", + m.logger.Debug("成功获取Role列表", zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.Int("count", len(roles.Items))) return roles, nil } // UpdateRole 更新Role -func (r *roleManager) UpdateRole(ctx context.Context, clusterID int, namespace string, role *rbacv1.Role) error { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleManager) UpdateRole(ctx context.Context, clusterID int, namespace string, role *rbacv1.Role) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } _, err = clientset.RbacV1().Roles(namespace).Update(ctx, role, metav1.UpdateOptions{}) if err != nil { - r.logger.Error("更新Role失败", zap.Error(err), + m.logger.Error("更新Role失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", role.Name)) return fmt.Errorf("更新Role %s/%s 失败: %w", namespace, role.Name, err) } - r.logger.Info("成功更新Role", + m.logger.Info("成功更新Role", zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", role.Name)) return nil } // DeleteRole 删除Role -func (r *roleManager) DeleteRole(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleManager) DeleteRole(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } err = clientset.RbacV1().Roles(namespace).Delete(ctx, name, deleteOptions) if err != nil { - r.logger.Error("删除Role失败", zap.Error(err), + m.logger.Error("删除Role失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", name)) return fmt.Errorf("删除Role %s/%s 失败: %w", namespace, name, err) } - r.logger.Info("成功删除Role", + m.logger.Info("成功删除Role", zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", name)) return nil } diff --git a/internal/k8s/manager/rolebinding_manager.go b/internal/k8s/manager/rolebinding_manager.go index 71d75085..9922a168 100644 --- a/internal/k8s/manager/rolebinding_manager.go +++ b/internal/k8s/manager/rolebinding_manager.go @@ -61,36 +61,36 @@ func NewRoleBindingManager(client client.K8sClient, logger *zap.Logger) RoleBind } // CreateRoleBinding 创建RoleBinding -func (r *roleBindingManager) CreateRoleBinding(ctx context.Context, clusterID int, namespace string, roleBinding *rbacv1.RoleBinding) error { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleBindingManager) CreateRoleBinding(ctx context.Context, clusterID int, namespace string, roleBinding *rbacv1.RoleBinding) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } _, err = clientset.RbacV1().RoleBindings(namespace).Create(ctx, roleBinding, metav1.CreateOptions{}) if err != nil { - r.logger.Error("创建RoleBinding失败", zap.Error(err), + m.logger.Error("创建RoleBinding失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", roleBinding.Name)) return fmt.Errorf("创建RoleBinding %s/%s 失败: %w", namespace, roleBinding.Name, err) } - r.logger.Info("成功创建RoleBinding", + m.logger.Info("成功创建RoleBinding", zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", roleBinding.Name)) return nil } // GetRoleBinding 获取单个RoleBinding -func (r *roleBindingManager) GetRoleBinding(ctx context.Context, clusterID int, namespace, name string) (*rbacv1.RoleBinding, error) { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleBindingManager) GetRoleBinding(ctx context.Context, clusterID int, namespace, name string) (*rbacv1.RoleBinding, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } roleBinding, err := clientset.RbacV1().RoleBindings(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - r.logger.Error("获取RoleBinding失败", zap.Error(err), + m.logger.Error("获取RoleBinding失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", name)) return nil, fmt.Errorf("获取RoleBinding %s/%s 失败: %w", namespace, name, err) } @@ -99,16 +99,16 @@ func (r *roleBindingManager) GetRoleBinding(ctx context.Context, clusterID int, } // GetRoleBindingList 获取RoleBinding列表 -func (r *roleBindingManager) GetRoleBindingList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sRoleBinding, error) { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleBindingManager) GetRoleBindingList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sRoleBinding, error) { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return nil, fmt.Errorf("获取Kubernetes客户端失败: %w", err) } roleBindings, err := clientset.RbacV1().RoleBindings(namespace).List(ctx, listOptions) if err != nil { - r.logger.Error("获取RoleBinding列表失败", zap.Error(err), + m.logger.Error("获取RoleBinding列表失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace)) return nil, fmt.Errorf("获取RoleBinding列表失败: %w", err) } @@ -128,48 +128,48 @@ func (r *roleBindingManager) GetRoleBindingList(ctx context.Context, clusterID i k8sRoleBindings = append(k8sRoleBindings, k8sRoleBinding) } - r.logger.Debug("成功获取RoleBinding列表", + m.logger.Debug("成功获取RoleBinding列表", zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.Int("count", len(roleBindings.Items))) return k8sRoleBindings, nil } // UpdateRoleBinding 更新RoleBinding -func (r *roleBindingManager) UpdateRoleBinding(ctx context.Context, clusterID int, namespace string, roleBinding *rbacv1.RoleBinding) error { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleBindingManager) UpdateRoleBinding(ctx context.Context, clusterID int, namespace string, roleBinding *rbacv1.RoleBinding) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } _, err = clientset.RbacV1().RoleBindings(namespace).Update(ctx, roleBinding, metav1.UpdateOptions{}) if err != nil { - r.logger.Error("更新RoleBinding失败", zap.Error(err), + m.logger.Error("更新RoleBinding失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", roleBinding.Name)) return fmt.Errorf("更新RoleBinding %s/%s 失败: %w", namespace, roleBinding.Name, err) } - r.logger.Info("成功更新RoleBinding", + m.logger.Info("成功更新RoleBinding", zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", roleBinding.Name)) return nil } // DeleteRoleBinding 删除RoleBinding -func (r *roleBindingManager) DeleteRoleBinding(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { - clientset, err := r.client.GetKubeClient(clusterID) +func (m *roleBindingManager) DeleteRoleBinding(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { + clientset, err := m.client.GetKubeClient(clusterID) if err != nil { - r.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) + m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("cluster_id", clusterID)) return fmt.Errorf("获取Kubernetes客户端失败: %w", err) } err = clientset.RbacV1().RoleBindings(namespace).Delete(ctx, name, deleteOptions) if err != nil { - r.logger.Error("删除RoleBinding失败", zap.Error(err), + m.logger.Error("删除RoleBinding失败", zap.Error(err), zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", name)) return fmt.Errorf("删除RoleBinding %s/%s 失败: %w", namespace, name, err) } - r.logger.Info("成功删除RoleBinding", + m.logger.Info("成功删除RoleBinding", zap.Int("cluster_id", clusterID), zap.String("namespace", namespace), zap.String("name", name)) return nil } diff --git a/internal/k8s/manager/serviceaccount_manager.go b/internal/k8s/manager/serviceaccount_manager.go index 3c1c86d2..b88bd52a 100644 --- a/internal/k8s/manager/serviceaccount_manager.go +++ b/internal/k8s/manager/serviceaccount_manager.go @@ -46,10 +46,10 @@ func NewServiceAccountManager(logger *zap.Logger, client client.K8sClient) Servi } // CreateServiceAccount 创建ServiceAccount -func (s *serviceAccountManager) CreateServiceAccount(ctx context.Context, clusterID int, namespace string, sa *corev1.ServiceAccount) error { - kubeClient, err := s.client.GetKubeClient(clusterID) +func (m *serviceAccountManager) CreateServiceAccount(ctx context.Context, clusterID int, namespace string, sa *corev1.ServiceAccount) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -57,7 +57,7 @@ func (s *serviceAccountManager) CreateServiceAccount(ctx context.Context, cluste _, err = kubeClient.CoreV1().ServiceAccounts(namespace).Create(ctx, sa, metav1.CreateOptions{}) if err != nil { - s.logger.Error("创建ServiceAccount失败", + m.logger.Error("创建ServiceAccount失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", sa.Name), @@ -65,7 +65,7 @@ func (s *serviceAccountManager) CreateServiceAccount(ctx context.Context, cluste return err } - s.logger.Info("成功创建ServiceAccount", + m.logger.Info("成功创建ServiceAccount", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", sa.Name)) @@ -74,10 +74,10 @@ func (s *serviceAccountManager) CreateServiceAccount(ctx context.Context, cluste } // GetServiceAccount 获取指定ServiceAccount -func (s *serviceAccountManager) GetServiceAccount(ctx context.Context, clusterID int, namespace, name string) (*corev1.ServiceAccount, error) { - kubeClient, err := s.client.GetKubeClient(clusterID) +func (m *serviceAccountManager) GetServiceAccount(ctx context.Context, clusterID int, namespace, name string) (*corev1.ServiceAccount, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -85,7 +85,7 @@ func (s *serviceAccountManager) GetServiceAccount(ctx context.Context, clusterID sa, err := kubeClient.CoreV1().ServiceAccounts(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - s.logger.Error("获取ServiceAccount失败", + m.logger.Error("获取ServiceAccount失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -97,10 +97,10 @@ func (s *serviceAccountManager) GetServiceAccount(ctx context.Context, clusterID } // GetServiceAccountList 获取ServiceAccount列表 -func (s *serviceAccountManager) GetServiceAccountList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) (*corev1.ServiceAccountList, error) { - kubeClient, err := s.client.GetKubeClient(clusterID) +func (m *serviceAccountManager) GetServiceAccountList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) (*corev1.ServiceAccountList, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -108,14 +108,14 @@ func (s *serviceAccountManager) GetServiceAccountList(ctx context.Context, clust saList, err := kubeClient.CoreV1().ServiceAccounts(namespace).List(ctx, listOptions) if err != nil { - s.logger.Error("获取ServiceAccount列表失败", + m.logger.Error("获取ServiceAccount列表失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Error(err)) return nil, err } - s.logger.Debug("成功获取ServiceAccount列表", + m.logger.Debug("成功获取ServiceAccount列表", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Int("count", len(saList.Items))) @@ -124,10 +124,10 @@ func (s *serviceAccountManager) GetServiceAccountList(ctx context.Context, clust } // UpdateServiceAccount 更新ServiceAccount -func (s *serviceAccountManager) UpdateServiceAccount(ctx context.Context, clusterID int, namespace string, sa *corev1.ServiceAccount) error { - kubeClient, err := s.client.GetKubeClient(clusterID) +func (m *serviceAccountManager) UpdateServiceAccount(ctx context.Context, clusterID int, namespace string, sa *corev1.ServiceAccount) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -135,7 +135,7 @@ func (s *serviceAccountManager) UpdateServiceAccount(ctx context.Context, cluste _, err = kubeClient.CoreV1().ServiceAccounts(namespace).Update(ctx, sa, metav1.UpdateOptions{}) if err != nil { - s.logger.Error("更新ServiceAccount失败", + m.logger.Error("更新ServiceAccount失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", sa.Name), @@ -143,7 +143,7 @@ func (s *serviceAccountManager) UpdateServiceAccount(ctx context.Context, cluste return err } - s.logger.Info("成功更新ServiceAccount", + m.logger.Info("成功更新ServiceAccount", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", sa.Name)) @@ -152,10 +152,10 @@ func (s *serviceAccountManager) UpdateServiceAccount(ctx context.Context, cluste } // DeleteServiceAccount 删除ServiceAccount -func (s *serviceAccountManager) DeleteServiceAccount(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { - kubeClient, err := s.client.GetKubeClient(clusterID) +func (m *serviceAccountManager) DeleteServiceAccount(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -163,7 +163,7 @@ func (s *serviceAccountManager) DeleteServiceAccount(ctx context.Context, cluste err = kubeClient.CoreV1().ServiceAccounts(namespace).Delete(ctx, name, deleteOptions) if err != nil { - s.logger.Error("删除ServiceAccount失败", + m.logger.Error("删除ServiceAccount失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -171,7 +171,7 @@ func (s *serviceAccountManager) DeleteServiceAccount(ctx context.Context, cluste return err } - s.logger.Info("成功删除ServiceAccount", + m.logger.Info("成功删除ServiceAccount", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -180,10 +180,10 @@ func (s *serviceAccountManager) DeleteServiceAccount(ctx context.Context, cluste } // PatchServiceAccount 部分更新ServiceAccount -func (s *serviceAccountManager) PatchServiceAccount(ctx context.Context, clusterID int, namespace, name string, data []byte, patchType string) (*corev1.ServiceAccount, error) { - kubeClient, err := s.client.GetKubeClient(clusterID) +func (m *serviceAccountManager) PatchServiceAccount(ctx context.Context, clusterID int, namespace, name string, data []byte, patchType string) (*corev1.ServiceAccount, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -193,7 +193,7 @@ func (s *serviceAccountManager) PatchServiceAccount(ctx context.Context, cluster pt := types.PatchType(patchType) sa, err := kubeClient.CoreV1().ServiceAccounts(namespace).Patch(ctx, name, pt, data, metav1.PatchOptions{}) if err != nil { - s.logger.Error("Patch ServiceAccount失败", + m.logger.Error("Patch ServiceAccount失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -202,7 +202,7 @@ func (s *serviceAccountManager) PatchServiceAccount(ctx context.Context, cluster return nil, err } - s.logger.Info("成功Patch ServiceAccount", + m.logger.Info("成功Patch ServiceAccount", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -211,15 +211,15 @@ func (s *serviceAccountManager) PatchServiceAccount(ctx context.Context, cluster } // GetServiceAccountSecrets 获取ServiceAccount关联的Secrets -func (s *serviceAccountManager) GetServiceAccountSecrets(ctx context.Context, clusterID int, namespace, name string) ([]corev1.Secret, error) { - sa, err := s.GetServiceAccount(ctx, clusterID, namespace, name) +func (m *serviceAccountManager) GetServiceAccountSecrets(ctx context.Context, clusterID int, namespace, name string) ([]corev1.Secret, error) { + sa, err := m.GetServiceAccount(ctx, clusterID, namespace, name) if err != nil { return nil, err } - kubeClient, err := s.client.GetKubeClient(clusterID) + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -229,7 +229,7 @@ func (s *serviceAccountManager) GetServiceAccountSecrets(ctx context.Context, cl for _, secretRef := range sa.Secrets { secret, err := kubeClient.CoreV1().Secrets(namespace).Get(ctx, secretRef.Name, metav1.GetOptions{}) if err != nil { - s.logger.Warn("获取ServiceAccount关联的Secret失败", + m.logger.Warn("获取ServiceAccount关联的Secret失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("secretName", secretRef.Name), @@ -239,7 +239,7 @@ func (s *serviceAccountManager) GetServiceAccountSecrets(ctx context.Context, cl secrets = append(secrets, *secret) } - s.logger.Debug("获取ServiceAccount关联的Secrets", + m.logger.Debug("获取ServiceAccount关联的Secrets", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("serviceAccountName", name), @@ -249,8 +249,8 @@ func (s *serviceAccountManager) GetServiceAccountSecrets(ctx context.Context, cl } // GetServiceAccountTokens 获取ServiceAccount的Token -func (s *serviceAccountManager) GetServiceAccountTokens(ctx context.Context, clusterID int, namespace, name string) ([]string, error) { - secrets, err := s.GetServiceAccountSecrets(ctx, clusterID, namespace, name) +func (m *serviceAccountManager) GetServiceAccountTokens(ctx context.Context, clusterID int, namespace, name string) ([]string, error) { + secrets, err := m.GetServiceAccountSecrets(ctx, clusterID, namespace, name) if err != nil { return nil, err } @@ -264,7 +264,7 @@ func (s *serviceAccountManager) GetServiceAccountTokens(ctx context.Context, clu } } - s.logger.Debug("获取ServiceAccount的Token", + m.logger.Debug("获取ServiceAccount的Token", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("serviceAccountName", name), @@ -274,10 +274,10 @@ func (s *serviceAccountManager) GetServiceAccountTokens(ctx context.Context, clu } // CreateServiceAccountToken 为ServiceAccount创建Token -func (s *serviceAccountManager) CreateServiceAccountToken(ctx context.Context, clusterID int, namespace, name string, tokenRequest *authv1.TokenRequest) (*authv1.TokenRequest, error) { - kubeClient, err := s.client.GetKubeClient(clusterID) +func (m *serviceAccountManager) CreateServiceAccountToken(ctx context.Context, clusterID int, namespace, name string, tokenRequest *authv1.TokenRequest) (*authv1.TokenRequest, error) { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, err @@ -285,7 +285,7 @@ func (s *serviceAccountManager) CreateServiceAccountToken(ctx context.Context, c token, err := kubeClient.CoreV1().ServiceAccounts(namespace).CreateToken(ctx, name, tokenRequest, metav1.CreateOptions{}) if err != nil { - s.logger.Error("创建ServiceAccount Token失败", + m.logger.Error("创建ServiceAccount Token失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -293,7 +293,7 @@ func (s *serviceAccountManager) CreateServiceAccountToken(ctx context.Context, c return nil, err } - s.logger.Info("成功创建ServiceAccount Token", + m.logger.Info("成功创建ServiceAccount Token", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -302,10 +302,10 @@ func (s *serviceAccountManager) CreateServiceAccountToken(ctx context.Context, c } // BindServiceAccountToRole 绑定ServiceAccount到Role -func (s *serviceAccountManager) BindServiceAccountToRole(ctx context.Context, clusterID int, namespace, saName, roleName string) error { - kubeClient, err := s.client.GetKubeClient(clusterID) +func (m *serviceAccountManager) BindServiceAccountToRole(ctx context.Context, clusterID int, namespace, saName, roleName string) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -333,7 +333,7 @@ func (s *serviceAccountManager) BindServiceAccountToRole(ctx context.Context, cl _, err = kubeClient.RbacV1().RoleBindings(namespace).Create(ctx, roleBinding, metav1.CreateOptions{}) if err != nil { - s.logger.Error("绑定ServiceAccount到Role失败", + m.logger.Error("绑定ServiceAccount到Role失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("serviceAccount", saName), @@ -342,7 +342,7 @@ func (s *serviceAccountManager) BindServiceAccountToRole(ctx context.Context, cl return err } - s.logger.Info("成功绑定ServiceAccount到Role", + m.logger.Info("成功绑定ServiceAccount到Role", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("serviceAccount", saName), @@ -352,10 +352,10 @@ func (s *serviceAccountManager) BindServiceAccountToRole(ctx context.Context, cl } // BindServiceAccountToClusterRole 绑定ServiceAccount到ClusterRole -func (s *serviceAccountManager) BindServiceAccountToClusterRole(ctx context.Context, clusterID int, namespace, saName, clusterRoleName string) error { - kubeClient, err := s.client.GetKubeClient(clusterID) +func (m *serviceAccountManager) BindServiceAccountToClusterRole(ctx context.Context, clusterID int, namespace, saName, clusterRoleName string) error { + kubeClient, err := m.client.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取Kubernetes客户端失败", + m.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return err @@ -382,7 +382,7 @@ func (s *serviceAccountManager) BindServiceAccountToClusterRole(ctx context.Cont _, err = kubeClient.RbacV1().ClusterRoleBindings().Create(ctx, clusterRoleBinding, metav1.CreateOptions{}) if err != nil { - s.logger.Error("绑定ServiceAccount到ClusterRole失败", + m.logger.Error("绑定ServiceAccount到ClusterRole失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("serviceAccount", saName), @@ -391,7 +391,7 @@ func (s *serviceAccountManager) BindServiceAccountToClusterRole(ctx context.Cont return err } - s.logger.Info("成功绑定ServiceAccount到ClusterRole", + m.logger.Info("成功绑定ServiceAccount到ClusterRole", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("serviceAccount", saName), diff --git a/internal/k8s/manager/statefulset_manager.go b/internal/k8s/manager/statefulset_manager.go index 70b439d9..872b9a4d 100644 --- a/internal/k8s/manager/statefulset_manager.go +++ b/internal/k8s/manager/statefulset_manager.go @@ -70,29 +70,29 @@ func NewStatefulSetManager(clientFactory client.K8sClient, logger *zap.Logger) S } // getKubeClient 获取 Kubernetes 客户端 -func (s *statefulSetManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { - kubeClient, err := s.clientFactory.GetKubeClient(clusterID) +func (m *statefulSetManager) getKubeClient(clusterID int) (*kubernetes.Clientset, error) { + kubeClient, err := m.clientFactory.GetKubeClient(clusterID) if err != nil { - s.logger.Error("获取 Kubernetes 客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) + m.logger.Error("获取 Kubernetes 客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) return nil, fmt.Errorf("获取 Kubernetes 客户端失败: %w", err) } return kubeClient, nil } // CreateStatefulSet 创建 StatefulSet -func (s *statefulSetManager) CreateStatefulSet(ctx context.Context, clusterID int, namespace string, statefulSet *appsv1.StatefulSet) error { +func (m *statefulSetManager) CreateStatefulSet(ctx context.Context, clusterID int, namespace string, statefulSet *appsv1.StatefulSet) error { if statefulSet == nil { return fmt.Errorf("statefulSet 不能为空") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } _, err = kubeClient.AppsV1().StatefulSets(namespace).Create(ctx, statefulSet, metav1.CreateOptions{}) if err != nil { - s.logger.Error("创建 StatefulSet 失败", + m.logger.Error("创建 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", statefulSet.Name), @@ -100,7 +100,7 @@ func (s *statefulSetManager) CreateStatefulSet(ctx context.Context, clusterID in return fmt.Errorf("创建 StatefulSet 失败: %w", err) } - s.logger.Info("成功创建 StatefulSet", + m.logger.Info("成功创建 StatefulSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", statefulSet.Name)) @@ -109,19 +109,19 @@ func (s *statefulSetManager) CreateStatefulSet(ctx context.Context, clusterID in } // GetStatefulSet 获取单个 StatefulSet -func (s *statefulSetManager) GetStatefulSet(ctx context.Context, clusterID int, namespace, name string) (*appsv1.StatefulSet, error) { +func (m *statefulSetManager) GetStatefulSet(ctx context.Context, clusterID int, namespace, name string) (*appsv1.StatefulSet, error) { if name == "" { return nil, fmt.Errorf("StatefulSet name 不能为空") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } statefulSet, err := kubeClient.AppsV1().StatefulSets(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - s.logger.Error("获取 StatefulSet 失败", + m.logger.Error("获取 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -133,15 +133,15 @@ func (s *statefulSetManager) GetStatefulSet(ctx context.Context, clusterID int, } // GetStatefulSetList 获取 StatefulSet 列表 -func (s *statefulSetManager) GetStatefulSetList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sStatefulSet, error) { - kubeClient, err := s.getKubeClient(clusterID) +func (m *statefulSetManager) GetStatefulSetList(ctx context.Context, clusterID int, namespace string, listOptions metav1.ListOptions) ([]*model.K8sStatefulSet, error) { + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, err } statefulSetList, err := kubeClient.AppsV1().StatefulSets(namespace).List(ctx, listOptions) if err != nil { - s.logger.Error("获取 StatefulSet 列表失败", + m.logger.Error("获取 StatefulSet 列表失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.Error(err)) @@ -152,7 +152,7 @@ func (s *statefulSetManager) GetStatefulSetList(ctx context.Context, clusterID i for _, statefulSet := range statefulSetList.Items { k8sStatefulSet, err := utils.BuildK8sStatefulSet(ctx, clusterID, statefulSet) if err != nil { - s.logger.Warn("构建 K8sStatefulSet 失败", + m.logger.Warn("构建 K8sStatefulSet 失败", zap.String("statefulSetName", statefulSet.Name), zap.Error(err)) continue @@ -164,19 +164,19 @@ func (s *statefulSetManager) GetStatefulSetList(ctx context.Context, clusterID i } // UpdateStatefulSet 更新 StatefulSet -func (s *statefulSetManager) UpdateStatefulSet(ctx context.Context, clusterID int, namespace string, statefulSet *appsv1.StatefulSet) error { +func (m *statefulSetManager) UpdateStatefulSet(ctx context.Context, clusterID int, namespace string, statefulSet *appsv1.StatefulSet) error { if statefulSet == nil { return fmt.Errorf("statefulSet 不能为空") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } _, err = kubeClient.AppsV1().StatefulSets(namespace).Update(ctx, statefulSet, metav1.UpdateOptions{}) if err != nil { - s.logger.Error("更新 StatefulSet 失败", + m.logger.Error("更新 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", statefulSet.Name), @@ -184,7 +184,7 @@ func (s *statefulSetManager) UpdateStatefulSet(ctx context.Context, clusterID in return fmt.Errorf("更新 StatefulSet 失败: %w", err) } - s.logger.Info("成功更新 StatefulSet", + m.logger.Info("成功更新 StatefulSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", statefulSet.Name)) @@ -193,19 +193,19 @@ func (s *statefulSetManager) UpdateStatefulSet(ctx context.Context, clusterID in } // DeleteStatefulSet 删除 StatefulSet -func (s *statefulSetManager) DeleteStatefulSet(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { +func (m *statefulSetManager) DeleteStatefulSet(ctx context.Context, clusterID int, namespace, name string, deleteOptions metav1.DeleteOptions) error { if name == "" { return fmt.Errorf("StatefulSet name 不能为空") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } err = kubeClient.AppsV1().StatefulSets(namespace).Delete(ctx, name, deleteOptions) if err != nil { - s.logger.Error("删除 StatefulSet 失败", + m.logger.Error("删除 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -213,7 +213,7 @@ func (s *statefulSetManager) DeleteStatefulSet(ctx context.Context, clusterID in return fmt.Errorf("删除 StatefulSet 失败: %w", err) } - s.logger.Info("成功删除 StatefulSet", + m.logger.Info("成功删除 StatefulSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -222,12 +222,12 @@ func (s *statefulSetManager) DeleteStatefulSet(ctx context.Context, clusterID in } // RestartStatefulSet 重启 StatefulSet -func (s *statefulSetManager) RestartStatefulSet(ctx context.Context, clusterID int, namespace, name string) error { +func (m *statefulSetManager) RestartStatefulSet(ctx context.Context, clusterID int, namespace, name string) error { if name == "" { return fmt.Errorf("StatefulSet name 不能为空") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -237,7 +237,7 @@ func (s *statefulSetManager) RestartStatefulSet(ctx context.Context, clusterID i _, err = kubeClient.AppsV1().StatefulSets(namespace).Patch(ctx, name, types.StrategicMergePatchType, []byte(patchData), metav1.PatchOptions{}) if err != nil { - s.logger.Error("重启 StatefulSet 失败", + m.logger.Error("重启 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -245,7 +245,7 @@ func (s *statefulSetManager) RestartStatefulSet(ctx context.Context, clusterID i return fmt.Errorf("重启 StatefulSet 失败: %w", err) } - s.logger.Info("成功重启 StatefulSet", + m.logger.Info("成功重启 StatefulSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -254,7 +254,7 @@ func (s *statefulSetManager) RestartStatefulSet(ctx context.Context, clusterID i } // ScaleStatefulSet 扩缩容 StatefulSet -func (s *statefulSetManager) ScaleStatefulSet(ctx context.Context, clusterID int, namespace, name string, replicas int32) error { +func (m *statefulSetManager) ScaleStatefulSet(ctx context.Context, clusterID int, namespace, name string, replicas int32) error { if name == "" { return fmt.Errorf("StatefulSet name 不能为空") } @@ -262,7 +262,7 @@ func (s *statefulSetManager) ScaleStatefulSet(ctx context.Context, clusterID int return fmt.Errorf("replicas 不能为负数") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -270,7 +270,7 @@ func (s *statefulSetManager) ScaleStatefulSet(ctx context.Context, clusterID int // 获取当前 StatefulSet statefulSet, err := kubeClient.AppsV1().StatefulSets(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - s.logger.Error("获取 StatefulSet 失败", + m.logger.Error("获取 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -284,7 +284,7 @@ func (s *statefulSetManager) ScaleStatefulSet(ctx context.Context, clusterID int // 执行更新 _, err = kubeClient.AppsV1().StatefulSets(namespace).Update(ctx, statefulSet, metav1.UpdateOptions{}) if err != nil { - s.logger.Error("扩缩容 StatefulSet 失败", + m.logger.Error("扩缩容 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -293,7 +293,7 @@ func (s *statefulSetManager) ScaleStatefulSet(ctx context.Context, clusterID int return fmt.Errorf("扩缩容 StatefulSet 失败: %w", err) } - s.logger.Info("成功扩缩容 StatefulSet", + m.logger.Info("成功扩缩容 StatefulSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -303,12 +303,12 @@ func (s *statefulSetManager) ScaleStatefulSet(ctx context.Context, clusterID int } // BatchDeleteStatefulSets 批量删除 StatefulSets -func (s *statefulSetManager) BatchDeleteStatefulSets(ctx context.Context, clusterID int, namespace string, statefulSetNames []string) error { +func (m *statefulSetManager) BatchDeleteStatefulSets(ctx context.Context, clusterID int, namespace string, statefulSetNames []string) error { if len(statefulSetNames) == 0 { return fmt.Errorf("StatefulSet names 不能为空") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -329,13 +329,13 @@ func (s *statefulSetManager) BatchDeleteStatefulSets(ctx context.Context, cluste mu.Lock() errors = append(errors, fmt.Sprintf("删除 StatefulSet %s 失败: %v", statefulSetName, err)) mu.Unlock() - s.logger.Error("批量删除 StatefulSet 失败", + m.logger.Error("批量删除 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", statefulSetName), zap.Error(err)) } else { - s.logger.Info("成功删除 StatefulSet", + m.logger.Info("成功删除 StatefulSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", statefulSetName)) @@ -353,12 +353,12 @@ func (s *statefulSetManager) BatchDeleteStatefulSets(ctx context.Context, cluste } // BatchRestartStatefulSets 批量重启 StatefulSets -func (s *statefulSetManager) BatchRestartStatefulSets(ctx context.Context, clusterID int, namespace string, statefulSetNames []string) error { +func (m *statefulSetManager) BatchRestartStatefulSets(ctx context.Context, clusterID int, namespace string, statefulSetNames []string) error { if len(statefulSetNames) == 0 { return fmt.Errorf("StatefulSet names 不能为空") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -380,13 +380,13 @@ func (s *statefulSetManager) BatchRestartStatefulSets(ctx context.Context, clust mu.Lock() errors = append(errors, fmt.Sprintf("重启 StatefulSet %s 失败: %v", statefulSetName, err)) mu.Unlock() - s.logger.Error("批量重启 StatefulSet 失败", + m.logger.Error("批量重启 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", statefulSetName), zap.Error(err)) } else { - s.logger.Info("成功重启 StatefulSet", + m.logger.Info("成功重启 StatefulSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", statefulSetName)) @@ -404,12 +404,12 @@ func (s *statefulSetManager) BatchRestartStatefulSets(ctx context.Context, clust } // GetStatefulSetHistory 获取 StatefulSet 历史版本 -func (s *statefulSetManager) GetStatefulSetHistory(ctx context.Context, clusterID int, namespace, statefulSetName string) ([]*model.K8sStatefulSetHistory, int64, error) { +func (m *statefulSetManager) GetStatefulSetHistory(ctx context.Context, clusterID int, namespace, statefulSetName string) ([]*model.K8sStatefulSetHistory, int64, error) { if statefulSetName == "" { return nil, 0, fmt.Errorf("StatefulSet name 不能为空") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, 0, err } @@ -422,7 +422,7 @@ func (s *statefulSetManager) GetStatefulSetHistory(ctx context.Context, clusterI revisionList, err := kubeClient.AppsV1().ControllerRevisions(namespace).List(ctx, listOptions) if err != nil { - s.logger.Error("获取 StatefulSet 历史版本失败", + m.logger.Error("获取 StatefulSet 历史版本失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("statefulSetName", statefulSetName), @@ -438,7 +438,7 @@ func (s *statefulSetManager) GetStatefulSetHistory(ctx context.Context, clusterI if owner.Kind == "StatefulSet" && owner.Name == statefulSetName { k8sHistory, err := utils.BuildK8sStatefulSetHistory(revision) if err != nil { - s.logger.Warn("构建 K8sStatefulSetHistory 失败", + m.logger.Warn("构建 K8sStatefulSetHistory 失败", zap.String("revisionName", revision.Name), zap.Error(err)) continue @@ -454,12 +454,12 @@ func (s *statefulSetManager) GetStatefulSetHistory(ctx context.Context, clusterI } // GetStatefulSetPods 获取 StatefulSet 管理的 Pods -func (s *statefulSetManager) GetStatefulSetPods(ctx context.Context, clusterID int, namespace, statefulSetName string) ([]*model.K8sPod, int64, error) { +func (m *statefulSetManager) GetStatefulSetPods(ctx context.Context, clusterID int, namespace, statefulSetName string) ([]*model.K8sPod, int64, error) { if statefulSetName == "" { return nil, 0, fmt.Errorf("StatefulSet name 不能为空") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return nil, 0, err } @@ -467,7 +467,7 @@ func (s *statefulSetManager) GetStatefulSetPods(ctx context.Context, clusterID i // 首先获取 StatefulSet 以获取其标签选择器 statefulSet, err := kubeClient.AppsV1().StatefulSets(namespace).Get(ctx, statefulSetName, metav1.GetOptions{}) if err != nil { - s.logger.Error("获取 StatefulSet 失败", + m.logger.Error("获取 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", statefulSetName), @@ -484,7 +484,7 @@ func (s *statefulSetManager) GetStatefulSetPods(ctx context.Context, clusterID i podList, err := kubeClient.CoreV1().Pods(namespace).List(ctx, listOptions) if err != nil { - s.logger.Error("获取 StatefulSet Pods 失败", + m.logger.Error("获取 StatefulSet Pods 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("statefulSetName", statefulSetName), @@ -503,7 +503,7 @@ func (s *statefulSetManager) GetStatefulSetPods(ctx context.Context, clusterID i } // RollbackStatefulSet 回滚 StatefulSet 到指定版本 -func (s *statefulSetManager) RollbackStatefulSet(ctx context.Context, clusterID int, namespace, name string, revision int64) error { +func (m *statefulSetManager) RollbackStatefulSet(ctx context.Context, clusterID int, namespace, name string, revision int64) error { if name == "" { return fmt.Errorf("StatefulSet name 不能为空") } @@ -511,7 +511,7 @@ func (s *statefulSetManager) RollbackStatefulSet(ctx context.Context, clusterID return fmt.Errorf("revision 必须大于 0") } - kubeClient, err := s.getKubeClient(clusterID) + kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } @@ -520,7 +520,7 @@ func (s *statefulSetManager) RollbackStatefulSet(ctx context.Context, clusterID revisionName := fmt.Sprintf("%s-%d", name, revision) controllerRevision, err := kubeClient.AppsV1().ControllerRevisions(namespace).Get(ctx, revisionName, metav1.GetOptions{}) if err != nil { - s.logger.Error("获取 ControllerRevision 失败", + m.logger.Error("获取 ControllerRevision 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("revisionName", revisionName), @@ -531,7 +531,7 @@ func (s *statefulSetManager) RollbackStatefulSet(ctx context.Context, clusterID // 获取当前 StatefulSet currentStatefulSet, err := kubeClient.AppsV1().StatefulSets(namespace).Get(ctx, name, metav1.GetOptions{}) if err != nil { - s.logger.Error("获取当前 StatefulSet 失败", + m.logger.Error("获取当前 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -543,7 +543,7 @@ func (s *statefulSetManager) RollbackStatefulSet(ctx context.Context, clusterID var statefulSetTemplate appsv1.StatefulSet err = utils.ExtractStatefulSetFromRevision(controllerRevision, &statefulSetTemplate) if err != nil { - s.logger.Error("从 ControllerRevision 提取 StatefulSet 模板失败", + m.logger.Error("从 ControllerRevision 提取 StatefulSet 模板失败", zap.String("revisionName", revisionName), zap.Error(err)) return fmt.Errorf("提取 StatefulSet 模板失败: %w", err) @@ -555,7 +555,7 @@ func (s *statefulSetManager) RollbackStatefulSet(ctx context.Context, clusterID // 执行更新 _, err = kubeClient.AppsV1().StatefulSets(namespace).Update(ctx, currentStatefulSet, metav1.UpdateOptions{}) if err != nil { - s.logger.Error("回滚 StatefulSet 失败", + m.logger.Error("回滚 StatefulSet 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), @@ -564,7 +564,7 @@ func (s *statefulSetManager) RollbackStatefulSet(ctx context.Context, clusterID return fmt.Errorf("回滚 StatefulSet 失败: %w", err) } - s.logger.Info("成功回滚 StatefulSet", + m.logger.Info("成功回滚 StatefulSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), diff --git a/internal/k8s/service/cluster_service.go b/internal/k8s/service/cluster_service.go index b309c6d1..d18e39d4 100644 --- a/internal/k8s/service/cluster_service.go +++ b/internal/k8s/service/cluster_service.go @@ -66,14 +66,14 @@ func NewClusterService(dao dao.ClusterDAO, client client.K8sClient, clusterMgr m } // ListClusters 获取集群列表 -func (c *clusterService) ListClusters(ctx context.Context, req *model.ListClustersReq) (model.ListResp[*model.K8sCluster], error) { +func (s *clusterService) ListClusters(ctx context.Context, req *model.ListClustersReq) (model.ListResp[*model.K8sCluster], error) { if req == nil { return model.ListResp[*model.K8sCluster]{}, fmt.Errorf("获取集群列表请求参数不能为空") } - list, total, err := c.dao.GetClusterList(ctx, req) + list, total, err := s.dao.GetClusterList(ctx, req) if err != nil { - c.logger.Error("ListClusters: 查询所有集群失败", zap.Error(err)) + s.logger.Error("ListClusters: 查询所有集群失败", zap.Error(err)) return model.ListResp[*model.K8sCluster]{}, fmt.Errorf("查询所有集群失败: %w", err) } @@ -87,7 +87,7 @@ func (c *clusterService) ListClusters(ctx context.Context, req *model.ListCluste } // GetClusterByID 根据ID获取集群 -func (c *clusterService) GetClusterByID(ctx context.Context, req *model.GetClusterReq) (*model.K8sCluster, error) { +func (s *clusterService) GetClusterByID(ctx context.Context, req *model.GetClusterReq) (*model.K8sCluster, error) { if req == nil { return nil, fmt.Errorf("获取集群请求参数不能为空") } @@ -97,9 +97,9 @@ func (c *clusterService) GetClusterByID(ctx context.Context, req *model.GetClust return nil, err } - cluster, err := c.dao.GetClusterByID(ctx, req.ID) + cluster, err := s.dao.GetClusterByID(ctx, req.ID) if err != nil { - c.logger.Error("GetClusterByID: 查询集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) + s.logger.Error("GetClusterByID: 查询集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) return nil, fmt.Errorf("查询集群失败: %w", err) } @@ -112,7 +112,7 @@ func (c *clusterService) GetClusterByID(ctx context.Context, req *model.GetClust } // CreateCluster 创建集群 -func (c *clusterService) CreateCluster(ctx context.Context, req *model.CreateClusterReq) error { +func (s *clusterService) CreateCluster(ctx context.Context, req *model.CreateClusterReq) error { if req == nil { return fmt.Errorf("创建集群请求参数不能为空") } @@ -123,9 +123,9 @@ func (c *clusterService) CreateCluster(ctx context.Context, req *model.CreateClu } // 检查集群名称是否已存在 - existingCluster, err := c.dao.GetClusterByName(ctx, req.Name) + existingCluster, err := s.dao.GetClusterByName(ctx, req.Name) if err != nil && err != gorm.ErrRecordNotFound { - c.logger.Error("CreateCluster: 查询集群失败", zap.Error(err)) + s.logger.Error("CreateCluster: 查询集群失败", zap.Error(err)) return fmt.Errorf("查询集群失败: %w", err) } @@ -157,17 +157,17 @@ func (c *clusterService) CreateCluster(ctx context.Context, req *model.CreateClu } // 创建集群记录 - if err := c.dao.CreateCluster(ctx, cluster); err != nil { - c.logger.Error("CreateCluster: 创建集群记录失败", zap.Error(err)) + if err := s.dao.CreateCluster(ctx, cluster); err != nil { + s.logger.Error("CreateCluster: 创建集群记录失败", zap.Error(err)) return fmt.Errorf("创建集群记录失败: %w", err) } // 使用集群管理器创建集群 - if err := c.clusterMgr.CreateCluster(ctx, cluster); err != nil { - c.logger.Error("CreateCluster: 创建集群失败", zap.Error(err)) + if err := s.clusterMgr.CreateCluster(ctx, cluster); err != nil { + s.logger.Error("CreateCluster: 创建集群失败", zap.Error(err)) // 回滚数据库记录 - if rollbackErr := c.dao.DeleteCluster(ctx, cluster.ID); rollbackErr != nil { - c.logger.Error("CreateCluster: 回滚失败", zap.Error(rollbackErr)) + if rollbackErr := s.dao.DeleteCluster(ctx, cluster.ID); rollbackErr != nil { + s.logger.Error("CreateCluster: 回滚失败", zap.Error(rollbackErr)) } return fmt.Errorf("创建集群失败: %w", err) } @@ -176,7 +176,7 @@ func (c *clusterService) CreateCluster(ctx context.Context, req *model.CreateClu } // UpdateCluster 更新集群 -func (c *clusterService) UpdateCluster(ctx context.Context, req *model.UpdateClusterReq) error { +func (s *clusterService) UpdateCluster(ctx context.Context, req *model.UpdateClusterReq) error { if req == nil { return fmt.Errorf("更新集群请求参数不能为空") } @@ -187,21 +187,21 @@ func (c *clusterService) UpdateCluster(ctx context.Context, req *model.UpdateClu } // 检查集群是否存在 - existingCluster, err := c.dao.GetClusterByID(ctx, req.ID) + existingCluster, err := s.dao.GetClusterByID(ctx, req.ID) if err != nil { if err == gorm.ErrRecordNotFound { return fmt.Errorf("集群不存在,ID: %d", req.ID) } - c.logger.Error("UpdateCluster: 查询集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) + s.logger.Error("UpdateCluster: 查询集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) return fmt.Errorf("查询集群失败: %w", err) } // 检查集群名称是否冲突 if req.Name != "" && req.Name != existingCluster.Name { - conflictCluster, err := c.dao.GetClusterByName(ctx, req.Name) + conflictCluster, err := s.dao.GetClusterByName(ctx, req.Name) if err != nil && err != gorm.ErrRecordNotFound { - c.logger.Error("UpdateCluster: 查询集群名称冲突失败", zap.Error(err)) + s.logger.Error("UpdateCluster: 查询集群名称冲突失败", zap.Error(err)) return fmt.Errorf("查询集群名称冲突失败: %w", err) } if conflictCluster != nil { @@ -233,14 +233,14 @@ func (c *clusterService) UpdateCluster(ctx context.Context, req *model.UpdateClu } // 更新集群记录 - if err := c.dao.UpdateCluster(ctx, cluster); err != nil { - c.logger.Error("UpdateCluster: 更新集群失败", zap.Error(err), zap.Int("clusterID", cluster.ID)) + if err := s.dao.UpdateCluster(ctx, cluster); err != nil { + s.logger.Error("UpdateCluster: 更新集群失败", zap.Error(err), zap.Int("clusterID", cluster.ID)) return fmt.Errorf("更新集群失败: %w", err) } // 使用集群管理器更新集群 - if err := c.clusterMgr.UpdateCluster(ctx, cluster); err != nil { - c.logger.Error("UpdateCluster: 更新集群客户端失败", zap.Error(err)) + if err := s.clusterMgr.UpdateCluster(ctx, cluster); err != nil { + s.logger.Error("UpdateCluster: 更新集群客户端失败", zap.Error(err)) return fmt.Errorf("更新集群客户端失败: %w", err) } @@ -248,7 +248,7 @@ func (c *clusterService) UpdateCluster(ctx context.Context, req *model.UpdateClu } // DeleteCluster 删除集群 -func (c *clusterService) DeleteCluster(ctx context.Context, req *model.DeleteClusterReq) error { +func (s *clusterService) DeleteCluster(ctx context.Context, req *model.DeleteClusterReq) error { if req == nil { return fmt.Errorf("删除集群请求参数不能为空") } @@ -259,22 +259,22 @@ func (c *clusterService) DeleteCluster(ctx context.Context, req *model.DeleteClu } // 检查集群是否存在 - _, err := c.dao.GetClusterByID(ctx, req.ID) + _, err := s.dao.GetClusterByID(ctx, req.ID) if err != nil { if err == gorm.ErrRecordNotFound { return fmt.Errorf("集群不存在,ID: %d", req.ID) } - c.logger.Error("DeleteCluster: 查询集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) + s.logger.Error("DeleteCluster: 查询集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) return fmt.Errorf("查询集群失败: %w", err) } // 删除集群客户端 - c.client.RemoveCluster(req.ID) + s.client.RemoveCluster(req.ID) // 删除集群记录 - if err := c.dao.DeleteCluster(ctx, req.ID); err != nil { - c.logger.Error("DeleteCluster: 删除集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) + if err := s.dao.DeleteCluster(ctx, req.ID); err != nil { + s.logger.Error("DeleteCluster: 删除集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) return fmt.Errorf("删除集群失败: %w", err) } @@ -282,7 +282,7 @@ func (c *clusterService) DeleteCluster(ctx context.Context, req *model.DeleteClu } // RefreshClusterStatus 刷新集群状态 -func (c *clusterService) RefreshClusterStatus(ctx context.Context, req *model.RefreshClusterReq) error { +func (s *clusterService) RefreshClusterStatus(ctx context.Context, req *model.RefreshClusterReq) error { if req == nil { return fmt.Errorf("刷新集群状态请求参数不能为空") } @@ -293,19 +293,19 @@ func (c *clusterService) RefreshClusterStatus(ctx context.Context, req *model.Re } // 检查集群是否存在 - _, err := c.dao.GetClusterByID(ctx, req.ID) + _, err := s.dao.GetClusterByID(ctx, req.ID) if err != nil { if err == gorm.ErrRecordNotFound { return fmt.Errorf("集群不存在,ID: %d", req.ID) } - c.logger.Error("RefreshClusterStatus: 查询集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) + s.logger.Error("RefreshClusterStatus: 查询集群失败", zap.Error(err), zap.Int("clusterID", req.ID)) return fmt.Errorf("查询集群失败: %w", err) } // 使用集群管理器刷新集群状态 - if err := c.clusterMgr.RefreshCluster(ctx, req.ID); err != nil { - c.logger.Error("RefreshClusterStatus: 刷新集群状态失败", zap.Error(err)) + if err := s.clusterMgr.RefreshCluster(ctx, req.ID); err != nil { + s.logger.Error("RefreshClusterStatus: 刷新集群状态失败", zap.Error(err)) return fmt.Errorf("刷新集群状态失败: %w", err) } diff --git a/internal/k8s/service/clusterrole_service.go b/internal/k8s/service/clusterrole_service.go index cb67df98..a3c798cf 100644 --- a/internal/k8s/service/clusterrole_service.go +++ b/internal/k8s/service/clusterrole_service.go @@ -68,7 +68,7 @@ func NewClusterRoleService(clusterRoleManager manager.ClusterRoleManager, logger } // GetClusterRoleList 获取ClusterRole列表 -func (c *clusterRoleService) GetClusterRoleList(ctx context.Context, req *model.GetClusterRoleListReq) (model.ListResp[*model.K8sClusterRole], error) { +func (s *clusterRoleService) GetClusterRoleList(ctx context.Context, req *model.GetClusterRoleListReq) (model.ListResp[*model.K8sClusterRole], error) { if req == nil { return model.ListResp[*model.K8sClusterRole]{}, fmt.Errorf("获取ClusterRole列表请求不能为空") } @@ -80,9 +80,9 @@ func (c *clusterRoleService) GetClusterRoleList(ctx context.Context, req *model. // 构建查询选项 listOptions := metav1.ListOptions{} - k8sClusterRoles, err := c.clusterRoleManager.GetClusterRoleList(ctx, req.ClusterID, listOptions) + k8sClusterRoles, err := s.clusterRoleManager.GetClusterRoleList(ctx, req.ClusterID, listOptions) if err != nil { - c.logger.Error("GetClusterRoleList: 获取ClusterRole列表失败", + s.logger.Error("GetClusterRoleList: 获取ClusterRole列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID)) return model.ListResp[*model.K8sClusterRole]{}, fmt.Errorf("获取ClusterRole列表失败: %w", err) @@ -119,7 +119,7 @@ func (c *clusterRoleService) GetClusterRoleList(ctx context.Context, req *model. } // GetClusterRoleDetails 获取ClusterRole详情 -func (c *clusterRoleService) GetClusterRoleDetails(ctx context.Context, req *model.GetClusterRoleDetailsReq) (*model.K8sClusterRole, error) { +func (s *clusterRoleService) GetClusterRoleDetails(ctx context.Context, req *model.GetClusterRoleDetailsReq) (*model.K8sClusterRole, error) { if req == nil { return nil, fmt.Errorf("获取ClusterRole详情请求不能为空") } @@ -132,9 +132,9 @@ func (c *clusterRoleService) GetClusterRoleDetails(ctx context.Context, req *mod return nil, fmt.Errorf("ClusterRole名称不能为空") } - clusterRole, err := c.clusterRoleManager.GetClusterRole(ctx, req.ClusterID, req.Name) + clusterRole, err := s.clusterRoleManager.GetClusterRole(ctx, req.ClusterID, req.Name) if err != nil { - c.logger.Error("GetClusterRoleDetails: 获取ClusterRole失败", + s.logger.Error("GetClusterRoleDetails: 获取ClusterRole失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) @@ -151,7 +151,7 @@ func (c *clusterRoleService) GetClusterRoleDetails(ctx context.Context, req *mod } // GetClusterRoleYaml 获取ClusterRole YAML -func (c *clusterRoleService) GetClusterRoleYaml(ctx context.Context, req *model.GetClusterRoleYamlReq) (*model.K8sYaml, error) { +func (s *clusterRoleService) GetClusterRoleYaml(ctx context.Context, req *model.GetClusterRoleYamlReq) (*model.K8sYaml, error) { if req == nil { return nil, fmt.Errorf("获取ClusterRole YAML请求不能为空") } @@ -164,9 +164,9 @@ func (c *clusterRoleService) GetClusterRoleYaml(ctx context.Context, req *model. return nil, fmt.Errorf("ClusterRole名称不能为空") } - clusterRole, err := c.clusterRoleManager.GetClusterRole(ctx, req.ClusterID, req.Name) + clusterRole, err := s.clusterRoleManager.GetClusterRole(ctx, req.ClusterID, req.Name) if err != nil { - c.logger.Error("GetClusterRoleYaml: 获取ClusterRole失败", + s.logger.Error("GetClusterRoleYaml: 获取ClusterRole失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) @@ -176,7 +176,7 @@ func (c *clusterRoleService) GetClusterRoleYaml(ctx context.Context, req *model. // 转换为YAML yamlContent, err := utils.ClusterRoleToYAML(clusterRole) if err != nil { - c.logger.Error("GetClusterRoleYaml: 转换为YAML失败", + s.logger.Error("GetClusterRoleYaml: 转换为YAML失败", zap.Error(err), zap.String("clusterRoleName", clusterRole.Name)) return nil, fmt.Errorf("转换为YAML失败: %w", err) @@ -188,7 +188,7 @@ func (c *clusterRoleService) GetClusterRoleYaml(ctx context.Context, req *model. } // UpdateClusterRoleYaml 更新ClusterRole YAML -func (c *clusterRoleService) UpdateClusterRoleYaml(ctx context.Context, req *model.UpdateClusterRoleByYamlReq) error { +func (s *clusterRoleService) UpdateClusterRoleYaml(ctx context.Context, req *model.UpdateClusterRoleByYamlReq) error { if req == nil { return fmt.Errorf("更新ClusterRole YAML请求不能为空") } @@ -205,9 +205,9 @@ func (c *clusterRoleService) UpdateClusterRoleYaml(ctx context.Context, req *mod return fmt.Errorf("YAML内容不能为空") } - existingClusterRole, err := c.clusterRoleManager.GetClusterRole(ctx, req.ClusterID, req.Name) + existingClusterRole, err := s.clusterRoleManager.GetClusterRole(ctx, req.ClusterID, req.Name) if err != nil { - c.logger.Error("UpdateClusterRoleYaml: 获取现有ClusterRole失败", + s.logger.Error("UpdateClusterRoleYaml: 获取现有ClusterRole失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) @@ -216,7 +216,7 @@ func (c *clusterRoleService) UpdateClusterRoleYaml(ctx context.Context, req *mod updatedClusterRole, err := utils.YAMLToClusterRole(req.YamlContent) if err != nil { - c.logger.Error("UpdateClusterRoleYaml: 解析YAML失败", + s.logger.Error("UpdateClusterRoleYaml: 解析YAML失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("解析YAML失败: %w", err) @@ -226,9 +226,9 @@ func (c *clusterRoleService) UpdateClusterRoleYaml(ctx context.Context, req *mod updatedClusterRole.ResourceVersion = existingClusterRole.ResourceVersion updatedClusterRole.UID = existingClusterRole.UID - err = c.clusterRoleManager.UpdateClusterRole(ctx, req.ClusterID, updatedClusterRole) + err = s.clusterRoleManager.UpdateClusterRole(ctx, req.ClusterID, updatedClusterRole) if err != nil { - c.logger.Error("UpdateClusterRoleYaml: 更新ClusterRole失败", + s.logger.Error("UpdateClusterRoleYaml: 更新ClusterRole失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) @@ -239,7 +239,7 @@ func (c *clusterRoleService) UpdateClusterRoleYaml(ctx context.Context, req *mod } // CreateClusterRole 创建ClusterRole -func (c *clusterRoleService) CreateClusterRole(ctx context.Context, req *model.CreateClusterRoleReq) error { +func (s *clusterRoleService) CreateClusterRole(ctx context.Context, req *model.CreateClusterRoleReq) error { // 构建 ClusterRole 对象 clusterRole := &rbacv1.ClusterRole{ ObjectMeta: metav1.ObjectMeta{ @@ -251,7 +251,7 @@ func (c *clusterRoleService) CreateClusterRole(ctx context.Context, req *model.C } // 使用 ClusterRoleManager 创建 ClusterRole - err := c.clusterRoleManager.CreateClusterRole(ctx, req.ClusterID, clusterRole) + err := s.clusterRoleManager.CreateClusterRole(ctx, req.ClusterID, clusterRole) if err != nil { return fmt.Errorf("failed to create cluster role: %w", err) } @@ -260,9 +260,9 @@ func (c *clusterRoleService) CreateClusterRole(ctx context.Context, req *model.C } // UpdateClusterRole 更新ClusterRole -func (c *clusterRoleService) UpdateClusterRole(ctx context.Context, req *model.UpdateClusterRoleReq) error { +func (s *clusterRoleService) UpdateClusterRole(ctx context.Context, req *model.UpdateClusterRoleReq) error { // 获取现有ClusterRole - existingClusterRole, err := c.clusterRoleManager.GetClusterRole(ctx, req.ClusterID, req.Name) + existingClusterRole, err := s.clusterRoleManager.GetClusterRole(ctx, req.ClusterID, req.Name) if err != nil { return fmt.Errorf("failed to get existing cluster role: %w", err) } @@ -273,7 +273,7 @@ func (c *clusterRoleService) UpdateClusterRole(ctx context.Context, req *model.U existingClusterRole.Rules = utils.ConvertPolicyRulesToK8s(req.Rules) // 使用 ClusterRoleManager 更新 ClusterRole - err = c.clusterRoleManager.UpdateClusterRole(ctx, req.ClusterID, existingClusterRole) + err = s.clusterRoleManager.UpdateClusterRole(ctx, req.ClusterID, existingClusterRole) if err != nil { return fmt.Errorf("failed to update cluster role: %w", err) } @@ -282,9 +282,9 @@ func (c *clusterRoleService) UpdateClusterRole(ctx context.Context, req *model.U } // DeleteClusterRole 删除ClusterRole -func (c *clusterRoleService) DeleteClusterRole(ctx context.Context, req *model.DeleteClusterRoleReq) error { +func (s *clusterRoleService) DeleteClusterRole(ctx context.Context, req *model.DeleteClusterRoleReq) error { // 使用 ClusterRoleManager 删除 ClusterRole - err := c.clusterRoleManager.DeleteClusterRole(ctx, req.ClusterID, req.Name, metav1.DeleteOptions{}) + err := s.clusterRoleManager.DeleteClusterRole(ctx, req.ClusterID, req.Name, metav1.DeleteOptions{}) if err != nil { return fmt.Errorf("failed to delete cluster role: %w", err) } @@ -293,7 +293,7 @@ func (c *clusterRoleService) DeleteClusterRole(ctx context.Context, req *model.D } // CreateClusterRoleByYaml 通过YAML创建ClusterRole -func (c *clusterRoleService) CreateClusterRoleByYaml(ctx context.Context, req *model.CreateClusterRoleByYamlReq) error { +func (s *clusterRoleService) CreateClusterRoleByYaml(ctx context.Context, req *model.CreateClusterRoleByYamlReq) error { var clusterRole rbacv1.ClusterRole err := yaml.Unmarshal([]byte(req.YamlContent), &clusterRole) if err != nil { @@ -301,7 +301,7 @@ func (c *clusterRoleService) CreateClusterRoleByYaml(ctx context.Context, req *m } // 使用 ClusterRoleManager 创建 ClusterRole - err = c.clusterRoleManager.CreateClusterRole(ctx, req.ClusterID, &clusterRole) + err = s.clusterRoleManager.CreateClusterRole(ctx, req.ClusterID, &clusterRole) if err != nil { return fmt.Errorf("failed to create cluster role: %w", err) } diff --git a/internal/k8s/service/clusterrolebinding_service.go b/internal/k8s/service/clusterrolebinding_service.go index f936bd4d..c95b098e 100644 --- a/internal/k8s/service/clusterrolebinding_service.go +++ b/internal/k8s/service/clusterrolebinding_service.go @@ -67,7 +67,7 @@ func NewClusterRoleBindingService(clusterRoleBindingManager manager.ClusterRoleB } // GetClusterRoleBindingList 获取ClusterRoleBinding列表 -func (c *clusterRoleBindingService) GetClusterRoleBindingList(ctx context.Context, req *model.GetClusterRoleBindingListReq) (model.ListResp[*model.K8sClusterRoleBinding], error) { +func (s *clusterRoleBindingService) GetClusterRoleBindingList(ctx context.Context, req *model.GetClusterRoleBindingListReq) (model.ListResp[*model.K8sClusterRoleBinding], error) { if req == nil { return model.ListResp[*model.K8sClusterRoleBinding]{}, fmt.Errorf("获取ClusterRoleBinding列表请求不能为空") } @@ -79,9 +79,9 @@ func (c *clusterRoleBindingService) GetClusterRoleBindingList(ctx context.Contex // 构建查询选项 listOptions := metav1.ListOptions{} - k8sClusterRoleBindings, err := c.clusterRoleBindingManager.GetClusterRoleBindingList(ctx, req.ClusterID, listOptions) + k8sClusterRoleBindings, err := s.clusterRoleBindingManager.GetClusterRoleBindingList(ctx, req.ClusterID, listOptions) if err != nil { - c.logger.Error("GetClusterRoleBindingList: 获取ClusterRoleBinding列表失败", + s.logger.Error("GetClusterRoleBindingList: 获取ClusterRoleBinding列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID)) return model.ListResp[*model.K8sClusterRoleBinding]{}, fmt.Errorf("获取ClusterRoleBinding列表失败: %w", err) @@ -121,7 +121,7 @@ func (c *clusterRoleBindingService) GetClusterRoleBindingList(ctx context.Contex filteredClusterRoleBindings = filteredClusterRoleBindings[start:end] } - c.logger.Debug("GetClusterRoleBindingList: 获取ClusterRoleBinding列表成功", + s.logger.Debug("GetClusterRoleBindingList: 获取ClusterRoleBinding列表成功", zap.Int("clusterID", req.ClusterID), zap.Int64("total", total), zap.Int("returned", len(filteredClusterRoleBindings))) @@ -133,7 +133,7 @@ func (c *clusterRoleBindingService) GetClusterRoleBindingList(ctx context.Contex } // GetClusterRoleBindingDetails 获取ClusterRoleBinding详情 -func (c *clusterRoleBindingService) GetClusterRoleBindingDetails(ctx context.Context, req *model.GetClusterRoleBindingDetailsReq) (*model.K8sClusterRoleBinding, error) { +func (s *clusterRoleBindingService) GetClusterRoleBindingDetails(ctx context.Context, req *model.GetClusterRoleBindingDetailsReq) (*model.K8sClusterRoleBinding, error) { if req == nil { return nil, fmt.Errorf("获取ClusterRoleBinding详情请求不能为空") } @@ -146,9 +146,9 @@ func (c *clusterRoleBindingService) GetClusterRoleBindingDetails(ctx context.Con return nil, fmt.Errorf("ClusterRoleBinding名称不能为空") } - clusterRoleBinding, err := c.clusterRoleBindingManager.GetClusterRoleBinding(ctx, req.ClusterID, req.Name) + clusterRoleBinding, err := s.clusterRoleBindingManager.GetClusterRoleBinding(ctx, req.ClusterID, req.Name) if err != nil { - c.logger.Error("GetClusterRoleBindingDetails: 获取ClusterRoleBinding失败", + s.logger.Error("GetClusterRoleBindingDetails: 获取ClusterRoleBinding失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) @@ -160,7 +160,7 @@ func (c *clusterRoleBindingService) GetClusterRoleBindingDetails(ctx context.Con k8sClusterRoleBinding.ClusterID = req.ClusterID } - c.logger.Debug("GetClusterRoleBindingDetails: 获取ClusterRoleBinding详情成功", + s.logger.Debug("GetClusterRoleBindingDetails: 获取ClusterRoleBinding详情成功", zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) @@ -168,7 +168,7 @@ func (c *clusterRoleBindingService) GetClusterRoleBindingDetails(ctx context.Con } // CreateClusterRoleBinding 创建ClusterRoleBinding -func (c *clusterRoleBindingService) CreateClusterRoleBinding(ctx context.Context, req *model.CreateClusterRoleBindingReq) error { +func (s *clusterRoleBindingService) CreateClusterRoleBinding(ctx context.Context, req *model.CreateClusterRoleBindingReq) error { // 构建 ClusterRoleBinding 对象 clusterRoleBinding := &rbacv1.ClusterRoleBinding{ ObjectMeta: metav1.ObjectMeta{ @@ -181,7 +181,7 @@ func (c *clusterRoleBindingService) CreateClusterRoleBinding(ctx context.Context } // 使用 ClusterRoleBindingManager 创建 ClusterRoleBinding - err := c.clusterRoleBindingManager.CreateClusterRoleBinding(ctx, req.ClusterID, clusterRoleBinding) + err := s.clusterRoleBindingManager.CreateClusterRoleBinding(ctx, req.ClusterID, clusterRoleBinding) if err != nil { return fmt.Errorf("failed to create cluster role binding: %w", err) } @@ -190,9 +190,9 @@ func (c *clusterRoleBindingService) CreateClusterRoleBinding(ctx context.Context } // UpdateClusterRoleBinding 更新ClusterRoleBinding -func (c *clusterRoleBindingService) UpdateClusterRoleBinding(ctx context.Context, req *model.UpdateClusterRoleBindingReq) error { +func (s *clusterRoleBindingService) UpdateClusterRoleBinding(ctx context.Context, req *model.UpdateClusterRoleBindingReq) error { // 获取现有ClusterRoleBinding - existingClusterRoleBinding, err := c.clusterRoleBindingManager.GetClusterRoleBinding(ctx, req.ClusterID, req.Name) + existingClusterRoleBinding, err := s.clusterRoleBindingManager.GetClusterRoleBinding(ctx, req.ClusterID, req.Name) if err != nil { return fmt.Errorf("failed to get existing cluster role binding: %w", err) } @@ -204,7 +204,7 @@ func (c *clusterRoleBindingService) UpdateClusterRoleBinding(ctx context.Context existingClusterRoleBinding.Subjects = k8sutils.ConvertSubjectsToK8s(req.Subjects) // 使用 ClusterRoleBindingManager 更新 ClusterRoleBinding - err = c.clusterRoleBindingManager.UpdateClusterRoleBinding(ctx, req.ClusterID, existingClusterRoleBinding) + err = s.clusterRoleBindingManager.UpdateClusterRoleBinding(ctx, req.ClusterID, existingClusterRoleBinding) if err != nil { return fmt.Errorf("failed to update cluster role binding: %w", err) } @@ -213,9 +213,9 @@ func (c *clusterRoleBindingService) UpdateClusterRoleBinding(ctx context.Context } // DeleteClusterRoleBinding 删除ClusterRoleBinding -func (c *clusterRoleBindingService) DeleteClusterRoleBinding(ctx context.Context, req *model.DeleteClusterRoleBindingReq) error { +func (s *clusterRoleBindingService) DeleteClusterRoleBinding(ctx context.Context, req *model.DeleteClusterRoleBindingReq) error { // 使用 ClusterRoleBindingManager 删除 ClusterRoleBinding - err := c.clusterRoleBindingManager.DeleteClusterRoleBinding(ctx, req.ClusterID, req.Name, metav1.DeleteOptions{}) + err := s.clusterRoleBindingManager.DeleteClusterRoleBinding(ctx, req.ClusterID, req.Name, metav1.DeleteOptions{}) if err != nil { return fmt.Errorf("failed to delete cluster role binding: %w", err) } @@ -224,13 +224,13 @@ func (c *clusterRoleBindingService) DeleteClusterRoleBinding(ctx context.Context } // GetClusterRoleBindingYaml 获取ClusterRoleBinding YAML -func (c *clusterRoleBindingService) GetClusterRoleBindingYaml(ctx context.Context, req *model.GetClusterRoleBindingYamlReq) (*model.K8sYaml, error) { +func (s *clusterRoleBindingService) GetClusterRoleBindingYaml(ctx context.Context, req *model.GetClusterRoleBindingYamlReq) (*model.K8sYaml, error) { if req == nil { return nil, fmt.Errorf("获取ClusterRoleBinding YAML请求不能为空") } // 获取 ClusterRoleBinding - clusterRoleBinding, err := c.clusterRoleBindingManager.GetClusterRoleBinding(ctx, req.ClusterID, req.Name) + clusterRoleBinding, err := s.clusterRoleBindingManager.GetClusterRoleBinding(ctx, req.ClusterID, req.Name) if err != nil { return nil, fmt.Errorf("failed to get cluster role binding: %w", err) } @@ -246,7 +246,7 @@ func (c *clusterRoleBindingService) GetClusterRoleBindingYaml(ctx context.Contex } // CreateClusterRoleBindingByYaml 通过YAML创建ClusterRoleBinding -func (c *clusterRoleBindingService) CreateClusterRoleBindingByYaml(ctx context.Context, req *model.CreateClusterRoleBindingByYamlReq) error { +func (s *clusterRoleBindingService) CreateClusterRoleBindingByYaml(ctx context.Context, req *model.CreateClusterRoleBindingByYamlReq) error { if req == nil { return fmt.Errorf("通过YAML创建ClusterRoleBinding请求不能为空") } @@ -257,7 +257,7 @@ func (c *clusterRoleBindingService) CreateClusterRoleBindingByYaml(ctx context.C } // 使用 ClusterRoleBindingManager 创建 ClusterRoleBinding - err = c.clusterRoleBindingManager.CreateClusterRoleBinding(ctx, req.ClusterID, clusterRoleBinding) + err = s.clusterRoleBindingManager.CreateClusterRoleBinding(ctx, req.ClusterID, clusterRoleBinding) if err != nil { return fmt.Errorf("failed to create cluster role binding: %w", err) } @@ -266,7 +266,7 @@ func (c *clusterRoleBindingService) CreateClusterRoleBindingByYaml(ctx context.C } // UpdateClusterRoleBindingYaml 更新ClusterRoleBinding YAML -func (c *clusterRoleBindingService) UpdateClusterRoleBindingYaml(ctx context.Context, req *model.UpdateClusterRoleBindingByYamlReq) error { +func (s *clusterRoleBindingService) UpdateClusterRoleBindingYaml(ctx context.Context, req *model.UpdateClusterRoleBindingByYamlReq) error { if req == nil { return fmt.Errorf("更新ClusterRoleBinding YAML请求不能为空") } @@ -280,7 +280,7 @@ func (c *clusterRoleBindingService) UpdateClusterRoleBindingYaml(ctx context.Con clusterRoleBinding.Name = req.Name // 获取现有ClusterRoleBinding以保持ResourceVersion - existingClusterRoleBinding, err := c.clusterRoleBindingManager.GetClusterRoleBinding(ctx, req.ClusterID, req.Name) + existingClusterRoleBinding, err := s.clusterRoleBindingManager.GetClusterRoleBinding(ctx, req.ClusterID, req.Name) if err != nil { return fmt.Errorf("failed to get existing cluster role binding: %w", err) } @@ -289,7 +289,7 @@ func (c *clusterRoleBindingService) UpdateClusterRoleBindingYaml(ctx context.Con clusterRoleBinding.UID = existingClusterRoleBinding.UID // 使用 RBACManager 更新 ClusterRoleBinding - err = c.clusterRoleBindingManager.UpdateClusterRoleBinding(ctx, req.ClusterID, clusterRoleBinding) + err = s.clusterRoleBindingManager.UpdateClusterRoleBinding(ctx, req.ClusterID, clusterRoleBinding) if err != nil { return fmt.Errorf("failed to update cluster role binding: %w", err) } diff --git a/internal/k8s/service/configmap_service.go b/internal/k8s/service/configmap_service.go index 8e4c28fe..7a0739cc 100644 --- a/internal/k8s/service/configmap_service.go +++ b/internal/k8s/service/configmap_service.go @@ -334,15 +334,15 @@ func formatBytes(bytes int64) string { } // CreateConfigMapByYaml 通过YAML创建ConfigMap -func (c *configMapService) CreateConfigMapByYaml(ctx context.Context, req *model.CreateConfigMapByYamlReq) error { +func (s *configMapService) CreateConfigMapByYaml(ctx context.Context, req *model.CreateConfigMapByYamlReq) error { cm, err := k8sutils.YAMLToConfigMap(req.YAML) if err != nil { return err } - _, err = c.configMapManager.CreateConfigMap(ctx, req.ClusterID, cm) + _, err = s.configMapManager.CreateConfigMap(ctx, req.ClusterID, cm) if err != nil { - c.logger.Error("通过YAML创建ConfigMap失败", zap.Error(err), + s.logger.Error("通过YAML创建ConfigMap失败", zap.Error(err), zap.Int("cluster_id", req.ClusterID), zap.String("namespace", cm.Namespace), zap.String("name", cm.Name)) return fmt.Errorf("通过YAML创建ConfigMap失败: %w", err) } @@ -351,16 +351,16 @@ func (c *configMapService) CreateConfigMapByYaml(ctx context.Context, req *model } // UpdateConfigMapByYaml 通过YAML更新ConfigMap -func (c *configMapService) UpdateConfigMapByYaml(ctx context.Context, req *model.UpdateConfigMapByYamlReq) error { +func (s *configMapService) UpdateConfigMapByYaml(ctx context.Context, req *model.UpdateConfigMapByYamlReq) error { cm, err := k8sutils.YAMLToConfigMap(req.YAML) if err != nil { return err } cm.Namespace = req.Namespace cm.Name = req.Name - _, err = c.configMapManager.UpdateConfigMap(ctx, req.ClusterID, cm) + _, err = s.configMapManager.UpdateConfigMap(ctx, req.ClusterID, cm) if err != nil { - c.logger.Error("通过YAML更新ConfigMap失败", zap.Error(err), + s.logger.Error("通过YAML更新ConfigMap失败", zap.Error(err), zap.Int("cluster_id", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name)) return fmt.Errorf("通过YAML更新ConfigMap失败: %w", err) } diff --git a/internal/k8s/service/daemonset_service.go b/internal/k8s/service/daemonset_service.go index 66649072..263b4279 100644 --- a/internal/k8s/service/daemonset_service.go +++ b/internal/k8s/service/daemonset_service.go @@ -65,7 +65,7 @@ func NewDaemonSetService(daemonSetManager manager.DaemonSetManager, logger *zap. } // CreateDaemonSet 创建DaemonSet -func (d *daemonSetService) CreateDaemonSet(ctx context.Context, req *model.CreateDaemonSetReq) error { +func (s *daemonSetService) CreateDaemonSet(ctx context.Context, req *model.CreateDaemonSetReq) error { if req == nil { return fmt.Errorf("创建DaemonSet请求不能为空") } @@ -85,7 +85,7 @@ func (d *daemonSetService) CreateDaemonSet(ctx context.Context, req *model.Creat // 从请求构建DaemonSet对象 daemonSet, err := utils.BuildDaemonSetFromRequest(req) if err != nil { - d.logger.Error("CreateDaemonSet: 构建DaemonSet对象失败", + s.logger.Error("CreateDaemonSet: 构建DaemonSet对象失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("构建DaemonSet对象失败: %w", err) @@ -93,15 +93,15 @@ func (d *daemonSetService) CreateDaemonSet(ctx context.Context, req *model.Creat // 验证DaemonSet配置 if err := utils.ValidateDaemonSet(daemonSet); err != nil { - d.logger.Error("CreateDaemonSet: DaemonSet配置验证失败", + s.logger.Error("CreateDaemonSet: DaemonSet配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("daemonSet配置验证失败: %w", err) } - err = d.daemonSetManager.CreateDaemonSet(ctx, req.ClusterID, req.Namespace, daemonSet) + err = s.daemonSetManager.CreateDaemonSet(ctx, req.ClusterID, req.Namespace, daemonSet) if err != nil { - d.logger.Error("CreateDaemonSet: 创建DaemonSet失败", + s.logger.Error("CreateDaemonSet: 创建DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -113,7 +113,7 @@ func (d *daemonSetService) CreateDaemonSet(ctx context.Context, req *model.Creat } // CreateDaemonSetByYaml 通过YAML创建DaemonSet -func (d *daemonSetService) CreateDaemonSetByYaml(ctx context.Context, req *model.CreateDaemonSetByYamlReq) error { +func (s *daemonSetService) CreateDaemonSetByYaml(ctx context.Context, req *model.CreateDaemonSetByYamlReq) error { if req == nil { return fmt.Errorf("通过YAML创建DaemonSet请求不能为空") } @@ -129,7 +129,7 @@ func (d *daemonSetService) CreateDaemonSetByYaml(ctx context.Context, req *model // 解析YAML为DaemonSet对象 daemonSet, err := utils.YAMLToDaemonSet(req.YAML) if err != nil { - d.logger.Error("CreateDaemonSetByYaml: 解析YAML失败", + s.logger.Error("CreateDaemonSetByYaml: 解析YAML失败", zap.Error(err), zap.Int("clusterID", req.ClusterID)) return fmt.Errorf("解析YAML失败: %w", err) @@ -137,15 +137,15 @@ func (d *daemonSetService) CreateDaemonSetByYaml(ctx context.Context, req *model // 验证DaemonSet配置 if err := utils.ValidateDaemonSet(daemonSet); err != nil { - d.logger.Error("CreateDaemonSetByYaml: DaemonSet配置验证失败", + s.logger.Error("CreateDaemonSetByYaml: DaemonSet配置验证失败", zap.Error(err), zap.String("name", daemonSet.Name)) return fmt.Errorf("daemonSet配置验证失败: %w", err) } - err = d.daemonSetManager.CreateDaemonSet(ctx, req.ClusterID, daemonSet.Namespace, daemonSet) + err = s.daemonSetManager.CreateDaemonSet(ctx, req.ClusterID, daemonSet.Namespace, daemonSet) if err != nil { - d.logger.Error("CreateDaemonSetByYaml: 创建DaemonSet失败", + s.logger.Error("CreateDaemonSetByYaml: 创建DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", daemonSet.Namespace), @@ -153,7 +153,7 @@ func (d *daemonSetService) CreateDaemonSetByYaml(ctx context.Context, req *model return fmt.Errorf("创建DaemonSet失败: %w", err) } - d.logger.Info("CreateDaemonSetByYaml: 成功通过YAML创建DaemonSet", + s.logger.Info("CreateDaemonSetByYaml: 成功通过YAML创建DaemonSet", zap.Int("clusterID", req.ClusterID), zap.String("namespace", daemonSet.Namespace), zap.String("name", daemonSet.Name)) @@ -162,7 +162,7 @@ func (d *daemonSetService) CreateDaemonSetByYaml(ctx context.Context, req *model } // DeleteDaemonSet 删除DaemonSet -func (d *daemonSetService) DeleteDaemonSet(ctx context.Context, req *model.DeleteDaemonSetReq) error { +func (s *daemonSetService) DeleteDaemonSet(ctx context.Context, req *model.DeleteDaemonSetReq) error { if req == nil { return fmt.Errorf("删除DaemonSet请求不能为空") } @@ -179,9 +179,9 @@ func (d *daemonSetService) DeleteDaemonSet(ctx context.Context, req *model.Delet return fmt.Errorf("DaemonSet名称不能为空") } - err := d.daemonSetManager.DeleteDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name, metav1.DeleteOptions{}) + err := s.daemonSetManager.DeleteDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name, metav1.DeleteOptions{}) if err != nil { - d.logger.Error("DeleteDaemonSet: 删除DaemonSet失败", + s.logger.Error("DeleteDaemonSet: 删除DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -193,7 +193,7 @@ func (d *daemonSetService) DeleteDaemonSet(ctx context.Context, req *model.Delet } // GetDaemonSetDetails 获取DaemonSet详情 -func (d *daemonSetService) GetDaemonSetDetails(ctx context.Context, req *model.GetDaemonSetDetailsReq) (*model.K8sDaemonSet, error) { +func (s *daemonSetService) GetDaemonSetDetails(ctx context.Context, req *model.GetDaemonSetDetailsReq) (*model.K8sDaemonSet, error) { if req == nil { return nil, fmt.Errorf("获取DaemonSet详情请求不能为空") } @@ -210,9 +210,9 @@ func (d *daemonSetService) GetDaemonSetDetails(ctx context.Context, req *model.G return nil, fmt.Errorf("DaemonSet名称不能为空") } - daemonSet, err := d.daemonSetManager.GetDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) + daemonSet, err := s.daemonSetManager.GetDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("GetDaemonSetDetails: 获取DaemonSet失败", + s.logger.Error("GetDaemonSetDetails: 获取DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -223,7 +223,7 @@ func (d *daemonSetService) GetDaemonSetDetails(ctx context.Context, req *model.G // 构建详细信息 k8sDaemonSet, err := utils.BuildK8sDaemonSet(ctx, req.ClusterID, *daemonSet) if err != nil { - d.logger.Error("GetDaemonSetDetails: 构建DaemonSet详细信息失败", + s.logger.Error("GetDaemonSetDetails: 构建DaemonSet详细信息失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -235,7 +235,7 @@ func (d *daemonSetService) GetDaemonSetDetails(ctx context.Context, req *model.G } // GetDaemonSetHistory 获取DaemonSet版本历史 -func (d *daemonSetService) GetDaemonSetHistory(ctx context.Context, req *model.GetDaemonSetHistoryReq) (model.ListResp[*model.K8sDaemonSetHistory], error) { +func (s *daemonSetService) GetDaemonSetHistory(ctx context.Context, req *model.GetDaemonSetHistoryReq) (model.ListResp[*model.K8sDaemonSetHistory], error) { if req == nil { return model.ListResp[*model.K8sDaemonSetHistory]{}, fmt.Errorf("获取DaemonSet历史请求不能为空") } @@ -252,9 +252,9 @@ func (d *daemonSetService) GetDaemonSetHistory(ctx context.Context, req *model.G return model.ListResp[*model.K8sDaemonSetHistory]{}, fmt.Errorf("DaemonSet名称不能为空") } - history, total, err := d.daemonSetManager.GetDaemonSetHistory(ctx, req.ClusterID, req.Namespace, req.Name) + history, total, err := s.daemonSetManager.GetDaemonSetHistory(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("GetDaemonSetHistory: 获取DaemonSet历史失败", + s.logger.Error("GetDaemonSetHistory: 获取DaemonSet历史失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -269,7 +269,7 @@ func (d *daemonSetService) GetDaemonSetHistory(ctx context.Context, req *model.G } // GetDaemonSetList 获取DaemonSet列表 -func (d *daemonSetService) GetDaemonSetList(ctx context.Context, req *model.GetDaemonSetListReq) (model.ListResp[*model.K8sDaemonSet], error) { +func (s *daemonSetService) GetDaemonSetList(ctx context.Context, req *model.GetDaemonSetListReq) (model.ListResp[*model.K8sDaemonSet], error) { if req == nil { return model.ListResp[*model.K8sDaemonSet]{}, fmt.Errorf("获取DaemonSet列表请求不能为空") } @@ -281,9 +281,9 @@ func (d *daemonSetService) GetDaemonSetList(ctx context.Context, req *model.GetD // 构建查询选项 listOptions := utils.BuildDaemonSetListOptions(req) - k8sDaemonSets, err := d.daemonSetManager.GetDaemonSetList(ctx, req.ClusterID, req.Namespace, listOptions) + k8sDaemonSets, err := s.daemonSetManager.GetDaemonSetList(ctx, req.ClusterID, req.Namespace, listOptions) if err != nil { - d.logger.Error("GetDaemonSetList: 获取DaemonSet列表失败", + s.logger.Error("GetDaemonSetList: 获取DaemonSet列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace)) @@ -333,7 +333,7 @@ func (d *daemonSetService) GetDaemonSetList(ctx context.Context, req *model.GetD } // GetDaemonSetPods 获取DaemonSet下的Pod列表 -func (d *daemonSetService) GetDaemonSetPods(ctx context.Context, req *model.GetDaemonSetPodsReq) (model.ListResp[*model.K8sPod], error) { +func (s *daemonSetService) GetDaemonSetPods(ctx context.Context, req *model.GetDaemonSetPodsReq) (model.ListResp[*model.K8sPod], error) { if req == nil { return model.ListResp[*model.K8sPod]{}, fmt.Errorf("获取DaemonSet Pods请求不能为空") } @@ -350,9 +350,9 @@ func (d *daemonSetService) GetDaemonSetPods(ctx context.Context, req *model.GetD return model.ListResp[*model.K8sPod]{}, fmt.Errorf("DaemonSet名称不能为空") } - pods, total, err := d.daemonSetManager.GetDaemonSetPods(ctx, req.ClusterID, req.Namespace, req.Name) + pods, total, err := s.daemonSetManager.GetDaemonSetPods(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("GetDaemonSetPods: 获取DaemonSet Pod失败", + s.logger.Error("GetDaemonSetPods: 获取DaemonSet Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -367,7 +367,7 @@ func (d *daemonSetService) GetDaemonSetPods(ctx context.Context, req *model.GetD } // GetDaemonSetYaml 获取DaemonSet YAML -func (d *daemonSetService) GetDaemonSetYaml(ctx context.Context, req *model.GetDaemonSetYamlReq) (*model.K8sYaml, error) { +func (s *daemonSetService) GetDaemonSetYaml(ctx context.Context, req *model.GetDaemonSetYamlReq) (*model.K8sYaml, error) { if req == nil { return nil, fmt.Errorf("获取DaemonSet YAML请求不能为空") } @@ -384,9 +384,9 @@ func (d *daemonSetService) GetDaemonSetYaml(ctx context.Context, req *model.GetD return nil, fmt.Errorf("DaemonSet名称不能为空") } - daemonSet, err := d.daemonSetManager.GetDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) + daemonSet, err := s.daemonSetManager.GetDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("GetDaemonSetYaml: 获取DaemonSet失败", + s.logger.Error("GetDaemonSetYaml: 获取DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -397,7 +397,7 @@ func (d *daemonSetService) GetDaemonSetYaml(ctx context.Context, req *model.GetD // 转换为YAML yamlContent, err := utils.DaemonSetToYAML(daemonSet) if err != nil { - d.logger.Error("GetDaemonSetYaml: 转换为YAML失败", + s.logger.Error("GetDaemonSetYaml: 转换为YAML失败", zap.Error(err), zap.String("daemonSetName", daemonSet.Name)) return nil, fmt.Errorf("转换为YAML失败: %w", err) @@ -409,7 +409,7 @@ func (d *daemonSetService) GetDaemonSetYaml(ctx context.Context, req *model.GetD } // RestartDaemonSet 重启DaemonSet -func (d *daemonSetService) RestartDaemonSet(ctx context.Context, req *model.RestartDaemonSetReq) error { +func (s *daemonSetService) RestartDaemonSet(ctx context.Context, req *model.RestartDaemonSetReq) error { if req == nil { return fmt.Errorf("重启DaemonSet请求不能为空") } @@ -426,9 +426,9 @@ func (d *daemonSetService) RestartDaemonSet(ctx context.Context, req *model.Rest return fmt.Errorf("DaemonSet名称不能为空") } - err := d.daemonSetManager.RestartDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) + err := s.daemonSetManager.RestartDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("RestartDaemonSet: 重启DaemonSet失败", + s.logger.Error("RestartDaemonSet: 重启DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -440,7 +440,7 @@ func (d *daemonSetService) RestartDaemonSet(ctx context.Context, req *model.Rest } // RollbackDaemonSet 回滚DaemonSet -func (d *daemonSetService) RollbackDaemonSet(ctx context.Context, req *model.RollbackDaemonSetReq) error { +func (s *daemonSetService) RollbackDaemonSet(ctx context.Context, req *model.RollbackDaemonSetReq) error { if req == nil { return fmt.Errorf("回滚DaemonSet请求不能为空") } @@ -461,9 +461,9 @@ func (d *daemonSetService) RollbackDaemonSet(ctx context.Context, req *model.Rol return fmt.Errorf("回滚版本号必须大于0") } - err := d.daemonSetManager.RollbackDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name, req.Revision) + err := s.daemonSetManager.RollbackDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name, req.Revision) if err != nil { - d.logger.Error("RollbackDaemonSet: 回滚DaemonSet失败", + s.logger.Error("RollbackDaemonSet: 回滚DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -476,7 +476,7 @@ func (d *daemonSetService) RollbackDaemonSet(ctx context.Context, req *model.Rol } // UpdateDaemonSetByYaml 通过YAML更新DaemonSet -func (d *daemonSetService) UpdateDaemonSetByYaml(ctx context.Context, req *model.UpdateDaemonSetByYamlReq) error { +func (s *daemonSetService) UpdateDaemonSetByYaml(ctx context.Context, req *model.UpdateDaemonSetByYamlReq) error { if req == nil { return fmt.Errorf("通过YAML更新DaemonSet请求不能为空") } @@ -498,9 +498,9 @@ func (d *daemonSetService) UpdateDaemonSetByYaml(ctx context.Context, req *model } // 获取现有的DaemonSet - existingDaemonSet, err := d.daemonSetManager.GetDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) + existingDaemonSet, err := s.daemonSetManager.GetDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("UpdateDaemonSetByYaml: 获取现有DaemonSet失败", + s.logger.Error("UpdateDaemonSetByYaml: 获取现有DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -511,7 +511,7 @@ func (d *daemonSetService) UpdateDaemonSetByYaml(ctx context.Context, req *model // 解析YAML为DaemonSet对象 yamlDaemonSet, err := utils.YAMLToDaemonSet(req.YAML) if err != nil { - d.logger.Error("UpdateDaemonSetByYaml: 解析YAML失败", + s.logger.Error("UpdateDaemonSetByYaml: 解析YAML失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("解析YAML失败: %w", err) @@ -531,15 +531,15 @@ func (d *daemonSetService) UpdateDaemonSetByYaml(ctx context.Context, req *model // 验证更新后的DaemonSet配置 if err := utils.ValidateDaemonSet(updatedDaemonSet); err != nil { - d.logger.Error("UpdateDaemonSetByYaml: DaemonSet配置验证失败", + s.logger.Error("UpdateDaemonSetByYaml: DaemonSet配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("daemonSet配置验证失败: %w", err) } - err = d.daemonSetManager.UpdateDaemonSet(ctx, req.ClusterID, req.Namespace, updatedDaemonSet) + err = s.daemonSetManager.UpdateDaemonSet(ctx, req.ClusterID, req.Namespace, updatedDaemonSet) if err != nil { - d.logger.Error("UpdateDaemonSetByYaml: 更新DaemonSet失败", + s.logger.Error("UpdateDaemonSetByYaml: 更新DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -547,7 +547,7 @@ func (d *daemonSetService) UpdateDaemonSetByYaml(ctx context.Context, req *model return fmt.Errorf("更新DaemonSet失败: %w", err) } - d.logger.Info("UpdateDaemonSetByYaml: 成功通过YAML更新DaemonSet", + s.logger.Info("UpdateDaemonSetByYaml: 成功通过YAML更新DaemonSet", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name)) @@ -556,7 +556,7 @@ func (d *daemonSetService) UpdateDaemonSetByYaml(ctx context.Context, req *model } // UpdateDaemonSet 更新DaemonSet -func (d *daemonSetService) UpdateDaemonSet(ctx context.Context, req *model.UpdateDaemonSetReq) error { +func (s *daemonSetService) UpdateDaemonSet(ctx context.Context, req *model.UpdateDaemonSetReq) error { if req == nil { return fmt.Errorf("更新DaemonSet请求不能为空") } @@ -573,9 +573,9 @@ func (d *daemonSetService) UpdateDaemonSet(ctx context.Context, req *model.Updat return fmt.Errorf("命名空间不能为空") } - existingDaemonSet, err := d.daemonSetManager.GetDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) + existingDaemonSet, err := s.daemonSetManager.GetDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("UpdateDaemonSet: 获取现有DaemonSet失败", + s.logger.Error("UpdateDaemonSet: 获取现有DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -589,7 +589,7 @@ func (d *daemonSetService) UpdateDaemonSet(ctx context.Context, req *model.Updat if req.YAML != "" { yamlDaemonSet, err := utils.YAMLToDaemonSet(req.YAML) if err != nil { - d.logger.Error("UpdateDaemonSet: 解析YAML失败", + s.logger.Error("UpdateDaemonSet: 解析YAML失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("解析YAML失败: %w", err) @@ -617,15 +617,15 @@ func (d *daemonSetService) UpdateDaemonSet(ctx context.Context, req *model.Updat // 验证更新后的DaemonSet配置 if err := utils.ValidateDaemonSet(updatedDaemonSet); err != nil { - d.logger.Error("UpdateDaemonSet: DaemonSet配置验证失败", + s.logger.Error("UpdateDaemonSet: DaemonSet配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("daemonSet配置验证失败: %w", err) } - err = d.daemonSetManager.UpdateDaemonSet(ctx, req.ClusterID, req.Namespace, updatedDaemonSet) + err = s.daemonSetManager.UpdateDaemonSet(ctx, req.ClusterID, req.Namespace, updatedDaemonSet) if err != nil { - d.logger.Error("UpdateDaemonSet: 更新DaemonSet失败", + s.logger.Error("UpdateDaemonSet: 更新DaemonSet失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), diff --git a/internal/k8s/service/deployment_service.go b/internal/k8s/service/deployment_service.go index b0aff0c0..0e830608 100644 --- a/internal/k8s/service/deployment_service.go +++ b/internal/k8s/service/deployment_service.go @@ -71,7 +71,7 @@ func NewDeploymentService(deploymentManager manager.DeploymentManager, logger *z } // CreateDeployment 创建deployment -func (d *deploymentService) CreateDeployment(ctx context.Context, req *model.CreateDeploymentReq) error { +func (s *deploymentService) CreateDeployment(ctx context.Context, req *model.CreateDeploymentReq) error { if req == nil { return fmt.Errorf("创建Deployment请求不能为空") } @@ -91,7 +91,7 @@ func (d *deploymentService) CreateDeployment(ctx context.Context, req *model.Cre // 从请求构建Deployment对象 deployment, err := utils.BuildDeploymentFromRequest(req) if err != nil { - d.logger.Error("CreateDeployment: 构建Deployment对象失败", + s.logger.Error("CreateDeployment: 构建Deployment对象失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("构建Deployment对象失败: %w", err) @@ -99,15 +99,15 @@ func (d *deploymentService) CreateDeployment(ctx context.Context, req *model.Cre // 验证Deployment配置 if err := utils.ValidateDeployment(deployment); err != nil { - d.logger.Error("CreateDeployment: Deployment配置验证失败", + s.logger.Error("CreateDeployment: Deployment配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("deployment配置验证失败: %w", err) } - err = d.deploymentManager.CreateDeployment(ctx, req.ClusterID, req.Namespace, deployment) + err = s.deploymentManager.CreateDeployment(ctx, req.ClusterID, req.Namespace, deployment) if err != nil { - d.logger.Error("CreateDeployment: 创建Deployment失败", + s.logger.Error("CreateDeployment: 创建Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -119,7 +119,7 @@ func (d *deploymentService) CreateDeployment(ctx context.Context, req *model.Cre } // DeleteDeployment 删除deployment -func (d *deploymentService) DeleteDeployment(ctx context.Context, req *model.DeleteDeploymentReq) error { +func (s *deploymentService) DeleteDeployment(ctx context.Context, req *model.DeleteDeploymentReq) error { if req == nil { return fmt.Errorf("删除Deployment请求不能为空") } @@ -136,9 +136,9 @@ func (d *deploymentService) DeleteDeployment(ctx context.Context, req *model.Del return fmt.Errorf("Deployment名称不能为空") } - err := d.deploymentManager.DeleteDeployment(ctx, req.ClusterID, req.Namespace, req.Name, metav1.DeleteOptions{}) + err := s.deploymentManager.DeleteDeployment(ctx, req.ClusterID, req.Namespace, req.Name, metav1.DeleteOptions{}) if err != nil { - d.logger.Error("DeleteDeployment: 删除Deployment失败", + s.logger.Error("DeleteDeployment: 删除Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -150,7 +150,7 @@ func (d *deploymentService) DeleteDeployment(ctx context.Context, req *model.Del } // GetDeploymentDetails 获取deployment详情 -func (d *deploymentService) GetDeploymentDetails(ctx context.Context, req *model.GetDeploymentDetailsReq) (*model.K8sDeployment, error) { +func (s *deploymentService) GetDeploymentDetails(ctx context.Context, req *model.GetDeploymentDetailsReq) (*model.K8sDeployment, error) { if req == nil { return nil, fmt.Errorf("获取Deployment详情请求不能为空") } @@ -167,9 +167,9 @@ func (d *deploymentService) GetDeploymentDetails(ctx context.Context, req *model return nil, fmt.Errorf("Deployment名称不能为空") } - deployment, err := d.deploymentManager.GetDeployment(ctx, req.ClusterID, req.Namespace, req.Name) + deployment, err := s.deploymentManager.GetDeployment(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("GetDeploymentDetails: 获取Deployment失败", + s.logger.Error("GetDeploymentDetails: 获取Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -180,7 +180,7 @@ func (d *deploymentService) GetDeploymentDetails(ctx context.Context, req *model // 构建详细信息 k8sDeployment, err := utils.BuildK8sDeployment(ctx, req.ClusterID, *deployment) if err != nil { - d.logger.Error("GetDeploymentDetails: 构建Deployment详细信息失败", + s.logger.Error("GetDeploymentDetails: 构建Deployment详细信息失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -192,7 +192,7 @@ func (d *deploymentService) GetDeploymentDetails(ctx context.Context, req *model } // GetDeploymentHistory 获取deployment历史 -func (d *deploymentService) GetDeploymentHistory(ctx context.Context, req *model.GetDeploymentHistoryReq) (model.ListResp[*model.K8sDeploymentHistory], error) { +func (s *deploymentService) GetDeploymentHistory(ctx context.Context, req *model.GetDeploymentHistoryReq) (model.ListResp[*model.K8sDeploymentHistory], error) { if req == nil { return model.ListResp[*model.K8sDeploymentHistory]{}, fmt.Errorf("获取Deployment历史请求不能为空") } @@ -209,9 +209,9 @@ func (d *deploymentService) GetDeploymentHistory(ctx context.Context, req *model return model.ListResp[*model.K8sDeploymentHistory]{}, fmt.Errorf("Deployment名称不能为空") } - history, total, err := d.deploymentManager.GetDeploymentHistory(ctx, req.ClusterID, req.Namespace, req.Name) + history, total, err := s.deploymentManager.GetDeploymentHistory(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("GetDeploymentHistory: 获取部署历史失败", + s.logger.Error("GetDeploymentHistory: 获取部署历史失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -226,7 +226,7 @@ func (d *deploymentService) GetDeploymentHistory(ctx context.Context, req *model } // GetDeploymentList 获取deployment列表 -func (d *deploymentService) GetDeploymentList(ctx context.Context, req *model.GetDeploymentListReq) (model.ListResp[*model.K8sDeployment], error) { +func (s *deploymentService) GetDeploymentList(ctx context.Context, req *model.GetDeploymentListReq) (model.ListResp[*model.K8sDeployment], error) { if req == nil { return model.ListResp[*model.K8sDeployment]{}, fmt.Errorf("获取Deployment列表请求不能为空") } @@ -238,9 +238,9 @@ func (d *deploymentService) GetDeploymentList(ctx context.Context, req *model.Ge // 构建查询选项 listOptions := utils.BuildDeploymentListOptions(req) - k8sDeployments, err := d.deploymentManager.GetDeploymentList(ctx, req.ClusterID, req.Namespace, listOptions) + k8sDeployments, err := s.deploymentManager.GetDeploymentList(ctx, req.ClusterID, req.Namespace, listOptions) if err != nil { - d.logger.Error("GetDeploymentList: 获取Deployment列表失败", + s.logger.Error("GetDeploymentList: 获取Deployment列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace)) @@ -292,7 +292,7 @@ func (d *deploymentService) GetDeploymentList(ctx context.Context, req *model.Ge } // GetDeploymentPods 获取deployment的pod列表 -func (d *deploymentService) GetDeploymentPods(ctx context.Context, req *model.GetDeploymentPodsReq) (model.ListResp[*model.K8sPod], error) { +func (s *deploymentService) GetDeploymentPods(ctx context.Context, req *model.GetDeploymentPodsReq) (model.ListResp[*model.K8sPod], error) { if req == nil { return model.ListResp[*model.K8sPod]{}, fmt.Errorf("获取Deployment Pods请求不能为空") } @@ -309,9 +309,9 @@ func (d *deploymentService) GetDeploymentPods(ctx context.Context, req *model.Ge return model.ListResp[*model.K8sPod]{}, fmt.Errorf("Deployment名称不能为空") } - pods, total, err := d.deploymentManager.GetDeploymentPods(ctx, req.ClusterID, req.Namespace, req.Name) + pods, total, err := s.deploymentManager.GetDeploymentPods(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("GetDeploymentPods: 获取部署Pod失败", + s.logger.Error("GetDeploymentPods: 获取部署Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -326,7 +326,7 @@ func (d *deploymentService) GetDeploymentPods(ctx context.Context, req *model.Ge } // GetDeploymentYaml 获取deployment YAML -func (d *deploymentService) GetDeploymentYaml(ctx context.Context, req *model.GetDeploymentYamlReq) (*model.K8sYaml, error) { +func (s *deploymentService) GetDeploymentYaml(ctx context.Context, req *model.GetDeploymentYamlReq) (*model.K8sYaml, error) { if req == nil { return nil, fmt.Errorf("获取Deployment YAML请求不能为空") } @@ -343,9 +343,9 @@ func (d *deploymentService) GetDeploymentYaml(ctx context.Context, req *model.Ge return nil, fmt.Errorf("Deployment名称不能为空") } - deployment, err := d.deploymentManager.GetDeployment(ctx, req.ClusterID, req.Namespace, req.Name) + deployment, err := s.deploymentManager.GetDeployment(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("GetDeploymentYaml: 获取Deployment失败", + s.logger.Error("GetDeploymentYaml: 获取Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -356,7 +356,7 @@ func (d *deploymentService) GetDeploymentYaml(ctx context.Context, req *model.Ge // 转换为YAML yamlContent, err := utils.DeploymentToYAML(deployment) if err != nil { - d.logger.Error("GetDeploymentYaml: 转换为YAML失败", + s.logger.Error("GetDeploymentYaml: 转换为YAML失败", zap.Error(err), zap.String("deploymentName", deployment.Name)) return nil, fmt.Errorf("转换为YAML失败: %w", err) @@ -368,7 +368,7 @@ func (d *deploymentService) GetDeploymentYaml(ctx context.Context, req *model.Ge } // RestartDeployment 重启deployment -func (d *deploymentService) RestartDeployment(ctx context.Context, req *model.RestartDeploymentReq) error { +func (s *deploymentService) RestartDeployment(ctx context.Context, req *model.RestartDeploymentReq) error { if req == nil { return fmt.Errorf("重启Deployment请求不能为空") } @@ -385,9 +385,9 @@ func (d *deploymentService) RestartDeployment(ctx context.Context, req *model.Re return fmt.Errorf("Deployment名称不能为空") } - err := d.deploymentManager.RestartDeployment(ctx, req.ClusterID, req.Namespace, req.Name) + err := s.deploymentManager.RestartDeployment(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("RestartDeployment: 重启Deployment失败", + s.logger.Error("RestartDeployment: 重启Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -399,7 +399,7 @@ func (d *deploymentService) RestartDeployment(ctx context.Context, req *model.Re } // RollbackDeployment 回滚Deployment -func (d *deploymentService) RollbackDeployment(ctx context.Context, req *model.RollbackDeploymentReq) error { +func (s *deploymentService) RollbackDeployment(ctx context.Context, req *model.RollbackDeploymentReq) error { if req == nil { return fmt.Errorf("回滚Deployment请求不能为空") } @@ -420,9 +420,9 @@ func (d *deploymentService) RollbackDeployment(ctx context.Context, req *model.R return fmt.Errorf("回滚版本号必须大于0") } - err := d.deploymentManager.RollbackDeployment(ctx, req.ClusterID, req.Namespace, req.Name, req.Revision) + err := s.deploymentManager.RollbackDeployment(ctx, req.ClusterID, req.Namespace, req.Name, req.Revision) if err != nil { - d.logger.Error("RollbackDeployment: 回滚Deployment失败", + s.logger.Error("RollbackDeployment: 回滚Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -435,7 +435,7 @@ func (d *deploymentService) RollbackDeployment(ctx context.Context, req *model.R } // ScaleDeployment 扩缩容deployment -func (d *deploymentService) ScaleDeployment(ctx context.Context, req *model.ScaleDeploymentReq) error { +func (s *deploymentService) ScaleDeployment(ctx context.Context, req *model.ScaleDeploymentReq) error { if req == nil { return fmt.Errorf("扩缩容Deployment请求不能为空") } @@ -456,9 +456,9 @@ func (d *deploymentService) ScaleDeployment(ctx context.Context, req *model.Scal return fmt.Errorf("副本数不能为负数") } - err := d.deploymentManager.ScaleDeployment(ctx, req.ClusterID, req.Namespace, req.Name, req.Replicas) + err := s.deploymentManager.ScaleDeployment(ctx, req.ClusterID, req.Namespace, req.Name, req.Replicas) if err != nil { - d.logger.Error("ScaleDeployment: 扩缩容Deployment失败", + s.logger.Error("ScaleDeployment: 扩缩容Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -471,7 +471,7 @@ func (d *deploymentService) ScaleDeployment(ctx context.Context, req *model.Scal } // UpdateDeployment 更新deployment -func (d *deploymentService) UpdateDeployment(ctx context.Context, req *model.UpdateDeploymentReq) error { +func (s *deploymentService) UpdateDeployment(ctx context.Context, req *model.UpdateDeploymentReq) error { if req == nil { return fmt.Errorf("更新Deployment请求不能为空") } @@ -488,9 +488,9 @@ func (d *deploymentService) UpdateDeployment(ctx context.Context, req *model.Upd return fmt.Errorf("命名空间不能为空") } - existingDeployment, err := d.deploymentManager.GetDeployment(ctx, req.ClusterID, req.Namespace, req.Name) + existingDeployment, err := s.deploymentManager.GetDeployment(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("UpdateDeployment: 获取现有Deployment失败", + s.logger.Error("UpdateDeployment: 获取现有Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -521,15 +521,15 @@ func (d *deploymentService) UpdateDeployment(ctx context.Context, req *model.Upd // 验证更新后的Deployment配置 if err := utils.ValidateDeployment(updatedDeployment); err != nil { - d.logger.Error("UpdateDeployment: Deployment配置验证失败", + s.logger.Error("UpdateDeployment: Deployment配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("deployment配置验证失败: %w", err) } - err = d.deploymentManager.UpdateDeployment(ctx, req.ClusterID, req.Namespace, updatedDeployment) + err = s.deploymentManager.UpdateDeployment(ctx, req.ClusterID, req.Namespace, updatedDeployment) if err != nil { - d.logger.Error("UpdateDeployment: 更新Deployment失败", + s.logger.Error("UpdateDeployment: 更新Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -541,7 +541,7 @@ func (d *deploymentService) UpdateDeployment(ctx context.Context, req *model.Upd } // PauseDeployment 暂停Deployment -func (d *deploymentService) PauseDeployment(ctx context.Context, req *model.PauseDeploymentReq) error { +func (s *deploymentService) PauseDeployment(ctx context.Context, req *model.PauseDeploymentReq) error { if req == nil { return fmt.Errorf("暂停Deployment请求不能为空") } @@ -558,9 +558,9 @@ func (d *deploymentService) PauseDeployment(ctx context.Context, req *model.Paus return fmt.Errorf("Deployment名称不能为空") } - err := d.deploymentManager.PauseDeployment(ctx, req.ClusterID, req.Namespace, req.Name) + err := s.deploymentManager.PauseDeployment(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("PauseDeployment: 暂停Deployment失败", + s.logger.Error("PauseDeployment: 暂停Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -572,7 +572,7 @@ func (d *deploymentService) PauseDeployment(ctx context.Context, req *model.Paus } // ResumeDeployment 恢复Deployment -func (d *deploymentService) ResumeDeployment(ctx context.Context, req *model.ResumeDeploymentReq) error { +func (s *deploymentService) ResumeDeployment(ctx context.Context, req *model.ResumeDeploymentReq) error { if req == nil { return fmt.Errorf("恢复Deployment请求不能为空") } @@ -589,9 +589,9 @@ func (d *deploymentService) ResumeDeployment(ctx context.Context, req *model.Res return fmt.Errorf("Deployment名称不能为空") } - err := d.deploymentManager.ResumeDeployment(ctx, req.ClusterID, req.Namespace, req.Name) + err := s.deploymentManager.ResumeDeployment(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - d.logger.Error("ResumeDeployment: 恢复Deployment失败", + s.logger.Error("ResumeDeployment: 恢复Deployment失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -603,7 +603,7 @@ func (d *deploymentService) ResumeDeployment(ctx context.Context, req *model.Res } // CreateDeploymentByYaml 通过YAML创建deployment -func (d *deploymentService) CreateDeploymentByYaml(ctx context.Context, req *model.CreateDeploymentByYamlReq) error { +func (s *deploymentService) CreateDeploymentByYaml(ctx context.Context, req *model.CreateDeploymentByYamlReq) error { if req == nil { return fmt.Errorf("通过YAML创建Deployment请求不能为空") } @@ -612,22 +612,22 @@ func (d *deploymentService) CreateDeploymentByYaml(ctx context.Context, req *mod return fmt.Errorf("YAML内容不能为空") } - d.logger.Info("开始通过YAML创建Deployment", + s.logger.Info("开始通过YAML创建Deployment", zap.Int("cluster_id", req.ClusterID)) // 从YAML构建Deployment对象 deployment, err := utils.BuildDeploymentFromYaml(req) if err != nil { - d.logger.Error("从YAML构建Deployment失败", + s.logger.Error("从YAML构建Deployment失败", zap.Int("cluster_id", req.ClusterID), zap.Error(err)) return fmt.Errorf("从YAML构建Deployment失败: %w", err) } // 使用现有的创建方法 - err = d.deploymentManager.CreateDeployment(ctx, req.ClusterID, deployment.Namespace, deployment) + err = s.deploymentManager.CreateDeployment(ctx, req.ClusterID, deployment.Namespace, deployment) if err != nil { - d.logger.Error("通过YAML创建Deployment失败", + s.logger.Error("通过YAML创建Deployment失败", zap.Int("cluster_id", req.ClusterID), zap.String("namespace", deployment.Namespace), zap.String("name", deployment.Name), @@ -635,14 +635,14 @@ func (d *deploymentService) CreateDeploymentByYaml(ctx context.Context, req *mod return fmt.Errorf("通过YAML创建Deployment失败: %w", err) } - d.logger.Info("通过YAML创建Deployment成功", + s.logger.Info("通过YAML创建Deployment成功", zap.Int("cluster_id", req.ClusterID)) return nil } // UpdateDeploymentByYaml 通过YAML更新deployment -func (d *deploymentService) UpdateDeploymentByYaml(ctx context.Context, req *model.UpdateDeploymentByYamlReq) error { +func (s *deploymentService) UpdateDeploymentByYaml(ctx context.Context, req *model.UpdateDeploymentByYamlReq) error { if req == nil { return fmt.Errorf("通过YAML更新Deployment请求不能为空") } @@ -651,7 +651,7 @@ func (d *deploymentService) UpdateDeploymentByYaml(ctx context.Context, req *mod return fmt.Errorf("YAML内容不能为空") } - d.logger.Info("开始通过YAML更新Deployment", + s.logger.Info("开始通过YAML更新Deployment", zap.Int("cluster_id", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name)) @@ -659,7 +659,7 @@ func (d *deploymentService) UpdateDeploymentByYaml(ctx context.Context, req *mod // 从YAML构建Deployment对象 deployment, err := utils.BuildDeploymentFromYamlForUpdate(req) if err != nil { - d.logger.Error("从YAML构建Deployment失败", + s.logger.Error("从YAML构建Deployment失败", zap.Int("cluster_id", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name), @@ -668,9 +668,9 @@ func (d *deploymentService) UpdateDeploymentByYaml(ctx context.Context, req *mod } // 使用现有的更新方法 - err = d.deploymentManager.UpdateDeployment(ctx, req.ClusterID, req.Namespace, deployment) + err = s.deploymentManager.UpdateDeployment(ctx, req.ClusterID, req.Namespace, deployment) if err != nil { - d.logger.Error("通过YAML更新Deployment失败", + s.logger.Error("通过YAML更新Deployment失败", zap.Int("cluster_id", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name), @@ -678,7 +678,7 @@ func (d *deploymentService) UpdateDeploymentByYaml(ctx context.Context, req *mod return fmt.Errorf("通过YAML更新Deployment失败: %w", err) } - d.logger.Info("通过YAML更新Deployment成功", + s.logger.Info("通过YAML更新Deployment成功", zap.Int("cluster_id", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name)) diff --git a/internal/k8s/service/event_service.go b/internal/k8s/service/event_service.go index 5f5a8cf6..cdc5ab51 100644 --- a/internal/k8s/service/event_service.go +++ b/internal/k8s/service/event_service.go @@ -67,11 +67,11 @@ func NewEventService(eventManager manager.EventManager, logger *zap.Logger) Even } // GetEventList 获取Event列表 -func (e *eventService) GetEventList(ctx context.Context, req *model.GetEventListReq) (model.ListResp[*model.K8sEvent], error) { +func (s *eventService) GetEventList(ctx context.Context, req *model.GetEventListReq) (model.ListResp[*model.K8sEvent], error) { // 使用 EventManager 获取 Event 列表和总数 - eventList, total, err := e.eventManager.ListEventsWithTotal(ctx, req.ClusterID, req.Namespace) + eventList, total, err := s.eventManager.ListEventsWithTotal(ctx, req.ClusterID, req.Namespace) if err != nil { - e.logger.Error("获取Event列表失败", + s.logger.Error("获取Event列表失败", zap.String("Namespace", req.Namespace), zap.Error(err)) return model.ListResp[*model.K8sEvent]{}, fmt.Errorf("获取Event列表失败: %w", err) @@ -79,7 +79,7 @@ func (e *eventService) GetEventList(ctx context.Context, req *model.GetEventList events := make([]*model.K8sEvent, 0, len(eventList.Items)) for _, event := range eventList.Items { - eventEntity := e.eventManager.ConvertEventToK8sEvent(&event, req.ClusterID) + eventEntity := s.eventManager.ConvertEventToK8sEvent(&event, req.ClusterID) // 根据请求参数进行过滤 if req.EventType != "" && event.Type != req.EventType { @@ -125,22 +125,22 @@ func (e *eventService) GetEventList(ctx context.Context, req *model.GetEventList } // GetEvent 获取单个Event详情 -func (e *eventService) GetEvent(ctx context.Context, req *model.GetEventDetailReq) (*model.K8sEvent, error) { +func (s *eventService) GetEvent(ctx context.Context, req *model.GetEventDetailReq) (*model.K8sEvent, error) { // 使用 EventManager 获取单个 Event - event, err := e.eventManager.GetEvent(ctx, req.ClusterID, req.Namespace, req.Name) + event, err := s.eventManager.GetEvent(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - e.logger.Error("获取Event详情失败", + s.logger.Error("获取Event详情失败", zap.String("Namespace", req.Namespace), zap.String("Name", req.Name), zap.Error(err)) return nil, fmt.Errorf("获取Event详情失败: %w", err) } - return e.eventManager.ConvertEventToK8sEvent(event, req.ClusterID), nil + return s.eventManager.ConvertEventToK8sEvent(event, req.ClusterID), nil } // GetEventsByObject 根据对象获取相关事件 -func (e *eventService) GetEventsByObject(ctx context.Context, clusterID int, namespace, objectKind, objectName, objectUID string, limitDays int) (model.ListResp[*model.K8sEvent], error) { +func (s *eventService) GetEventsByObject(ctx context.Context, clusterID int, namespace, objectKind, objectName, objectUID string, limitDays int) (model.ListResp[*model.K8sEvent], error) { fieldSelector := "involvedObject.name=" + objectName + ",involvedObject.kind=" + objectKind if objectUID != "" { fieldSelector += ",involvedObject.uid=" + objectUID @@ -153,60 +153,60 @@ func (e *eventService) GetEventsByObject(ctx context.Context, clusterID int, nam LimitDays: limitDays, } - return e.GetEventList(ctx, eventReq) + return s.GetEventList(ctx, eventReq) } // GetEventsByPod 获取Pod相关事件 -func (e *eventService) GetEventsByPod(ctx context.Context, req *model.GetEventsByPodReq) (model.ListResp[*model.K8sEvent], error) { - return e.GetEventsByObject(ctx, req.ClusterID, req.Namespace, "Pod", req.PodName, "", 7) +func (s *eventService) GetEventsByPod(ctx context.Context, req *model.GetEventsByPodReq) (model.ListResp[*model.K8sEvent], error) { + return s.GetEventsByObject(ctx, req.ClusterID, req.Namespace, "Pod", req.PodName, "", 7) } // GetEventsByDeployment 获取Deployment相关事件 -func (e *eventService) GetEventsByDeployment(ctx context.Context, req *model.GetEventsByDeploymentReq) (model.ListResp[*model.K8sEvent], error) { - return e.GetEventsByObject(ctx, req.ClusterID, req.Namespace, "Deployment", req.DeploymentName, "", 7) +func (s *eventService) GetEventsByDeployment(ctx context.Context, req *model.GetEventsByDeploymentReq) (model.ListResp[*model.K8sEvent], error) { + return s.GetEventsByObject(ctx, req.ClusterID, req.Namespace, "Deployment", req.DeploymentName, "", 7) } // GetEventsByService 获取Service相关事件 -func (e *eventService) GetEventsByService(ctx context.Context, req *model.GetEventsByServiceReq) (model.ListResp[*model.K8sEvent], error) { - return e.GetEventsByObject(ctx, req.ClusterID, req.Namespace, "Service", req.ServiceName, "", 7) +func (s *eventService) GetEventsByService(ctx context.Context, req *model.GetEventsByServiceReq) (model.ListResp[*model.K8sEvent], error) { + return s.GetEventsByObject(ctx, req.ClusterID, req.Namespace, "Service", req.ServiceName, "", 7) } // GetEventsByNode 获取Node相关事件 -func (e *eventService) GetEventsByNode(ctx context.Context, req *model.GetEventsByNodeReq) (model.ListResp[*model.K8sEvent], error) { - return e.GetEventsByObject(ctx, req.ClusterID, "", "Node", req.NodeName, "", 7) +func (s *eventService) GetEventsByNode(ctx context.Context, req *model.GetEventsByNodeReq) (model.ListResp[*model.K8sEvent], error) { + return s.GetEventsByObject(ctx, req.ClusterID, "", "Node", req.NodeName, "", 7) } // GetEventStatistics 获取事件统计 -func (e *eventService) GetEventStatistics(ctx context.Context, req *model.GetEventStatisticsReq) (*model.EventStatistics, error) { +func (s *eventService) GetEventStatistics(ctx context.Context, req *model.GetEventStatisticsReq) (*model.EventStatistics, error) { // 参数验证 if req.ClusterID <= 0 { return nil, fmt.Errorf("无效的集群ID: %d", req.ClusterID) } // 调用EventManager的方法 - return e.eventManager.GetEventStatistics(ctx, req.ClusterID, req.Namespace, req.StartTime, req.EndTime) + return s.eventManager.GetEventStatistics(ctx, req.ClusterID, req.Namespace, req.StartTime, req.EndTime) } // GetEventSummary 获取事件汇总 -func (e *eventService) GetEventSummary(ctx context.Context, req *model.GetEventSummaryReq) (*model.EventSummary, error) { +func (s *eventService) GetEventSummary(ctx context.Context, req *model.GetEventSummaryReq) (*model.EventSummary, error) { // 参数验证 if req.ClusterID <= 0 { return nil, fmt.Errorf("无效的集群ID: %d", req.ClusterID) } // 调用EventManager的方法 - return e.eventManager.GetEventSummary(ctx, req.ClusterID, req.Namespace, req.StartTime, req.EndTime) + return s.eventManager.GetEventSummary(ctx, req.ClusterID, req.Namespace, req.StartTime, req.EndTime) } // GetEventTimeline 获取事件时间线 -func (e *eventService) GetEventTimeline(ctx context.Context, req *model.GetEventTimelineReq) (model.ListResp[*model.EventTimelineItem], error) { +func (s *eventService) GetEventTimeline(ctx context.Context, req *model.GetEventTimelineReq) (model.ListResp[*model.EventTimelineItem], error) { // 参数验证 if req.ClusterID <= 0 { return model.ListResp[*model.EventTimelineItem]{}, fmt.Errorf("无效的集群ID: %d", req.ClusterID) } // 调用EventManager的方法 - timelineItems, err := e.eventManager.GetEventTimeline(ctx, req.ClusterID, req.Namespace, req.ObjectKind, req.ObjectName) + timelineItems, err := s.eventManager.GetEventTimeline(ctx, req.ClusterID, req.Namespace, req.ObjectKind, req.ObjectName) if err != nil { return model.ListResp[*model.EventTimelineItem]{}, err } @@ -215,14 +215,14 @@ func (e *eventService) GetEventTimeline(ctx context.Context, req *model.GetEvent } // GetEventTrends 获取事件趋势 -func (e *eventService) GetEventTrends(ctx context.Context, req *model.GetEventTrendsReq) (model.ListResp[*model.EventTrend], error) { +func (s *eventService) GetEventTrends(ctx context.Context, req *model.GetEventTrendsReq) (model.ListResp[*model.EventTrend], error) { // 参数验证 if req.ClusterID <= 0 { return model.ListResp[*model.EventTrend]{}, fmt.Errorf("无效的集群ID: %d", req.ClusterID) } // 调用EventManager的方法 - trends, err := e.eventManager.GetEventTrends(ctx, req.ClusterID, req.Namespace, req.EventType, req.Interval, req.StartTime, req.EndTime) + trends, err := s.eventManager.GetEventTrends(ctx, req.ClusterID, req.Namespace, req.EventType, req.Interval, req.StartTime, req.EndTime) if err != nil { return model.ListResp[*model.EventTrend]{}, err } @@ -231,14 +231,14 @@ func (e *eventService) GetEventTrends(ctx context.Context, req *model.GetEventTr } // GetEventGroupData 获取事件分组数据 -func (e *eventService) GetEventGroupData(ctx context.Context, req *model.GetEventGroupDataReq) (model.ListResp[*model.EventGroupData], error) { +func (s *eventService) GetEventGroupData(ctx context.Context, req *model.GetEventGroupDataReq) (model.ListResp[*model.EventGroupData], error) { // 参数验证 if req.ClusterID <= 0 { return model.ListResp[*model.EventGroupData]{}, fmt.Errorf("无效的集群ID: %d", req.ClusterID) } // 调用EventManager的方法 - groupData, err := e.eventManager.GetEventGroupData(ctx, req.ClusterID, req.Namespace, req.GroupBy, req.StartTime, req.EndTime, req.Limit) + groupData, err := s.eventManager.GetEventGroupData(ctx, req.ClusterID, req.Namespace, req.GroupBy, req.StartTime, req.EndTime, req.Limit) if err != nil { return model.ListResp[*model.EventGroupData]{}, err } @@ -247,12 +247,12 @@ func (e *eventService) GetEventGroupData(ctx context.Context, req *model.GetEven } // DeleteEvent 删除事件 -func (e *eventService) DeleteEvent(ctx context.Context, req *model.DeleteEventReq) error { - return e.eventManager.DeleteEvent(ctx, req.ClusterID, req.Namespace, req.Name, metav1.DeleteOptions{}) +func (s *eventService) DeleteEvent(ctx context.Context, req *model.DeleteEventReq) error { + return s.eventManager.DeleteEvent(ctx, req.ClusterID, req.Namespace, req.Name, metav1.DeleteOptions{}) } // CleanupOldEvents 清理旧事件 -func (e *eventService) CleanupOldEvents(ctx context.Context, req *model.CleanupOldEventsReq) error { +func (s *eventService) CleanupOldEvents(ctx context.Context, req *model.CleanupOldEventsReq) error { // 参数验证 if req.ClusterID <= 0 { return fmt.Errorf("无效的集群ID: %d", req.ClusterID) @@ -262,5 +262,5 @@ func (e *eventService) CleanupOldEvents(ctx context.Context, req *model.CleanupO } // 调用EventManager的方法 - return e.eventManager.CleanupOldEvents(ctx, req.ClusterID, req.Namespace, req.BeforeTime) + return s.eventManager.CleanupOldEvents(ctx, req.ClusterID, req.Namespace, req.BeforeTime) } diff --git a/internal/k8s/service/ingress_service.go b/internal/k8s/service/ingress_service.go index e5baa3ed..82e59b6f 100644 --- a/internal/k8s/service/ingress_service.go +++ b/internal/k8s/service/ingress_service.go @@ -62,7 +62,7 @@ func NewIngressService(ingressManager manager.IngressManager, logger *zap.Logger } // CreateIngress 创建Ingress -func (i *ingressService) CreateIngress(ctx context.Context, req *model.CreateIngressReq) error { +func (s *ingressService) CreateIngress(ctx context.Context, req *model.CreateIngressReq) error { if req == nil { return fmt.Errorf("创建Ingress请求不能为空") } @@ -82,7 +82,7 @@ func (i *ingressService) CreateIngress(ctx context.Context, req *model.CreateIng // 构建Ingress对象 ingress, err := utils.BuildIngressFromSpec(req) if err != nil { - i.logger.Error("CreateIngress: 构建Ingress对象失败", + s.logger.Error("CreateIngress: 构建Ingress对象失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("构建Ingress对象失败: %w", err) @@ -90,16 +90,16 @@ func (i *ingressService) CreateIngress(ctx context.Context, req *model.CreateIng // 验证Ingress配置 if err := utils.ValidateIngress(ingress); err != nil { - i.logger.Error("CreateIngress: Ingress配置验证失败", + s.logger.Error("CreateIngress: Ingress配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("Ingress配置验证失败: %w", err) } // 创建Ingress - err = i.ingressManager.CreateIngress(ctx, req.ClusterID, req.Namespace, ingress) + err = s.ingressManager.CreateIngress(ctx, req.ClusterID, req.Namespace, ingress) if err != nil { - i.logger.Error("CreateIngress: 创建Ingress失败", + s.logger.Error("CreateIngress: 创建Ingress失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -107,7 +107,7 @@ func (i *ingressService) CreateIngress(ctx context.Context, req *model.CreateIng return fmt.Errorf("创建Ingress失败: %w", err) } - i.logger.Info("CreateIngress: Ingress创建成功", + s.logger.Info("CreateIngress: Ingress创建成功", zap.String("name", req.Name), zap.String("namespace", req.Namespace)) @@ -115,7 +115,7 @@ func (i *ingressService) CreateIngress(ctx context.Context, req *model.CreateIng } // GetIngressList 获取Ingress列表 -func (i *ingressService) GetIngressList(ctx context.Context, req *model.GetIngressListReq) (model.ListResp[*model.K8sIngress], error) { +func (s *ingressService) GetIngressList(ctx context.Context, req *model.GetIngressListReq) (model.ListResp[*model.K8sIngress], error) { if req == nil { return model.ListResp[*model.K8sIngress]{}, fmt.Errorf("获取Ingress列表请求不能为空") } @@ -127,9 +127,9 @@ func (i *ingressService) GetIngressList(ctx context.Context, req *model.GetIngre // 构建查询选项 listOptions := utils.BuildIngressListOptions(req) - k8sIngresses, err := i.ingressManager.GetIngressList(ctx, req.ClusterID, req.Namespace, listOptions) + k8sIngresses, err := s.ingressManager.GetIngressList(ctx, req.ClusterID, req.Namespace, listOptions) if err != nil { - i.logger.Error("GetIngressList: 获取Ingress列表失败", + s.logger.Error("GetIngressList: 获取Ingress列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace)) @@ -179,7 +179,7 @@ func (i *ingressService) GetIngressList(ctx context.Context, req *model.GetIngre } // GetIngressDetails 获取Ingress详情 -func (i *ingressService) GetIngressDetails(ctx context.Context, req *model.GetIngressDetailsReq) (*model.K8sIngress, error) { +func (s *ingressService) GetIngressDetails(ctx context.Context, req *model.GetIngressDetailsReq) (*model.K8sIngress, error) { if req == nil { return nil, fmt.Errorf("获取Ingress详情请求不能为空") } @@ -196,9 +196,9 @@ func (i *ingressService) GetIngressDetails(ctx context.Context, req *model.GetIn return nil, fmt.Errorf("Ingress名称不能为空") } - ingress, err := i.ingressManager.GetIngress(ctx, req.ClusterID, req.Namespace, req.Name) + ingress, err := s.ingressManager.GetIngress(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - i.logger.Error("GetIngressDetails: 获取Ingress失败", + s.logger.Error("GetIngressDetails: 获取Ingress失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -210,7 +210,7 @@ func (i *ingressService) GetIngressDetails(ctx context.Context, req *model.GetIn } // GetIngressYaml 获取Ingress YAML -func (i *ingressService) GetIngressYaml(ctx context.Context, req *model.GetIngressYamlReq) (*model.K8sYaml, error) { +func (s *ingressService) GetIngressYaml(ctx context.Context, req *model.GetIngressYamlReq) (*model.K8sYaml, error) { if req == nil { return nil, fmt.Errorf("获取Ingress YAML请求不能为空") } @@ -227,9 +227,9 @@ func (i *ingressService) GetIngressYaml(ctx context.Context, req *model.GetIngre return nil, fmt.Errorf("Ingress名称不能为空") } - ingress, err := i.ingressManager.GetIngress(ctx, req.ClusterID, req.Namespace, req.Name) + ingress, err := s.ingressManager.GetIngress(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - i.logger.Error("GetIngressYaml: 获取Ingress失败", + s.logger.Error("GetIngressYaml: 获取Ingress失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -240,7 +240,7 @@ func (i *ingressService) GetIngressYaml(ctx context.Context, req *model.GetIngre // 转换为YAML yamlContent, err := utils.IngressToYAML(ingress) if err != nil { - i.logger.Error("GetIngressYaml: 转换为YAML失败", + s.logger.Error("GetIngressYaml: 转换为YAML失败", zap.Error(err), zap.String("ingressName", ingress.Name)) return nil, fmt.Errorf("转换为YAML失败: %w", err) @@ -252,7 +252,7 @@ func (i *ingressService) GetIngressYaml(ctx context.Context, req *model.GetIngre } // UpdateIngress 更新Ingress -func (i *ingressService) UpdateIngress(ctx context.Context, req *model.UpdateIngressReq) error { +func (s *ingressService) UpdateIngress(ctx context.Context, req *model.UpdateIngressReq) error { if req == nil { return fmt.Errorf("更新Ingress请求不能为空") } @@ -270,9 +270,9 @@ func (i *ingressService) UpdateIngress(ctx context.Context, req *model.UpdateIng } // 获取现有Ingress - existingIngress, err := i.ingressManager.GetIngress(ctx, req.ClusterID, req.Namespace, req.Name) + existingIngress, err := s.ingressManager.GetIngress(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - i.logger.Error("UpdateIngress: 获取现有Ingress失败", + s.logger.Error("UpdateIngress: 获取现有Ingress失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -295,15 +295,15 @@ func (i *ingressService) UpdateIngress(ctx context.Context, req *model.UpdateIng // 验证更新后的Ingress配置 if err := utils.ValidateIngress(updatedIngress); err != nil { - i.logger.Error("UpdateIngress: Ingress配置验证失败", + s.logger.Error("UpdateIngress: Ingress配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("Ingress配置验证失败: %w", err) } - err = i.ingressManager.UpdateIngress(ctx, req.ClusterID, req.Namespace, updatedIngress) + err = s.ingressManager.UpdateIngress(ctx, req.ClusterID, req.Namespace, updatedIngress) if err != nil { - i.logger.Error("UpdateIngress: 更新Ingress失败", + s.logger.Error("UpdateIngress: 更新Ingress失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -315,7 +315,7 @@ func (i *ingressService) UpdateIngress(ctx context.Context, req *model.UpdateIng } // DeleteIngress 删除Ingress -func (i *ingressService) DeleteIngress(ctx context.Context, req *model.DeleteIngressReq) error { +func (s *ingressService) DeleteIngress(ctx context.Context, req *model.DeleteIngressReq) error { if req == nil { return fmt.Errorf("删除Ingress请求不能为空") } @@ -334,9 +334,9 @@ func (i *ingressService) DeleteIngress(ctx context.Context, req *model.DeleteIng deleteOptions := metav1.DeleteOptions{} - err := i.ingressManager.DeleteIngress(ctx, req.ClusterID, req.Namespace, req.Name, deleteOptions) + err := s.ingressManager.DeleteIngress(ctx, req.ClusterID, req.Namespace, req.Name, deleteOptions) if err != nil { - i.logger.Error("DeleteIngress: 删除Ingress失败", + s.logger.Error("DeleteIngress: 删除Ingress失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -344,7 +344,7 @@ func (i *ingressService) DeleteIngress(ctx context.Context, req *model.DeleteIng return fmt.Errorf("删除Ingress失败: %w", err) } - i.logger.Info("DeleteIngress: Ingress删除成功", + s.logger.Info("DeleteIngress: Ingress删除成功", zap.String("name", req.Name), zap.String("namespace", req.Namespace)) @@ -352,7 +352,7 @@ func (i *ingressService) DeleteIngress(ctx context.Context, req *model.DeleteIng } // CreateIngressByYaml 通过YAML创建Ingress -func (i *ingressService) CreateIngressByYaml(ctx context.Context, req *model.CreateIngressByYamlReq) error { +func (s *ingressService) CreateIngressByYaml(ctx context.Context, req *model.CreateIngressByYamlReq) error { if req == nil { return fmt.Errorf("通过YAML创建Ingress请求不能为空") } @@ -368,7 +368,7 @@ func (i *ingressService) CreateIngressByYaml(ctx context.Context, req *model.Cre // 解析YAML为Ingress对象 ingress, err := utils.YAMLToIngress(req.YAML) if err != nil { - i.logger.Error("CreateIngressByYaml: 解析YAML失败", + s.logger.Error("CreateIngressByYaml: 解析YAML失败", zap.Error(err), zap.Int("cluster_id", req.ClusterID)) return fmt.Errorf("解析YAML失败: %w", err) @@ -376,16 +376,16 @@ func (i *ingressService) CreateIngressByYaml(ctx context.Context, req *model.Cre // 验证Ingress配置 if err := utils.ValidateIngress(ingress); err != nil { - i.logger.Error("CreateIngressByYaml: Ingress配置验证失败", + s.logger.Error("CreateIngressByYaml: Ingress配置验证失败", zap.Error(err), zap.String("name", ingress.Name)) return fmt.Errorf("Ingress配置验证失败: %w", err) } // 创建Ingress - err = i.ingressManager.CreateIngress(ctx, req.ClusterID, ingress.Namespace, ingress) + err = s.ingressManager.CreateIngress(ctx, req.ClusterID, ingress.Namespace, ingress) if err != nil { - i.logger.Error("CreateIngressByYaml: 创建Ingress失败", + s.logger.Error("CreateIngressByYaml: 创建Ingress失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", ingress.Namespace), @@ -393,7 +393,7 @@ func (i *ingressService) CreateIngressByYaml(ctx context.Context, req *model.Cre return fmt.Errorf("创建Ingress失败: %w", err) } - i.logger.Info("CreateIngressByYaml: Ingress创建成功", + s.logger.Info("CreateIngressByYaml: Ingress创建成功", zap.String("name", ingress.Name), zap.String("namespace", ingress.Namespace)) @@ -401,7 +401,7 @@ func (i *ingressService) CreateIngressByYaml(ctx context.Context, req *model.Cre } // UpdateIngressByYaml 通过YAML更新Ingress -func (i *ingressService) UpdateIngressByYaml(ctx context.Context, req *model.UpdateIngressByYamlReq) error { +func (s *ingressService) UpdateIngressByYaml(ctx context.Context, req *model.UpdateIngressByYamlReq) error { if req == nil { return fmt.Errorf("通过YAML更新Ingress请求不能为空") } @@ -417,7 +417,7 @@ func (i *ingressService) UpdateIngressByYaml(ctx context.Context, req *model.Upd // 解析YAML为Ingress对象 ingress, err := utils.YAMLToIngress(req.YAML) if err != nil { - i.logger.Error("UpdateIngressByYaml: 解析YAML失败", + s.logger.Error("UpdateIngressByYaml: 解析YAML失败", zap.Error(err), zap.Int("cluster_id", req.ClusterID)) return fmt.Errorf("解析YAML失败: %w", err) @@ -425,16 +425,16 @@ func (i *ingressService) UpdateIngressByYaml(ctx context.Context, req *model.Upd // 验证Ingress配置 if err := utils.ValidateIngress(ingress); err != nil { - i.logger.Error("UpdateIngressByYaml: Ingress配置验证失败", + s.logger.Error("UpdateIngressByYaml: Ingress配置验证失败", zap.Error(err), zap.String("name", ingress.Name)) return fmt.Errorf("Ingress配置验证失败: %w", err) } // 更新Ingress - err = i.ingressManager.UpdateIngress(ctx, req.ClusterID, ingress.Namespace, ingress) + err = s.ingressManager.UpdateIngress(ctx, req.ClusterID, ingress.Namespace, ingress) if err != nil { - i.logger.Error("UpdateIngressByYaml: 更新Ingress失败", + s.logger.Error("UpdateIngressByYaml: 更新Ingress失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", ingress.Namespace), @@ -442,7 +442,7 @@ func (i *ingressService) UpdateIngressByYaml(ctx context.Context, req *model.Upd return fmt.Errorf("更新Ingress失败: %w", err) } - i.logger.Info("UpdateIngressByYaml: Ingress更新成功", + s.logger.Info("UpdateIngressByYaml: Ingress更新成功", zap.String("name", ingress.Name), zap.String("namespace", ingress.Namespace)) diff --git a/internal/k8s/service/namespace_service.go b/internal/k8s/service/namespace_service.go index 7008d31e..aa7dcd0d 100644 --- a/internal/k8s/service/namespace_service.go +++ b/internal/k8s/service/namespace_service.go @@ -61,7 +61,7 @@ func NewNamespaceService(client client.K8sClient, namespaceManager manager.Names } // CreateNamespace 创建命名空间 -func (n *namespaceService) CreateNamespace(ctx context.Context, req *model.K8sNamespaceCreateReq) error { +func (s *namespaceService) CreateNamespace(ctx context.Context, req *model.K8sNamespaceCreateReq) error { if req == nil { return fmt.Errorf("创建命名空间请求不能为空") } @@ -76,19 +76,19 @@ func (n *namespaceService) CreateNamespace(ctx context.Context, req *model.K8sNa // 验证命名空间名称 if err := utils.ValidateNamespaceName(req.Name); err != nil { - n.logger.Error("CreateNamespace: 命名空间名称验证失败", zap.Error(err), zap.String("name", req.Name)) + s.logger.Error("CreateNamespace: 命名空间名称验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("命名空间名称验证失败: %w", err) } // 验证标签 if err := utils.ValidateNodeLabelsMap(utils.ConvertKeyValueListToLabels(req.Labels)); err != nil { - n.logger.Error("CreateNamespace: 标签验证失败", zap.Error(err)) + s.logger.Error("CreateNamespace: 标签验证失败", zap.Error(err)) return fmt.Errorf("标签验证失败: %w", err) } // 验证注解 if err := utils.ValidateAnnotations(req.Annotations); err != nil { - n.logger.Error("CreateNamespace: 注解验证失败", zap.Error(err)) + s.logger.Error("CreateNamespace: 注解验证失败", zap.Error(err)) return fmt.Errorf("注解验证失败: %w", err) } @@ -106,9 +106,9 @@ func (n *namespaceService) CreateNamespace(ctx context.Context, req *model.K8sNa } // 使用 NamespaceManager 创建命名空间 - _, err := n.namespaceManager.CreateNamespace(ctx, req.ClusterID, namespace) + _, err := s.namespaceManager.CreateNamespace(ctx, req.ClusterID, namespace) if err != nil { - n.logger.Error("CreateNamespace: 创建命名空间失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) + s.logger.Error("CreateNamespace: 创建命名空间失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) return fmt.Errorf("创建命名空间失败: %w", err) } @@ -116,7 +116,7 @@ func (n *namespaceService) CreateNamespace(ctx context.Context, req *model.K8sNa } // DeleteNamespace 删除命名空间 -func (n *namespaceService) DeleteNamespace(ctx context.Context, req *model.K8sNamespaceDeleteReq) error { +func (s *namespaceService) DeleteNamespace(ctx context.Context, req *model.K8sNamespaceDeleteReq) error { if req == nil { return fmt.Errorf("删除命名空间请求不能为空") } @@ -146,9 +146,9 @@ func (n *namespaceService) DeleteNamespace(ctx context.Context, req *model.K8sNa } // 使用 NamespaceManager 删除命名空间 - err := n.namespaceManager.DeleteNamespace(ctx, req.ClusterID, req.Name, deleteOptions) + err := s.namespaceManager.DeleteNamespace(ctx, req.ClusterID, req.Name, deleteOptions) if err != nil { - n.logger.Error("DeleteNamespace: 删除命名空间失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) + s.logger.Error("DeleteNamespace: 删除命名空间失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) return fmt.Errorf("删除命名空间失败: %w", err) } @@ -156,7 +156,7 @@ func (n *namespaceService) DeleteNamespace(ctx context.Context, req *model.K8sNa } // GetNamespaceDetails 获取命名空间详情 -func (n *namespaceService) GetNamespaceDetails(ctx context.Context, req *model.K8sNamespaceGetDetailsReq) (*model.K8sNamespace, error) { +func (s *namespaceService) GetNamespaceDetails(ctx context.Context, req *model.K8sNamespaceGetDetailsReq) (*model.K8sNamespace, error) { if req == nil { return nil, fmt.Errorf("获取命名空间详情请求不能为空") } @@ -170,9 +170,9 @@ func (n *namespaceService) GetNamespaceDetails(ctx context.Context, req *model.K } // 使用 NamespaceManager 获取命名空间详情 - namespace, err := n.namespaceManager.GetNamespace(ctx, req.ClusterID, req.Name) + namespace, err := s.namespaceManager.GetNamespace(ctx, req.ClusterID, req.Name) if err != nil { - n.logger.Error("GetNamespaceDetails: 获取命名空间详情失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) + s.logger.Error("GetNamespaceDetails: 获取命名空间详情失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) return nil, fmt.Errorf("获取命名空间详情失败: %w", err) } @@ -192,7 +192,7 @@ func (n *namespaceService) GetNamespaceDetails(ctx context.Context, req *model.K } // UpdateNamespace 更新命名空间 -func (n *namespaceService) UpdateNamespace(ctx context.Context, req *model.K8sNamespaceUpdateReq) error { +func (s *namespaceService) UpdateNamespace(ctx context.Context, req *model.K8sNamespaceUpdateReq) error { if req == nil { return fmt.Errorf("更新命名空间请求不能为空") } @@ -207,20 +207,20 @@ func (n *namespaceService) UpdateNamespace(ctx context.Context, req *model.K8sNa // 验证标签 if err := utils.ValidateNodeLabelsMap(utils.ConvertKeyValueListToLabels(req.Labels)); err != nil { - n.logger.Error("UpdateNamespace: 标签验证失败", zap.Error(err)) + s.logger.Error("UpdateNamespace: 标签验证失败", zap.Error(err)) return fmt.Errorf("标签验证失败: %w", err) } // 验证注解 if err := utils.ValidateAnnotations(req.Annotations); err != nil { - n.logger.Error("UpdateNamespace: 注解验证失败", zap.Error(err)) + s.logger.Error("UpdateNamespace: 注解验证失败", zap.Error(err)) return fmt.Errorf("注解验证失败: %w", err) } // 获取现有命名空间 - namespace, err := n.namespaceManager.GetNamespace(ctx, req.ClusterID, req.Name) + namespace, err := s.namespaceManager.GetNamespace(ctx, req.ClusterID, req.Name) if err != nil { - n.logger.Error("UpdateNamespace: 获取命名空间失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) + s.logger.Error("UpdateNamespace: 获取命名空间失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) return fmt.Errorf("获取命名空间失败: %w", err) } @@ -233,9 +233,9 @@ func (n *namespaceService) UpdateNamespace(ctx context.Context, req *model.K8sNa namespace.Annotations = annotationsMap // 使用 NamespaceManager 更新命名空间 - _, err = n.namespaceManager.UpdateNamespace(ctx, req.ClusterID, namespace) + _, err = s.namespaceManager.UpdateNamespace(ctx, req.ClusterID, namespace) if err != nil { - n.logger.Error("UpdateNamespace: 更新命名空间失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) + s.logger.Error("UpdateNamespace: 更新命名空间失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) return fmt.Errorf("更新命名空间失败: %w", err) } @@ -243,7 +243,7 @@ func (n *namespaceService) UpdateNamespace(ctx context.Context, req *model.K8sNa } // ListNamespaces 获取命名空间列表 -func (n *namespaceService) ListNamespaces(ctx context.Context, req *model.K8sNamespaceListReq) (model.ListResp[*model.K8sNamespace], error) { +func (s *namespaceService) ListNamespaces(ctx context.Context, req *model.K8sNamespaceListReq) (model.ListResp[*model.K8sNamespace], error) { if req == nil { return model.ListResp[*model.K8sNamespace]{}, fmt.Errorf("获取命名空间列表请求不能为空") } @@ -254,7 +254,7 @@ func (n *namespaceService) ListNamespaces(ctx context.Context, req *model.K8sNam // 验证过滤参数 if err := utils.ValidateNamespaceFilters(req); err != nil { - n.logger.Error("ListNamespaces: 过滤参数验证失败", zap.Error(err)) + s.logger.Error("ListNamespaces: 过滤参数验证失败", zap.Error(err)) return model.ListResp[*model.K8sNamespace]{}, fmt.Errorf("过滤参数验证失败: %w", err) } @@ -262,9 +262,9 @@ func (n *namespaceService) ListNamespaces(ctx context.Context, req *model.K8sNam listOptions := utils.BuildNamespaceListOptions(req) // 使用 NamespaceManager 获取命名空间列表 - namespaceList, err := n.namespaceManager.GetNamespaceList(ctx, req.ClusterID, listOptions) + namespaceList, err := s.namespaceManager.GetNamespaceList(ctx, req.ClusterID, listOptions) if err != nil { - n.logger.Error("ListNamespaces: 获取命名空间列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID)) + s.logger.Error("ListNamespaces: 获取命名空间列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID)) return model.ListResp[*model.K8sNamespace]{}, fmt.Errorf("获取命名空间列表失败: %w", err) } diff --git a/internal/k8s/service/node_service.go b/internal/k8s/service/node_service.go index 024d532b..5a773a33 100644 --- a/internal/k8s/service/node_service.go +++ b/internal/k8s/service/node_service.go @@ -66,7 +66,7 @@ func NewNodeService(clusterDao dao.ClusterDAO, client client.K8sClient, nodeMana } // GetNodeList 获取节点列表 -func (n *nodeService) GetNodeList(ctx context.Context, req *model.GetNodeListReq) (model.ListResp[*model.K8sNode], error) { +func (s *nodeService) GetNodeList(ctx context.Context, req *model.GetNodeListReq) (model.ListResp[*model.K8sNode], error) { if req == nil { return model.ListResp[*model.K8sNode]{}, fmt.Errorf("获取节点列表请求参数不能为空") } @@ -79,9 +79,9 @@ func (n *nodeService) GetNodeList(ctx context.Context, req *model.GetNodeListReq listOptions := utils.BuildNodeListOptions(req) // 使用 NodeManager 获取节点列表 - nodeList, total, err := n.nodeManager.GetNodeList(ctx, req.ClusterID, listOptions) + nodeList, total, err := s.nodeManager.GetNodeList(ctx, req.ClusterID, listOptions) if err != nil { - n.logger.Error("GetNodeList: 获取节点列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID)) + s.logger.Error("GetNodeList: 获取节点列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID)) return model.ListResp[*model.K8sNode]{}, fmt.Errorf("获取节点列表失败: %w", err) } @@ -99,9 +99,9 @@ func (n *nodeService) GetNodeList(ctx context.Context, req *model.GetNodeListReq // 转换为响应格式 var items []*model.K8sNode for _, node := range pagedNodes { - k8sNode, err := n.nodeManager.BuildK8sNode(ctx, req.ClusterID, node) + k8sNode, err := s.nodeManager.BuildK8sNode(ctx, req.ClusterID, node) if err != nil { - n.logger.Warn("GetNodeList: 构建节点信息失败", zap.Error(err), zap.String("nodeName", node.Name)) + s.logger.Warn("GetNodeList: 构建节点信息失败", zap.Error(err), zap.String("nodeName", node.Name)) continue } items = append(items, k8sNode) @@ -114,7 +114,7 @@ func (n *nodeService) GetNodeList(ctx context.Context, req *model.GetNodeListReq } // GetNodeDetail 获取节点详情 -func (n *nodeService) GetNodeDetail(ctx context.Context, req *model.GetNodeDetailReq) (*model.K8sNode, error) { +func (s *nodeService) GetNodeDetail(ctx context.Context, req *model.GetNodeDetailReq) (*model.K8sNode, error) { if req == nil { return nil, fmt.Errorf("获取节点详情请求参数不能为空") } @@ -124,16 +124,16 @@ func (n *nodeService) GetNodeDetail(ctx context.Context, req *model.GetNodeDetai } // 使用 NodeManager 获取节点 - node, err := n.nodeManager.GetNode(ctx, req.ClusterID, req.NodeName) + node, err := s.nodeManager.GetNode(ctx, req.ClusterID, req.NodeName) if err != nil { - n.logger.Error("GetNodeDetail: 获取节点失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) + s.logger.Error("GetNodeDetail: 获取节点失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) return nil, fmt.Errorf("获取节点失败: %w", err) } // 使用 NodeManager 构建详细信息 - k8sNode, err := n.nodeManager.BuildK8sNode(ctx, req.ClusterID, *node) + k8sNode, err := s.nodeManager.BuildK8sNode(ctx, req.ClusterID, *node) if err != nil { - n.logger.Error("GetNodeDetail: 构建节点详细信息失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) + s.logger.Error("GetNodeDetail: 构建节点详细信息失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) return nil, fmt.Errorf("构建节点详细信息失败: %w", err) } @@ -141,7 +141,7 @@ func (n *nodeService) GetNodeDetail(ctx context.Context, req *model.GetNodeDetai } // AddOrUpdateNodeLabel 添加或更新节点标签 -func (n *nodeService) AddOrUpdateNodeLabel(ctx context.Context, req *model.AddLabelNodesReq) error { +func (s *nodeService) AddOrUpdateNodeLabel(ctx context.Context, req *model.AddLabelNodesReq) error { if req == nil { return fmt.Errorf("添加节点标签请求参数不能为空") } @@ -156,23 +156,23 @@ func (n *nodeService) AddOrUpdateNodeLabel(ctx context.Context, req *model.AddLa // 验证标签 if err := utils.ValidateNodeLabelsMap(req.Labels); err != nil { - n.logger.Error("AddOrUpdateNodeLabel: 标签验证失败", zap.Error(err)) + s.logger.Error("AddOrUpdateNodeLabel: 标签验证失败", zap.Error(err)) return fmt.Errorf("标签验证失败: %w", err) } // 使用 NodeManager 添加或更新节点标签 - err := n.nodeManager.AddOrUpdateNodeLabels(ctx, req.ClusterID, req.NodeName, req.Labels, req.Overwrite) + err := s.nodeManager.AddOrUpdateNodeLabels(ctx, req.ClusterID, req.NodeName, req.Labels, req.Overwrite) if err != nil { - n.logger.Error("AddOrUpdateNodeLabel: 添加节点标签失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Any("labels", req.Labels)) + s.logger.Error("AddOrUpdateNodeLabel: 添加节点标签失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Any("labels", req.Labels)) return fmt.Errorf("添加节点标签失败: %w", err) } - n.logger.Info("AddOrUpdateNodeLabel: 成功添加节点标签", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Any("labels", req.Labels), zap.Bool("overwrite", req.Overwrite == 1)) + s.logger.Info("AddOrUpdateNodeLabel: 成功添加节点标签", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Any("labels", req.Labels), zap.Bool("overwrite", req.Overwrite == 1)) return nil } // DeleteNodeLabel 删除节点标签 -func (n *nodeService) DeleteNodeLabel(ctx context.Context, req *model.DeleteLabelNodesReq) error { +func (s *nodeService) DeleteNodeLabel(ctx context.Context, req *model.DeleteLabelNodesReq) error { if req == nil { return fmt.Errorf("删除节点标签请求参数不能为空") } @@ -186,19 +186,19 @@ func (n *nodeService) DeleteNodeLabel(ctx context.Context, req *model.DeleteLabe } // 使用 NodeManager 删除节点标签 - err := n.nodeManager.DeleteNodeLabels(ctx, req.ClusterID, req.NodeName, req.LabelKeys) + err := s.nodeManager.DeleteNodeLabels(ctx, req.ClusterID, req.NodeName, req.LabelKeys) if err != nil { - n.logger.Error("DeleteNodeLabel: 删除节点标签失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Strings("labelKeys", req.LabelKeys)) + s.logger.Error("DeleteNodeLabel: 删除节点标签失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Strings("labelKeys", req.LabelKeys)) return fmt.Errorf("删除节点标签失败: %w", err) } - n.logger.Info("DeleteNodeLabel: 成功删除节点标签", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Strings("labelKeys", req.LabelKeys)) + s.logger.Info("DeleteNodeLabel: 成功删除节点标签", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Strings("labelKeys", req.LabelKeys)) return nil } // GetNodeTaints 获取节点污点 -func (n *nodeService) GetNodeTaints(ctx context.Context, req *model.GetNodeTaintsReq) (model.ListResp[*model.NodeTaint], error) { +func (s *nodeService) GetNodeTaints(ctx context.Context, req *model.GetNodeTaintsReq) (model.ListResp[*model.NodeTaint], error) { if req == nil { return model.ListResp[*model.NodeTaint]{}, fmt.Errorf("获取节点污点请求参数不能为空") } @@ -208,9 +208,9 @@ func (n *nodeService) GetNodeTaints(ctx context.Context, req *model.GetNodeTaint } // 使用 NodeManager 获取节点污点 - taints, total, err := n.nodeManager.GetNodeTaints(ctx, req.ClusterID, req.NodeName) + taints, total, err := s.nodeManager.GetNodeTaints(ctx, req.ClusterID, req.NodeName) if err != nil { - n.logger.Error("GetNodeTaints: 获取节点污点失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) + s.logger.Error("GetNodeTaints: 获取节点污点失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) return model.ListResp[*model.NodeTaint]{}, fmt.Errorf("获取节点污点失败: %w", err) } @@ -221,7 +221,7 @@ func (n *nodeService) GetNodeTaints(ctx context.Context, req *model.GetNodeTaint } // DrainNode 驱逐节点 -func (n *nodeService) DrainNode(ctx context.Context, req *model.DrainNodeReq) error { +func (s *nodeService) DrainNode(ctx context.Context, req *model.DrainNodeReq) error { if req == nil { return fmt.Errorf("驱逐节点请求参数不能为空") } @@ -231,7 +231,7 @@ func (n *nodeService) DrainNode(ctx context.Context, req *model.DrainNodeReq) er } // 使用 NodeManager 驱逐节点 - err := n.nodeManager.DrainNode(ctx, req.ClusterID, req.NodeName, &utils.DrainOptions{ + err := s.nodeManager.DrainNode(ctx, req.ClusterID, req.NodeName, &utils.DrainOptions{ Force: req.Force, IgnoreDaemonSets: req.IgnoreDaemonSets, DeleteLocalData: req.DeleteLocalData, @@ -239,7 +239,7 @@ func (n *nodeService) DrainNode(ctx context.Context, req *model.DrainNodeReq) er TimeoutSeconds: req.TimeoutSeconds, }) if err != nil { - n.logger.Error("DrainNode: 驱逐节点失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) + s.logger.Error("DrainNode: 驱逐节点失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) return fmt.Errorf("驱逐节点失败: %w", err) } @@ -247,7 +247,7 @@ func (n *nodeService) DrainNode(ctx context.Context, req *model.DrainNodeReq) er } // CordonNode 禁止节点调度 -func (n *nodeService) CordonNode(ctx context.Context, req *model.NodeCordonReq) error { +func (s *nodeService) CordonNode(ctx context.Context, req *model.NodeCordonReq) error { if req == nil { return fmt.Errorf("禁止节点调度请求参数不能为空") } @@ -257,8 +257,8 @@ func (n *nodeService) CordonNode(ctx context.Context, req *model.NodeCordonReq) } // 使用 NodeManager 禁止节点调度 - if err := n.nodeManager.CordonNode(ctx, req.ClusterID, req.NodeName); err != nil { - n.logger.Error("CordonNode: 禁止节点调度失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) + if err := s.nodeManager.CordonNode(ctx, req.ClusterID, req.NodeName); err != nil { + s.logger.Error("CordonNode: 禁止节点调度失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) return fmt.Errorf("禁止节点 %s 调度失败: %w", req.NodeName, err) } @@ -266,7 +266,7 @@ func (n *nodeService) CordonNode(ctx context.Context, req *model.NodeCordonReq) } // UncordonNode 解除节点调度限制 -func (n *nodeService) UncordonNode(ctx context.Context, req *model.NodeUncordonReq) error { +func (s *nodeService) UncordonNode(ctx context.Context, req *model.NodeUncordonReq) error { if req == nil { return fmt.Errorf("解除节点调度限制请求参数不能为空") } @@ -276,8 +276,8 @@ func (n *nodeService) UncordonNode(ctx context.Context, req *model.NodeUncordonR } // 使用 NodeManager 解除节点调度限制 - if err := n.nodeManager.UncordonNode(ctx, req.ClusterID, req.NodeName); err != nil { - n.logger.Error("UncordonNode: 解除节点调度限制失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) + if err := s.nodeManager.UncordonNode(ctx, req.ClusterID, req.NodeName); err != nil { + s.logger.Error("UncordonNode: 解除节点调度限制失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) return fmt.Errorf("解除节点 %s 调度限制失败: %w", req.NodeName, err) } diff --git a/internal/k8s/service/pod_service.go b/internal/k8s/service/pod_service.go index 38a86287..5b592ec6 100644 --- a/internal/k8s/service/pod_service.go +++ b/internal/k8s/service/pod_service.go @@ -80,7 +80,7 @@ func NewPodService(podManager manager.PodManager, sseHandler sse.Handler, logger } // CreatePod 创建Pod -func (p *podService) CreatePod(ctx context.Context, req *model.CreatePodReq) error { +func (s *podService) CreatePod(ctx context.Context, req *model.CreatePodReq) error { if req == nil { return fmt.Errorf("创建Pod请求不能为空") } @@ -100,7 +100,7 @@ func (p *podService) CreatePod(ctx context.Context, req *model.CreatePodReq) err // 从请求构建Pod对象 pod, err := utils.BuildPodFromRequest(req) if err != nil { - p.logger.Error("CreatePod: 构建Pod对象失败", + s.logger.Error("CreatePod: 构建Pod对象失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("构建Pod对象失败: %w", err) @@ -108,16 +108,16 @@ func (p *podService) CreatePod(ctx context.Context, req *model.CreatePodReq) err // 验证Pod配置 if err := utils.ValidatePod(pod); err != nil { - p.logger.Error("CreatePod: Pod配置验证失败", + s.logger.Error("CreatePod: Pod配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("pod配置验证失败: %w", err) } // 创建Pod - _, err = p.podManager.CreatePod(ctx, req.ClusterID, req.Namespace, pod) + _, err = s.podManager.CreatePod(ctx, req.ClusterID, req.Namespace, pod) if err != nil { - p.logger.Error("CreatePod: 创建Pod失败", + s.logger.Error("CreatePod: 创建Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -129,7 +129,7 @@ func (p *podService) CreatePod(ctx context.Context, req *model.CreatePodReq) err } // GetPodList 获取Pod列表 -func (p *podService) GetPodList(ctx context.Context, req *model.GetPodListReq) (model.ListResp[*model.K8sPod], error) { +func (s *podService) GetPodList(ctx context.Context, req *model.GetPodListReq) (model.ListResp[*model.K8sPod], error) { if req == nil { return model.ListResp[*model.K8sPod]{}, fmt.Errorf("获取Pod列表请求不能为空") } @@ -151,9 +151,9 @@ func (p *podService) GetPodList(ctx context.Context, req *model.GetPodListReq) ( // 注意:K8s标签选择器语法有限制,先获取所有再过滤 } - k8sPods, err := p.podManager.GetPodList(ctx, req.ClusterID, namespace, listOptions) + k8sPods, err := s.podManager.GetPodList(ctx, req.ClusterID, namespace, listOptions) if err != nil { - p.logger.Error("GetPodList: 获取Pod列表失败", + s.logger.Error("GetPodList: 获取Pod列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", namespace)) @@ -203,7 +203,7 @@ func (p *podService) GetPodList(ctx context.Context, req *model.GetPodListReq) ( } // GetPodDetails 获取Pod详情 -func (p *podService) GetPodDetails(ctx context.Context, req *model.GetPodDetailsReq) (*model.K8sPod, error) { +func (s *podService) GetPodDetails(ctx context.Context, req *model.GetPodDetailsReq) (*model.K8sPod, error) { if req == nil { return nil, fmt.Errorf("获取Pod详情请求不能为空") } @@ -220,9 +220,9 @@ func (p *podService) GetPodDetails(ctx context.Context, req *model.GetPodDetails return nil, fmt.Errorf("Pod名称不能为空") } - pod, err := p.podManager.GetPod(ctx, req.ClusterID, req.Namespace, req.Name) + pod, err := s.podManager.GetPod(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - p.logger.Error("GetPodDetails: 获取Pod失败", + s.logger.Error("GetPodDetails: 获取Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -234,7 +234,7 @@ func (p *podService) GetPodDetails(ctx context.Context, req *model.GetPodDetails } // GetPodYaml 获取Pod YAML -func (p *podService) GetPodYaml(ctx context.Context, req *model.GetPodYamlReq) (*model.K8sYaml, error) { +func (s *podService) GetPodYaml(ctx context.Context, req *model.GetPodYamlReq) (*model.K8sYaml, error) { if req == nil { return nil, fmt.Errorf("获取Pod YAML请求不能为空") } @@ -251,9 +251,9 @@ func (p *podService) GetPodYaml(ctx context.Context, req *model.GetPodYamlReq) ( return nil, fmt.Errorf("Pod名称不能为空") } - pod, err := p.podManager.GetPod(ctx, req.ClusterID, req.Namespace, req.Name) + pod, err := s.podManager.GetPod(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - p.logger.Error("GetPodYaml: 获取Pod失败", + s.logger.Error("GetPodYaml: 获取Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -264,7 +264,7 @@ func (p *podService) GetPodYaml(ctx context.Context, req *model.GetPodYamlReq) ( // 转换为YAML yamlContent, err := utils.PodToYAML(pod) if err != nil { - p.logger.Error("GetPodYaml: 转换为YAML失败", + s.logger.Error("GetPodYaml: 转换为YAML失败", zap.Error(err), zap.String("podName", pod.Name)) return nil, fmt.Errorf("转换为YAML失败: %w", err) @@ -276,7 +276,7 @@ func (p *podService) GetPodYaml(ctx context.Context, req *model.GetPodYamlReq) ( } // UpdatePod 更新Pod -func (p *podService) UpdatePod(ctx context.Context, req *model.UpdatePodReq) error { +func (s *podService) UpdatePod(ctx context.Context, req *model.UpdatePodReq) error { if req == nil { return fmt.Errorf("更新Pod请求不能为空") } @@ -294,9 +294,9 @@ func (p *podService) UpdatePod(ctx context.Context, req *model.UpdatePodReq) err } // 先获取当前Pod - currentPod, err := p.podManager.GetPod(ctx, req.ClusterID, req.Namespace, req.Name) + currentPod, err := s.podManager.GetPod(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - p.logger.Error("UpdatePod: 获取当前Pod失败", + s.logger.Error("UpdatePod: 获取当前Pod失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("获取当前Pod失败: %w", err) @@ -312,16 +312,16 @@ func (p *podService) UpdatePod(ctx context.Context, req *model.UpdatePodReq) err // 验证Pod配置 if err := utils.ValidatePod(currentPod); err != nil { - p.logger.Error("UpdatePod: Pod配置验证失败", + s.logger.Error("UpdatePod: Pod配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("pod配置验证失败: %w", err) } // 更新Pod - _, err = p.podManager.UpdatePod(ctx, req.ClusterID, req.Namespace, currentPod) + _, err = s.podManager.UpdatePod(ctx, req.ClusterID, req.Namespace, currentPod) if err != nil { - p.logger.Error("UpdatePod: 更新Pod失败", + s.logger.Error("UpdatePod: 更新Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -333,7 +333,7 @@ func (p *podService) UpdatePod(ctx context.Context, req *model.UpdatePodReq) err } // DeletePod 删除Pod -func (p *podService) DeletePod(ctx context.Context, req *model.DeletePodReq) error { +func (s *podService) DeletePod(ctx context.Context, req *model.DeletePodReq) error { if req == nil { return fmt.Errorf("删除Pod请求不能为空") } @@ -359,9 +359,9 @@ func (p *podService) DeletePod(ctx context.Context, req *model.DeletePodReq) err deleteOptions.PropagationPolicy = &policy } - err := p.podManager.DeletePod(ctx, req.ClusterID, req.Namespace, req.Name, deleteOptions) + err := s.podManager.DeletePod(ctx, req.ClusterID, req.Namespace, req.Name, deleteOptions) if err != nil { - p.logger.Error("DeletePod: 删除Pod失败", + s.logger.Error("DeletePod: 删除Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -373,7 +373,7 @@ func (p *podService) DeletePod(ctx context.Context, req *model.DeletePodReq) err } // GetPodsByNodeName 获取指定节点上的Pod列表 -func (p *podService) GetPodsByNodeName(ctx context.Context, req *model.GetPodsByNodeReq) (model.ListResp[*model.K8sPod], error) { +func (s *podService) GetPodsByNodeName(ctx context.Context, req *model.GetPodsByNodeReq) (model.ListResp[*model.K8sPod], error) { if req == nil { return model.ListResp[*model.K8sPod]{}, fmt.Errorf("获取节点Pod列表请求不能为空") } @@ -386,9 +386,9 @@ func (p *podService) GetPodsByNodeName(ctx context.Context, req *model.GetPodsBy return model.ListResp[*model.K8sPod]{}, fmt.Errorf("节点名称不能为空") } - pods, err := p.podManager.GetPodsByNodeName(ctx, req.ClusterID, req.NodeName) + pods, err := s.podManager.GetPodsByNodeName(ctx, req.ClusterID, req.NodeName) if err != nil { - p.logger.Error("GetPodsByNodeName: 获取节点Pod列表失败", + s.logger.Error("GetPodsByNodeName: 获取节点Pod列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName)) @@ -402,7 +402,7 @@ func (p *podService) GetPodsByNodeName(ctx context.Context, req *model.GetPodsBy } // GetPodContainers 获取Pod的容器列表 -func (p *podService) GetPodContainers(ctx context.Context, req *model.GetPodContainersReq) (model.ListResp[*model.PodContainer], error) { +func (s *podService) GetPodContainers(ctx context.Context, req *model.GetPodContainersReq) (model.ListResp[*model.PodContainer], error) { if req == nil { return model.ListResp[*model.PodContainer]{}, fmt.Errorf("获取Pod容器列表请求不能为空") } @@ -419,9 +419,9 @@ func (p *podService) GetPodContainers(ctx context.Context, req *model.GetPodCont return model.ListResp[*model.PodContainer]{}, fmt.Errorf("Pod名称不能为空") } - pod, err := p.podManager.GetPod(ctx, req.ClusterID, req.Namespace, req.PodName) + pod, err := s.podManager.GetPod(ctx, req.ClusterID, req.Namespace, req.PodName) if err != nil { - p.logger.Error("GetPodContainers: 获取Pod失败", + s.logger.Error("GetPodContainers: 获取Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -443,7 +443,7 @@ func (p *podService) GetPodContainers(ctx context.Context, req *model.GetPodCont } // GetPodLogs 获取Pod日志 -func (p *podService) GetPodLogs(ctx *gin.Context, req *model.GetPodLogsReq) error { +func (s *podService) GetPodLogs(ctx *gin.Context, req *model.GetPodLogsReq) error { if req == nil { return fmt.Errorf("获取Pod日志请求不能为空") } @@ -473,22 +473,22 @@ func (p *podService) GetPodLogs(ctx *gin.Context, req *model.GetPodLogsReq) erro if req.SinceTime != "" { sinceTime, err := time.Parse(time.RFC3339, req.SinceTime) if err != nil { - p.logger.Error("解析时间参数失败", zap.String("sinceTime", req.SinceTime), zap.Error(err)) + s.logger.Error("解析时间参数失败", zap.String("sinceTime", req.SinceTime), zap.Error(err)) return fmt.Errorf("时间参数格式错误: %w", err) } metaTime := metav1.NewTime(sinceTime) logOptions.SinceTime = &metaTime } - out, err := p.podManager.GetPodLogs(ctx, req.ClusterID, req.Namespace, req.PodName, logOptions) + out, err := s.podManager.GetPodLogs(ctx, req.ClusterID, req.Namespace, req.PodName, logOptions) if err != nil { // 检查是否请求previous日志但容器未重启 if strings.Contains(err.Error(), "previous terminated container") && strings.Contains(err.Error(), "not found") { - return p.sseHandler.Stream(ctx, func(ctx context.Context, msgChan chan<- interface{}) { + return s.sseHandler.Stream(ctx, func(ctx context.Context, msgChan chan<- interface{}) { // 发送友好提示 msgChan <- "该容器没有重启过,无法获取之前的日志。请取消 'Previous' 选项查看当前日志。" - p.logger.Info("容器没有previous日志", + s.logger.Info("容器没有previous日志", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("podName", req.PodName)) @@ -497,16 +497,16 @@ func (p *podService) GetPodLogs(ctx *gin.Context, req *model.GetPodLogsReq) erro return err } - return p.sseHandler.Stream(ctx, func(ctx context.Context, msgChan chan<- interface{}) { + return s.sseHandler.Stream(ctx, func(ctx context.Context, msgChan chan<- interface{}) { defer func() { if err := out.Close(); err != nil { // 检查是否是客户端断开连接 if errors.Is(err, context.Canceled) || strings.Contains(err.Error(), "request canceled") || strings.Contains(err.Error(), "context cancellation") { - p.logger.Debug("Pod日志流已正常关闭(客户端断开)", zap.Error(err)) + s.logger.Debug("Pod日志流已正常关闭(客户端断开)", zap.Error(err)) } else { - p.logger.Error("关闭Pod日志流失败", zap.Error(err)) + s.logger.Error("关闭Pod日志流失败", zap.Error(err)) } } }() @@ -518,7 +518,7 @@ func (p *podService) GetPodLogs(ctx *gin.Context, req *model.GetPodLogsReq) erro for { select { case <-ctx.Done(): - p.logger.Info("上下文已取消,停止读取Pod日志") + s.logger.Info("上下文已取消,停止读取Pod日志") return default: line, err := reader.ReadString('\n') @@ -532,7 +532,7 @@ func (p *podService) GetPodLogs(ctx *gin.Context, req *model.GetPodLogsReq) erro // Follow模式不立即关闭连接 // EOF可能只是暂时无新日志,继续等待 if logOptions.Follow { - p.logger.Debug("Pod日志暂时无新内容,继续等待...") + s.logger.Debug("Pod日志暂时无新内容,继续等待...") // 短暂等待避免CPU密集循环 select { case <-ctx.Done(): @@ -541,7 +541,7 @@ func (p *podService) GetPodLogs(ctx *gin.Context, req *model.GetPodLogsReq) erro continue } } else { - p.logger.Info("Pod日志流已结束") + s.logger.Info("Pod日志流已结束") return } } @@ -552,26 +552,26 @@ func (p *podService) GetPodLogs(ctx *gin.Context, req *model.GetPodLogsReq) erro strings.Contains(err.Error(), "Client.Timeout") || strings.Contains(err.Error(), "context cancellation") || strings.Contains(err.Error(), "request canceled") { - p.logger.Info("客户端断开连接或请求超时,停止读取Pod日志") + s.logger.Info("客户端断开连接或请求超时,停止读取Pod日志") return } // 检查网络超时 var netErr net.Error if errors.As(err, &netErr) && netErr.Timeout() { - p.logger.Info("网络超时,停止读取Pod日志") + s.logger.Info("网络超时,停止读取Pod日志") return } retryCount++ if retryCount > maxRetries { - p.logger.Error("读取Pod日志失败,已达到最大重试次数", + s.logger.Error("读取Pod日志失败,已达到最大重试次数", zap.Error(err), zap.Int("retryCount", retryCount)) return } - p.logger.Warn("读取Pod日志失败,将重试", + s.logger.Warn("读取Pod日志失败,将重试", zap.Error(err), zap.Int("retryCount", retryCount), zap.Int("maxRetries", maxRetries)) @@ -606,7 +606,7 @@ func (p *podService) GetPodLogs(ctx *gin.Context, req *model.GetPodLogsReq) erro } // PodExec Pod终端执行 -func (p *podService) PodExec(ctx *gin.Context, req *model.PodExecReq) error { +func (s *podService) PodExec(ctx *gin.Context, req *model.PodExecReq) error { if req == nil { return fmt.Errorf("Pod终端执行请求不能为空") } @@ -625,15 +625,15 @@ func (p *podService) PodExec(ctx *gin.Context, req *model.PodExecReq) error { conn, err := pkg.UpGrader.Upgrade(ctx.Writer, ctx.Request, nil) if err != nil { - p.logger.Error("升级ws失败", zap.Error(err)) + s.logger.Error("升级ws失败", zap.Error(err)) return fmt.Errorf("初始化WebSocket失败: %w", err) } - return p.podManager.PodTerminalSession(ctx, req.ClusterID, req.Namespace, req.PodName, req.Container, req.Shell, conn) + return s.podManager.PodTerminalSession(ctx, req.ClusterID, req.Namespace, req.PodName, req.Container, req.Shell, conn) } // PodPortForward Pod端口转发 -func (p *podService) PodPortForward(ctx context.Context, req *model.PodPortForwardReq) error { +func (s *podService) PodPortForward(ctx context.Context, req *model.PodPortForwardReq) error { if req == nil { return fmt.Errorf("Pod端口转发请求不能为空") } @@ -665,11 +665,11 @@ func (p *podService) PodPortForward(ctx context.Context, req *model.PodPortForwa } // 调用Manager层进行端口转发 - return p.podManager.PodPortForward(ctx, req.ClusterID, req.Namespace, req.PodName, req.Ports) + return s.podManager.PodPortForward(ctx, req.ClusterID, req.Namespace, req.PodName, req.Ports) } // PodFileUpload 上传文件到Pod -func (p *podService) PodFileUpload(ctx *gin.Context, req *model.PodFileUploadReq) error { +func (s *podService) PodFileUpload(ctx *gin.Context, req *model.PodFileUploadReq) error { if req == nil { return fmt.Errorf("上传文件到Pod请求不能为空") } @@ -694,16 +694,16 @@ func (p *podService) PodFileUpload(ctx *gin.Context, req *model.PodFileUploadReq return fmt.Errorf("文件路径不能为空") } - p.logger.Info("开始上传文件到Pod", + s.logger.Info("开始上传文件到Pod", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("podName", req.PodName), zap.String("containerName", req.ContainerName), zap.String("filePath", req.FilePath)) - err := p.podManager.UploadFileToPod(ctx, req.ClusterID, req.Namespace, req.PodName, req.ContainerName, req.FilePath) + err := s.podManager.UploadFileToPod(ctx, req.ClusterID, req.Namespace, req.PodName, req.ContainerName, req.FilePath) if err != nil { - p.logger.Error("上传文件到Pod失败", + s.logger.Error("上传文件到Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -713,7 +713,7 @@ func (p *podService) PodFileUpload(ctx *gin.Context, req *model.PodFileUploadReq return fmt.Errorf("上传文件到Pod失败: %w", err) } - p.logger.Info("成功上传文件到Pod", + s.logger.Info("成功上传文件到Pod", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("podName", req.PodName), @@ -724,7 +724,7 @@ func (p *podService) PodFileUpload(ctx *gin.Context, req *model.PodFileUploadReq } // PodFileDownload 从Pod下载文件 -func (p *podService) PodFileDownload(ctx *gin.Context, req *model.PodFileDownloadReq) error { +func (s *podService) PodFileDownload(ctx *gin.Context, req *model.PodFileDownloadReq) error { if req == nil { return fmt.Errorf("从Pod下载文件请求不能为空") } @@ -749,7 +749,7 @@ func (p *podService) PodFileDownload(ctx *gin.Context, req *model.PodFileDownloa return fmt.Errorf("文件路径不能为空") } - p.logger.Info("开始从Pod下载文件", + s.logger.Info("开始从Pod下载文件", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("podName", req.PodName), @@ -770,9 +770,9 @@ func (p *podService) PodFileDownload(ctx *gin.Context, req *model.PodFileDownloa ctx.Header("Expires", "0") // 创建文件流 - reader, err := p.podManager.DownloadPodFile(ctx.Request.Context(), req.ClusterID, req.Namespace, req.PodName, req.ContainerName, req.FilePath) + reader, err := s.podManager.DownloadPodFile(ctx.Request.Context(), req.ClusterID, req.Namespace, req.PodName, req.ContainerName, req.FilePath) if err != nil { - p.logger.Error("创建Pod文件流失败", + s.logger.Error("创建Pod文件流失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -783,20 +783,20 @@ func (p *podService) PodFileDownload(ctx *gin.Context, req *model.PodFileDownloa } defer func() { if closeErr := reader.Close(); closeErr != nil { - p.logger.Error("关闭文件流失败", zap.Error(closeErr)) + s.logger.Error("关闭文件流失败", zap.Error(closeErr)) } }() // 直接使用io.Copy进行高效复制 bytesWritten, err := io.Copy(ctx.Writer, reader) if err != nil { - p.logger.Error("文件传输失败", + s.logger.Error("文件传输失败", zap.Error(err), zap.Int64("bytesWritten", bytesWritten)) return fmt.Errorf("文件传输失败: %w", err) } - p.logger.Info("成功下载文件从Pod", + s.logger.Info("成功下载文件从Pod", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("podName", req.PodName), @@ -808,7 +808,7 @@ func (p *podService) PodFileDownload(ctx *gin.Context, req *model.PodFileDownloa } // CreatePodByYaml 通过YAML创建Pod -func (p *podService) CreatePodByYaml(ctx context.Context, req *model.CreatePodByYamlReq) error { +func (s *podService) CreatePodByYaml(ctx context.Context, req *model.CreatePodByYamlReq) error { if req == nil { return fmt.Errorf("通过YAML创建Pod请求不能为空") } @@ -824,7 +824,7 @@ func (p *podService) CreatePodByYaml(ctx context.Context, req *model.CreatePodBy // 解析YAML为Pod对象 pod, err := utils.YAMLToPod(req.YAML) if err != nil { - p.logger.Error("CreatePodByYaml: 解析YAML失败", + s.logger.Error("CreatePodByYaml: 解析YAML失败", zap.Error(err), zap.Int("cluster_id", req.ClusterID)) return fmt.Errorf("解析YAML失败: %w", err) @@ -832,16 +832,16 @@ func (p *podService) CreatePodByYaml(ctx context.Context, req *model.CreatePodBy // 验证Pod配置 if err := utils.ValidatePod(pod); err != nil { - p.logger.Error("CreatePodByYaml: Pod配置验证失败", + s.logger.Error("CreatePodByYaml: Pod配置验证失败", zap.Error(err), zap.String("name", pod.Name)) return fmt.Errorf("Pod配置验证失败: %w", err) } // 创建Pod - _, err = p.podManager.CreatePod(ctx, req.ClusterID, pod.Namespace, pod) + _, err = s.podManager.CreatePod(ctx, req.ClusterID, pod.Namespace, pod) if err != nil { - p.logger.Error("CreatePodByYaml: 创建Pod失败", + s.logger.Error("CreatePodByYaml: 创建Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", pod.Namespace), @@ -853,7 +853,7 @@ func (p *podService) CreatePodByYaml(ctx context.Context, req *model.CreatePodBy } // UpdatePodByYaml 通过YAML更新Pod -func (p *podService) UpdatePodByYaml(ctx context.Context, req *model.UpdatePodByYamlReq) error { +func (s *podService) UpdatePodByYaml(ctx context.Context, req *model.UpdatePodByYamlReq) error { if req == nil { return fmt.Errorf("通过YAML更新Pod请求不能为空") } @@ -869,7 +869,7 @@ func (p *podService) UpdatePodByYaml(ctx context.Context, req *model.UpdatePodBy // 解析YAML为Pod对象 pod, err := utils.YAMLToPod(req.YAML) if err != nil { - p.logger.Error("UpdatePodByYaml: 解析YAML失败", + s.logger.Error("UpdatePodByYaml: 解析YAML失败", zap.Error(err), zap.Int("cluster_id", req.ClusterID)) return fmt.Errorf("解析YAML失败: %w", err) @@ -877,16 +877,16 @@ func (p *podService) UpdatePodByYaml(ctx context.Context, req *model.UpdatePodBy // 验证Pod配置 if err := utils.ValidatePod(pod); err != nil { - p.logger.Error("UpdatePodByYaml: Pod配置验证失败", + s.logger.Error("UpdatePodByYaml: Pod配置验证失败", zap.Error(err), zap.String("name", pod.Name)) return fmt.Errorf("Pod配置验证失败: %w", err) } // 更新Pod - _, err = p.podManager.UpdatePod(ctx, req.ClusterID, req.Namespace, pod) + _, err = s.podManager.UpdatePod(ctx, req.ClusterID, req.Namespace, pod) if err != nil { - p.logger.Error("UpdatePodByYaml: 更新Pod失败", + s.logger.Error("UpdatePodByYaml: 更新Pod失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), diff --git a/internal/k8s/service/pv_service.go b/internal/k8s/service/pv_service.go index 9c920f02..4d3e7ea5 100644 --- a/internal/k8s/service/pv_service.go +++ b/internal/k8s/service/pv_service.go @@ -83,10 +83,10 @@ func NewPVService(dao dao.ClusterDAO, client client.K8sClient, pvManager manager } // GetPVList 获取PV列表 -func (p *pvService) GetPVList(ctx context.Context, req *model.GetPVListReq) (model.ListResp[*model.K8sPV], error) { - kubeClient, err := p.client.GetKubeClient(req.ClusterID) +func (s *pvService) GetPVList(ctx context.Context, req *model.GetPVListReq) (model.ListResp[*model.K8sPV], error) { + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return model.ListResp[*model.K8sPV]{}, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } @@ -94,13 +94,13 @@ func (p *pvService) GetPVList(ctx context.Context, req *model.GetPVListReq) (mod pvs, err := kubeClient.CoreV1().PersistentVolumes().List(ctx, listOptions) if err != nil { - p.logger.Error("获取PV列表失败", zap.Error(err)) + s.logger.Error("获取PV列表失败", zap.Error(err)) return model.ListResp[*model.K8sPV]{}, pkg.NewBusinessError(constants.ErrK8sResourceList, "获取PV列表失败") } entities := make([]*model.K8sPV, 0, len(pvs.Items)) for _, pv := range pvs.Items { - entity := p.convertPVToEntity(&pv, req.ClusterID) + entity := s.convertPVToEntity(&pv, req.ClusterID) if entity != nil { entities = append(entities, entity) } @@ -110,7 +110,7 @@ func (p *pvService) GetPVList(ctx context.Context, req *model.GetPVListReq) (mod for _, e := range entities { // 过滤状态 if req.Status != "" { - statusStr := p.pvStatusToString(e.Status) + statusStr := s.pvStatusToString(e.Status) if !strings.EqualFold(statusStr, req.Status) { continue } @@ -156,22 +156,22 @@ func (p *pvService) GetPVList(ctx context.Context, req *model.GetPVListReq) (mod } // GetPVsByCluster 根据集群获取PV列表 -func (p *pvService) GetPVsByCluster(ctx context.Context, clusterID int) ([]*model.K8sPV, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (s *pvService) GetPVsByCluster(ctx context.Context, clusterID int) ([]*model.K8sPV, error) { + kubeClient, err := s.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return nil, constants.ErrorK8sClientNotReady } pvs, err := kubeClient.CoreV1().PersistentVolumes().List(ctx, metav1.ListOptions{}) if err != nil { - p.logger.Error("获取PV列表失败", zap.Error(err)) + s.logger.Error("获取PV列表失败", zap.Error(err)) return nil, err } entities := make([]*model.K8sPV, 0, len(pvs.Items)) for _, pv := range pvs.Items { - entity := p.convertPVToEntity(&pv, clusterID) + entity := s.convertPVToEntity(&pv, clusterID) entities = append(entities, entity) } @@ -179,35 +179,35 @@ func (p *pvService) GetPVsByCluster(ctx context.Context, clusterID int) ([]*mode } // GetPV 获取单个PV详情 -func (p *pvService) GetPV(ctx context.Context, clusterID int, name string) (*model.K8sPV, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (s *pvService) GetPV(ctx context.Context, clusterID int, name string) (*model.K8sPV, error) { + kubeClient, err := s.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } pv, err := kubeClient.CoreV1().PersistentVolumes().Get(ctx, name, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取PV详情失败", + s.logger.Error("获取PV详情失败", zap.String("name", name), zap.Error(err)) return nil, pkg.NewBusinessError(constants.ErrK8sResourceGet, "获取PV详情失败") } - return p.convertPVToEntity(pv, clusterID), nil + return s.convertPVToEntity(pv, clusterID), nil } // GetPVYaml 获取PV的YAML -func (p *pvService) GetPVYaml(ctx context.Context, clusterID int, name string) (string, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (s *pvService) GetPVYaml(ctx context.Context, clusterID int, name string) (string, error) { + kubeClient, err := s.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return "", pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } pv, err := kubeClient.CoreV1().PersistentVolumes().Get(ctx, name, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取PV失败", + s.logger.Error("获取PV失败", zap.String("name", name), zap.Error(err)) return "", pkg.NewBusinessError(constants.ErrK8sResourceGet, "获取PV失败") @@ -215,7 +215,7 @@ func (p *pvService) GetPVYaml(ctx context.Context, clusterID int, name string) ( yamlData, err := yaml.Marshal(pv) if err != nil { - p.logger.Error("序列化PV为YAML失败", zap.Error(err)) + s.logger.Error("序列化PV为YAML失败", zap.Error(err)) return "", pkg.NewBusinessError(constants.ErrK8sResourceOperation, "序列化PV为YAML失败") } @@ -223,24 +223,24 @@ func (p *pvService) GetPVYaml(ctx context.Context, clusterID int, name string) ( } // CreatePV 创建PV -func (p *pvService) CreatePV(ctx context.Context, req *model.CreatePVReq) error { +func (s *pvService) CreatePV(ctx context.Context, req *model.CreatePVReq) error { // 将请求转换为 Kubernetes PV 对象 pv := utils.ConvertCreatePVReqToPV(req) - return p.pvManager.CreatePV(ctx, req.ClusterID, pv) + return s.pvManager.CreatePV(ctx, req.ClusterID, pv) } // UpdatePV 更新PV -func (p *pvService) UpdatePV(ctx context.Context, req *model.UpdatePVReq) error { +func (s *pvService) UpdatePV(ctx context.Context, req *model.UpdatePVReq) error { // 先获取现有的PV对象 - kubeClient, err := p.client.GetKubeClient(req.ClusterID) + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } existingPV, err := kubeClient.CoreV1().PersistentVolumes().Get(ctx, req.Name, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取现有PV失败", + s.logger.Error("获取现有PV失败", zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name), zap.Error(err)) @@ -253,42 +253,42 @@ func (p *pvService) UpdatePV(ctx context.Context, req *model.UpdatePVReq) error return pkg.NewBusinessError(constants.ErrInvalidParam, "无效的更新请求") } - return p.pvManager.UpdatePV(ctx, req.ClusterID, pv) + return s.pvManager.UpdatePV(ctx, req.ClusterID, pv) } // DeletePV 删除PV -func (p *pvService) DeletePV(ctx context.Context, req *model.DeletePVReq) error { - kubeClient, err := p.client.GetKubeClient(req.ClusterID) +func (s *pvService) DeletePV(ctx context.Context, req *model.DeletePVReq) error { + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } err = kubeClient.CoreV1().PersistentVolumes().Delete(ctx, req.Name, metav1.DeleteOptions{}) if err != nil { - p.logger.Error("删除PV失败", + s.logger.Error("删除PV失败", zap.String("name", req.Name), zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sResourceDelete, "删除PV失败") } - p.logger.Info("成功删除PV", zap.String("name", req.Name)) + s.logger.Info("成功删除PV", zap.String("name", req.Name)) return nil } // ReclaimPV 回收PV -func (p *pvService) ReclaimPV(ctx context.Context, req *model.ReclaimPVReq) error { +func (s *pvService) ReclaimPV(ctx context.Context, req *model.ReclaimPVReq) error { if req == nil { return pkg.NewBusinessError(constants.ErrInvalidParam, "请求不能为空") } if req.ClusterID <= 0 || req.Name == "" { return pkg.NewBusinessError(constants.ErrInvalidParam, "参数无效") } - return p.pvManager.ReclaimPV(ctx, req.ClusterID, req.Name) + return s.pvManager.ReclaimPV(ctx, req.ClusterID, req.Name) } // convertPVToEntity 将Kubernetes PV对象转换为实体模型 -func (p *pvService) convertPVToEntity(pv *corev1.PersistentVolume, clusterID int) *model.K8sPV { +func (s *pvService) convertPVToEntity(pv *corev1.PersistentVolume, clusterID int) *model.K8sPV { if pv == nil { return nil } @@ -314,7 +314,7 @@ func (p *pvService) convertPVToEntity(pv *corev1.PersistentVolume, clusterID int storageClass := pv.Spec.StorageClassName // 转换状态为枚举类型 - status := p.convertPVStatus(pv.Status.Phase) + status := s.convertPVStatus(pv.Status.Phase) // 获取卷模式 volumeMode := string(corev1.PersistentVolumeFilesystem) @@ -376,7 +376,7 @@ func (p *pvService) convertPVToEntity(pv *corev1.PersistentVolume, clusterID int } // convertPVStatus 转换PV状态为枚举类型 -func (p *pvService) convertPVStatus(phase corev1.PersistentVolumePhase) model.K8sPVStatus { +func (s *pvService) convertPVStatus(phase corev1.PersistentVolumePhase) model.K8sPVStatus { switch phase { case corev1.VolumeAvailable: return model.K8sPVStatusAvailable @@ -392,7 +392,7 @@ func (p *pvService) convertPVStatus(phase corev1.PersistentVolumePhase) model.K8 } // pvStatusToString 将PV状态枚举转换为字符串 -func (p *pvService) pvStatusToString(status model.K8sPVStatus) string { +func (s *pvService) pvStatusToString(status model.K8sPVStatus) string { switch status { case model.K8sPVStatusAvailable: return "Available" @@ -408,7 +408,7 @@ func (p *pvService) pvStatusToString(status model.K8sPVStatus) string { } // CreatePVByYaml 通过YAML创建PV -func (p *pvService) CreatePVByYaml(ctx context.Context, req *model.CreatePVByYamlReq) error { +func (s *pvService) CreatePVByYaml(ctx context.Context, req *model.CreatePVByYamlReq) error { if req == nil { return pkg.NewBusinessError(constants.ErrInvalidParam, "通过YAML创建PV请求不能为空") } @@ -420,22 +420,22 @@ func (p *pvService) CreatePVByYaml(ctx context.Context, req *model.CreatePVByYam } pv, err := utils.YAMLToPV(req.YAML) if err != nil { - p.logger.Error("解析PV YAML失败", zap.Error(err)) + s.logger.Error("解析PV YAML失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sResourceOperation, "解析YAML失败") } if err := utils.ValidatePV(pv); err != nil { - p.logger.Error("PV配置验证失败", zap.Error(err)) + s.logger.Error("PV配置验证失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrInvalidParam, "PV配置验证失败") } - if err := p.pvManager.CreatePV(ctx, req.ClusterID, pv); err != nil { - p.logger.Error("创建PV失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", pv.Name)) + if err := s.pvManager.CreatePV(ctx, req.ClusterID, pv); err != nil { + s.logger.Error("创建PV失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", pv.Name)) return pkg.NewBusinessError(constants.ErrK8sResourceCreate, "创建PV失败") } return nil } // UpdatePVByYaml 通过YAML更新PV -func (p *pvService) UpdatePVByYaml(ctx context.Context, req *model.UpdatePVByYamlReq) error { +func (s *pvService) UpdatePVByYaml(ctx context.Context, req *model.UpdatePVByYamlReq) error { if req == nil { return pkg.NewBusinessError(constants.ErrInvalidParam, "通过YAML更新PV请求不能为空") } @@ -447,7 +447,7 @@ func (p *pvService) UpdatePVByYaml(ctx context.Context, req *model.UpdatePVByYam } desired, err := utils.YAMLToPV(req.YAML) if err != nil { - p.logger.Error("解析PV YAML失败", zap.Error(err)) + s.logger.Error("解析PV YAML失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sResourceOperation, "解析YAML失败") } if desired.Name == "" { @@ -457,11 +457,11 @@ func (p *pvService) UpdatePVByYaml(ctx context.Context, req *model.UpdatePVByYam return pkg.NewBusinessError(constants.ErrInvalidParam, "请求名称与YAML不一致") } if err := utils.ValidatePV(desired); err != nil { - p.logger.Error("PV配置验证失败", zap.Error(err)) + s.logger.Error("PV配置验证失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrInvalidParam, "PV配置验证失败") } - if err := p.pvManager.UpdatePV(ctx, req.ClusterID, desired); err != nil { - p.logger.Error("更新PV失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) + if err := s.pvManager.UpdatePV(ctx, req.ClusterID, desired); err != nil { + s.logger.Error("更新PV失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("name", req.Name)) return pkg.NewBusinessError(constants.ErrK8sResourceUpdate, "更新PV失败") } return nil diff --git a/internal/k8s/service/pvc_service.go b/internal/k8s/service/pvc_service.go index 7a556ae7..27c3ce57 100644 --- a/internal/k8s/service/pvc_service.go +++ b/internal/k8s/service/pvc_service.go @@ -82,10 +82,10 @@ func NewPVCService(dao dao.ClusterDAO, client client.K8sClient, pvcManager manag } // GetPVCList 获取PVC列表 -func (p *pvcService) GetPVCList(ctx context.Context, req *model.GetPVCListReq) (model.ListResp[*model.K8sPVC], error) { - kubeClient, err := p.client.GetKubeClient(req.ClusterID) +func (s *pvcService) GetPVCList(ctx context.Context, req *model.GetPVCListReq) (model.ListResp[*model.K8sPVC], error) { + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return model.ListResp[*model.K8sPVC]{}, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } @@ -93,7 +93,7 @@ func (p *pvcService) GetPVCList(ctx context.Context, req *model.GetPVCListReq) ( pvcs, err := kubeClient.CoreV1().PersistentVolumeClaims(req.Namespace).List(ctx, listOptions) if err != nil { - p.logger.Error("获取PVC列表失败", + s.logger.Error("获取PVC列表失败", zap.String("namespace", req.Namespace), zap.Error(err)) return model.ListResp[*model.K8sPVC]{}, pkg.NewBusinessError(constants.ErrK8sResourceList, "获取PVC列表失败") @@ -101,7 +101,7 @@ func (p *pvcService) GetPVCList(ctx context.Context, req *model.GetPVCListReq) ( entities := make([]*model.K8sPVC, 0, len(pvcs.Items)) for _, pvc := range pvcs.Items { - entity := p.convertPVCToEntity(&pvc, req.ClusterID) + entity := s.convertPVCToEntity(&pvc, req.ClusterID) entities = append(entities, entity) } // filters @@ -109,7 +109,7 @@ func (p *pvcService) GetPVCList(ctx context.Context, req *model.GetPVCListReq) ( for _, e := range entities { // 过滤状态 if req.Status != "" { - statusStr := p.pvcStatusToString(e.Status) + statusStr := s.pvcStatusToString(e.Status) if !strings.EqualFold(statusStr, req.Status) { continue } @@ -151,16 +151,16 @@ func (p *pvcService) GetPVCList(ctx context.Context, req *model.GetPVCListReq) ( } // GetPVCsByNamespace 根据命名空间获取PVC列表 -func (p *pvcService) GetPVCsByNamespace(ctx context.Context, clusterID int, namespace string) ([]*model.K8sPVC, error) { - kubeClient, err := p.client.GetKubeClient(clusterID) +func (s *pvcService) GetPVCsByNamespace(ctx context.Context, clusterID int, namespace string) ([]*model.K8sPVC, error) { + kubeClient, err := s.client.GetKubeClient(clusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return nil, constants.ErrorK8sClientNotReady } pvcs, err := kubeClient.CoreV1().PersistentVolumeClaims(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - p.logger.Error("获取PVC列表失败", + s.logger.Error("获取PVC列表失败", zap.String("namespace", namespace), zap.Error(err)) return nil, err @@ -168,7 +168,7 @@ func (p *pvcService) GetPVCsByNamespace(ctx context.Context, clusterID int, name entities := make([]*model.K8sPVC, 0, len(pvcs.Items)) for _, pvc := range pvcs.Items { - entity := p.convertPVCToEntity(&pvc, clusterID) + entity := s.convertPVCToEntity(&pvc, clusterID) entities = append(entities, entity) } @@ -176,36 +176,36 @@ func (p *pvcService) GetPVCsByNamespace(ctx context.Context, clusterID int, name } // GetPVC 获取单个PVC详情 -func (p *pvcService) GetPVC(ctx context.Context, req *model.GetPVCDetailsReq) (*model.K8sPVC, error) { - kubeClient, err := p.client.GetKubeClient(req.ClusterID) +func (s *pvcService) GetPVC(ctx context.Context, req *model.GetPVCDetailsReq) (*model.K8sPVC, error) { + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } pvc, err := kubeClient.CoreV1().PersistentVolumeClaims(req.Namespace).Get(ctx, req.Name, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取PVC详情失败", + s.logger.Error("获取PVC详情失败", zap.String("namespace", req.Namespace), zap.String("name", req.Name), zap.Error(err)) return nil, pkg.NewBusinessError(constants.ErrK8sResourceGet, "获取PVC详情失败") } - return p.convertPVCToEntity(pvc, req.ClusterID), nil + return s.convertPVCToEntity(pvc, req.ClusterID), nil } // GetPVCYaml 获取PVC的YAML -func (p *pvcService) GetPVCYaml(ctx context.Context, req *model.GetPVCYamlReq) (*model.K8sYaml, error) { - kubeClient, err := p.client.GetKubeClient(req.ClusterID) +func (s *pvcService) GetPVCYaml(ctx context.Context, req *model.GetPVCYamlReq) (*model.K8sYaml, error) { + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } pvc, err := kubeClient.CoreV1().PersistentVolumeClaims(req.Namespace).Get(ctx, req.Name, metav1.GetOptions{}) if err != nil { - p.logger.Error("获取PVC失败", + s.logger.Error("获取PVC失败", zap.String("namespace", req.Namespace), zap.String("name", req.Name), zap.Error(err)) @@ -214,7 +214,7 @@ func (p *pvcService) GetPVCYaml(ctx context.Context, req *model.GetPVCYamlReq) ( yamlData, err := yaml.Marshal(pvc) if err != nil { - p.logger.Error("序列化PVC为YAML失败", zap.Error(err)) + s.logger.Error("序列化PVC为YAML失败", zap.Error(err)) return nil, pkg.NewBusinessError(constants.ErrK8sResourceOperation, "序列化PVC为YAML失败") } @@ -222,10 +222,10 @@ func (p *pvcService) GetPVCYaml(ctx context.Context, req *model.GetPVCYamlReq) ( } // CreatePVC 创建PVC -func (p *pvcService) CreatePVC(ctx context.Context, req *model.CreatePVCReq) error { - kubeClient, err := p.client.GetKubeClient(req.ClusterID) +func (s *pvcService) CreatePVC(ctx context.Context, req *model.CreatePVCReq) error { + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } @@ -237,24 +237,24 @@ func (p *pvcService) CreatePVC(ctx context.Context, req *model.CreatePVCReq) err _, err = kubeClient.CoreV1().PersistentVolumeClaims(req.Namespace).Create(ctx, pvc, metav1.CreateOptions{}) if err != nil { - p.logger.Error("创建PVC失败", + s.logger.Error("创建PVC失败", zap.String("namespace", req.Namespace), zap.String("name", req.Name), zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sResourceCreate, "创建PVC失败") } - p.logger.Info("成功创建PVC", + s.logger.Info("成功创建PVC", zap.String("namespace", req.Namespace), zap.String("name", req.Name)) return nil } // UpdatePVC 更新PVC -func (p *pvcService) UpdatePVC(ctx context.Context, req *model.UpdatePVCReq) error { - kubeClient, err := p.client.GetKubeClient(req.ClusterID) +func (s *pvcService) UpdatePVC(ctx context.Context, req *model.UpdatePVCReq) error { + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } @@ -266,44 +266,44 @@ func (p *pvcService) UpdatePVC(ctx context.Context, req *model.UpdatePVCReq) err _, err = kubeClient.CoreV1().PersistentVolumeClaims(req.Namespace).Update(ctx, pvc, metav1.UpdateOptions{}) if err != nil { - p.logger.Error("更新PVC失败", + s.logger.Error("更新PVC失败", zap.String("namespace", req.Namespace), zap.String("name", req.Name), zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sResourceUpdate, "更新PVC失败") } - p.logger.Info("成功更新PVC", + s.logger.Info("成功更新PVC", zap.String("namespace", req.Namespace), zap.String("name", req.Name)) return nil } // DeletePVC 删除PVC -func (p *pvcService) DeletePVC(ctx context.Context, req *model.DeletePVCReq) error { - kubeClient, err := p.client.GetKubeClient(req.ClusterID) +func (s *pvcService) DeletePVC(ctx context.Context, req *model.DeletePVCReq) error { + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } err = kubeClient.CoreV1().PersistentVolumeClaims(req.Namespace).Delete(ctx, req.Name, metav1.DeleteOptions{}) if err != nil { - p.logger.Error("删除PVC失败", + s.logger.Error("删除PVC失败", zap.String("namespace", req.Namespace), zap.String("name", req.Name), zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sResourceDelete, "删除PVC失败") } - p.logger.Info("成功删除PVC", + s.logger.Info("成功删除PVC", zap.String("namespace", req.Namespace), zap.String("name", req.Name)) return nil } // convertPVCToEntity 将Kubernetes PVC对象转换为实体模型 -func (p *pvcService) convertPVCToEntity(pvc *corev1.PersistentVolumeClaim, clusterID int) *model.K8sPVC { +func (s *pvcService) convertPVCToEntity(pvc *corev1.PersistentVolumeClaim, clusterID int) *model.K8sPVC { if pvc == nil { return nil } @@ -343,7 +343,7 @@ func (p *pvcService) convertPVCToEntity(pvc *corev1.PersistentVolumeClaim, clust } // 转换状态为枚举类型 - status := p.convertPVCStatus(pvc.Status.Phase) + status := s.convertPVCStatus(pvc.Status.Phase) // 获取选择器 selector := make(map[string]string) @@ -377,7 +377,7 @@ func (p *pvcService) convertPVCToEntity(pvc *corev1.PersistentVolumeClaim, clust } // convertPVCStatus 转换PVC状态为枚举类型 -func (p *pvcService) convertPVCStatus(phase corev1.PersistentVolumeClaimPhase) model.K8sPVCStatus { +func (s *pvcService) convertPVCStatus(phase corev1.PersistentVolumeClaimPhase) model.K8sPVCStatus { switch phase { case corev1.ClaimPending: return model.K8sPVCStatusPending @@ -391,7 +391,7 @@ func (p *pvcService) convertPVCStatus(phase corev1.PersistentVolumeClaimPhase) m } // pvcStatusToString 将PVC状态枚举转换为字符串 -func (p *pvcService) pvcStatusToString(status model.K8sPVCStatus) string { +func (s *pvcService) pvcStatusToString(status model.K8sPVCStatus) string { switch status { case model.K8sPVCStatusPending: return "Pending" @@ -407,7 +407,7 @@ func (p *pvcService) pvcStatusToString(status model.K8sPVCStatus) string { } // CreatePVCByYaml 通过YAML创建PVC -func (p *pvcService) CreatePVCByYaml(ctx context.Context, req *model.CreatePVCByYamlReq) error { +func (s *pvcService) CreatePVCByYaml(ctx context.Context, req *model.CreatePVCByYamlReq) error { if req == nil { return pkg.NewBusinessError(constants.ErrInvalidParam, "通过YAML创建PVC请求不能为空") } @@ -419,23 +419,23 @@ func (p *pvcService) CreatePVCByYaml(ctx context.Context, req *model.CreatePVCBy } pvc, err := k8sutils.YAMLToPVC(req.YAML) if err != nil { - p.logger.Error("解析PVC YAML失败", zap.Error(err)) + s.logger.Error("解析PVC YAML失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sResourceOperation, "解析YAML失败") } // Namespace will be extracted from YAML content if err := k8sutils.ValidatePVC(pvc); err != nil { - p.logger.Error("PVC配置验证失败", zap.Error(err)) + s.logger.Error("PVC配置验证失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrInvalidParam, "PVC配置验证失败") } - if err := p.pvcManager.CreatePVC(ctx, req.ClusterID, pvc.Namespace, pvc); err != nil { - p.logger.Error("创建PVC失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", pvc.Namespace), zap.String("name", pvc.Name)) + if err := s.pvcManager.CreatePVC(ctx, req.ClusterID, pvc.Namespace, pvc); err != nil { + s.logger.Error("创建PVC失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", pvc.Namespace), zap.String("name", pvc.Name)) return pkg.NewBusinessError(constants.ErrK8sResourceCreate, "创建PVC失败") } return nil } // UpdatePVCByYaml 通过YAML更新PVC -func (p *pvcService) UpdatePVCByYaml(ctx context.Context, req *model.UpdatePVCByYamlReq) error { +func (s *pvcService) UpdatePVCByYaml(ctx context.Context, req *model.UpdatePVCByYamlReq) error { if req == nil { return pkg.NewBusinessError(constants.ErrInvalidParam, "通过YAML更新PVC请求不能为空") } @@ -450,7 +450,7 @@ func (p *pvcService) UpdatePVCByYaml(ctx context.Context, req *model.UpdatePVCBy } desired, err := k8sutils.YAMLToPVC(req.YAML) if err != nil { - p.logger.Error("解析PVC YAML失败", zap.Error(err)) + s.logger.Error("解析PVC YAML失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrK8sResourceOperation, "解析YAML失败") } if desired.Name == "" { @@ -463,18 +463,18 @@ func (p *pvcService) UpdatePVCByYaml(ctx context.Context, req *model.UpdatePVCBy return pkg.NewBusinessError(constants.ErrInvalidParam, "请求的名称/命名空间与YAML不一致") } if err := k8sutils.ValidatePVC(desired); err != nil { - p.logger.Error("PVC配置验证失败", zap.Error(err)) + s.logger.Error("PVC配置验证失败", zap.Error(err)) return pkg.NewBusinessError(constants.ErrInvalidParam, "PVC配置验证失败") } - if err := p.pvcManager.UpdatePVC(ctx, req.ClusterID, req.Namespace, desired); err != nil { - p.logger.Error("更新PVC失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name)) + if err := s.pvcManager.UpdatePVC(ctx, req.ClusterID, req.Namespace, desired); err != nil { + s.logger.Error("更新PVC失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name)) return pkg.NewBusinessError(constants.ErrK8sResourceUpdate, "更新PVC失败") } return nil } // ExpandPVC 扩容PVC -func (p *pvcService) ExpandPVC(ctx context.Context, req *model.ExpandPVCReq) error { +func (s *pvcService) ExpandPVC(ctx context.Context, req *model.ExpandPVCReq) error { if req == nil { return pkg.NewBusinessError(constants.ErrInvalidParam, "扩容PVC请求不能为空") } @@ -489,17 +489,17 @@ func (p *pvcService) ExpandPVC(ctx context.Context, req *model.ExpandPVCReq) err } // 使用manager的扩容方法 - if err := p.pvcManager.ExpandPVC(ctx, req.ClusterID, req.Namespace, req.Name, req.NewCapacity); err != nil { - p.logger.Error("扩容PVC失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name)) + if err := s.pvcManager.ExpandPVC(ctx, req.ClusterID, req.Namespace, req.Name, req.NewCapacity); err != nil { + s.logger.Error("扩容PVC失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name)) return pkg.NewBusinessError(constants.ErrK8sResourceUpdate, "扩容PVC失败") } - p.logger.Info("成功扩容PVC", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name), zap.String("newCapacity", req.NewCapacity)) + s.logger.Info("成功扩容PVC", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name), zap.String("newCapacity", req.NewCapacity)) return nil } // GetPVCPods 获取使用PVC的Pod列表 -func (p *pvcService) GetPVCPods(ctx context.Context, req *model.GetPVCPodsReq) (model.ListResp[*model.K8sPod], error) { +func (s *pvcService) GetPVCPods(ctx context.Context, req *model.GetPVCPodsReq) (model.ListResp[*model.K8sPod], error) { if req == nil { return model.ListResp[*model.K8sPod]{}, pkg.NewBusinessError(constants.ErrInvalidParam, "获取PVC Pods请求不能为空") } @@ -510,16 +510,16 @@ func (p *pvcService) GetPVCPods(ctx context.Context, req *model.GetPVCPodsReq) ( return model.ListResp[*model.K8sPod]{}, pkg.NewBusinessError(constants.ErrInvalidParam, "命名空间和PVC名称不能为空") } - kubeClient, err := p.client.GetKubeClient(req.ClusterID) + kubeClient, err := s.client.GetKubeClient(req.ClusterID) if err != nil { - p.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) + s.logger.Error("获取Kubernetes客户端失败", zap.Error(err)) return model.ListResp[*model.K8sPod]{}, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") } // 获取所有Pod,然后过滤使用指定PVC的Pod pods, err := kubeClient.CoreV1().Pods(req.Namespace).List(ctx, metav1.ListOptions{}) if err != nil { - p.logger.Error("获取Pod列表失败", + s.logger.Error("获取Pod列表失败", zap.String("namespace", req.Namespace), zap.Error(err)) return model.ListResp[*model.K8sPod]{}, pkg.NewBusinessError(constants.ErrK8sResourceList, "获取Pod列表失败") @@ -527,24 +527,24 @@ func (p *pvcService) GetPVCPods(ctx context.Context, req *model.GetPVCPodsReq) ( // 过滤使用指定PVC的Pod var filteredPods []*model.K8sPod - p.logger.Info("开始过滤使用指定PVC的Pod", + s.logger.Info("开始过滤使用指定PVC的Pod", zap.String("pvc_name", req.Name), zap.String("namespace", req.Namespace), zap.Int("total_pods", len(pods.Items))) for _, pod := range pods.Items { - if p.podUsesPVC(&pod, req.Name) { - p.logger.Info("找到使用PVC的Pod", + if s.podUsesPVC(&pod, req.Name) { + s.logger.Info("找到使用PVC的Pod", zap.String("pod_name", pod.Name), zap.String("pvc_name", req.Name)) - k8sPod := p.convertPodToEntity(&pod, req.ClusterID) + k8sPod := s.convertPodToEntity(&pod, req.ClusterID) if k8sPod != nil { filteredPods = append(filteredPods, k8sPod) } } } - p.logger.Info("PVC关联Pod查询完成", + s.logger.Info("PVC关联Pod查询完成", zap.String("pvc_name", req.Name), zap.Int("filtered_pods_count", len(filteredPods))) @@ -555,7 +555,7 @@ func (p *pvcService) GetPVCPods(ctx context.Context, req *model.GetPVCPodsReq) ( } // podUsesPVC 检查Pod是否使用指定的PVC -func (p *pvcService) podUsesPVC(pod *corev1.Pod, pvcName string) bool { +func (s *pvcService) podUsesPVC(pod *corev1.Pod, pvcName string) bool { for _, volume := range pod.Spec.Volumes { if volume.PersistentVolumeClaim != nil && volume.PersistentVolumeClaim.ClaimName == pvcName { return true @@ -565,7 +565,7 @@ func (p *pvcService) podUsesPVC(pod *corev1.Pod, pvcName string) bool { } // convertPodToEntity 将Kubernetes Pod对象转换为实体模型 -func (p *pvcService) convertPodToEntity(pod *corev1.Pod, clusterID int) *model.K8sPod { +func (s *pvcService) convertPodToEntity(pod *corev1.Pod, clusterID int) *model.K8sPod { if pod == nil { return nil } diff --git a/internal/k8s/service/rbac_service.go b/internal/k8s/service/rbac_service.go index c1352197..cee7e692 100644 --- a/internal/k8s/service/rbac_service.go +++ b/internal/k8s/service/rbac_service.go @@ -67,7 +67,7 @@ func NewRBACService( } // AnalyzeRBACPermissions 分析用户的有效权限 -func (r *rbacService) AnalyzeRBACPermissions(ctx context.Context, req *model.AnalyzeRBACPermissionsReq) (*model.EffectivePermissions, error) { +func (s *rbacService) AnalyzeRBACPermissions(ctx context.Context, req *model.AnalyzeRBACPermissionsReq) (*model.EffectivePermissions, error) { if req == nil { return nil, fmt.Errorf("分析RBAC权限请求不能为空") } @@ -79,7 +79,7 @@ func (r *rbacService) AnalyzeRBACPermissions(ctx context.Context, req *model.Ana Sources: []model.PermissionSource{}, } - r.logger.Info("开始分析RBAC权限", + s.logger.Info("开始分析RBAC权限", zap.Int("cluster_id", req.ClusterID), zap.String("subject_kind", req.Subject.Kind), zap.String("subject_name", req.Subject.Name)) @@ -90,12 +90,12 @@ func (r *rbacService) AnalyzeRBACPermissions(ctx context.Context, req *model.Ana // 3. 分析对应的Role和ClusterRole权限 // 4. 汇总有效权限 - r.logger.Info("RBAC权限分析完成", zap.Int("cluster_id", req.ClusterID)) + s.logger.Info("RBAC权限分析完成", zap.Int("cluster_id", req.ClusterID)) return result, nil } // CheckRBACPermission 检查特定权限 -func (r *rbacService) CheckRBACPermission(ctx context.Context, req *model.CheckRBACPermissionReq) (*model.PermissionCheckResult, error) { +func (s *rbacService) CheckRBACPermission(ctx context.Context, req *model.CheckRBACPermissionReq) (*model.PermissionCheckResult, error) { if req == nil { return nil, fmt.Errorf("检查RBAC权限请求不能为空") } @@ -104,7 +104,7 @@ func (r *rbacService) CheckRBACPermission(ctx context.Context, req *model.CheckR Allowed: false, } - r.logger.Debug("检查RBAC权限", + s.logger.Debug("检查RBAC权限", zap.Int("cluster_id", req.ClusterID), zap.String("subject", fmt.Sprintf("%s/%s", req.Subject.Kind, req.Subject.Name)), zap.String("resource", req.Resource), diff --git a/internal/k8s/service/resource_service.go b/internal/k8s/service/resource_service.go index 67e0f26c..9644cb4b 100644 --- a/internal/k8s/service/resource_service.go +++ b/internal/k8s/service/resource_service.go @@ -84,9 +84,9 @@ package service // // GetResourceOverview 获取集群资源概览 // func (r *resourceService) GetResourceOverview(ctx context.Context, clusterID int) (*model.ResourceOverview, error) { // // 获取集群信息 -// cluster, err := r.dao.GetClusterByID(ctx, clusterID) +// cluster, err := s.dao.GetClusterByID(ctx, clusterID) // if err != nil { -// r.logger.Error("获取集群信息失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取集群信息失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrInvalidParam, "集群不存在") // } @@ -95,9 +95,9 @@ package service // } // // 获取k8s客户端 -// kubeClient, err := r.client.GetKubeClient(clusterID) +// kubeClient, err := s.client.GetKubeClient(clusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } @@ -144,7 +144,7 @@ package service // } // if len(errors) > 0 { -// r.logger.Warn("部分统计信息收集失败", zap.Int("errorCount", len(errors))) +// s.logger.Warn("部分统计信息收集失败", zap.Int("errorCount", len(errors))) // // 不返回错误,使用部分数据 // } @@ -188,18 +188,18 @@ package service // }, // }, // HealthStatus: model.ClusterHealth{ -// OverallStatus: r.calculateOverallHealthStatus(stats), -// Score: r.calculateHealthScore(stats).Score, +// OverallStatus: s.calculateOverallHealthStatus(stats), +// Score: s.calculateHealthScore(stats).Score, // }, // } // // 获取Top命名空间 -// overview.TopNamespaces = r.buildTopNamespaces(stats.NamespaceStats.TopNamespaces, stats) +// overview.TopNamespaces = s.buildTopNamespaces(stats.NamespaceStats.TopNamespaces, stats) // // 获取最近事件 -// overview.RecentEvents = r.buildRecentEvents(ctx, kubeClient, 10) +// overview.RecentEvents = s.buildRecentEvents(ctx, kubeClient, 10) -// r.logger.Info("成功获取集群资源概览", +// s.logger.Info("成功获取集群资源概览", // zap.Int("clusterID", clusterID), // zap.String("clusterName", cluster.Name)) @@ -209,16 +209,16 @@ package service // // GetResourceStatistics 获取资源统计信息 // func (r *resourceService) GetResourceStatistics(ctx context.Context, clusterID int) (*model.ClusterStats, error) { // // 获取集群信息 -// cluster, err := r.dao.GetClusterByID(ctx, clusterID) +// cluster, err := s.dao.GetClusterByID(ctx, clusterID) // if err != nil || cluster == nil { -// r.logger.Error("获取集群信息失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取集群信息失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrInvalidParam, "集群不存在") // } // // 获取k8s客户端 -// kubeClient, err := r.client.GetKubeClient(clusterID) +// kubeClient, err := s.client.GetKubeClient(clusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } @@ -269,16 +269,16 @@ package service // for i := 0; i < 8; i++ { // if err := <-errChan; err != nil { // errors = append(errors, err) -// r.logger.Warn("统计信息收集出错", zap.Error(err)) +// s.logger.Warn("统计信息收集出错", zap.Error(err)) // } // } // if len(errors) > 0 { -// r.logger.Warn("部分统计信息收集失败", zap.Int("errorCount", len(errors))) +// s.logger.Warn("部分统计信息收集失败", zap.Int("errorCount", len(errors))) // // 继续返回部分数据 // } -// r.logger.Info("成功获取集群资源统计", +// s.logger.Info("成功获取集群资源统计", // zap.Int("clusterID", clusterID), // zap.String("clusterName", cluster.Name)) @@ -288,9 +288,9 @@ package service // // GetResourceDistribution 获取资源分布信息 // func (r *resourceService) GetResourceDistribution(ctx context.Context, clusterID int) (*model.ResourceDistribution, error) { // // 获取k8s客户端 -// kubeClient, err := r.client.GetKubeClient(clusterID) +// kubeClient, err := s.client.GetKubeClient(clusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } @@ -299,33 +299,33 @@ package service // } // // 获取节点分布 -// nodeDistrib, err := r.getNodeDistribution(ctx, kubeClient) +// nodeDistrib, err := s.getNodeDistribution(ctx, kubeClient) // if err != nil { -// r.logger.Warn("获取节点分布失败", zap.Error(err)) +// s.logger.Warn("获取节点分布失败", zap.Error(err)) // } else { // distribution.NodeDistribution = nodeDistrib // } // // 获取命名空间分布 -// nsDistrib, err := r.getNamespaceDistribution(ctx, kubeClient) +// nsDistrib, err := s.getNamespaceDistribution(ctx, kubeClient) // if err != nil { -// r.logger.Warn("获取命名空间分布失败", zap.Error(err)) +// s.logger.Warn("获取命名空间分布失败", zap.Error(err)) // } else { // distribution.NSDistribution = nsDistrib // } // // 获取工作负载分布 -// workloadDistrib, err := r.getDetailedWorkloadDistribution(ctx, kubeClient) +// workloadDistrib, err := s.getDetailedWorkloadDistribution(ctx, kubeClient) // if err != nil { -// r.logger.Warn("获取工作负载分布失败", zap.Error(err)) +// s.logger.Warn("获取工作负载分布失败", zap.Error(err)) // } else { // distribution.WorkloadDistrib = *workloadDistrib // } // // 生成资源分配图表 -// distribution.ResourceAllocation = r.generateResourceAllocationChart(nodeDistrib, nsDistrib) +// distribution.ResourceAllocation = s.generateResourceAllocationChart(nodeDistrib, nsDistrib) -// r.logger.Info("成功获取资源分布信息", zap.Int("clusterID", clusterID)) +// s.logger.Info("成功获取资源分布信息", zap.Int("clusterID", clusterID)) // return distribution, nil // } @@ -337,15 +337,15 @@ package service // } // // 解析时间周期 -// duration, err := r.parsePeriod(req.Period) +// duration, err := s.parsePeriod(req.Period) // if err != nil { // return nil, pkg.NewBusinessError(constants.ErrInvalidParam, "无效的时间周期参数") // } // // 获取k8s客户端验证集群存在 -// _, err = r.client.GetKubeClient(req.ClusterID) +// _, err = s.client.GetKubeClient(req.ClusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", req.ClusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", req.ClusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } @@ -357,25 +357,25 @@ package service // Start: time.Now().Add(-duration), // End: time.Now(), // }, -// CPUTrend: r.generateMockTrendData("CPU", duration), -// MemoryTrend: r.generateMockTrendData("Memory", duration), -// PodTrend: r.generateMockTrendData("Pod", duration), -// NodeTrend: r.generateMockTrendData("Node", duration), +// CPUTrend: s.generateMockTrendData("CPU", duration), +// MemoryTrend: s.generateMockTrendData("Memory", duration), +// PodTrend: s.generateMockTrendData("Pod", duration), +// NodeTrend: s.generateMockTrendData("Node", duration), // } // // 生成预测数据 -// trend.Predictions = r.generateResourcePredictions() +// trend.Predictions = s.generateResourcePredictions() -// r.logger.Info("成功获取资源趋势", zap.Int("clusterID", req.ClusterID), zap.String("period", req.Period)) +// s.logger.Info("成功获取资源趋势", zap.Int("clusterID", req.ClusterID), zap.String("period", req.Period)) // return trend, nil // } // // GetResourceUtilization 获取资源利用率 // func (r *resourceService) GetResourceUtilization(ctx context.Context, clusterID int) (*model.ResourceUtilization, error) { // // 获取k8s客户端 -// kubeClient, err := r.client.GetKubeClient(clusterID) +// kubeClient, err := s.client.GetKubeClient(clusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } @@ -399,37 +399,37 @@ package service // } // // 获取节点利用率 -// nodeUtils, err := r.getNodeUtilizations(ctx, kubeClient) +// nodeUtils, err := s.getNodeUtilizations(ctx, kubeClient) // if err != nil { -// r.logger.Warn("获取节点利用率失败", zap.Error(err)) +// s.logger.Warn("获取节点利用率失败", zap.Error(err)) // } else { // utilization.NodeUtils = nodeUtils // } // // 获取命名空间利用率 -// nsUtils, err := r.getNamespaceUtilizations(ctx, kubeClient) +// nsUtils, err := s.getNamespaceUtilizations(ctx, kubeClient) // if err != nil { -// r.logger.Warn("获取命名空间利用率失败", zap.Error(err)) +// s.logger.Warn("获取命名空间利用率失败", zap.Error(err)) // } else { // utilization.NSUtils = nsUtils // } // // 生成利用率图表 -// utilization.UtilChart = r.generateUtilizationChart(nodeUtils, nsUtils) +// utilization.UtilChart = s.generateUtilizationChart(nodeUtils, nsUtils) // // 生成优化建议 -// utilization.Recommendations = r.generateUtilizationAdvice(utilization.OverallUtil, nodeUtils) +// utilization.Recommendations = s.generateUtilizationAdvice(utilization.OverallUtil, nodeUtils) -// r.logger.Info("成功获取资源利用率", zap.Int("clusterID", clusterID)) +// s.logger.Info("成功获取资源利用率", zap.Int("clusterID", clusterID)) // return utilization, nil // } // // GetResourceHealth 获取资源健康状态 // func (r *resourceService) GetResourceHealth(ctx context.Context, clusterID int) (*model.ResourceHealth, error) { // // 获取k8s客户端 -// kubeClient, err := r.client.GetKubeClient(clusterID) +// kubeClient, err := s.client.GetKubeClient(clusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } @@ -444,61 +444,61 @@ package service // utils.CollectEventStats(ctx, kubeClient, stats) // // 计算总体健康评分 -// health.OverallHealth = r.calculateHealthScore(stats) +// health.OverallHealth = s.calculateHealthScore(stats) // // 获取组件健康状态 -// components, err := r.getComponentHealth(ctx, kubeClient) +// components, err := s.getComponentHealth(ctx, kubeClient) // if err != nil { -// r.logger.Warn("获取组件健康状态失败", zap.Error(err)) +// s.logger.Warn("获取组件健康状态失败", zap.Error(err)) // } else { // health.ComponentHealth = components // } // // 识别资源问题 -// health.ResourceIssues = r.identifyResourceIssues(ctx, kubeClient, stats) +// health.ResourceIssues = s.identifyResourceIssues(ctx, kubeClient, stats) // // 生成健康趋势(模拟) -// health.HealthTrend = r.generateHealthTrend() +// health.HealthTrend = s.generateHealthTrend() // // 生成可操作警报 -// health.ActionableAlerts = r.generateActionableAlerts(health.ResourceIssues) +// health.ActionableAlerts = s.generateActionableAlerts(health.ResourceIssues) -// r.logger.Info("成功获取资源健康状态", zap.Int("clusterID", clusterID)) +// s.logger.Info("成功获取资源健康状态", zap.Int("clusterID", clusterID)) // return health, nil // } // // GetWorkloadDistribution 获取工作负载分布 // func (r *resourceService) GetWorkloadDistribution(ctx context.Context, clusterID int) (*model.WorkloadDistribution, error) { // // 获取k8s客户端 -// kubeClient, err := r.client.GetKubeClient(clusterID) +// kubeClient, err := s.client.GetKubeClient(clusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } -// return r.getDetailedWorkloadDistribution(ctx, kubeClient) +// return s.getDetailedWorkloadDistribution(ctx, kubeClient) // } // // GetNamespaceResources 获取命名空间资源信息 // func (r *resourceService) GetNamespaceResources(ctx context.Context, clusterID int) ([]*model.NamespaceUsage, error) { // // 获取k8s客户端 -// kubeClient, err := r.client.GetKubeClient(clusterID) +// kubeClient, err := s.client.GetKubeClient(clusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } // // 获取所有命名空间 // namespaces, err := kubeClient.CoreV1().Namespaces().List(ctx, metav1.ListOptions{}) // if err != nil { -// r.logger.Error("获取命名空间列表失败", zap.Error(err)) +// s.logger.Error("获取命名空间列表失败", zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sResourceList, "获取命名空间列表失败") // } // // 获取所有Pod用于统计 // pods, err := kubeClient.CoreV1().Pods("").List(ctx, metav1.ListOptions{}) // if err != nil { -// r.logger.Error("获取Pod列表失败", zap.Error(err)) +// s.logger.Error("获取Pod列表失败", zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sResourceList, "获取Pod列表失败") // } @@ -539,7 +539,7 @@ package service // return result[i].PodCount > result[j].PodCount // }) -// r.logger.Info("成功获取命名空间资源信息", +// s.logger.Info("成功获取命名空间资源信息", // zap.Int("clusterID", clusterID), // zap.Int("namespaceCount", len(result))) @@ -549,9 +549,9 @@ package service // // GetStorageOverview 获取存储概览 // func (r *resourceService) GetStorageOverview(ctx context.Context, clusterID int) (*model.StorageStats, error) { // // 获取k8s客户端 -// kubeClient, err := r.client.GetKubeClient(clusterID) +// kubeClient, err := s.client.GetKubeClient(clusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } @@ -559,20 +559,20 @@ package service // stats := &model.ClusterStats{} // err = utils.CollectStorageStats(ctx, kubeClient, stats) // if err != nil { -// r.logger.Error("收集存储统计信息失败", zap.Error(err)) +// s.logger.Error("收集存储统计信息失败", zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sResourceOperation, "获取存储信息失败") // } -// r.logger.Info("成功获取存储概览", zap.Int("clusterID", clusterID)) +// s.logger.Info("成功获取存储概览", zap.Int("clusterID", clusterID)) // return &stats.StorageStats, nil // } // // GetNetworkOverview 获取网络概览 // func (r *resourceService) GetNetworkOverview(ctx context.Context, clusterID int) (*model.NetworkStats, error) { // // 获取k8s客户端 -// kubeClient, err := r.client.GetKubeClient(clusterID) +// kubeClient, err := s.client.GetKubeClient(clusterID) // if err != nil { -// r.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) +// s.logger.Error("获取Kubernetes客户端失败", zap.Int("clusterID", clusterID), zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sClientInit, "无法连接到Kubernetes集群") // } @@ -580,11 +580,11 @@ package service // stats := &model.ClusterStats{} // err = utils.CollectNetworkStats(ctx, kubeClient, stats) // if err != nil { -// r.logger.Error("收集网络统计信息失败", zap.Error(err)) +// s.logger.Error("收集网络统计信息失败", zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrK8sResourceOperation, "获取网络信息失败") // } -// r.logger.Info("成功获取网络概览", zap.Int("clusterID", clusterID)) +// s.logger.Info("成功获取网络概览", zap.Int("clusterID", clusterID)) // return &stats.NetworkStats, nil // } @@ -604,16 +604,16 @@ package service // for _, clusterID := range clusterIDs { // // 获取集群信息 -// cluster, err := r.dao.GetClusterByID(ctx, clusterID) +// cluster, err := s.dao.GetClusterByID(ctx, clusterID) // if err != nil || cluster == nil { -// r.logger.Warn("获取集群信息失败", zap.Int("clusterID", clusterID)) +// s.logger.Warn("获取集群信息失败", zap.Int("clusterID", clusterID)) // continue // } // // 获取集群统计信息 -// stats, err := r.GetResourceStatistics(ctx, clusterID) +// stats, err := s.GetResourceStatistics(ctx, clusterID) // if err != nil { -// r.logger.Warn("获取集群统计失败", zap.Int("clusterID", clusterID)) +// s.logger.Warn("获取集群统计失败", zap.Int("clusterID", clusterID)) // continue // } @@ -635,18 +635,18 @@ package service // }) // } -// r.logger.Info("成功对比集群资源", zap.Int("clusterCount", len(comparison.ClusterNames))) +// s.logger.Info("成功对比集群资源", zap.Int("clusterCount", len(comparison.ClusterNames))) // return comparison, nil // } // // GetAllClustersSummary 获取所有集群资源汇总 // func (r *resourceService) GetAllClustersSummary(ctx context.Context) (*model.AllClustersSummary, error) { // // 获取所有集群 -// clusters, total, err := r.dao.GetClusterList(ctx, &model.ListClustersReq{ +// clusters, total, err := s.dao.GetClusterList(ctx, &model.ListClustersReq{ // ListReq: model.ListReq{Page: 1, Size: 100}, // 假设最多100个集群 // }) // if err != nil { -// r.logger.Error("获取集群列表失败", zap.Error(err)) +// s.logger.Error("获取集群列表失败", zap.Error(err)) // return nil, pkg.NewBusinessError(constants.ErrInvalidParam, "获取集群列表失败") // } @@ -674,15 +674,15 @@ package service // for _, cluster := range clusters { // // 获取集群统计 -// stats, err := r.GetResourceStatistics(ctx, cluster.ID) +// stats, err := s.GetResourceStatistics(ctx, cluster.ID) // if err != nil { -// r.logger.Warn("获取集群统计失败", zap.Int("clusterID", cluster.ID)) +// s.logger.Warn("获取集群统计失败", zap.Int("clusterID", cluster.ID)) // unhealthyCount++ // continue // } // // 计算健康状态 -// healthScore := r.calculateHealthScore(stats) +// healthScore := s.calculateHealthScore(stats) // if healthScore.Score > 70 { // healthyCount++ // } else { @@ -736,7 +736,7 @@ package service // summary.ResourceComparison = *comparison -// r.logger.Info("成功获取所有集群汇总", +// s.logger.Info("成功获取所有集群汇总", // zap.Int("totalClusters", summary.TotalClusters), // zap.Int("healthyClusters", summary.HealthyClusters)) @@ -755,7 +755,7 @@ package service // // calculateOverallHealthStatus 计算总体健康状态 // func (r *resourceService) calculateOverallHealthStatus(stats *model.ClusterStats) string { -// score := r.calculateHealthScore(stats).Score +// score := s.calculateHealthScore(stats).Score // switch { // case score >= 90: // return "excellent" diff --git a/internal/k8s/service/role_service.go b/internal/k8s/service/role_service.go index 2efc3e12..62279a99 100644 --- a/internal/k8s/service/role_service.go +++ b/internal/k8s/service/role_service.go @@ -67,7 +67,7 @@ func NewRoleService(roleManager manager.RoleManager, logger *zap.Logger) RoleSer } // GetRoleList 获取Role列表 -func (r *roleService) GetRoleList(ctx context.Context, req *model.GetRoleListReq) (model.ListResp[*model.K8sRole], error) { +func (s *roleService) GetRoleList(ctx context.Context, req *model.GetRoleListReq) (model.ListResp[*model.K8sRole], error) { if req == nil { return model.ListResp[*model.K8sRole]{}, fmt.Errorf("获取Role列表请求不能为空") } @@ -76,9 +76,9 @@ func (r *roleService) GetRoleList(ctx context.Context, req *model.GetRoleListReq return model.ListResp[*model.K8sRole]{}, fmt.Errorf("集群ID不能为空") } - roleList, err := r.roleManager.GetRoleList(ctx, req.ClusterID, req.Namespace, metav1.ListOptions{}) + roleList, err := s.roleManager.GetRoleList(ctx, req.ClusterID, req.Namespace, metav1.ListOptions{}) if err != nil { - r.logger.Error("GetRoleList: 获取Role列表失败", + s.logger.Error("GetRoleList: 获取Role列表失败", zap.Error(err), zap.Int("clusterID", req.ClusterID)) return model.ListResp[*model.K8sRole]{}, fmt.Errorf("获取Role列表失败: %w", err) @@ -125,7 +125,7 @@ func (r *roleService) GetRoleList(ctx context.Context, req *model.GetRoleListReq } // GetRoleDetails 获取Role详情 -func (r *roleService) GetRoleDetails(ctx context.Context, req *model.GetRoleDetailsReq) (*model.K8sRole, error) { +func (s *roleService) GetRoleDetails(ctx context.Context, req *model.GetRoleDetailsReq) (*model.K8sRole, error) { if req == nil { return nil, fmt.Errorf("获取Role详情请求不能为空") } @@ -142,9 +142,9 @@ func (r *roleService) GetRoleDetails(ctx context.Context, req *model.GetRoleDeta return nil, fmt.Errorf("命名空间不能为空") } - role, err := r.roleManager.GetRole(ctx, req.ClusterID, req.Namespace, req.Name) + role, err := s.roleManager.GetRole(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { - r.logger.Error("GetRoleDetails: 获取Role失败", + s.logger.Error("GetRoleDetails: 获取Role失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), @@ -157,7 +157,7 @@ func (r *roleService) GetRoleDetails(ctx context.Context, req *model.GetRoleDeta } // CreateRole 创建Role -func (r *roleService) CreateRole(ctx context.Context, req *model.CreateRoleReq) error { +func (s *roleService) CreateRole(ctx context.Context, req *model.CreateRoleReq) error { // 构建 Role 对象 role := &rbacv1.Role{ ObjectMeta: metav1.ObjectMeta{ @@ -170,7 +170,7 @@ func (r *roleService) CreateRole(ctx context.Context, req *model.CreateRoleReq) } // 使用 RoleManager 创建 Role - err := r.roleManager.CreateRole(ctx, req.ClusterID, req.Namespace, role) + err := s.roleManager.CreateRole(ctx, req.ClusterID, req.Namespace, role) if err != nil { return fmt.Errorf("failed to create role: %w", err) } @@ -179,9 +179,9 @@ func (r *roleService) CreateRole(ctx context.Context, req *model.CreateRoleReq) } // UpdateRole 更新Role -func (r *roleService) UpdateRole(ctx context.Context, req *model.UpdateRoleReq) error { +func (s *roleService) UpdateRole(ctx context.Context, req *model.UpdateRoleReq) error { // 获取现有Role - existingRole, err := r.roleManager.GetRole(ctx, req.ClusterID, req.Namespace, req.Name) + existingRole, err := s.roleManager.GetRole(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { return fmt.Errorf("failed to get existing role: %w", err) } @@ -192,7 +192,7 @@ func (r *roleService) UpdateRole(ctx context.Context, req *model.UpdateRoleReq) existingRole.Rules = utils.ConvertPolicyRulesToK8s(req.Rules) // 使用 RoleManager 更新 Role - err = r.roleManager.UpdateRole(ctx, req.ClusterID, req.Namespace, existingRole) + err = s.roleManager.UpdateRole(ctx, req.ClusterID, req.Namespace, existingRole) if err != nil { return fmt.Errorf("failed to update role: %w", err) } @@ -201,9 +201,9 @@ func (r *roleService) UpdateRole(ctx context.Context, req *model.UpdateRoleReq) } // DeleteRole 删除Role -func (r *roleService) DeleteRole(ctx context.Context, req *model.DeleteRoleReq) error { +func (s *roleService) DeleteRole(ctx context.Context, req *model.DeleteRoleReq) error { // 使用 RoleManager 删除 Role - err := r.roleManager.DeleteRole(ctx, req.ClusterID, req.Namespace, req.Name, metav1.DeleteOptions{}) + err := s.roleManager.DeleteRole(ctx, req.ClusterID, req.Namespace, req.Name, metav1.DeleteOptions{}) if err != nil { return fmt.Errorf("failed to delete role: %w", err) } @@ -212,7 +212,7 @@ func (r *roleService) DeleteRole(ctx context.Context, req *model.DeleteRoleReq) } // CreateRoleByYaml 通过YAML创建Role -func (r *roleService) CreateRoleByYaml(ctx context.Context, req *model.CreateRoleByYamlReq) error { +func (s *roleService) CreateRoleByYaml(ctx context.Context, req *model.CreateRoleByYamlReq) error { role, err := utils.YAMLToRole(req.YamlContent) if err != nil { return fmt.Errorf("failed to parse yaml: %w", err) @@ -222,7 +222,7 @@ func (r *roleService) CreateRoleByYaml(ctx context.Context, req *model.CreateRol // Namespace will be extracted from YAML content // 使用 RoleManager 创建 Role - err = r.roleManager.CreateRole(ctx, req.ClusterID, role.Namespace, role) + err = s.roleManager.CreateRole(ctx, req.ClusterID, role.Namespace, role) if err != nil { return fmt.Errorf("failed to create role: %w", err) } @@ -231,13 +231,13 @@ func (r *roleService) CreateRoleByYaml(ctx context.Context, req *model.CreateRol } // GetRoleYaml 获取Role YAML -func (r *roleService) GetRoleYaml(ctx context.Context, req *model.GetRoleYamlReq) (*model.K8sYaml, error) { +func (s *roleService) GetRoleYaml(ctx context.Context, req *model.GetRoleYamlReq) (*model.K8sYaml, error) { if req == nil { return nil, fmt.Errorf("获取Role YAML请求不能为空") } // 获取 Role - role, err := r.roleManager.GetRole(ctx, req.ClusterID, req.Namespace, req.Name) + role, err := s.roleManager.GetRole(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { return nil, fmt.Errorf("failed to get role: %w", err) } @@ -253,7 +253,7 @@ func (r *roleService) GetRoleYaml(ctx context.Context, req *model.GetRoleYamlReq } // UpdateRoleYaml 更新Role YAML -func (r *roleService) UpdateRoleYaml(ctx context.Context, req *model.UpdateRoleByYamlReq) error { +func (s *roleService) UpdateRoleYaml(ctx context.Context, req *model.UpdateRoleByYamlReq) error { if req == nil { return fmt.Errorf("更新Role YAML请求不能为空") } @@ -268,7 +268,7 @@ func (r *roleService) UpdateRoleYaml(ctx context.Context, req *model.UpdateRoleB role.Namespace = req.Namespace // 获取现有Role以保持ResourceVersion - existingRole, err := r.roleManager.GetRole(ctx, req.ClusterID, req.Namespace, req.Name) + existingRole, err := s.roleManager.GetRole(ctx, req.ClusterID, req.Namespace, req.Name) if err != nil { return fmt.Errorf("failed to get existing role: %w", err) } @@ -277,7 +277,7 @@ func (r *roleService) UpdateRoleYaml(ctx context.Context, req *model.UpdateRoleB role.UID = existingRole.UID // 使用 RoleManager 更新 Role - err = r.roleManager.UpdateRole(ctx, req.ClusterID, req.Namespace, role) + err = s.roleManager.UpdateRole(ctx, req.ClusterID, req.Namespace, role) if err != nil { return fmt.Errorf("failed to update role: %w", err) } diff --git a/internal/k8s/service/taint_service.go b/internal/k8s/service/taint_service.go index 677c660b..66f3ed04 100644 --- a/internal/k8s/service/taint_service.go +++ b/internal/k8s/service/taint_service.go @@ -58,7 +58,7 @@ func NewTaintService(manager manager.TaintManager, logger *zap.Logger) TaintServ } // AddNodeTaint 添加节点污点 -func (t *taintService) AddNodeTaint(ctx context.Context, req *model.AddNodeTaintsReq) error { +func (s *taintService) AddNodeTaint(ctx context.Context, req *model.AddNodeTaintsReq) error { if req.ClusterID <= 0 { return fmt.Errorf("集群ID不能为空") } @@ -72,15 +72,15 @@ func (t *taintService) AddNodeTaint(ctx context.Context, req *model.AddNodeTaint // 构建污点YAML yamlData, err := utils.BuildTaintYamlFromK8sTaints(req.Taints) if err != nil { - t.logger.Error("构建污点YAML失败", + s.logger.Error("构建污点YAML失败", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Error(err)) return fmt.Errorf("构建污点YAML失败: %w", err) } - if err := t.manager.AddOrUpdateNodeTaint(ctx, req.ClusterID, req.NodeName, yamlData, manager.ModTypeAdd); err != nil { - t.logger.Error("添加节点污点失败", + if err := s.manager.AddOrUpdateNodeTaint(ctx, req.ClusterID, req.NodeName, yamlData, manager.ModTypeAdd); err != nil { + s.logger.Error("添加节点污点失败", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Error(err)) @@ -91,7 +91,7 @@ func (t *taintService) AddNodeTaint(ctx context.Context, req *model.AddNodeTaint } // DeleteNodeTaint 删除节点污点 -func (t *taintService) DeleteNodeTaint(ctx context.Context, req *model.DeleteNodeTaintsReq) error { +func (s *taintService) DeleteNodeTaint(ctx context.Context, req *model.DeleteNodeTaintsReq) error { if req.ClusterID <= 0 { return fmt.Errorf("集群ID不能为空") } @@ -102,8 +102,8 @@ func (t *taintService) DeleteNodeTaint(ctx context.Context, req *model.DeleteNod return fmt.Errorf("污点键列表不能为空") } - if err := t.manager.DeleteNodeTaintsByKeys(ctx, req.ClusterID, req.NodeName, req.TaintKeys); err != nil { - t.logger.Error("删除节点污点失败", + if err := s.manager.DeleteNodeTaintsByKeys(ctx, req.ClusterID, req.NodeName, req.TaintKeys); err != nil { + s.logger.Error("删除节点污点失败", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Strings("taintKeys", req.TaintKeys), @@ -115,7 +115,7 @@ func (t *taintService) DeleteNodeTaint(ctx context.Context, req *model.DeleteNod } // SwitchNodeSchedule 切换节点调度状态 -func (t *taintService) SwitchNodeSchedule(ctx context.Context, req *model.SwitchNodeScheduleReq) error { +func (s *taintService) SwitchNodeSchedule(ctx context.Context, req *model.SwitchNodeScheduleReq) error { if req.ClusterID <= 0 { return fmt.Errorf("集群ID不能为空") } @@ -123,8 +123,8 @@ func (t *taintService) SwitchNodeSchedule(ctx context.Context, req *model.Switch return fmt.Errorf("节点名称不能为空") } - if err := t.manager.EnableSwitchNode(ctx, req.ClusterID, req.NodeName, req.Enable == 1); err != nil { - t.logger.Error("切换节点调度状态失败", + if err := s.manager.EnableSwitchNode(ctx, req.ClusterID, req.NodeName, req.Enable == 1); err != nil { + s.logger.Error("切换节点调度状态失败", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Bool("enable", req.Enable == 1), @@ -136,7 +136,7 @@ func (t *taintService) SwitchNodeSchedule(ctx context.Context, req *model.Switch } // AddOrUpdateNodeTaint 添加或更新节点污点 -func (t *taintService) AddOrUpdateNodeTaint(ctx context.Context, req *model.AddNodeTaintsReq) error { +func (s *taintService) AddOrUpdateNodeTaint(ctx context.Context, req *model.AddNodeTaintsReq) error { if req.ClusterID <= 0 { return fmt.Errorf("集群ID不能为空") } @@ -150,15 +150,15 @@ func (t *taintService) AddOrUpdateNodeTaint(ctx context.Context, req *model.AddN // 构建污点YAML yamlData, err := utils.BuildTaintYamlFromK8sTaints(req.Taints) if err != nil { - t.logger.Error("构建污点YAML失败", + s.logger.Error("构建污点YAML失败", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Error(err)) return fmt.Errorf("构建污点YAML失败: %w", err) } - if err := t.manager.AddOrUpdateNodeTaint(ctx, req.ClusterID, req.NodeName, yamlData, manager.ModTypeUpdate); err != nil { - t.logger.Error("添加或更新节点污点失败", + if err := s.manager.AddOrUpdateNodeTaint(ctx, req.ClusterID, req.NodeName, yamlData, manager.ModTypeUpdate); err != nil { + s.logger.Error("添加或更新节点污点失败", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Error(err)) @@ -169,7 +169,7 @@ func (t *taintService) AddOrUpdateNodeTaint(ctx context.Context, req *model.AddN } // BatchEnableSwitchNodes 批量切换节点调度状态 -func (t *taintService) EnableSwitchNode(ctx context.Context, req *model.NodeCordonReq) error { +func (s *taintService) EnableSwitchNode(ctx context.Context, req *model.NodeCordonReq) error { if req.ClusterID <= 0 { return fmt.Errorf("集群ID不能为空") } @@ -178,8 +178,8 @@ func (t *taintService) EnableSwitchNode(ctx context.Context, req *model.NodeCord } // NodeCordonReq 用于禁用节点调度,所以这里 scheduleEnable 为 false - if err := t.manager.EnableSwitchNode(ctx, req.ClusterID, req.NodeName, false); err != nil { - t.logger.Error("禁用节点调度失败", + if err := s.manager.EnableSwitchNode(ctx, req.ClusterID, req.NodeName, false); err != nil { + s.logger.Error("禁用节点调度失败", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Error(err)) @@ -190,7 +190,7 @@ func (t *taintService) EnableSwitchNode(ctx context.Context, req *model.NodeCord } // CheckTaintYaml 检查污点YAML配置 -func (t *taintService) CheckTaintYaml(ctx context.Context, req *model.CheckTaintYamlReq) error { +func (s *taintService) CheckTaintYaml(ctx context.Context, req *model.CheckTaintYamlReq) error { if req.ClusterID <= 0 { return fmt.Errorf("集群ID不能为空") } @@ -201,8 +201,8 @@ func (t *taintService) CheckTaintYaml(ctx context.Context, req *model.CheckTaint return fmt.Errorf("YAML数据不能为空") } - if err := t.manager.CheckTaintYaml(ctx, req.ClusterID, req.NodeName, req.YamlData); err != nil { - t.logger.Error("检查污点YAML配置失败", + if err := s.manager.CheckTaintYaml(ctx, req.ClusterID, req.NodeName, req.YamlData); err != nil { + s.logger.Error("检查污点YAML配置失败", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Error(err)) @@ -213,7 +213,7 @@ func (t *taintService) CheckTaintYaml(ctx context.Context, req *model.CheckTaint } // DrainPods 驱逐节点Pod -func (t *taintService) DrainPods(ctx context.Context, req *model.DrainNodeReq) error { +func (s *taintService) DrainPods(ctx context.Context, req *model.DrainNodeReq) error { if req.ClusterID <= 0 { return fmt.Errorf("集群ID不能为空") } @@ -221,8 +221,8 @@ func (t *taintService) DrainPods(ctx context.Context, req *model.DrainNodeReq) e return fmt.Errorf("节点名称不能为空") } - if err := t.manager.DrainPods(ctx, req.ClusterID, req.NodeName); err != nil { - t.logger.Error("驱逐节点Pod失败", + if err := s.manager.DrainPods(ctx, req.ClusterID, req.NodeName); err != nil { + s.logger.Error("驱逐节点Pod失败", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Error(err)) diff --git a/internal/k8s/service/yaml_task_service.go b/internal/k8s/service/yaml_task_service.go index 926ec400..33315a57 100644 --- a/internal/k8s/service/yaml_task_service.go +++ b/internal/k8s/service/yaml_task_service.go @@ -60,8 +60,8 @@ func NewYamlTaskService(manager manager.YamlManager, logger *zap.Logger) YamlTas } // GetYamlTaskList 获取 YAML 任务列表 -func (y *yamlTaskService) GetYamlTaskList(ctx context.Context, req *model.YamlTaskListReq) (model.ListResp[*model.K8sYamlTask], error) { - list, err := y.manager.GetYamlTaskList(ctx, req) +func (s *yamlTaskService) GetYamlTaskList(ctx context.Context, req *model.YamlTaskListReq) (model.ListResp[*model.K8sYamlTask], error) { + list, err := s.manager.GetYamlTaskList(ctx, req) if err != nil { return model.ListResp[*model.K8sYamlTask]{}, err } @@ -72,7 +72,7 @@ func (y *yamlTaskService) GetYamlTaskList(ctx context.Context, req *model.YamlTa } // CreateYamlTask 创建 YAML 任务 -func (y *yamlTaskService) CreateYamlTask(ctx context.Context, req *model.YamlTaskCreateReq) error { +func (s *yamlTaskService) CreateYamlTask(ctx context.Context, req *model.YamlTaskCreateReq) error { task := &model.K8sYamlTask{ Name: req.Name, UserID: req.UserID, @@ -81,11 +81,11 @@ func (y *yamlTaskService) CreateYamlTask(ctx context.Context, req *model.YamlTas Variables: req.Variables, Status: TaskPending, } - return y.manager.CreateYamlTask(ctx, task) + return s.manager.CreateYamlTask(ctx, task) } // UpdateYamlTask 更新 YAML 任务 -func (y *yamlTaskService) UpdateYamlTask(ctx context.Context, req *model.YamlTaskUpdateReq) error { +func (s *yamlTaskService) UpdateYamlTask(ctx context.Context, req *model.YamlTaskUpdateReq) error { // 将请求转换为任务模型 task := &model.K8sYamlTask{ Model: model.Model{ID: req.ID}, @@ -95,15 +95,15 @@ func (y *yamlTaskService) UpdateYamlTask(ctx context.Context, req *model.YamlTas ClusterID: req.ClusterID, Variables: req.Variables, } - return y.manager.UpdateYamlTask(ctx, task) + return s.manager.UpdateYamlTask(ctx, task) } // DeleteYamlTask 删除 YAML 任务 -func (y *yamlTaskService) DeleteYamlTask(ctx context.Context, req *model.YamlTaskDeleteReq) error { - return y.manager.DeleteYamlTask(ctx, req.ID) +func (s *yamlTaskService) DeleteYamlTask(ctx context.Context, req *model.YamlTaskDeleteReq) error { + return s.manager.DeleteYamlTask(ctx, req.ID) } // ApplyYamlTask 应用 YAML 任务 -func (y *yamlTaskService) ApplyYamlTask(ctx context.Context, req *model.YamlTaskExecuteReq) error { - return y.manager.ApplyYamlTask(ctx, req.ID) +func (s *yamlTaskService) ApplyYamlTask(ctx context.Context, req *model.YamlTaskExecuteReq) error { + return s.manager.ApplyYamlTask(ctx, req.ID) } diff --git a/internal/k8s/service/yaml_template_service.go b/internal/k8s/service/yaml_template_service.go index ef67be10..1597ee52 100644 --- a/internal/k8s/service/yaml_template_service.go +++ b/internal/k8s/service/yaml_template_service.go @@ -55,8 +55,8 @@ func NewYamlTemplateService(manager manager.YamlManager, logger *zap.Logger) Yam } // GetYamlTemplateList 获取 YAML 模板列表 -func (y *yamlTemplateService) GetYamlTemplateList(ctx context.Context, req *model.YamlTemplateListReq) (model.ListResp[*model.K8sYamlTemplate], error) { - list, err := y.manager.GetYamlTemplateList(ctx, req) +func (s *yamlTemplateService) GetYamlTemplateList(ctx context.Context, req *model.YamlTemplateListReq) (model.ListResp[*model.K8sYamlTemplate], error) { + list, err := s.manager.GetYamlTemplateList(ctx, req) if err != nil { return model.ListResp[*model.K8sYamlTemplate]{}, err } @@ -67,28 +67,28 @@ func (y *yamlTemplateService) GetYamlTemplateList(ctx context.Context, req *mode } // CreateYamlTemplate 创建 YAML 模板 -func (y *yamlTemplateService) CreateYamlTemplate(ctx context.Context, req *model.YamlTemplateCreateReq) error { +func (s *yamlTemplateService) CreateYamlTemplate(ctx context.Context, req *model.YamlTemplateCreateReq) error { template := &model.K8sYamlTemplate{ Name: req.Name, UserID: req.UserID, Content: req.Content, ClusterID: req.ClusterID, } - return y.manager.CreateYamlTemplate(ctx, template) + return s.manager.CreateYamlTemplate(ctx, template) } // CheckYamlTemplate 检查 YAML 模板是否正确 -func (y *yamlTemplateService) CheckYamlTemplate(ctx context.Context, req *model.YamlTemplateCheckReq) error { +func (s *yamlTemplateService) CheckYamlTemplate(ctx context.Context, req *model.YamlTemplateCheckReq) error { template := &model.K8sYamlTemplate{ Name: req.Name, Content: req.Content, ClusterID: req.ClusterID, } - return y.manager.CheckYamlTemplate(ctx, template) + return s.manager.CheckYamlTemplate(ctx, template) } // UpdateYamlTemplate 更新 YAML 模板 -func (y *yamlTemplateService) UpdateYamlTemplate(ctx context.Context, req *model.YamlTemplateUpdateReq) error { +func (s *yamlTemplateService) UpdateYamlTemplate(ctx context.Context, req *model.YamlTemplateUpdateReq) error { template := &model.K8sYamlTemplate{ Model: model.Model{ID: req.ID}, Name: req.Name, @@ -96,14 +96,14 @@ func (y *yamlTemplateService) UpdateYamlTemplate(ctx context.Context, req *model Content: req.Content, ClusterID: req.ClusterID, } - return y.manager.UpdateYamlTemplate(ctx, template) + return s.manager.UpdateYamlTemplate(ctx, template) } // DeleteYamlTemplate 删除 YAML 模板 -func (y *yamlTemplateService) DeleteYamlTemplate(ctx context.Context, req *model.YamlTemplateDeleteReq) error { - return y.manager.DeleteYamlTemplate(ctx, req.ID, req.ClusterID) +func (s *yamlTemplateService) DeleteYamlTemplate(ctx context.Context, req *model.YamlTemplateDeleteReq) error { + return s.manager.DeleteYamlTemplate(ctx, req.ID, req.ClusterID) } -func (y *yamlTemplateService) GetYamlTemplateDetail(ctx context.Context, req *model.YamlTemplateDetailReq) (*model.K8sYamlTemplate, error) { - return y.manager.GetYamlTemplateDetail(ctx, req.ID, req.ClusterID) +func (s *yamlTemplateService) GetYamlTemplateDetail(ctx context.Context, req *model.YamlTemplateDetailReq) (*model.K8sYamlTemplate, error) { + return s.manager.GetYamlTemplateDetail(ctx, req.ID, req.ClusterID) } diff --git a/internal/prometheus/api/alert_event.go b/internal/prometheus/api/alert_event.go index aab9f30c..505143ce 100644 --- a/internal/prometheus/api/alert_event.go +++ b/internal/prometheus/api/alert_event.go @@ -43,27 +43,27 @@ func NewAlertEventHandler(svc alertEventService.AlertManagerEventService) *Alert } } -func (a *AlertEventHandler) RegisterRouters(server *gin.Engine) { +func (h *AlertEventHandler) RegisterRouters(server *gin.Engine) { monitorGroup := server.Group("/api/monitor") { - monitorGroup.GET("/alert_events/list", a.GetMonitorAlertEventList) - monitorGroup.POST("/alert_events/silence/:id", a.EventAlertSilence) - monitorGroup.POST("/alert_events/claim/:id", a.EventAlertClaim) - monitorGroup.POST("/alert_events/unsilence/:id", a.EventAlertUnSilence) + monitorGroup.GET("/alert_events/list", h.GetMonitorAlertEventList) + monitorGroup.POST("/alert_events/silence/:id", h.EventAlertSilence) + monitorGroup.POST("/alert_events/claim/:id", h.EventAlertClaim) + monitorGroup.POST("/alert_events/unsilence/:id", h.EventAlertUnSilence) } } // GetMonitorAlertEventList 获取告警事件列表 -func (a *AlertEventHandler) GetMonitorAlertEventList(ctx *gin.Context) { +func (h *AlertEventHandler) GetMonitorAlertEventList(ctx *gin.Context) { var req model.GetMonitorAlertEventListReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return a.svc.GetMonitorAlertEventList(ctx, &req) + return h.svc.GetMonitorAlertEventList(ctx, &req) }) } // EventAlertSilence 将指定告警事件设置为静默状态 -func (a *AlertEventHandler) EventAlertSilence(ctx *gin.Context) { +func (h *AlertEventHandler) EventAlertSilence(ctx *gin.Context) { var req model.EventAlertSilenceReq uc := ctx.MustGet("user").(utils.UserClaims) @@ -77,12 +77,12 @@ func (a *AlertEventHandler) EventAlertSilence(ctx *gin.Context) { req.UserID = uc.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.EventAlertSilence(ctx, &req) + return nil, h.svc.EventAlertSilence(ctx, &req) }) } // EventAlertClaim 认领指定的告警事件 -func (a *AlertEventHandler) EventAlertClaim(ctx *gin.Context) { +func (h *AlertEventHandler) EventAlertClaim(ctx *gin.Context) { var req model.EventAlertClaimReq uc := ctx.MustGet("user").(utils.UserClaims) @@ -96,12 +96,12 @@ func (a *AlertEventHandler) EventAlertClaim(ctx *gin.Context) { req.UserID = uc.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.EventAlertClaim(ctx, &req) + return nil, h.svc.EventAlertClaim(ctx, &req) }) } // EventAlertUnSilence 取消指定告警事件的静默状态 -func (a *AlertEventHandler) EventAlertUnSilence(ctx *gin.Context) { +func (h *AlertEventHandler) EventAlertUnSilence(ctx *gin.Context) { var req model.EventAlertUnSilenceReq uc := ctx.MustGet("user").(utils.UserClaims) @@ -115,6 +115,6 @@ func (a *AlertEventHandler) EventAlertUnSilence(ctx *gin.Context) { req.UserID = uc.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.EventAlertUnSilence(ctx, &req) + return nil, h.svc.EventAlertUnSilence(ctx, &req) }) } diff --git a/internal/prometheus/api/alert_pool.go b/internal/prometheus/api/alert_pool.go index 21835c6a..8d5c865c 100644 --- a/internal/prometheus/api/alert_pool.go +++ b/internal/prometheus/api/alert_pool.go @@ -42,28 +42,28 @@ func NewAlertPoolHandler(svc alertEventService.AlertManagerPoolService) *AlertPo } } -func (a *AlertPoolHandler) RegisterRouters(server *gin.Engine) { +func (h *AlertPoolHandler) RegisterRouters(server *gin.Engine) { monitorGroup := server.Group("/api/monitor") { - monitorGroup.GET("/alert_manager_pools/list", a.GetMonitorAlertManagerPoolList) - monitorGroup.POST("/alert_manager_pools/create", a.CreateMonitorAlertManagerPool) - monitorGroup.PUT("/alert_manager_pools/update/:id", a.UpdateMonitorAlertManagerPool) - monitorGroup.DELETE("/alert_manager_pools/delete/:id", a.DeleteMonitorAlertManagerPool) - monitorGroup.GET("/alert_manager_pools/detail/:id", a.GetMonitorAlertManagerPool) + monitorGroup.GET("/alert_manager_pools/list", h.GetMonitorAlertManagerPoolList) + monitorGroup.POST("/alert_manager_pools/create", h.CreateMonitorAlertManagerPool) + monitorGroup.PUT("/alert_manager_pools/update/:id", h.UpdateMonitorAlertManagerPool) + monitorGroup.DELETE("/alert_manager_pools/delete/:id", h.DeleteMonitorAlertManagerPool) + monitorGroup.GET("/alert_manager_pools/detail/:id", h.GetMonitorAlertManagerPool) } } // GetMonitorAlertManagerPoolList 获取 AlertManager 集群池列表 -func (a *AlertPoolHandler) GetMonitorAlertManagerPoolList(ctx *gin.Context) { +func (h *AlertPoolHandler) GetMonitorAlertManagerPoolList(ctx *gin.Context) { var req model.GetMonitorAlertManagerPoolListReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return a.svc.GetMonitorAlertManagerPoolList(ctx, &req) + return h.svc.GetMonitorAlertManagerPoolList(ctx, &req) }) } // CreateMonitorAlertManagerPool 创建新的 AlertManager 集群池 -func (a *AlertPoolHandler) CreateMonitorAlertManagerPool(ctx *gin.Context) { +func (h *AlertPoolHandler) CreateMonitorAlertManagerPool(ctx *gin.Context) { var req model.CreateMonitorAlertManagerPoolReq uc := ctx.MustGet("user").(utils.UserClaims) @@ -71,21 +71,21 @@ func (a *AlertPoolHandler) CreateMonitorAlertManagerPool(ctx *gin.Context) { req.CreateUserName = uc.Username utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.CreateMonitorAlertManagerPool(ctx, &req) + return nil, h.svc.CreateMonitorAlertManagerPool(ctx, &req) }) } // UpdateMonitorAlertManagerPool 更新现有的 AlertManager 集群池 -func (a *AlertPoolHandler) UpdateMonitorAlertManagerPool(ctx *gin.Context) { +func (h *AlertPoolHandler) UpdateMonitorAlertManagerPool(ctx *gin.Context) { var req model.UpdateMonitorAlertManagerPoolReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.UpdateMonitorAlertManagerPool(ctx, &req) + return nil, h.svc.UpdateMonitorAlertManagerPool(ctx, &req) }) } // DeleteMonitorAlertManagerPool 删除指定的 AlertManager 集群池 -func (a *AlertPoolHandler) DeleteMonitorAlertManagerPool(ctx *gin.Context) { +func (h *AlertPoolHandler) DeleteMonitorAlertManagerPool(ctx *gin.Context) { var req model.DeleteMonitorAlertManagerPoolReq id, err := utils.GetParamID(ctx) @@ -97,12 +97,12 @@ func (a *AlertPoolHandler) DeleteMonitorAlertManagerPool(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.DeleteMonitorAlertManagerPool(ctx, &req) + return nil, h.svc.DeleteMonitorAlertManagerPool(ctx, &req) }) } // GetMonitorAlertManagerPool 获取指定的AlertManager集群池详情 -func (a *AlertPoolHandler) GetMonitorAlertManagerPool(ctx *gin.Context) { +func (h *AlertPoolHandler) GetMonitorAlertManagerPool(ctx *gin.Context) { var req model.GetMonitorAlertManagerPoolReq id, err := utils.GetParamID(ctx) @@ -114,6 +114,6 @@ func (a *AlertPoolHandler) GetMonitorAlertManagerPool(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return a.svc.GetMonitorAlertManagerPool(ctx, &req) + return h.svc.GetMonitorAlertManagerPool(ctx, &req) }) } diff --git a/internal/prometheus/api/alert_rule.go b/internal/prometheus/api/alert_rule.go index c7c966b2..43f3a23b 100644 --- a/internal/prometheus/api/alert_rule.go +++ b/internal/prometheus/api/alert_rule.go @@ -43,20 +43,20 @@ func NewAlertRuleHandler(svc alertService.AlertManagerRuleService) *AlertRuleHan } } -func (a *AlertRuleHandler) RegisterRouters(server *gin.Engine) { +func (h *AlertRuleHandler) RegisterRouters(server *gin.Engine) { monitorGroup := server.Group("/api/monitor") { - monitorGroup.GET("/alert_rules/list", a.GetMonitorAlertRuleList) - monitorGroup.GET("/alert_rules/detail/:id", a.GetMonitorAlertRule) - monitorGroup.POST("/alert_rules/promql_check", a.PromqlExprCheck) - monitorGroup.POST("/alert_rules/create", a.CreateMonitorAlertRule) - monitorGroup.PUT("/alert_rules/update/:id", a.UpdateMonitorAlertRule) - monitorGroup.DELETE("/alert_rules/delete/:id", a.DeleteMonitorAlertRule) + monitorGroup.GET("/alert_rules/list", h.GetMonitorAlertRuleList) + monitorGroup.GET("/alert_rules/detail/:id", h.GetMonitorAlertRule) + monitorGroup.POST("/alert_rules/promql_check", h.PromqlExprCheck) + monitorGroup.POST("/alert_rules/create", h.CreateMonitorAlertRule) + monitorGroup.PUT("/alert_rules/update/:id", h.UpdateMonitorAlertRule) + monitorGroup.DELETE("/alert_rules/delete/:id", h.DeleteMonitorAlertRule) } } // CreateMonitorAlertRule 创建新的告警规则 -func (a *AlertRuleHandler) CreateMonitorAlertRule(ctx *gin.Context) { +func (h *AlertRuleHandler) CreateMonitorAlertRule(ctx *gin.Context) { var req model.CreateMonitorAlertRuleReq uc := ctx.MustGet("user").(ijwt.UserClaims) @@ -64,12 +64,12 @@ func (a *AlertRuleHandler) CreateMonitorAlertRule(ctx *gin.Context) { req.CreateUserName = uc.Username utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.CreateMonitorAlertRule(ctx, &req) + return nil, h.svc.CreateMonitorAlertRule(ctx, &req) }) } // UpdateMonitorAlertRule 更新现有的告警规则 -func (a *AlertRuleHandler) UpdateMonitorAlertRule(ctx *gin.Context) { +func (h *AlertRuleHandler) UpdateMonitorAlertRule(ctx *gin.Context) { var req model.UpdateMonitorAlertRuleReq id, err := utils.GetParamID(ctx) @@ -81,12 +81,12 @@ func (a *AlertRuleHandler) UpdateMonitorAlertRule(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.UpdateMonitorAlertRule(ctx, &req) + return nil, h.svc.UpdateMonitorAlertRule(ctx, &req) }) } // DeleteMonitorAlertRule 删除指定的告警规则 -func (a *AlertRuleHandler) DeleteMonitorAlertRule(ctx *gin.Context) { +func (h *AlertRuleHandler) DeleteMonitorAlertRule(ctx *gin.Context) { var req model.DeleteMonitorAlertRuleReq id, err := utils.GetParamID(ctx) @@ -98,30 +98,30 @@ func (a *AlertRuleHandler) DeleteMonitorAlertRule(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.DeleteMonitorAlertRule(ctx, &req) + return nil, h.svc.DeleteMonitorAlertRule(ctx, &req) }) } // GetMonitorAlertRuleList 获取告警规则列表 -func (a *AlertRuleHandler) GetMonitorAlertRuleList(ctx *gin.Context) { +func (h *AlertRuleHandler) GetMonitorAlertRuleList(ctx *gin.Context) { var req model.GetMonitorAlertRuleListReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return a.svc.GetMonitorAlertRuleList(ctx, &req) + return h.svc.GetMonitorAlertRuleList(ctx, &req) }) } // PromqlExprCheck 检查 PromQL 表达式的合法性 -func (a *AlertRuleHandler) PromqlExprCheck(ctx *gin.Context) { +func (h *AlertRuleHandler) PromqlExprCheck(ctx *gin.Context) { var promql model.PromqlAlertRuleExprCheckReq utils.HandleRequest(ctx, &promql, func() (interface{}, error) { - return a.svc.PromqlExprCheck(ctx, &promql) + return h.svc.PromqlExprCheck(ctx, &promql) }) } // GetMonitorAlertRule 获取指定的告警规则详情 -func (a *AlertRuleHandler) GetMonitorAlertRule(ctx *gin.Context) { +func (h *AlertRuleHandler) GetMonitorAlertRule(ctx *gin.Context) { var req model.GetMonitorAlertRuleReq id, err := utils.GetParamID(ctx) @@ -133,6 +133,6 @@ func (a *AlertRuleHandler) GetMonitorAlertRule(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return a.svc.GetMonitorAlertRule(ctx, &req) + return h.svc.GetMonitorAlertRule(ctx, &req) }) } diff --git a/internal/prometheus/api/onduty_group.go b/internal/prometheus/api/onduty_group.go index e6d9cb2e..b6549339 100644 --- a/internal/prometheus/api/onduty_group.go +++ b/internal/prometheus/api/onduty_group.go @@ -42,32 +42,32 @@ func NewOnDutyGroupHandler(alertOnDutyService alert.AlertManagerOnDutyService) * } } -func (o *OnDutyGroupHandler) RegisterRouters(server *gin.Engine) { +func (h *OnDutyGroupHandler) RegisterRouters(server *gin.Engine) { monitorGroup := server.Group("/api/monitor") { - monitorGroup.GET("/onduty_groups/list", o.GetMonitorOnDutyGroupList) - monitorGroup.POST("/onduty_groups/create", o.CreateMonitorOnDutyGroup) - monitorGroup.POST("/onduty_groups/changes", o.CreateMonitorOnDutyGroupChange) - monitorGroup.GET("/onduty_groups/changes/:id", o.GetMonitorOnDutyGroupChangeList) - monitorGroup.PUT("/onduty_groups/update/:id", o.UpdateMonitorOnDutyGroup) - monitorGroup.DELETE("/onduty_groups/delete/:id", o.DeleteMonitorOnDutyGroup) - monitorGroup.GET("/onduty_groups/detail/:id", o.GetMonitorOnDutyGroup) - monitorGroup.GET("/onduty_groups/future_plan/:id", o.GetMonitorOnDutyGroupFuturePlan) - monitorGroup.GET("/onduty_groups/history/:id", o.GetMonitorOnDutyHistory) + monitorGroup.GET("/onduty_groups/list", h.GetMonitorOnDutyGroupList) + monitorGroup.POST("/onduty_groups/create", h.CreateMonitorOnDutyGroup) + monitorGroup.POST("/onduty_groups/changes", h.CreateMonitorOnDutyGroupChange) + monitorGroup.GET("/onduty_groups/changes/:id", h.GetMonitorOnDutyGroupChangeList) + monitorGroup.PUT("/onduty_groups/update/:id", h.UpdateMonitorOnDutyGroup) + monitorGroup.DELETE("/onduty_groups/delete/:id", h.DeleteMonitorOnDutyGroup) + monitorGroup.GET("/onduty_groups/detail/:id", h.GetMonitorOnDutyGroup) + monitorGroup.GET("/onduty_groups/future_plan/:id", h.GetMonitorOnDutyGroupFuturePlan) + monitorGroup.GET("/onduty_groups/history/:id", h.GetMonitorOnDutyHistory) } } // GetMonitorOnDutyGroupList 获取值班组列表 -func (o *OnDutyGroupHandler) GetMonitorOnDutyGroupList(ctx *gin.Context) { +func (h *OnDutyGroupHandler) GetMonitorOnDutyGroupList(ctx *gin.Context) { var req model.GetMonitorOnDutyGroupListReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return o.alertOnDutyService.GetMonitorOnDutyGroupList(ctx, &req) + return h.alertOnDutyService.GetMonitorOnDutyGroupList(ctx, &req) }) } // CreateMonitorOnDutyGroup 创建新的值班组 -func (o *OnDutyGroupHandler) CreateMonitorOnDutyGroup(ctx *gin.Context) { +func (h *OnDutyGroupHandler) CreateMonitorOnDutyGroup(ctx *gin.Context) { var req model.CreateMonitorOnDutyGroupReq uc := ctx.MustGet("user").(utils.UserClaims) @@ -75,12 +75,12 @@ func (o *OnDutyGroupHandler) CreateMonitorOnDutyGroup(ctx *gin.Context) { req.CreateUserName = uc.Username utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, o.alertOnDutyService.CreateMonitorOnDutyGroup(ctx, &req) + return nil, h.alertOnDutyService.CreateMonitorOnDutyGroup(ctx, &req) }) } // CreateMonitorOnDutyGroupChange 创建值班组的换班记录 -func (o *OnDutyGroupHandler) CreateMonitorOnDutyGroupChange(ctx *gin.Context) { +func (h *OnDutyGroupHandler) CreateMonitorOnDutyGroupChange(ctx *gin.Context) { var req model.CreateMonitorOnDutyGroupChangeReq uc := ctx.MustGet("user").(utils.UserClaims) @@ -88,12 +88,12 @@ func (o *OnDutyGroupHandler) CreateMonitorOnDutyGroupChange(ctx *gin.Context) { req.CreateUserName = uc.Username utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, o.alertOnDutyService.CreateMonitorOnDutyGroupChange(ctx, &req) + return nil, h.alertOnDutyService.CreateMonitorOnDutyGroupChange(ctx, &req) }) } // UpdateMonitorOnDutyGroup 更新值班组信息 -func (o *OnDutyGroupHandler) UpdateMonitorOnDutyGroup(ctx *gin.Context) { +func (h *OnDutyGroupHandler) UpdateMonitorOnDutyGroup(ctx *gin.Context) { var req model.UpdateMonitorOnDutyGroupReq id, err := utils.GetParamID(ctx) @@ -105,12 +105,12 @@ func (o *OnDutyGroupHandler) UpdateMonitorOnDutyGroup(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, o.alertOnDutyService.UpdateMonitorOnDutyGroup(ctx, &req) + return nil, h.alertOnDutyService.UpdateMonitorOnDutyGroup(ctx, &req) }) } // DeleteMonitorOnDutyGroup 删除指定的值班组 -func (o *OnDutyGroupHandler) DeleteMonitorOnDutyGroup(ctx *gin.Context) { +func (h *OnDutyGroupHandler) DeleteMonitorOnDutyGroup(ctx *gin.Context) { var req model.DeleteMonitorOnDutyGroupReq id, err := utils.GetParamID(ctx) @@ -122,12 +122,12 @@ func (o *OnDutyGroupHandler) DeleteMonitorOnDutyGroup(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, o.alertOnDutyService.DeleteMonitorOnDutyGroup(ctx, &req) + return nil, h.alertOnDutyService.DeleteMonitorOnDutyGroup(ctx, &req) }) } // GetMonitorOnDutyGroup 获取指定的值班组信息 -func (o *OnDutyGroupHandler) GetMonitorOnDutyGroup(ctx *gin.Context) { +func (h *OnDutyGroupHandler) GetMonitorOnDutyGroup(ctx *gin.Context) { var req model.GetMonitorOnDutyGroupReq id, err := utils.GetParamID(ctx) @@ -139,12 +139,12 @@ func (o *OnDutyGroupHandler) GetMonitorOnDutyGroup(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return o.alertOnDutyService.GetMonitorOnDutyGroup(ctx, &req) + return h.alertOnDutyService.GetMonitorOnDutyGroup(ctx, &req) }) } // GetMonitorOnDutyGroupFuturePlan 获取指定值班组的未来值班计划 -func (o *OnDutyGroupHandler) GetMonitorOnDutyGroupFuturePlan(ctx *gin.Context) { +func (h *OnDutyGroupHandler) GetMonitorOnDutyGroupFuturePlan(ctx *gin.Context) { var req model.GetMonitorOnDutyGroupFuturePlanReq id, err := utils.GetParamID(ctx) @@ -156,12 +156,12 @@ func (o *OnDutyGroupHandler) GetMonitorOnDutyGroupFuturePlan(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return o.alertOnDutyService.GetMonitorOnDutyGroupFuturePlan(ctx, &req) + return h.alertOnDutyService.GetMonitorOnDutyGroupFuturePlan(ctx, &req) }) } // GetMonitorOnDutyHistory 获取值班历史记录 -func (o *OnDutyGroupHandler) GetMonitorOnDutyHistory(ctx *gin.Context) { +func (h *OnDutyGroupHandler) GetMonitorOnDutyHistory(ctx *gin.Context) { var req model.GetMonitorOnDutyHistoryReq id, err := utils.GetParamID(ctx) @@ -173,12 +173,12 @@ func (o *OnDutyGroupHandler) GetMonitorOnDutyHistory(ctx *gin.Context) { req.OnDutyGroupID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return o.alertOnDutyService.GetMonitorOnDutyHistory(ctx, &req) + return h.alertOnDutyService.GetMonitorOnDutyHistory(ctx, &req) }) } // GetMonitorOnDutyGroupChangeList 获取值班组换班记录列表 -func (o *OnDutyGroupHandler) GetMonitorOnDutyGroupChangeList(ctx *gin.Context) { +func (h *OnDutyGroupHandler) GetMonitorOnDutyGroupChangeList(ctx *gin.Context) { var req model.GetMonitorOnDutyGroupChangeListReq id, err := utils.GetParamID(ctx) @@ -190,6 +190,6 @@ func (o *OnDutyGroupHandler) GetMonitorOnDutyGroupChangeList(ctx *gin.Context) { req.OnDutyGroupID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return o.alertOnDutyService.GetMonitorOnDutyGroupChangeList(ctx, &req) + return h.alertOnDutyService.GetMonitorOnDutyGroupChangeList(ctx, &req) }) } diff --git a/internal/prometheus/api/record_rule.go b/internal/prometheus/api/record_rule.go index 4ae4ea1d..b20b6ad0 100644 --- a/internal/prometheus/api/record_rule.go +++ b/internal/prometheus/api/record_rule.go @@ -44,28 +44,28 @@ func NewRecordRuleHandler(alertRecordService alertEventService.AlertManagerRecor } } -func (r *RecordRuleHandler) RegisterRouters(server *gin.Engine) { +func (h *RecordRuleHandler) RegisterRouters(server *gin.Engine) { monitorGroup := server.Group("/api/monitor") { - monitorGroup.GET("/record_rules/list", r.GetMonitorRecordRuleList) - monitorGroup.POST("/record_rules/create", r.CreateMonitorRecordRule) - monitorGroup.PUT("/record_rules/update/:id", r.UpdateMonitorRecordRule) - monitorGroup.DELETE("/record_rules/delete/:id", r.DeleteMonitorRecordRule) - monitorGroup.GET("/record_rules/detail/:id", r.GetMonitorRecordRule) + monitorGroup.GET("/record_rules/list", h.GetMonitorRecordRuleList) + monitorGroup.POST("/record_rules/create", h.CreateMonitorRecordRule) + monitorGroup.PUT("/record_rules/update/:id", h.UpdateMonitorRecordRule) + monitorGroup.DELETE("/record_rules/delete/:id", h.DeleteMonitorRecordRule) + monitorGroup.GET("/record_rules/detail/:id", h.GetMonitorRecordRule) } } // GetMonitorRecordRuleList 获取预聚合规则列表 -func (r *RecordRuleHandler) GetMonitorRecordRuleList(ctx *gin.Context) { +func (h *RecordRuleHandler) GetMonitorRecordRuleList(ctx *gin.Context) { var req model.GetMonitorRecordRuleListReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.alertRecordService.GetMonitorRecordRuleList(ctx, &req) + return h.alertRecordService.GetMonitorRecordRuleList(ctx, &req) }) } // CreateMonitorRecordRule 创建新的预聚合规则 -func (r *RecordRuleHandler) CreateMonitorRecordRule(ctx *gin.Context) { +func (h *RecordRuleHandler) CreateMonitorRecordRule(ctx *gin.Context) { var req model.CreateMonitorRecordRuleReq uc := ctx.MustGet("user").(ijwt.UserClaims) @@ -73,12 +73,12 @@ func (r *RecordRuleHandler) CreateMonitorRecordRule(ctx *gin.Context) { req.CreateUserName = uc.Username utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, r.alertRecordService.CreateMonitorRecordRule(ctx, &req) + return nil, h.alertRecordService.CreateMonitorRecordRule(ctx, &req) }) } // UpdateMonitorRecordRule 更新现有的预聚合规则 -func (r *RecordRuleHandler) UpdateMonitorRecordRule(ctx *gin.Context) { +func (h *RecordRuleHandler) UpdateMonitorRecordRule(ctx *gin.Context) { var req model.UpdateMonitorRecordRuleReq id, err := utils.GetParamID(ctx) @@ -90,12 +90,12 @@ func (r *RecordRuleHandler) UpdateMonitorRecordRule(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, r.alertRecordService.UpdateMonitorRecordRule(ctx, &req) + return nil, h.alertRecordService.UpdateMonitorRecordRule(ctx, &req) }) } // DeleteMonitorRecordRule 删除指定的预聚合规则 -func (r *RecordRuleHandler) DeleteMonitorRecordRule(ctx *gin.Context) { +func (h *RecordRuleHandler) DeleteMonitorRecordRule(ctx *gin.Context) { var req model.DeleteMonitorRecordRuleReq id, err := utils.GetParamID(ctx) @@ -107,12 +107,12 @@ func (r *RecordRuleHandler) DeleteMonitorRecordRule(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, r.alertRecordService.DeleteMonitorRecordRule(ctx, &req) + return nil, h.alertRecordService.DeleteMonitorRecordRule(ctx, &req) }) } // GetMonitorRecordRule 获取指定的预聚合规则详情 -func (r *RecordRuleHandler) GetMonitorRecordRule(ctx *gin.Context) { +func (h *RecordRuleHandler) GetMonitorRecordRule(ctx *gin.Context) { var req model.GetMonitorRecordRuleReq id, err := utils.GetParamID(ctx) @@ -124,6 +124,6 @@ func (r *RecordRuleHandler) GetMonitorRecordRule(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.alertRecordService.GetMonitorRecordRule(ctx, &req) + return h.alertRecordService.GetMonitorRecordRule(ctx, &req) }) } diff --git a/internal/prometheus/api/scrape_job.go b/internal/prometheus/api/scrape_job.go index a7997bcf..a2dc20bf 100644 --- a/internal/prometheus/api/scrape_job.go +++ b/internal/prometheus/api/scrape_job.go @@ -44,28 +44,28 @@ func NewScrapeJobHandler(scrapeJobService scrapeJobService.ScrapeJobService) *Sc } } -func (s *ScrapeJobHandler) RegisterRouters(server *gin.Engine) { +func (h *ScrapeJobHandler) RegisterRouters(server *gin.Engine) { monitorGroup := server.Group("/api/monitor") { - monitorGroup.GET("/scrape_jobs/list", s.GetMonitorScrapeJobList) - monitorGroup.GET("/scrape_jobs/detail/:id", s.GetMonitorScrapeJobDetail) - monitorGroup.POST("/scrape_jobs/create", s.CreateMonitorScrapeJob) - monitorGroup.PUT("/scrape_jobs/update/:id", s.UpdateMonitorScrapeJob) - monitorGroup.DELETE("/scrape_jobs/delete/:id", s.DeleteMonitorScrapeJob) + monitorGroup.GET("/scrape_jobs/list", h.GetMonitorScrapeJobList) + monitorGroup.GET("/scrape_jobs/detail/:id", h.GetMonitorScrapeJobDetail) + monitorGroup.POST("/scrape_jobs/create", h.CreateMonitorScrapeJob) + monitorGroup.PUT("/scrape_jobs/update/:id", h.UpdateMonitorScrapeJob) + monitorGroup.DELETE("/scrape_jobs/delete/:id", h.DeleteMonitorScrapeJob) } } // GetMonitorScrapeJobList 获取监控采集 Job 列表 -func (s *ScrapeJobHandler) GetMonitorScrapeJobList(ctx *gin.Context) { +func (h *ScrapeJobHandler) GetMonitorScrapeJobList(ctx *gin.Context) { var req model.GetMonitorScrapeJobListReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.scrapeJobService.GetMonitorScrapeJobList(ctx, &req) + return h.scrapeJobService.GetMonitorScrapeJobList(ctx, &req) }) } // CreateMonitorScrapeJob 创建监控采集 Job -func (s *ScrapeJobHandler) CreateMonitorScrapeJob(ctx *gin.Context) { +func (h *ScrapeJobHandler) CreateMonitorScrapeJob(ctx *gin.Context) { var req model.CreateMonitorScrapeJobReq uc := ctx.MustGet("user").(ijwt.UserClaims) @@ -73,12 +73,12 @@ func (s *ScrapeJobHandler) CreateMonitorScrapeJob(ctx *gin.Context) { req.CreateUserName = uc.Username utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.scrapeJobService.CreateMonitorScrapeJob(ctx, &req) + return nil, h.scrapeJobService.CreateMonitorScrapeJob(ctx, &req) }) } // UpdateMonitorScrapeJob 更新监控采集 Job -func (s *ScrapeJobHandler) UpdateMonitorScrapeJob(ctx *gin.Context) { +func (h *ScrapeJobHandler) UpdateMonitorScrapeJob(ctx *gin.Context) { var req model.UpdateMonitorScrapeJobReq id, err := utils.GetParamID(ctx) @@ -90,12 +90,12 @@ func (s *ScrapeJobHandler) UpdateMonitorScrapeJob(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.scrapeJobService.UpdateMonitorScrapeJob(ctx, &req) + return nil, h.scrapeJobService.UpdateMonitorScrapeJob(ctx, &req) }) } // DeleteMonitorScrapeJob 删除监控采集 Job -func (s *ScrapeJobHandler) DeleteMonitorScrapeJob(ctx *gin.Context) { +func (h *ScrapeJobHandler) DeleteMonitorScrapeJob(ctx *gin.Context) { var req model.DeleteMonitorScrapeJobReq id, err := utils.GetParamID(ctx) @@ -107,12 +107,12 @@ func (s *ScrapeJobHandler) DeleteMonitorScrapeJob(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.scrapeJobService.DeleteMonitorScrapeJob(ctx, req.ID) + return nil, h.scrapeJobService.DeleteMonitorScrapeJob(ctx, req.ID) }) } // GetMonitorScrapeJobDetail 获取监控采集 Job 详情 -func (s *ScrapeJobHandler) GetMonitorScrapeJobDetail(ctx *gin.Context) { +func (h *ScrapeJobHandler) GetMonitorScrapeJobDetail(ctx *gin.Context) { var req model.GetMonitorScrapeJobDetailReq id, err := utils.GetParamID(ctx) @@ -124,6 +124,6 @@ func (s *ScrapeJobHandler) GetMonitorScrapeJobDetail(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.scrapeJobService.GetMonitorScrapeJobDetail(ctx, &req) + return h.scrapeJobService.GetMonitorScrapeJobDetail(ctx, &req) }) } diff --git a/internal/prometheus/api/scrape_pool.go b/internal/prometheus/api/scrape_pool.go index 204aa23c..32d9cbf3 100644 --- a/internal/prometheus/api/scrape_pool.go +++ b/internal/prometheus/api/scrape_pool.go @@ -47,28 +47,28 @@ func NewScrapePoolHandler(l *zap.Logger, scrapePoolService scrapeJobService.Scra } } -func (s *ScrapePoolHandler) RegisterRouters(server *gin.Engine) { +func (h *ScrapePoolHandler) RegisterRouters(server *gin.Engine) { monitorGroup := server.Group("/api/monitor") { - monitorGroup.GET("/scrape_pools/list", s.GetMonitorScrapePoolList) - monitorGroup.POST("/scrape_pools/create", s.CreateMonitorScrapePool) - monitorGroup.PUT("/scrape_pools/update/:id", s.UpdateMonitorScrapePool) - monitorGroup.DELETE("/scrape_pools/delete/:id", s.DeleteMonitorScrapePool) - monitorGroup.GET("/scrape_pools/detail/:id", s.GetMonitorScrapePoolDetail) + monitorGroup.GET("/scrape_pools/list", h.GetMonitorScrapePoolList) + monitorGroup.POST("/scrape_pools/create", h.CreateMonitorScrapePool) + monitorGroup.PUT("/scrape_pools/update/:id", h.UpdateMonitorScrapePool) + monitorGroup.DELETE("/scrape_pools/delete/:id", h.DeleteMonitorScrapePool) + monitorGroup.GET("/scrape_pools/detail/:id", h.GetMonitorScrapePoolDetail) } } // GetMonitorScrapePoolList 获取监控采集池列表 -func (s *ScrapePoolHandler) GetMonitorScrapePoolList(ctx *gin.Context) { +func (h *ScrapePoolHandler) GetMonitorScrapePoolList(ctx *gin.Context) { var req model.GetMonitorScrapePoolListReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.scrapePoolService.GetMonitorScrapePoolList(ctx, &req) + return h.scrapePoolService.GetMonitorScrapePoolList(ctx, &req) }) } // CreateMonitorScrapePool 创建监控采集池 -func (s *ScrapePoolHandler) CreateMonitorScrapePool(ctx *gin.Context) { +func (h *ScrapePoolHandler) CreateMonitorScrapePool(ctx *gin.Context) { var req model.CreateMonitorScrapePoolReq uc := ctx.MustGet("user").(ijwt.UserClaims) @@ -76,12 +76,12 @@ func (s *ScrapePoolHandler) CreateMonitorScrapePool(ctx *gin.Context) { req.CreateUserName = uc.Username utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.scrapePoolService.CreateMonitorScrapePool(ctx, &req) + return nil, h.scrapePoolService.CreateMonitorScrapePool(ctx, &req) }) } // UpdateMonitorScrapePool 更新监控采集池 -func (s *ScrapePoolHandler) UpdateMonitorScrapePool(ctx *gin.Context) { +func (h *ScrapePoolHandler) UpdateMonitorScrapePool(ctx *gin.Context) { var req model.UpdateMonitorScrapePoolReq id, err := utils.GetParamID(ctx) @@ -92,12 +92,12 @@ func (s *ScrapePoolHandler) UpdateMonitorScrapePool(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.scrapePoolService.UpdateMonitorScrapePool(ctx, &req) + return nil, h.scrapePoolService.UpdateMonitorScrapePool(ctx, &req) }) } // DeleteMonitorScrapePool 删除监控采集池 -func (s *ScrapePoolHandler) DeleteMonitorScrapePool(ctx *gin.Context) { +func (h *ScrapePoolHandler) DeleteMonitorScrapePool(ctx *gin.Context) { var req model.DeleteMonitorScrapePoolReq id, err := utils.GetParamID(ctx) @@ -109,12 +109,12 @@ func (s *ScrapePoolHandler) DeleteMonitorScrapePool(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.scrapePoolService.DeleteMonitorScrapePool(ctx, &req) + return nil, h.scrapePoolService.DeleteMonitorScrapePool(ctx, &req) }) } // GetMonitorScrapePoolDetail 获取监控采集池详情 -func (s *ScrapePoolHandler) GetMonitorScrapePoolDetail(ctx *gin.Context) { +func (h *ScrapePoolHandler) GetMonitorScrapePoolDetail(ctx *gin.Context) { var req model.GetMonitorScrapePoolDetailReq id, err := utils.GetParamID(ctx) @@ -126,6 +126,6 @@ func (s *ScrapePoolHandler) GetMonitorScrapePoolDetail(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.scrapePoolService.GetMonitorScrapePoolDetail(ctx, &req) + return h.scrapePoolService.GetMonitorScrapePoolDetail(ctx, &req) }) } diff --git a/internal/prometheus/api/send_group.go b/internal/prometheus/api/send_group.go index c43cafda..d1ef9fa2 100644 --- a/internal/prometheus/api/send_group.go +++ b/internal/prometheus/api/send_group.go @@ -44,28 +44,28 @@ func NewSendGroupHandler(alertSendService alertEventService.AlertManagerSendServ } } -func (s *SendGroupHandler) RegisterRouters(server *gin.Engine) { +func (h *SendGroupHandler) RegisterRouters(server *gin.Engine) { monitorGroup := server.Group("/api/monitor") { - monitorGroup.GET("/send_groups/list", s.GetMonitorSendGroupList) - monitorGroup.GET("/send_groups/detail/:id", s.GetMonitorSendGroup) - monitorGroup.POST("/send_groups/create", s.CreateMonitorSendGroup) - monitorGroup.PUT("/send_groups/update/:id", s.UpdateMonitorSendGroup) - monitorGroup.DELETE("/send_groups/delete/:id", s.DeleteMonitorSendGroup) + monitorGroup.GET("/send_groups/list", h.GetMonitorSendGroupList) + monitorGroup.GET("/send_groups/detail/:id", h.GetMonitorSendGroup) + monitorGroup.POST("/send_groups/create", h.CreateMonitorSendGroup) + monitorGroup.PUT("/send_groups/update/:id", h.UpdateMonitorSendGroup) + monitorGroup.DELETE("/send_groups/delete/:id", h.DeleteMonitorSendGroup) } } // GetMonitorSendGroupList 获取发送组列表 -func (s *SendGroupHandler) GetMonitorSendGroupList(ctx *gin.Context) { +func (h *SendGroupHandler) GetMonitorSendGroupList(ctx *gin.Context) { var req model.GetMonitorSendGroupListReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.alertSendService.GetMonitorSendGroupList(ctx, &req) + return h.alertSendService.GetMonitorSendGroupList(ctx, &req) }) } // CreateMonitorSendGroup 创建新的发送组 -func (s *SendGroupHandler) CreateMonitorSendGroup(ctx *gin.Context) { +func (h *SendGroupHandler) CreateMonitorSendGroup(ctx *gin.Context) { var req model.CreateMonitorSendGroupReq uc := ctx.MustGet("user").(ijwt.UserClaims) @@ -73,12 +73,12 @@ func (s *SendGroupHandler) CreateMonitorSendGroup(ctx *gin.Context) { req.CreateUserName = uc.Username utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.alertSendService.CreateMonitorSendGroup(ctx, &req) + return nil, h.alertSendService.CreateMonitorSendGroup(ctx, &req) }) } // UpdateMonitorSendGroup 更新现有的发送组 -func (s *SendGroupHandler) UpdateMonitorSendGroup(ctx *gin.Context) { +func (h *SendGroupHandler) UpdateMonitorSendGroup(ctx *gin.Context) { var req model.UpdateMonitorSendGroupReq id, err := utils.GetParamID(ctx) @@ -90,12 +90,12 @@ func (s *SendGroupHandler) UpdateMonitorSendGroup(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.alertSendService.UpdateMonitorSendGroup(ctx, &req) + return nil, h.alertSendService.UpdateMonitorSendGroup(ctx, &req) }) } // DeleteMonitorSendGroup 删除指定的发送组 -func (s *SendGroupHandler) DeleteMonitorSendGroup(ctx *gin.Context) { +func (h *SendGroupHandler) DeleteMonitorSendGroup(ctx *gin.Context) { var req model.DeleteMonitorSendGroupReq id, err := utils.GetParamID(ctx) @@ -107,12 +107,12 @@ func (s *SendGroupHandler) DeleteMonitorSendGroup(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, s.alertSendService.DeleteMonitorSendGroup(ctx, &req) + return nil, h.alertSendService.DeleteMonitorSendGroup(ctx, &req) }) } // GetMonitorSendGroup 获取指定的发送组详情 -func (s *SendGroupHandler) GetMonitorSendGroup(ctx *gin.Context) { +func (h *SendGroupHandler) GetMonitorSendGroup(ctx *gin.Context) { var req model.GetMonitorSendGroupReq id, err := utils.GetParamID(ctx) @@ -124,6 +124,6 @@ func (s *SendGroupHandler) GetMonitorSendGroup(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return s.alertSendService.GetMonitorSendGroup(ctx, &req) + return h.alertSendService.GetMonitorSendGroup(ctx, &req) }) } diff --git a/internal/prometheus/dao/alert/event_dao.go b/internal/prometheus/dao/alert/event_dao.go index 819ac8d2..1ca3082f 100644 --- a/internal/prometheus/dao/alert/event_dao.go +++ b/internal/prometheus/dao/alert/event_dao.go @@ -69,19 +69,19 @@ func NewAlertManagerEventDAO(db *gorm.DB, l *zap.Logger, userDao userDao.UserDAO } // GetMonitorAlertEventById 获取告警事件 -func (a *alertManagerEventDAO) GetMonitorAlertEventById(ctx context.Context, id int) (*model.MonitorAlertEvent, error) { +func (d *alertManagerEventDAO) GetMonitorAlertEventById(ctx context.Context, id int) (*model.MonitorAlertEvent, error) { if id <= 0 { - a.l.Error("GetMonitorAlertEventById 失败: 无效的 ID", zap.Int("id", id)) + d.l.Error("GetMonitorAlertEventById 失败: 无效的 ID", zap.Int("id", id)) return nil, fmt.Errorf("无效的 ID: %d", id) } var alertEvent model.MonitorAlertEvent - if err := a.db.WithContext(ctx).First(&alertEvent, id).Error; err != nil { + if err := d.db.WithContext(ctx).First(&alertEvent, id).Error; err != nil { if err == gorm.ErrRecordNotFound { return nil, fmt.Errorf("未找到ID为 %d 的告警事件", id) } - a.l.Error("获取 MonitorAlertEvent 失败", zap.Error(err), zap.Int("id", id)) + d.l.Error("获取 MonitorAlertEvent 失败", zap.Error(err), zap.Int("id", id)) return nil, err } @@ -89,7 +89,7 @@ func (a *alertManagerEventDAO) GetMonitorAlertEventById(ctx context.Context, id } // SearchMonitorAlertEventByName 通过名称搜索告警事件 -func (a *alertManagerEventDAO) SearchMonitorAlertEventByName(ctx context.Context, name string) ([]*model.MonitorAlertEvent, int64, error) { +func (d *alertManagerEventDAO) SearchMonitorAlertEventByName(ctx context.Context, name string) ([]*model.MonitorAlertEvent, int64, error) { if name == "" { return nil, 0, fmt.Errorf("搜索名称不能为空") } @@ -98,19 +98,19 @@ func (a *alertManagerEventDAO) SearchMonitorAlertEventByName(ctx context.Context var total int64 // 先获取符合条件的记录总数 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorAlertEvent{}). Where("alert_name LIKE ?", "%"+name+"%"). Count(&total).Error; err != nil { - a.l.Error("获取搜索记录总数失败", zap.Error(err), zap.String("name", name)) + d.l.Error("获取搜索记录总数失败", zap.Error(err), zap.String("name", name)) return nil, 0, err } // 获取符合条件的记录列表 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("alert_name LIKE ?", "%"+name+"%"). Find(&alertEvents).Error; err != nil { - a.l.Error("通过名称搜索 MonitorAlertEvent 失败", zap.Error(err), zap.String("name", name)) + d.l.Error("通过名称搜索 MonitorAlertEvent 失败", zap.Error(err), zap.String("name", name)) return nil, 0, err } @@ -118,7 +118,7 @@ func (a *alertManagerEventDAO) SearchMonitorAlertEventByName(ctx context.Context } // GetMonitorAlertEventList 获取告警事件列表 -func (a *alertManagerEventDAO) GetMonitorAlertEventList(ctx context.Context, req *model.GetMonitorAlertEventListReq) ([]*model.MonitorAlertEvent, int64, error) { +func (d *alertManagerEventDAO) GetMonitorAlertEventList(ctx context.Context, req *model.GetMonitorAlertEventListReq) ([]*model.MonitorAlertEvent, int64, error) { var alertEvents []*model.MonitorAlertEvent var total int64 @@ -127,7 +127,7 @@ func (a *alertManagerEventDAO) GetMonitorAlertEventList(ctx context.Context, req limit := req.Size // 构建查询条件 - query := a.db.WithContext(ctx).Model(&model.MonitorAlertEvent{}) + query := d.db.WithContext(ctx).Model(&model.MonitorAlertEvent{}) // 添加搜索条件 if req.Search != "" { @@ -150,7 +150,7 @@ func (a *alertManagerEventDAO) GetMonitorAlertEventList(ctx context.Context, req // 先获取总数 if err := query.Count(&total).Error; err != nil { - a.l.Error("获取 MonitorAlertEvent 总数失败", zap.Error(err)) + d.l.Error("获取 MonitorAlertEvent 总数失败", zap.Error(err)) return nil, 0, err } @@ -159,7 +159,7 @@ func (a *alertManagerEventDAO) GetMonitorAlertEventList(ctx context.Context, req Offset(offset). Limit(limit). Find(&alertEvents).Error; err != nil { - a.l.Error("获取 MonitorAlertEvent 列表失败", zap.Error(err)) + d.l.Error("获取 MonitorAlertEvent 列表失败", zap.Error(err)) return nil, 0, err } @@ -167,18 +167,18 @@ func (a *alertManagerEventDAO) GetMonitorAlertEventList(ctx context.Context, req } // EventAlertClaim 认领告警事件 -func (a *alertManagerEventDAO) EventAlertClaim(ctx context.Context, event *model.MonitorAlertEvent) error { +func (d *alertManagerEventDAO) EventAlertClaim(ctx context.Context, event *model.MonitorAlertEvent) error { if event.ID <= 0 { return fmt.Errorf("无效的事件ID") } - result := a.db.WithContext(ctx). + result := d.db.WithContext(ctx). Model(&model.MonitorAlertEvent{}). Where("id = ?", event.ID). Updates(event) if result.Error != nil { - a.l.Error("EventAlertClaim 更新失败", zap.Error(result.Error), zap.Int("id", event.ID)) + d.l.Error("EventAlertClaim 更新失败", zap.Error(result.Error), zap.Int("id", event.ID)) return result.Error } @@ -190,19 +190,19 @@ func (a *alertManagerEventDAO) EventAlertClaim(ctx context.Context, event *model } // GetAlertEventByID 通过ID获取告警事件 -func (a *alertManagerEventDAO) GetAlertEventByID(ctx context.Context, id int) (*model.MonitorAlertEvent, error) { +func (d *alertManagerEventDAO) GetAlertEventByID(ctx context.Context, id int) (*model.MonitorAlertEvent, error) { if id <= 0 { - a.l.Error("GetAlertEventByID 失败: 无效的 ID", zap.Int("id", id)) + d.l.Error("GetAlertEventByID 失败: 无效的 ID", zap.Int("id", id)) return nil, fmt.Errorf("无效的 ID: %d", id) } var alertEvent model.MonitorAlertEvent - if err := a.db.WithContext(ctx).First(&alertEvent, id).Error; err != nil { + if err := d.db.WithContext(ctx).First(&alertEvent, id).Error; err != nil { if err == gorm.ErrRecordNotFound { return nil, fmt.Errorf("未找到ID为 %d 的告警事件", id) } - a.l.Error("获取 AlertEvent 失败", zap.Error(err), zap.Int("id", id)) + d.l.Error("获取 AlertEvent 失败", zap.Error(err), zap.Int("id", id)) return nil, err } @@ -210,12 +210,12 @@ func (a *alertManagerEventDAO) GetAlertEventByID(ctx context.Context, id int) (* } // UpdateAlertEvent 更新告警事件 -func (a *alertManagerEventDAO) UpdateAlertEvent(ctx context.Context, alertEvent *model.MonitorAlertEvent) error { +func (d *alertManagerEventDAO) UpdateAlertEvent(ctx context.Context, alertEvent *model.MonitorAlertEvent) error { if alertEvent.ID <= 0 { return fmt.Errorf("无效的事件ID") } - result := a.db.WithContext(ctx). + result := d.db.WithContext(ctx). Where("id = ?", alertEvent.ID). Updates(map[string]interface{}{ "alert_name": alertEvent.AlertName, @@ -230,7 +230,7 @@ func (a *alertManagerEventDAO) UpdateAlertEvent(ctx context.Context, alertEvent }) if result.Error != nil { - a.l.Error("更新 AlertEvent 失败", zap.Error(result.Error), zap.Int("id", alertEvent.ID)) + d.l.Error("更新 AlertEvent 失败", zap.Error(result.Error), zap.Int("id", alertEvent.ID)) return result.Error } @@ -242,7 +242,7 @@ func (a *alertManagerEventDAO) UpdateAlertEvent(ctx context.Context, alertEvent } // SendMessageToGroup 发送飞书群聊消息 -func (a *alertManagerEventDAO) SendMessageToGroup(ctx context.Context, url string, message string) error { +func (d *alertManagerEventDAO) SendMessageToGroup(ctx context.Context, url string, message string) error { if url == "" { return fmt.Errorf("url不能为空") } @@ -254,9 +254,9 @@ func (a *alertManagerEventDAO) SendMessageToGroup(ctx context.Context, url strin content := fmt.Sprintf(`{"msg_type":"text","content":{"text":"%s"}}`, message) // 发送消息到群组 - body, err := pkg.PostWithJson(ctx, a.httpClient, a.l, url, content, nil, nil) + body, err := pkg.PostWithJson(ctx, d.httpClient, d.l, url, content, nil, nil) if err != nil { - a.l.Error("发送飞书群聊消息失败", + d.l.Error("发送飞书群聊消息失败", zap.Error(err), zap.String("url", url), zap.String("message", message), @@ -265,7 +265,7 @@ func (a *alertManagerEventDAO) SendMessageToGroup(ctx context.Context, url strin return fmt.Errorf("发送飞书群聊消息失败: %w", err) } - a.l.Info("发送飞书群聊消息成功", + d.l.Info("发送飞书群聊消息成功", zap.String("url", url), zap.String("message", message), zap.Any("结果", string(body)), @@ -275,11 +275,11 @@ func (a *alertManagerEventDAO) SendMessageToGroup(ctx context.Context, url strin } // GetMonitorAlertEventTotal 获取监控告警事件总数 -func (a *alertManagerEventDAO) GetMonitorAlertEventTotal(ctx context.Context) (int, error) { +func (d *alertManagerEventDAO) GetMonitorAlertEventTotal(ctx context.Context) (int, error) { var count int64 - if err := a.db.WithContext(ctx).Model(&model.MonitorAlertEvent{}).Count(&count).Error; err != nil { - a.l.Error("获取监控告警事件总数失败", zap.Error(err)) + if err := d.db.WithContext(ctx).Model(&model.MonitorAlertEvent{}).Count(&count).Error; err != nil { + d.l.Error("获取监控告警事件总数失败", zap.Error(err)) return 0, err } diff --git a/internal/prometheus/dao/alert/pool_dao.go b/internal/prometheus/dao/alert/pool_dao.go index f9fa061b..dfc5ce90 100644 --- a/internal/prometheus/dao/alert/pool_dao.go +++ b/internal/prometheus/dao/alert/pool_dao.go @@ -58,12 +58,12 @@ func NewAlertManagerPoolDAO(db *gorm.DB, l *zap.Logger) AlertManagerPoolDAO { } // CreateMonitorAlertManagerPool 创建 AlertManagerPool -func (a *alertManagerPoolDAO) CreateMonitorAlertManagerPool(ctx context.Context, monitorAlertManagerPool *model.MonitorAlertManagerPool) error { +func (d *alertManagerPoolDAO) CreateMonitorAlertManagerPool(ctx context.Context, monitorAlertManagerPool *model.MonitorAlertManagerPool) error { monitorAlertManagerPool.CreatedAt = time.Now() monitorAlertManagerPool.UpdatedAt = time.Now() - if err := a.db.WithContext(ctx).Create(monitorAlertManagerPool).Error; err != nil { - a.l.Error("创建 MonitorAlertManagerPool 失败", zap.Error(err)) + if err := d.db.WithContext(ctx).Create(monitorAlertManagerPool).Error; err != nil { + d.l.Error("创建 MonitorAlertManagerPool 失败", zap.Error(err)) return err } @@ -71,15 +71,15 @@ func (a *alertManagerPoolDAO) CreateMonitorAlertManagerPool(ctx context.Context, } // UpdateMonitorAlertManagerPool 更新 AlertManagerPool -func (a *alertManagerPoolDAO) UpdateMonitorAlertManagerPool(ctx context.Context, monitorAlertManagerPool *model.MonitorAlertManagerPool) error { +func (d *alertManagerPoolDAO) UpdateMonitorAlertManagerPool(ctx context.Context, monitorAlertManagerPool *model.MonitorAlertManagerPool) error { if monitorAlertManagerPool.ID == 0 { - a.l.Error("UpdateMonitorAlertManagerPool 失败: ID 为 0", zap.Any("pool", monitorAlertManagerPool)) + d.l.Error("UpdateMonitorAlertManagerPool 失败: ID 为 0", zap.Any("pool", monitorAlertManagerPool)) return fmt.Errorf("monitorAlertManagerPool 的 ID 必须设置且非零") } monitorAlertManagerPool.UpdatedAt = time.Now() - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorAlertManagerPool{}). Where("id = ?", monitorAlertManagerPool.ID). Updates(map[string]interface{}{ @@ -93,7 +93,7 @@ func (a *alertManagerPoolDAO) UpdateMonitorAlertManagerPool(ctx context.Context, "receiver": monitorAlertManagerPool.Receiver, "updated_at": monitorAlertManagerPool.UpdatedAt, }).Error; err != nil { - a.l.Error("更新 MonitorAlertManagerPool 失败", zap.Error(err), zap.Int("id", monitorAlertManagerPool.ID)) + d.l.Error("更新 MonitorAlertManagerPool 失败", zap.Error(err), zap.Int("id", monitorAlertManagerPool.ID)) return err } @@ -101,23 +101,23 @@ func (a *alertManagerPoolDAO) UpdateMonitorAlertManagerPool(ctx context.Context, } // DeleteMonitorAlertManagerPool 删除 AlertManagerPool -func (a *alertManagerPoolDAO) DeleteMonitorAlertManagerPool(ctx context.Context, id int) error { +func (d *alertManagerPoolDAO) DeleteMonitorAlertManagerPool(ctx context.Context, id int) error { if id <= 0 { - a.l.Error("DeleteMonitorAlertManagerPool 失败: 无效的 ID", zap.Int("id", id)) + d.l.Error("DeleteMonitorAlertManagerPool 失败: 无效的 ID", zap.Int("id", id)) return fmt.Errorf("无效的 ID: %d", id) } - result := a.db.WithContext(ctx). + result := d.db.WithContext(ctx). Where("id = ?", id). Delete(&model.MonitorAlertManagerPool{}) if result.Error != nil { - a.l.Error("删除 MonitorAlertManagerPool 失败", zap.Error(result.Error), zap.Int("id", id)) + d.l.Error("删除 MonitorAlertManagerPool 失败", zap.Error(result.Error), zap.Int("id", id)) return fmt.Errorf("删除 ID 为 %d 的 MonitorAlertManagerPool 失败: %w", id, result.Error) } if result.RowsAffected == 0 { - a.l.Warn("尝试删除不存在的 MonitorAlertManagerPool", zap.Int("id", id)) + d.l.Warn("尝试删除不存在的 MonitorAlertManagerPool", zap.Int("id", id)) return fmt.Errorf("ID 为 %d 的 MonitorAlertManagerPool 不存在", id) } @@ -125,19 +125,19 @@ func (a *alertManagerPoolDAO) DeleteMonitorAlertManagerPool(ctx context.Context, } // GetAlertPoolByID 通过 ID 获取 AlertManagerPool -func (a *alertManagerPoolDAO) GetAlertPoolByID(ctx context.Context, poolID int) (*model.MonitorAlertManagerPool, error) { +func (d *alertManagerPoolDAO) GetAlertPoolByID(ctx context.Context, poolID int) (*model.MonitorAlertManagerPool, error) { if poolID <= 0 { - a.l.Error("GetAlertPoolByID 失败: 无效的 poolID", zap.Int("poolID", poolID)) + d.l.Error("GetAlertPoolByID 失败: 无效的 poolID", zap.Int("poolID", poolID)) return nil, fmt.Errorf("无效的 poolID: %d", poolID) } var alertPool model.MonitorAlertManagerPool - if err := a.db.WithContext(ctx).Where("id = ?", poolID).First(&alertPool).Error; err != nil { + if err := d.db.WithContext(ctx).Where("id = ?", poolID).First(&alertPool).Error; err != nil { if err == gorm.ErrRecordNotFound { return nil, fmt.Errorf("未找到 ID 为 %d 的 AlertPool", poolID) } - a.l.Error("获取 AlertPool 失败", zap.Error(err), zap.Int("poolID", poolID)) + d.l.Error("获取 AlertPool 失败", zap.Error(err), zap.Int("poolID", poolID)) return nil, err } @@ -145,18 +145,18 @@ func (a *alertManagerPoolDAO) GetAlertPoolByID(ctx context.Context, poolID int) } // CheckMonitorAlertManagerPoolExists 检查 AlertManagerPool 是否存在 -func (a *alertManagerPoolDAO) CheckMonitorAlertManagerPoolExists(ctx context.Context, alertManagerPool *model.MonitorAlertManagerPool) (bool, error) { +func (d *alertManagerPoolDAO) CheckMonitorAlertManagerPoolExists(ctx context.Context, alertManagerPool *model.MonitorAlertManagerPool) (bool, error) { if alertManagerPool.Name == "" { return false, fmt.Errorf("alertManagerPool 名称不能为空") } var count int64 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorAlertManagerPool{}). Where("name = ?", alertManagerPool.Name). Count(&count).Error; err != nil { - a.l.Error("检查 MonitorAlertManagerPool 是否存在失败", zap.Error(err)) + d.l.Error("检查 MonitorAlertManagerPool 是否存在失败", zap.Error(err)) return false, err } @@ -164,7 +164,7 @@ func (a *alertManagerPoolDAO) CheckMonitorAlertManagerPoolExists(ctx context.Con } // GetMonitorAlertManagerPoolList 获取 AlertManagerPool 列表 -func (a *alertManagerPoolDAO) GetMonitorAlertManagerPoolList(ctx context.Context, req *model.GetMonitorAlertManagerPoolListReq) ([]*model.MonitorAlertManagerPool, int64, error) { +func (d *alertManagerPoolDAO) GetMonitorAlertManagerPoolList(ctx context.Context, req *model.GetMonitorAlertManagerPoolListReq) ([]*model.MonitorAlertManagerPool, int64, error) { if req.Page <= 0 { req.Page = 1 } @@ -177,7 +177,7 @@ func (a *alertManagerPoolDAO) GetMonitorAlertManagerPoolList(ctx context.Context offset := (req.Page - 1) * req.Size limit := req.Size - query := a.db.WithContext(ctx).Model(&model.MonitorAlertManagerPool{}) + query := d.db.WithContext(ctx).Model(&model.MonitorAlertManagerPool{}) if req.Search != "" { query = query.Where("name LIKE ?", "%"+req.Search+"%") @@ -188,28 +188,28 @@ func (a *alertManagerPoolDAO) GetMonitorAlertManagerPoolList(ctx context.Context // 先获取总数 if err := query.Count(&count).Error; err != nil { - a.l.Error("获取 MonitorAlertManagerPool 总数失败", zap.Error(err)) + d.l.Error("获取 MonitorAlertManagerPool 总数失败", zap.Error(err)) return nil, 0, err } // 再获取分页数据 if err := query.Order("created_at DESC").Offset(offset).Limit(limit).Find(&pools).Error; err != nil { - a.l.Error("获取 MonitorAlertManagerPool 列表失败", zap.Error(err)) + d.l.Error("获取 MonitorAlertManagerPool 列表失败", zap.Error(err)) return nil, 0, err } return pools, count, nil } -func (a *alertManagerPoolDAO) CheckAlertIpExists(ctx context.Context, req *model.MonitorAlertManagerPool) error { +func (d *alertManagerPoolDAO) CheckAlertIpExists(ctx context.Context, req *model.MonitorAlertManagerPool) error { var count int64 for _, instance := range req.AlertManagerInstances { - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorAlertManagerPool{}). Where("id != ? AND alert_manager_instances LIKE ?", req.ID, "%"+instance+"%"). Count(&count).Error; err != nil { - a.l.Error("检查 AlertManager Pool 是否存在失败", zap.Error(err)) + d.l.Error("检查 AlertManager Pool 是否存在失败", zap.Error(err)) return err } if count > 0 { diff --git a/internal/prometheus/dao/alert/record_dao.go b/internal/prometheus/dao/alert/record_dao.go index ef08c0ce..d2e37606 100644 --- a/internal/prometheus/dao/alert/record_dao.go +++ b/internal/prometheus/dao/alert/record_dao.go @@ -60,28 +60,28 @@ func NewAlertManagerRecordDAO(db *gorm.DB, l *zap.Logger, userDao userDao.UserDA } // GetMonitorRecordRuleByPoolId 通过 poolId 获取 MonitorRecordRule -func (a *alertManagerRecordDAO) GetMonitorRecordRuleByPoolId(ctx context.Context, poolId int) ([]*model.MonitorRecordRule, int64, error) { +func (d *alertManagerRecordDAO) GetMonitorRecordRuleByPoolId(ctx context.Context, poolId int) ([]*model.MonitorRecordRule, int64, error) { if poolId <= 0 { - a.l.Error("GetMonitorRecordRuleByPoolId 失败: 无效的 poolId", zap.Int("poolId", poolId)) + d.l.Error("GetMonitorRecordRuleByPoolId 失败: 无效的 poolId", zap.Int("poolId", poolId)) return nil, 0, fmt.Errorf("无效的 poolId: %d", poolId) } var recordRules []*model.MonitorRecordRule var count int64 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorRecordRule{}). Where("pool_id = ?", poolId). Count(&count).Error; err != nil { - a.l.Error("获取 MonitorRecordRule 总数失败", zap.Error(err), zap.Int("poolId", poolId)) + d.l.Error("获取 MonitorRecordRule 总数失败", zap.Error(err), zap.Int("poolId", poolId)) return nil, 0, err } - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("pool_id = ?", poolId). Where("enable = ?", 1). Find(&recordRules).Error; err != nil { - a.l.Error("获取 MonitorRecordRule 失败", zap.Error(err), zap.Int("poolId", poolId)) + d.l.Error("获取 MonitorRecordRule 失败", zap.Error(err), zap.Int("poolId", poolId)) return nil, 0, err } @@ -89,7 +89,7 @@ func (a *alertManagerRecordDAO) GetMonitorRecordRuleByPoolId(ctx context.Context } // GetMonitorRecordRuleList 获取 MonitorRecordRule 列表 -func (a *alertManagerRecordDAO) GetMonitorRecordRuleList(ctx context.Context, req *model.GetMonitorRecordRuleListReq) ([]*model.MonitorRecordRule, int64, error) { +func (d *alertManagerRecordDAO) GetMonitorRecordRuleList(ctx context.Context, req *model.GetMonitorRecordRuleListReq) ([]*model.MonitorRecordRule, int64, error) { if req.Page <= 0 { req.Page = 1 } @@ -102,7 +102,7 @@ func (a *alertManagerRecordDAO) GetMonitorRecordRuleList(ctx context.Context, re offset := (req.Page - 1) * req.Size limit := req.Size - query := a.db.WithContext(ctx).Model(&model.MonitorRecordRule{}) + query := d.db.WithContext(ctx).Model(&model.MonitorRecordRule{}) if req.Search != "" { query = query.Where("name LIKE ?", "%"+req.Search+"%") @@ -121,13 +121,13 @@ func (a *alertManagerRecordDAO) GetMonitorRecordRuleList(ctx context.Context, re // 先获取总数 if err := query.Count(&count).Error; err != nil { - a.l.Error("获取 MonitorRecordRule 总数失败", zap.Error(err)) + d.l.Error("获取 MonitorRecordRule 总数失败", zap.Error(err)) return nil, 0, err } // 再获取分页数据 if err := query.Order("created_at DESC").Offset(offset).Limit(limit).Find(&recordRules).Error; err != nil { - a.l.Error("获取 MonitorRecordRule 列表失败", zap.Error(err)) + d.l.Error("获取 MonitorRecordRule 列表失败", zap.Error(err)) return nil, 0, err } @@ -135,9 +135,9 @@ func (a *alertManagerRecordDAO) GetMonitorRecordRuleList(ctx context.Context, re } // CreateMonitorRecordRule 创建 MonitorRecordRule -func (a *alertManagerRecordDAO) CreateMonitorRecordRule(ctx context.Context, recordRule *model.MonitorRecordRule) error { - if err := a.db.WithContext(ctx).Create(recordRule).Error; err != nil { - a.l.Error("创建 MonitorRecordRule 失败", zap.Error(err)) +func (d *alertManagerRecordDAO) CreateMonitorRecordRule(ctx context.Context, recordRule *model.MonitorRecordRule) error { + if err := d.db.WithContext(ctx).Create(recordRule).Error; err != nil { + d.l.Error("创建 MonitorRecordRule 失败", zap.Error(err)) return err } @@ -145,16 +145,16 @@ func (a *alertManagerRecordDAO) CreateMonitorRecordRule(ctx context.Context, rec } // GetMonitorRecordRuleById 通过 ID 获取 MonitorRecordRule -func (a *alertManagerRecordDAO) GetMonitorRecordRuleById(ctx context.Context, id int) (*model.MonitorRecordRule, error) { +func (d *alertManagerRecordDAO) GetMonitorRecordRuleById(ctx context.Context, id int) (*model.MonitorRecordRule, error) { if id <= 0 { - a.l.Error("GetMonitorRecordRuleById 失败: 无效的 ID", zap.Int("id", id)) + d.l.Error("GetMonitorRecordRuleById 失败: 无效的 ID", zap.Int("id", id)) return nil, fmt.Errorf("无效的 ID: %d", id) } var recordRule model.MonitorRecordRule - if err := a.db.WithContext(ctx).Where("id = ?", id).First(&recordRule).Error; err != nil { - a.l.Error("获取 MonitorRecordRule 失败", zap.Error(err), zap.Int("id", id)) + if err := d.db.WithContext(ctx).Where("id = ?", id).First(&recordRule).Error; err != nil { + d.l.Error("获取 MonitorRecordRule 失败", zap.Error(err), zap.Int("id", id)) return nil, err } @@ -162,17 +162,17 @@ func (a *alertManagerRecordDAO) GetMonitorRecordRuleById(ctx context.Context, id } // UpdateMonitorRecordRule 更新 MonitorRecordRule -func (a *alertManagerRecordDAO) UpdateMonitorRecordRule(ctx context.Context, recordRule *model.MonitorRecordRule) error { +func (d *alertManagerRecordDAO) UpdateMonitorRecordRule(ctx context.Context, recordRule *model.MonitorRecordRule) error { if recordRule.ID == 0 { - a.l.Error("UpdateMonitorRecordRule 失败: ID 为 0", zap.Any("recordRule", recordRule)) + d.l.Error("UpdateMonitorRecordRule 失败: ID 为 0", zap.Any("recordRule", recordRule)) return fmt.Errorf("monitorRecordRule 的 ID 必须设置且非零") } - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorRecordRule{}). Where("id = ?", recordRule.ID). Updates(recordRule).Error; err != nil { - a.l.Error("更新 MonitorRecordRule 失败", zap.Error(err), zap.Int("id", recordRule.ID)) + d.l.Error("更新 MonitorRecordRule 失败", zap.Error(err), zap.Int("id", recordRule.ID)) return err } @@ -180,17 +180,17 @@ func (a *alertManagerRecordDAO) UpdateMonitorRecordRule(ctx context.Context, rec } // DeleteMonitorRecordRule 删除 MonitorRecordRule -func (a *alertManagerRecordDAO) DeleteMonitorRecordRule(ctx context.Context, ruleID int) error { +func (d *alertManagerRecordDAO) DeleteMonitorRecordRule(ctx context.Context, ruleID int) error { if ruleID <= 0 { - a.l.Error("DeleteMonitorRecordRule 失败: 无效的 ruleID", zap.Int("ruleID", ruleID)) + d.l.Error("DeleteMonitorRecordRule 失败: 无效的 ruleID", zap.Int("ruleID", ruleID)) return fmt.Errorf("无效的 ruleID: %d", ruleID) } // 执行删除操作 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("id = ?", ruleID). Delete(&model.MonitorRecordRule{}).Error; err != nil { - a.l.Error("删除 MonitorRecordRule 失败", zap.Error(err), zap.Int("ruleID", ruleID)) + d.l.Error("删除 MonitorRecordRule 失败", zap.Error(err), zap.Int("ruleID", ruleID)) return fmt.Errorf("删除 ID 为 %d 的 MonitorRecordRule 失败: %w", ruleID, err) } @@ -198,10 +198,10 @@ func (a *alertManagerRecordDAO) DeleteMonitorRecordRule(ctx context.Context, rul } // CheckMonitorRecordRuleNameExists 检查 MonitorRecordRule 名称是否存在 -func (a *alertManagerRecordDAO) CheckMonitorRecordRuleNameExists(ctx context.Context, recordRule *model.MonitorRecordRule) (bool, error) { +func (d *alertManagerRecordDAO) CheckMonitorRecordRuleNameExists(ctx context.Context, recordRule *model.MonitorRecordRule) (bool, error) { var count int64 - query := a.db.WithContext(ctx). + query := d.db.WithContext(ctx). Model(&model.MonitorRecordRule{}). Where("name = ?", recordRule.Name) @@ -211,7 +211,7 @@ func (a *alertManagerRecordDAO) CheckMonitorRecordRuleNameExists(ctx context.Con } if err := query.Count(&count).Error; err != nil { - a.l.Error("检查 MonitorRecordRule 名称是否存在失败", zap.Error(err)) + d.l.Error("检查 MonitorRecordRule 名称是否存在失败", zap.Error(err)) return false, err } diff --git a/internal/prometheus/dao/alert/rule_dao.go b/internal/prometheus/dao/alert/rule_dao.go index daa50600..1563eeda 100644 --- a/internal/prometheus/dao/alert/rule_dao.go +++ b/internal/prometheus/dao/alert/rule_dao.go @@ -60,9 +60,9 @@ func NewAlertManagerRuleDAO(db *gorm.DB, l *zap.Logger, userDao userDao.UserDAO) } // GetMonitorAlertRuleByPoolID 通过 poolID 获取 MonitorAlertRule -func (a *alertManagerRuleDAO) GetMonitorAlertRuleByPoolID(ctx context.Context, poolID int) ([]*model.MonitorAlertRule, int64, error) { +func (d *alertManagerRuleDAO) GetMonitorAlertRuleByPoolID(ctx context.Context, poolID int) ([]*model.MonitorAlertRule, int64, error) { if poolID <= 0 { - a.l.Error("GetMonitorAlertRuleByPoolID 失败: 无效的 poolID", zap.Int("poolID", poolID)) + d.l.Error("GetMonitorAlertRuleByPoolID 失败: 无效的 poolID", zap.Int("poolID", poolID)) return nil, 0, fmt.Errorf("无效的 poolID: %d", poolID) } @@ -70,21 +70,21 @@ func (a *alertManagerRuleDAO) GetMonitorAlertRuleByPoolID(ctx context.Context, p var count int64 // 先获取总数 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorAlertRule{}). Where("enable = ?", true). Where("pool_id = ?", poolID). Count(&count).Error; err != nil { - a.l.Error("获取 MonitorAlertRule 总数失败", zap.Error(err), zap.Int("poolID", poolID)) + d.l.Error("获取 MonitorAlertRule 总数失败", zap.Error(err), zap.Int("poolID", poolID)) return nil, 0, err } // 获取数据列表 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("enable = ?", true). Where("pool_id = ?", poolID). Find(&alertRules).Error; err != nil { - a.l.Error("获取 MonitorAlertRule 失败", zap.Error(err), zap.Int("poolID", poolID)) + d.l.Error("获取 MonitorAlertRule 失败", zap.Error(err), zap.Int("poolID", poolID)) return nil, 0, err } @@ -92,11 +92,11 @@ func (a *alertManagerRuleDAO) GetMonitorAlertRuleByPoolID(ctx context.Context, p } // GetMonitorAlertRuleList 获取所有 MonitorAlertRule -func (a *alertManagerRuleDAO) GetMonitorAlertRuleList(ctx context.Context, req *model.GetMonitorAlertRuleListReq) ([]*model.MonitorAlertRule, int64, error) { +func (d *alertManagerRuleDAO) GetMonitorAlertRuleList(ctx context.Context, req *model.GetMonitorAlertRuleListReq) ([]*model.MonitorAlertRule, int64, error) { var alertRules []*model.MonitorAlertRule var count int64 - query := a.db.WithContext(ctx).Model(&model.MonitorAlertRule{}) + query := d.db.WithContext(ctx).Model(&model.MonitorAlertRule{}) // 添加筛选条件 if req.Search != "" { @@ -113,13 +113,13 @@ func (a *alertManagerRuleDAO) GetMonitorAlertRuleList(ctx context.Context, req * // 先获取总数 if err := query.Count(&count).Error; err != nil { - a.l.Error("获取 MonitorAlertRule 总数失败", zap.Error(err)) + d.l.Error("获取 MonitorAlertRule 总数失败", zap.Error(err)) return nil, 0, err } // 获取数据列表 if err := query.Offset((req.Page - 1) * req.Size).Limit(req.Size).Find(&alertRules).Error; err != nil { - a.l.Error("获取所有 MonitorAlertRule 失败", zap.Error(err)) + d.l.Error("获取所有 MonitorAlertRule 失败", zap.Error(err)) return nil, 0, err } @@ -127,9 +127,9 @@ func (a *alertManagerRuleDAO) GetMonitorAlertRuleList(ctx context.Context, req * } // CreateMonitorAlertRule 创建 MonitorAlertRule -func (a *alertManagerRuleDAO) CreateMonitorAlertRule(ctx context.Context, monitorAlertRule *model.MonitorAlertRule) error { - if err := a.db.WithContext(ctx).Create(monitorAlertRule).Error; err != nil { - a.l.Error("创建 MonitorAlertRule 失败", zap.Error(err)) +func (d *alertManagerRuleDAO) CreateMonitorAlertRule(ctx context.Context, monitorAlertRule *model.MonitorAlertRule) error { + if err := d.db.WithContext(ctx).Create(monitorAlertRule).Error; err != nil { + d.l.Error("创建 MonitorAlertRule 失败", zap.Error(err)) return err } @@ -137,16 +137,16 @@ func (a *alertManagerRuleDAO) CreateMonitorAlertRule(ctx context.Context, monito } // GetMonitorAlertRuleByID 通过 ID 获取 MonitorAlertRule -func (a *alertManagerRuleDAO) GetMonitorAlertRuleByID(ctx context.Context, id int) (*model.MonitorAlertRule, error) { +func (d *alertManagerRuleDAO) GetMonitorAlertRuleByID(ctx context.Context, id int) (*model.MonitorAlertRule, error) { if id <= 0 { - a.l.Error("GetMonitorAlertRuleByID 失败: 无效的 ID", zap.Int("id", id)) + d.l.Error("GetMonitorAlertRuleByID 失败: 无效的 ID", zap.Int("id", id)) return nil, fmt.Errorf("无效的 ID: %d", id) } var alertRule model.MonitorAlertRule - if err := a.db.WithContext(ctx).Where("id = ?", id).First(&alertRule).Error; err != nil { - a.l.Error("获取 MonitorAlertRule 失败", zap.Error(err), zap.Int("id", id)) + if err := d.db.WithContext(ctx).Where("id = ?", id).First(&alertRule).Error; err != nil { + d.l.Error("获取 MonitorAlertRule 失败", zap.Error(err), zap.Int("id", id)) return nil, err } @@ -154,13 +154,13 @@ func (a *alertManagerRuleDAO) GetMonitorAlertRuleByID(ctx context.Context, id in } // UpdateMonitorAlertRule 更新 MonitorAlertRule -func (a *alertManagerRuleDAO) UpdateMonitorAlertRule(ctx context.Context, req *model.UpdateMonitorAlertRuleReq) error { +func (d *alertManagerRuleDAO) UpdateMonitorAlertRule(ctx context.Context, req *model.UpdateMonitorAlertRuleReq) error { if req.ID <= 0 { - a.l.Error("UpdateMonitorAlertRule 失败: ID 为 0", zap.Any("req", req)) + d.l.Error("UpdateMonitorAlertRule 失败: ID 为 0", zap.Any("req", req)) return fmt.Errorf("MonitorAlertRule 的 ID 必须设置且非零") } - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorAlertRule{}). Where("id = ?", req.ID). Updates(map[string]interface{}{ @@ -176,7 +176,7 @@ func (a *alertManagerRuleDAO) UpdateMonitorAlertRule(ctx context.Context, req *m "labels": req.Labels, "annotations": req.Annotations, }).Error; err != nil { - a.l.Error("更新 MonitorAlertRule 失败", zap.Error(err), zap.Int("id", req.ID)) + d.l.Error("更新 MonitorAlertRule 失败", zap.Error(err), zap.Int("id", req.ID)) return err } @@ -184,16 +184,16 @@ func (a *alertManagerRuleDAO) UpdateMonitorAlertRule(ctx context.Context, req *m } // DeleteMonitorAlertRule 删除 MonitorAlertRule -func (a *alertManagerRuleDAO) DeleteMonitorAlertRule(ctx context.Context, ruleID int) error { +func (d *alertManagerRuleDAO) DeleteMonitorAlertRule(ctx context.Context, ruleID int) error { if ruleID <= 0 { - a.l.Error("DeleteMonitorAlertRule 失败: 无效的 ruleID", zap.Int("ruleID", ruleID)) + d.l.Error("DeleteMonitorAlertRule 失败: 无效的 ruleID", zap.Int("ruleID", ruleID)) return fmt.Errorf("无效的 ruleID: %d", ruleID) } - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("id = ?", ruleID). Delete(&model.MonitorAlertRule{}).Error; err != nil { - a.l.Error("删除告警规则失败", zap.Error(err), zap.Int("ruleID", ruleID)) + d.l.Error("删除告警规则失败", zap.Error(err), zap.Int("ruleID", ruleID)) return err } @@ -201,27 +201,27 @@ func (a *alertManagerRuleDAO) DeleteMonitorAlertRule(ctx context.Context, ruleID } // GetAssociatedResourcesBySendGroupID 获取与发送组关联的告警规则 -func (a *alertManagerRuleDAO) GetAssociatedResourcesBySendGroupID(ctx context.Context, sendGroupID int) ([]*model.MonitorAlertRule, int64, error) { +func (d *alertManagerRuleDAO) GetAssociatedResourcesBySendGroupID(ctx context.Context, sendGroupID int) ([]*model.MonitorAlertRule, int64, error) { if sendGroupID <= 0 { - a.l.Error("GetAssociatedResourcesBySendGroupID 失败: 无效的 sendGroupID", zap.Int("sendGroupID", sendGroupID)) + d.l.Error("GetAssociatedResourcesBySendGroupID 失败: 无效的 sendGroupID", zap.Int("sendGroupID", sendGroupID)) return nil, 0, fmt.Errorf("无效的 sendGroupID: %d", sendGroupID) } var rules []*model.MonitorAlertRule var count int64 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorAlertRule{}). Where("send_group_id = ?", sendGroupID). Count(&count).Error; err != nil { - a.l.Error("获取关联的告警规则总数失败", zap.Error(err), zap.Int("sendGroupID", sendGroupID)) + d.l.Error("获取关联的告警规则总数失败", zap.Error(err), zap.Int("sendGroupID", sendGroupID)) return nil, 0, err } - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("send_group_id = ?", sendGroupID). Find(&rules).Error; err != nil { - a.l.Error("获取关联的告警规则失败", zap.Error(err), zap.Int("sendGroupID", sendGroupID)) + d.l.Error("获取关联的告警规则失败", zap.Error(err), zap.Int("sendGroupID", sendGroupID)) return nil, 0, err } diff --git a/internal/prometheus/dao/alert/send_dao.go b/internal/prometheus/dao/alert/send_dao.go index 6ad4acbb..048d77ce 100644 --- a/internal/prometheus/dao/alert/send_dao.go +++ b/internal/prometheus/dao/alert/send_dao.go @@ -61,9 +61,9 @@ func NewAlertManagerSendDAO(db *gorm.DB, l *zap.Logger) AlertManagerSendDAO { } // GetMonitorSendGroupByPoolID 通过 poolID 获取 MonitorSendGroup -func (a *alertManagerSendDAO) GetMonitorSendGroupByPoolID(ctx context.Context, poolID int) ([]*model.MonitorSendGroup, int64, error) { +func (d *alertManagerSendDAO) GetMonitorSendGroupByPoolID(ctx context.Context, poolID int) ([]*model.MonitorSendGroup, int64, error) { if poolID <= 0 { - a.l.Error("GetMonitorSendGroupByPoolID 失败: 无效的 poolID", zap.Int("poolID", poolID)) + d.l.Error("GetMonitorSendGroupByPoolID 失败: 无效的 poolID", zap.Int("poolID", poolID)) return nil, 0, fmt.Errorf("无效的 poolID: %d", poolID) } @@ -71,18 +71,18 @@ func (a *alertManagerSendDAO) GetMonitorSendGroupByPoolID(ctx context.Context, p var count int64 // 先获取总数 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorSendGroup{}). Where("pool_id = ?", poolID). Count(&count).Error; err != nil { - a.l.Error("获取 MonitorSendGroup 总数失败", zap.Error(err), zap.Int("poolID", poolID)) + d.l.Error("获取 MonitorSendGroup 总数失败", zap.Error(err), zap.Int("poolID", poolID)) return nil, 0, err } - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("pool_id = ?", poolID). Find(&sendGroups).Error; err != nil { - a.l.Error("获取 MonitorSendGroup 失败", zap.Error(err), zap.Int("poolID", poolID)) + d.l.Error("获取 MonitorSendGroup 失败", zap.Error(err), zap.Int("poolID", poolID)) return nil, 0, err } @@ -90,9 +90,9 @@ func (a *alertManagerSendDAO) GetMonitorSendGroupByPoolID(ctx context.Context, p } // GetMonitorSendGroupByOnDutyGroupID 通过 onDutyGroupID 获取 MonitorSendGroup -func (a *alertManagerSendDAO) GetMonitorSendGroupByOnDutyGroupID(ctx context.Context, onDutyGroupID int) ([]*model.MonitorSendGroup, int64, error) { +func (d *alertManagerSendDAO) GetMonitorSendGroupByOnDutyGroupID(ctx context.Context, onDutyGroupID int) ([]*model.MonitorSendGroup, int64, error) { if onDutyGroupID <= 0 { - a.l.Error("GetMonitorSendGroupByOnDutyGroupID 失败: 无效的 onDutyGroupID", zap.Int("onDutyGroupID", onDutyGroupID)) + d.l.Error("GetMonitorSendGroupByOnDutyGroupID 失败: 无效的 onDutyGroupID", zap.Int("onDutyGroupID", onDutyGroupID)) return nil, 0, fmt.Errorf("无效的 onDutyGroupID: %d", onDutyGroupID) } @@ -100,18 +100,18 @@ func (a *alertManagerSendDAO) GetMonitorSendGroupByOnDutyGroupID(ctx context.Con var count int64 // 先获取总数 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorSendGroup{}). Where("on_duty_group_id = ?", onDutyGroupID). Count(&count).Error; err != nil { - a.l.Error("获取 MonitorSendGroup 总数失败", zap.Error(err), zap.Int("onDutyGroupID", onDutyGroupID)) + d.l.Error("获取 MonitorSendGroup 总数失败", zap.Error(err), zap.Int("onDutyGroupID", onDutyGroupID)) return nil, 0, err } - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("on_duty_group_id = ?", onDutyGroupID). Find(&sendGroups).Error; err != nil { - a.l.Error("获取 MonitorSendGroup 失败", zap.Error(err), zap.Int("onDutyGroupID", onDutyGroupID)) + d.l.Error("获取 MonitorSendGroup 失败", zap.Error(err), zap.Int("onDutyGroupID", onDutyGroupID)) return nil, 0, err } @@ -119,11 +119,11 @@ func (a *alertManagerSendDAO) GetMonitorSendGroupByOnDutyGroupID(ctx context.Con } // GetMonitorSendGroupList 获取所有 MonitorSendGroup -func (a *alertManagerSendDAO) GetMonitorSendGroupList(ctx context.Context, req *model.GetMonitorSendGroupListReq) ([]*model.MonitorSendGroup, int64, error) { +func (d *alertManagerSendDAO) GetMonitorSendGroupList(ctx context.Context, req *model.GetMonitorSendGroupListReq) ([]*model.MonitorSendGroup, int64, error) { var sendGroups []*model.MonitorSendGroup var count int64 - query := a.db.WithContext(ctx).Model(&model.MonitorSendGroup{}) + query := d.db.WithContext(ctx).Model(&model.MonitorSendGroup{}) // 添加筛选条件 if req.Search != "" { @@ -144,7 +144,7 @@ func (a *alertManagerSendDAO) GetMonitorSendGroupList(ctx context.Context, req * // 先获取总数 if err := query.Count(&count).Error; err != nil { - a.l.Error("获取 MonitorSendGroup 总数失败", zap.Error(err)) + d.l.Error("获取 MonitorSendGroup 总数失败", zap.Error(err)) return nil, 0, err } @@ -158,7 +158,7 @@ func (a *alertManagerSendDAO) GetMonitorSendGroupList(ctx context.Context, req * Offset(offset). Limit(limit). Find(&sendGroups).Error; err != nil { - a.l.Error("获取所有 MonitorSendGroup 失败", zap.Error(err)) + d.l.Error("获取所有 MonitorSendGroup 失败", zap.Error(err)) return nil, 0, err } @@ -166,15 +166,15 @@ func (a *alertManagerSendDAO) GetMonitorSendGroupList(ctx context.Context, req * } // GetMonitorSendGroupByID 通过 ID 获取 MonitorSendGroup -func (a *alertManagerSendDAO) GetMonitorSendGroupByID(ctx context.Context, id int) (*model.MonitorSendGroup, error) { +func (d *alertManagerSendDAO) GetMonitorSendGroupByID(ctx context.Context, id int) (*model.MonitorSendGroup, error) { if id <= 0 { - a.l.Error("GetMonitorSendGroupByID 失败: 无效的 ID", zap.Int("id", id)) + d.l.Error("GetMonitorSendGroupByID 失败: 无效的 ID", zap.Int("id", id)) return nil, fmt.Errorf("无效的 ID: %d", id) } var sendGroup model.MonitorSendGroup - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("id = ?", id). Preload("StaticReceiveUsers"). Preload("FirstUpgradeUsers"). @@ -183,7 +183,7 @@ func (a *alertManagerSendDAO) GetMonitorSendGroupByID(ctx context.Context, id in if err == gorm.ErrRecordNotFound { return nil, fmt.Errorf("未找到 ID 为 %d 的记录", id) } - a.l.Error("获取 MonitorSendGroup 失败", zap.Error(err), zap.Int("id", id)) + d.l.Error("获取 MonitorSendGroup 失败", zap.Error(err), zap.Int("id", id)) return nil, err } @@ -191,18 +191,18 @@ func (a *alertManagerSendDAO) GetMonitorSendGroupByID(ctx context.Context, id in } // CreateMonitorSendGroup 创建 MonitorSendGroup -func (a *alertManagerSendDAO) CreateMonitorSendGroup(ctx context.Context, monitorSendGroup *model.MonitorSendGroup) error { +func (d *alertManagerSendDAO) CreateMonitorSendGroup(ctx context.Context, monitorSendGroup *model.MonitorSendGroup) error { // 开启事务 - tx := a.db.WithContext(ctx).Begin() + tx := d.db.WithContext(ctx).Begin() if tx.Error != nil { - a.l.Error("开启事务失败", zap.Error(tx.Error)) + d.l.Error("开启事务失败", zap.Error(tx.Error)) return tx.Error } // 创建发送组基本信息 if err := tx.Create(monitorSendGroup).Error; err != nil { tx.Rollback() - a.l.Error("创建 MonitorSendGroup 失败", zap.Error(err)) + d.l.Error("创建 MonitorSendGroup 失败", zap.Error(err)) return err } @@ -210,7 +210,7 @@ func (a *alertManagerSendDAO) CreateMonitorSendGroup(ctx context.Context, monito if len(monitorSendGroup.StaticReceiveUsers) > 0 { if err := tx.Model(monitorSendGroup).Association("StaticReceiveUsers").Replace(monitorSendGroup.StaticReceiveUsers); err != nil { tx.Rollback() - a.l.Error("关联静态接收用户失败", zap.Error(err)) + d.l.Error("关联静态接收用户失败", zap.Error(err)) return err } } @@ -219,7 +219,7 @@ func (a *alertManagerSendDAO) CreateMonitorSendGroup(ctx context.Context, monito if len(monitorSendGroup.FirstUpgradeUsers) > 0 { if err := tx.Model(monitorSendGroup).Association("FirstUpgradeUsers").Replace(monitorSendGroup.FirstUpgradeUsers); err != nil { tx.Rollback() - a.l.Error("关联第一级升级用户失败", zap.Error(err)) + d.l.Error("关联第一级升级用户失败", zap.Error(err)) return err } } @@ -228,7 +228,7 @@ func (a *alertManagerSendDAO) CreateMonitorSendGroup(ctx context.Context, monito if len(monitorSendGroup.SecondUpgradeUsers) > 0 { if err := tx.Model(monitorSendGroup).Association("SecondUpgradeUsers").Replace(monitorSendGroup.SecondUpgradeUsers); err != nil { tx.Rollback() - a.l.Error("关联第二级升级用户失败", zap.Error(err)) + d.l.Error("关联第二级升级用户失败", zap.Error(err)) return err } } @@ -236,7 +236,7 @@ func (a *alertManagerSendDAO) CreateMonitorSendGroup(ctx context.Context, monito // 提交事务 if err := tx.Commit().Error; err != nil { tx.Rollback() - a.l.Error("提交事务失败", zap.Error(err)) + d.l.Error("提交事务失败", zap.Error(err)) return err } @@ -244,16 +244,16 @@ func (a *alertManagerSendDAO) CreateMonitorSendGroup(ctx context.Context, monito } // DeleteMonitorSendGroup 删除 MonitorSendGroup -func (a *alertManagerSendDAO) DeleteMonitorSendGroup(ctx context.Context, id int) error { +func (d *alertManagerSendDAO) DeleteMonitorSendGroup(ctx context.Context, id int) error { if id <= 0 { - a.l.Error("DeleteMonitorSendGroup 失败: 无效的 ID", zap.Int("id", id)) + d.l.Error("DeleteMonitorSendGroup 失败: 无效的 ID", zap.Int("id", id)) return fmt.Errorf("无效的 ID: %d", id) } // 开启事务 - tx := a.db.WithContext(ctx).Begin() + tx := d.db.WithContext(ctx).Begin() if tx.Error != nil { - a.l.Error("开启事务失败", zap.Error(tx.Error)) + d.l.Error("开启事务失败", zap.Error(tx.Error)) return tx.Error } @@ -264,42 +264,42 @@ func (a *alertManagerSendDAO) DeleteMonitorSendGroup(ctx context.Context, id int if errors.Is(err, gorm.ErrRecordNotFound) { return fmt.Errorf("未找到 ID 为 %d 的记录", id) } - a.l.Error("查找 MonitorSendGroup 失败", zap.Error(err), zap.Int("id", id)) + d.l.Error("查找 MonitorSendGroup 失败", zap.Error(err), zap.Int("id", id)) return err } // 清除关联的静态接收用户 if err := tx.Model(sendGroup).Association("StaticReceiveUsers").Clear(); err != nil { tx.Rollback() - a.l.Error("清除静态接收用户关联失败", zap.Error(err), zap.Int("id", id)) + d.l.Error("清除静态接收用户关联失败", zap.Error(err), zap.Int("id", id)) return err } // 清除关联的第一级升级用户 if err := tx.Model(sendGroup).Association("FirstUpgradeUsers").Clear(); err != nil { tx.Rollback() - a.l.Error("清除第一级升级用户关联失败", zap.Error(err), zap.Int("id", id)) + d.l.Error("清除第一级升级用户关联失败", zap.Error(err), zap.Int("id", id)) return err } // 清除关联的第二级升级用户 if err := tx.Model(sendGroup).Association("SecondUpgradeUsers").Clear(); err != nil { tx.Rollback() - a.l.Error("清除第二级升级用户关联失败", zap.Error(err), zap.Int("id", id)) + d.l.Error("清除第二级升级用户关联失败", zap.Error(err), zap.Int("id", id)) return err } // 删除发送组 if err := tx.Delete(&model.MonitorSendGroup{}, id).Error; err != nil { tx.Rollback() - a.l.Error("删除 MonitorSendGroup 失败", zap.Error(err), zap.Int("id", id)) + d.l.Error("删除 MonitorSendGroup 失败", zap.Error(err), zap.Int("id", id)) return fmt.Errorf("删除 ID 为 %d 的 MonitorSendGroup 失败: %w", id, err) } // 提交事务 if err := tx.Commit().Error; err != nil { tx.Rollback() - a.l.Error("提交事务失败", zap.Error(err)) + d.l.Error("提交事务失败", zap.Error(err)) return err } @@ -307,18 +307,18 @@ func (a *alertManagerSendDAO) DeleteMonitorSendGroup(ctx context.Context, id int } // CheckMonitorSendGroupExists 检查 MonitorSendGroup 是否存在 -func (a *alertManagerSendDAO) CheckMonitorSendGroupExists(ctx context.Context, sendGroup *model.MonitorSendGroup) (bool, error) { +func (d *alertManagerSendDAO) CheckMonitorSendGroupExists(ctx context.Context, sendGroup *model.MonitorSendGroup) (bool, error) { if sendGroup == nil || sendGroup.ID <= 0 { return false, fmt.Errorf("无效的 sendGroup 或 ID") } var count int64 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorSendGroup{}). Where("id = ?", sendGroup.ID). Count(&count).Error; err != nil { - a.l.Error("检查 MonitorSendGroup 是否存在失败", zap.Error(err)) + d.l.Error("检查 MonitorSendGroup 是否存在失败", zap.Error(err)) return false, err } @@ -326,13 +326,13 @@ func (a *alertManagerSendDAO) CheckMonitorSendGroupExists(ctx context.Context, s } // CheckMonitorSendGroupNameExists 检查 MonitorSendGroup 名称是否存在 -func (a *alertManagerSendDAO) CheckMonitorSendGroupNameExists(ctx context.Context, sendGroup *model.MonitorSendGroup) (bool, error) { +func (d *alertManagerSendDAO) CheckMonitorSendGroupNameExists(ctx context.Context, sendGroup *model.MonitorSendGroup) (bool, error) { if sendGroup == nil || sendGroup.Name == "" { return false, fmt.Errorf("无效的 sendGroup 或名称为空") } var count int64 - query := a.db.WithContext(ctx). + query := d.db.WithContext(ctx). Model(&model.MonitorSendGroup{}). Where("name = ?", sendGroup.Name) @@ -342,7 +342,7 @@ func (a *alertManagerSendDAO) CheckMonitorSendGroupNameExists(ctx context.Contex } if err := query.Count(&count).Error; err != nil { - a.l.Error("检查 MonitorSendGroup 名称是否存在失败", zap.Error(err)) + d.l.Error("检查 MonitorSendGroup 名称是否存在失败", zap.Error(err)) return false, err } @@ -350,50 +350,50 @@ func (a *alertManagerSendDAO) CheckMonitorSendGroupNameExists(ctx context.Contex } // UpdateMonitorSendGroup 更新 MonitorSendGroup -func (a *alertManagerSendDAO) UpdateMonitorSendGroup(ctx context.Context, monitorSendGroup *model.MonitorSendGroup) error { +func (d *alertManagerSendDAO) UpdateMonitorSendGroup(ctx context.Context, monitorSendGroup *model.MonitorSendGroup) error { if monitorSendGroup == nil || monitorSendGroup.ID <= 0 { return fmt.Errorf("无效的 monitorSendGroup 或 ID") } // 开启事务 - tx := a.db.WithContext(ctx).Begin() + tx := d.db.WithContext(ctx).Begin() if tx.Error != nil { - a.l.Error("开启事务失败", zap.Error(tx.Error)) + d.l.Error("开启事务失败", zap.Error(tx.Error)) return tx.Error } // 更新发送组基本信息 if err := tx.Model(monitorSendGroup).Updates(monitorSendGroup).Error; err != nil { tx.Rollback() - a.l.Error("更新 MonitorSendGroup 失败", zap.Error(err)) + d.l.Error("更新 MonitorSendGroup 失败", zap.Error(err)) return err } // 处理静态接收用户关联 if err := tx.Model(monitorSendGroup).Association("StaticReceiveUsers").Replace(monitorSendGroup.StaticReceiveUsers); err != nil { tx.Rollback() - a.l.Error("更新静态接收用户关联失败", zap.Error(err)) + d.l.Error("更新静态接收用户关联失败", zap.Error(err)) return err } // 处理第一级升级用户关联 if err := tx.Model(monitorSendGroup).Association("FirstUpgradeUsers").Replace(monitorSendGroup.FirstUpgradeUsers); err != nil { tx.Rollback() - a.l.Error("更新第一级升级用户关联失败", zap.Error(err)) + d.l.Error("更新第一级升级用户关联失败", zap.Error(err)) return err } // 处理第二级升级用户关联 if err := tx.Model(monitorSendGroup).Association("SecondUpgradeUsers").Replace(monitorSendGroup.SecondUpgradeUsers); err != nil { tx.Rollback() - a.l.Error("更新第二级升级用户关联失败", zap.Error(err)) + d.l.Error("更新第二级升级用户关联失败", zap.Error(err)) return err } // 提交事务 if err := tx.Commit().Error; err != nil { tx.Rollback() - a.l.Error("提交事务失败", zap.Error(err)) + d.l.Error("提交事务失败", zap.Error(err)) return err } @@ -401,24 +401,24 @@ func (a *alertManagerSendDAO) UpdateMonitorSendGroup(ctx context.Context, monito } // GetMonitorSendGroups 获取所有发送组 -func (a *alertManagerSendDAO) GetMonitorSendGroups(ctx context.Context) ([]*model.MonitorSendGroup, int64, error) { +func (d *alertManagerSendDAO) GetMonitorSendGroups(ctx context.Context) ([]*model.MonitorSendGroup, int64, error) { var sendGroups []*model.MonitorSendGroup var count int64 // 先获取总数 - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorSendGroup{}). Count(&count).Error; err != nil { - a.l.Error("获取发送组总数失败", zap.Error(err)) + d.l.Error("获取发送组总数失败", zap.Error(err)) return nil, 0, err } - if err := a.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Preload("StaticReceiveUsers"). Preload("FirstUpgradeUsers"). Preload("SecondUpgradeUsers"). Find(&sendGroups).Error; err != nil { - a.l.Error("获取所有发送组失败", zap.Error(err)) + d.l.Error("获取所有发送组失败", zap.Error(err)) return nil, 0, err } diff --git a/internal/prometheus/dao/scrape/job_dao.go b/internal/prometheus/dao/scrape/job_dao.go index 532643a8..c3ea4efe 100644 --- a/internal/prometheus/dao/scrape/job_dao.go +++ b/internal/prometheus/dao/scrape/job_dao.go @@ -58,11 +58,11 @@ func NewScrapeJobDAO(db *gorm.DB, l *zap.Logger) ScrapeJobDAO { } // GetMonitorScrapeJobList 获取监控采集作业列表 -func (s *scrapeJobDAO) GetMonitorScrapeJobList(ctx context.Context, req *model.GetMonitorScrapeJobListReq) ([]*model.MonitorScrapeJob, int64, error) { +func (d *scrapeJobDAO) GetMonitorScrapeJobList(ctx context.Context, req *model.GetMonitorScrapeJobListReq) ([]*model.MonitorScrapeJob, int64, error) { var jobs []*model.MonitorScrapeJob var total int64 - query := s.db.WithContext(ctx).Model(&model.MonitorScrapeJob{}) + query := d.db.WithContext(ctx).Model(&model.MonitorScrapeJob{}) offset := (req.Page - 1) * req.Size limit := req.Size @@ -79,12 +79,12 @@ func (s *scrapeJobDAO) GetMonitorScrapeJobList(ctx context.Context, req *model.G } if err := query.Count(&total).Error; err != nil { - s.l.Error("计算监控采集作业总数失败", zap.Error(err)) + d.l.Error("计算监控采集作业总数失败", zap.Error(err)) return nil, 0, err } if err := query.Offset(offset).Limit(limit).Find(&jobs).Error; err != nil { - s.l.Error("获取监控采集作业列表失败", zap.Error(err)) + d.l.Error("获取监控采集作业列表失败", zap.Error(err)) return nil, 0, err } @@ -92,9 +92,9 @@ func (s *scrapeJobDAO) GetMonitorScrapeJobList(ctx context.Context, req *model.G } // CreateMonitorScrapeJob 创建监控采集作业 -func (s *scrapeJobDAO) CreateMonitorScrapeJob(ctx context.Context, monitorScrapeJob *model.MonitorScrapeJob) error { - if err := s.db.WithContext(ctx).Create(monitorScrapeJob).Error; err != nil { - s.l.Error("创建 MonitorScrapeJob 失败", zap.Error(err)) +func (d *scrapeJobDAO) CreateMonitorScrapeJob(ctx context.Context, monitorScrapeJob *model.MonitorScrapeJob) error { + if err := d.db.WithContext(ctx).Create(monitorScrapeJob).Error; err != nil { + d.l.Error("创建 MonitorScrapeJob 失败", zap.Error(err)) return err } @@ -102,19 +102,19 @@ func (s *scrapeJobDAO) CreateMonitorScrapeJob(ctx context.Context, monitorScrape } // GetMonitorScrapeJobsByPoolId 获取监控采集作业列表 -func (s *scrapeJobDAO) GetMonitorScrapeJobsByPoolId(ctx context.Context, poolId int) ([]*model.MonitorScrapeJob, error) { +func (d *scrapeJobDAO) GetMonitorScrapeJobsByPoolId(ctx context.Context, poolId int) ([]*model.MonitorScrapeJob, error) { if poolId <= 0 { - s.l.Error("GetMonitorScrapeJobsByPoolId 失败: 无效的 poolId", zap.Int("poolId", poolId)) + d.l.Error("GetMonitorScrapeJobsByPoolId 失败: 无效的 poolId", zap.Int("poolId", poolId)) return nil, fmt.Errorf("无效的 poolId: %d", poolId) } var jobs []*model.MonitorScrapeJob - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("enable = ?", 1). Where("pool_id = ?", poolId). Find(&jobs).Error; err != nil { - s.l.Error("获取 MonitorScrapeJob 失败", zap.Error(err), zap.Int("poolId", poolId)) + d.l.Error("获取 MonitorScrapeJob 失败", zap.Error(err), zap.Int("poolId", poolId)) return nil, err } @@ -122,17 +122,17 @@ func (s *scrapeJobDAO) GetMonitorScrapeJobsByPoolId(ctx context.Context, poolId } // UpdateMonitorScrapeJob 更新监控采集作业 -func (s *scrapeJobDAO) UpdateMonitorScrapeJob(ctx context.Context, monitorScrapeJob *model.MonitorScrapeJob) error { +func (d *scrapeJobDAO) UpdateMonitorScrapeJob(ctx context.Context, monitorScrapeJob *model.MonitorScrapeJob) error { if monitorScrapeJob.ID <= 0 { - s.l.Error("UpdateMonitorScrapeJob 失败: ID 无效", zap.Any("job", monitorScrapeJob)) + d.l.Error("UpdateMonitorScrapeJob 失败: ID 无效", zap.Any("job", monitorScrapeJob)) return fmt.Errorf("monitorScrapeJob 的 ID 必须大于 0") } - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorScrapeJob{}). Where("id = ?", monitorScrapeJob.ID). Updates(monitorScrapeJob).Error; err != nil { - s.l.Error("更新 MonitorScrapeJob 失败", zap.Error(err), zap.Int("id", monitorScrapeJob.ID)) + d.l.Error("更新 MonitorScrapeJob 失败", zap.Error(err), zap.Int("id", monitorScrapeJob.ID)) return err } @@ -140,18 +140,18 @@ func (s *scrapeJobDAO) UpdateMonitorScrapeJob(ctx context.Context, monitorScrape } // DeleteMonitorScrapeJob 删除监控采集作业 -func (s *scrapeJobDAO) DeleteMonitorScrapeJob(ctx context.Context, jobId int) error { +func (d *scrapeJobDAO) DeleteMonitorScrapeJob(ctx context.Context, jobId int) error { if jobId <= 0 { - s.l.Error("DeleteMonitorScrapeJob 失败: 无效的 jobId", zap.Int("jobId", jobId)) + d.l.Error("DeleteMonitorScrapeJob 失败: 无效的 jobId", zap.Int("jobId", jobId)) return fmt.Errorf("无效的 jobId: %d", jobId) } - result := s.db.WithContext(ctx). + result := d.db.WithContext(ctx). Where("id = ?", jobId). Delete(&model.MonitorScrapeJob{}) if err := result.Error; err != nil { - s.l.Error("删除 MonitorScrapeJob 失败", zap.Error(err), zap.Int("jobId", jobId)) + d.l.Error("删除 MonitorScrapeJob 失败", zap.Error(err), zap.Int("jobId", jobId)) return fmt.Errorf("删除 ID 为 %d 的 MonitorScrapeJob 失败: %w", jobId, err) } @@ -163,18 +163,18 @@ func (s *scrapeJobDAO) DeleteMonitorScrapeJob(ctx context.Context, jobId int) er } // CheckMonitorScrapeJobExists 检查监控采集作业是否存在 -func (s *scrapeJobDAO) CheckMonitorScrapeJobExists(ctx context.Context, name string) (bool, error) { +func (d *scrapeJobDAO) CheckMonitorScrapeJobExists(ctx context.Context, name string) (bool, error) { if name == "" { return false, fmt.Errorf("名称不能为空") } var count int64 - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorScrapeJob{}). Where("name = ?", name). Count(&count).Error; err != nil { - s.l.Error("检查 MonitorScrapeJob 是否存在失败", zap.Error(err)) + d.l.Error("检查 MonitorScrapeJob 是否存在失败", zap.Error(err)) return false, err } @@ -182,21 +182,21 @@ func (s *scrapeJobDAO) CheckMonitorScrapeJobExists(ctx context.Context, name str } // GetMonitorScrapeJobById 获取监控采集作业 -func (s *scrapeJobDAO) GetMonitorScrapeJobById(ctx context.Context, id int) (*model.MonitorScrapeJob, error) { +func (d *scrapeJobDAO) GetMonitorScrapeJobById(ctx context.Context, id int) (*model.MonitorScrapeJob, error) { if id <= 0 { - s.l.Error("GetMonitorScrapeJobById 失败: 无效的 ID", zap.Int("id", id)) + d.l.Error("GetMonitorScrapeJobById 失败: 无效的 ID", zap.Int("id", id)) return nil, fmt.Errorf("无效的 ID: %d", id) } var scrapeJob model.MonitorScrapeJob - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("id = ?", id). First(&scrapeJob).Error; err != nil { if err == gorm.ErrRecordNotFound { return nil, fmt.Errorf("未找到ID为 %d 的记录", id) } - s.l.Error("获取 MonitorScrapeJob 失败", zap.Error(err), zap.Int("id", id)) + d.l.Error("获取 MonitorScrapeJob 失败", zap.Error(err), zap.Int("id", id)) return nil, err } @@ -204,18 +204,18 @@ func (s *scrapeJobDAO) GetMonitorScrapeJobById(ctx context.Context, id int) (*mo } // CheckMonitorInstanceExists 检查监控实例是否存在 -func (s *scrapeJobDAO) CheckMonitorInstanceExists(ctx context.Context, poolID int) (bool, error) { +func (d *scrapeJobDAO) CheckMonitorInstanceExists(ctx context.Context, poolID int) (bool, error) { if poolID <= 0 { return false, fmt.Errorf("无效的 poolID: %d", poolID) } var count int64 - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorScrapePool{}). Where("id = ?", poolID). Count(&count).Error; err != nil { - s.l.Error("检查监控实例是否存在失败", zap.Error(err)) + d.l.Error("检查监控实例是否存在失败", zap.Error(err)) return false, err } diff --git a/internal/prometheus/dao/scrape/pool_dao.go b/internal/prometheus/dao/scrape/pool_dao.go index 9fe929b1..56af4670 100644 --- a/internal/prometheus/dao/scrape/pool_dao.go +++ b/internal/prometheus/dao/scrape/pool_dao.go @@ -61,11 +61,11 @@ func NewScrapePoolDAO(db *gorm.DB, l *zap.Logger, userDao userDao.UserDAO) Scrap } // GetMonitorScrapePoolList 获取监控采集池列表 -func (s *scrapePoolDAO) GetMonitorScrapePoolList(ctx context.Context, req *model.GetMonitorScrapePoolListReq) ([]*model.MonitorScrapePool, int64, error) { +func (d *scrapePoolDAO) GetMonitorScrapePoolList(ctx context.Context, req *model.GetMonitorScrapePoolListReq) ([]*model.MonitorScrapePool, int64, error) { var pools []*model.MonitorScrapePool var count int64 - query := s.db.WithContext(ctx).Model(&model.MonitorScrapePool{}) + query := d.db.WithContext(ctx).Model(&model.MonitorScrapePool{}) // 添加搜索条件 if req.Search != "" { @@ -82,13 +82,13 @@ func (s *scrapePoolDAO) GetMonitorScrapePoolList(ctx context.Context, req *model // 获取总数 if err := query.Count(&count).Error; err != nil { - s.l.Error("获取 MonitorScrapePool 总数失败", zap.Error(err)) + d.l.Error("获取 MonitorScrapePool 总数失败", zap.Error(err)) return nil, 0, err } // 分页查询 if err := query.Offset((req.Page - 1) * req.Size).Limit(req.Size).Find(&pools).Error; err != nil { - s.l.Error("获取 MonitorScrapePool 记录失败", zap.Error(err)) + d.l.Error("获取 MonitorScrapePool 记录失败", zap.Error(err)) return nil, 0, err } @@ -96,13 +96,13 @@ func (s *scrapePoolDAO) GetMonitorScrapePoolList(ctx context.Context, req *model } // CreateMonitorScrapePool 创建监控采集池 -func (s *scrapePoolDAO) CreateMonitorScrapePool(ctx context.Context, pool *model.MonitorScrapePool) error { +func (d *scrapePoolDAO) CreateMonitorScrapePool(ctx context.Context, pool *model.MonitorScrapePool) error { // 检查是否已存在相同名称的pool var count int64 - if err := s.db.WithContext(ctx).Model(&model.MonitorScrapePool{}). + if err := d.db.WithContext(ctx).Model(&model.MonitorScrapePool{}). Where("name = ?", pool.Name). Count(&count).Error; err != nil { - s.l.Error("检查 MonitorScrapePool 是否存在失败", zap.Error(err)) + d.l.Error("检查 MonitorScrapePool 是否存在失败", zap.Error(err)) return err } @@ -110,8 +110,8 @@ func (s *scrapePoolDAO) CreateMonitorScrapePool(ctx context.Context, pool *model return fmt.Errorf("pool已存在,请勿重复创建") } - if err := s.db.WithContext(ctx).Create(pool).Error; err != nil { - s.l.Error("创建 MonitorScrapePool 失败", zap.Error(err)) + if err := d.db.WithContext(ctx).Create(pool).Error; err != nil { + d.l.Error("创建 MonitorScrapePool 失败", zap.Error(err)) return err } @@ -119,16 +119,16 @@ func (s *scrapePoolDAO) CreateMonitorScrapePool(ctx context.Context, pool *model } // GetMonitorScrapePoolById 根据 ID 获取监控采集池 -func (s *scrapePoolDAO) GetMonitorScrapePoolById(ctx context.Context, id int) (*model.MonitorScrapePool, error) { +func (d *scrapePoolDAO) GetMonitorScrapePoolById(ctx context.Context, id int) (*model.MonitorScrapePool, error) { if id <= 0 { - s.l.Error("GetMonitorScrapePoolById 失败:无效的 ID", zap.Int("id", id)) + d.l.Error("GetMonitorScrapePoolById 失败:无效的 ID", zap.Int("id", id)) return nil, fmt.Errorf("无效的 ID: %d", id) } var pool model.MonitorScrapePool - if err := s.db.WithContext(ctx).First(&pool, id).Error; err != nil { - s.l.Error("根据 ID 获取 MonitorScrapePool 失败", zap.Error(err), zap.Int("id", id)) + if err := d.db.WithContext(ctx).First(&pool, id).Error; err != nil { + d.l.Error("根据 ID 获取 MonitorScrapePool 失败", zap.Error(err), zap.Int("id", id)) return nil, err } @@ -136,13 +136,13 @@ func (s *scrapePoolDAO) GetMonitorScrapePoolById(ctx context.Context, id int) (* } // UpdateMonitorScrapePool 更新监控采集池 -func (s *scrapePoolDAO) UpdateMonitorScrapePool(ctx context.Context, req *model.UpdateMonitorScrapePoolReq) error { +func (d *scrapePoolDAO) UpdateMonitorScrapePool(ctx context.Context, req *model.UpdateMonitorScrapePoolReq) error { if req.ID <= 0 { - s.l.Error("UpdateMonitorScrapePool 失败: ID 为 0", zap.Any("pool", req)) + d.l.Error("UpdateMonitorScrapePool 失败: ID 为 0", zap.Any("pool", req)) return fmt.Errorf("monitorScrapePool 的 ID 必须设置且非零") } - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorScrapePool{}). Where("id = ?", req.ID). Updates(map[string]interface{}{ @@ -161,7 +161,7 @@ func (s *scrapePoolDAO) UpdateMonitorScrapePool(ctx context.Context, req *model. "record_file_path": req.RecordFilePath, "user_id": req.UserID, }).Error; err != nil { - s.l.Error("更新 MonitorScrapePool 失败", zap.Error(err), zap.Int("id", req.ID)) + d.l.Error("更新 MonitorScrapePool 失败", zap.Error(err), zap.Int("id", req.ID)) return err } @@ -169,18 +169,18 @@ func (s *scrapePoolDAO) UpdateMonitorScrapePool(ctx context.Context, req *model. } // DeleteMonitorScrapePool 删除监控采集池 -func (s *scrapePoolDAO) DeleteMonitorScrapePool(ctx context.Context, poolId int) error { +func (d *scrapePoolDAO) DeleteMonitorScrapePool(ctx context.Context, poolId int) error { if poolId <= 0 { - s.l.Error("DeleteMonitorScrapePool 失败: 无效的 poolId", zap.Int("poolId", poolId)) + d.l.Error("DeleteMonitorScrapePool 失败: 无效的 poolId", zap.Int("poolId", poolId)) return fmt.Errorf("无效的 poolId: %d", poolId) } - result := s.db.WithContext(ctx). + result := d.db.WithContext(ctx). Where("id = ?", poolId). Delete(&model.MonitorScrapePool{}) if result.Error != nil { - s.l.Error("删除 MonitorScrapePool 失败", zap.Error(result.Error), zap.Int("poolId", poolId)) + d.l.Error("删除 MonitorScrapePool 失败", zap.Error(result.Error), zap.Int("poolId", poolId)) return fmt.Errorf("删除 ID 为 %d 的 MonitorScrapePool 失败: %w", poolId, result.Error) } @@ -192,22 +192,22 @@ func (s *scrapePoolDAO) DeleteMonitorScrapePool(ctx context.Context, poolId int) } // GetMonitorScrapePoolSupportedAlert 获取支持警报的监控采集池 -func (s *scrapePoolDAO) GetMonitorScrapePoolSupportedAlert(ctx context.Context) ([]*model.MonitorScrapePool, int64, error) { +func (d *scrapePoolDAO) GetMonitorScrapePoolSupportedAlert(ctx context.Context) ([]*model.MonitorScrapePool, int64, error) { var pools []*model.MonitorScrapePool var count int64 - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorScrapePool{}). Where("support_alert = ?", 1). Count(&count).Error; err != nil { - s.l.Error("获取支持警报的 MonitorScrapePool 总数失败", zap.Error(err)) + d.l.Error("获取支持警报的 MonitorScrapePool 总数失败", zap.Error(err)) return nil, 0, err } - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("support_alert = ?", 1). Find(&pools).Error; err != nil { - s.l.Error("获取支持警报的 MonitorScrapePool 失败", zap.Error(err)) + d.l.Error("获取支持警报的 MonitorScrapePool 失败", zap.Error(err)) return nil, 0, err } @@ -215,22 +215,22 @@ func (s *scrapePoolDAO) GetMonitorScrapePoolSupportedAlert(ctx context.Context) } // GetMonitorScrapePoolSupportedRecord 获取支持记录规则的监控采集池 -func (s *scrapePoolDAO) GetMonitorScrapePoolSupportedRecord(ctx context.Context) ([]*model.MonitorScrapePool, int64, error) { +func (d *scrapePoolDAO) GetMonitorScrapePoolSupportedRecord(ctx context.Context) ([]*model.MonitorScrapePool, int64, error) { var pools []*model.MonitorScrapePool var count int64 - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorScrapePool{}). Where("support_record = ?", 1). Count(&count).Error; err != nil { - s.l.Error("获取支持记录规则的 MonitorScrapePool 总数失败", zap.Error(err)) + d.l.Error("获取支持记录规则的 MonitorScrapePool 总数失败", zap.Error(err)) return nil, 0, err } - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("support_record = ?", 1). Find(&pools).Error; err != nil { - s.l.Error("获取支持记录规则的 MonitorScrapePool 失败", zap.Error(err)) + d.l.Error("获取支持记录规则的 MonitorScrapePool 失败", zap.Error(err)) return nil, 0, err } @@ -238,18 +238,18 @@ func (s *scrapePoolDAO) GetMonitorScrapePoolSupportedRecord(ctx context.Context) } // CheckMonitorScrapePoolExists 检查监控采集池是否存在 -func (s *scrapePoolDAO) CheckMonitorScrapePoolExists(ctx context.Context, scrapePool *model.MonitorScrapePool) (bool, error) { +func (d *scrapePoolDAO) CheckMonitorScrapePoolExists(ctx context.Context, scrapePool *model.MonitorScrapePool) (bool, error) { if scrapePool.Name == "" { return false, fmt.Errorf("scrapePool 或 name 不能为空") } var count int64 - if err := s.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Model(&model.MonitorScrapePool{}). Where("name = ?", scrapePool.Name). Count(&count).Error; err != nil { - s.l.Error("检查 MonitorScrapePool 是否存在失败", zap.Error(err)) + d.l.Error("检查 MonitorScrapePool 是否存在失败", zap.Error(err)) return false, err } diff --git a/internal/system/api/api_handler.go b/internal/system/api/api_handler.go index f384b35c..b78c95b6 100644 --- a/internal/system/api/api_handler.go +++ b/internal/system/api/api_handler.go @@ -54,25 +54,25 @@ func (h *ApiHandler) RegisterRouters(server *gin.Engine) { } // ListApis 获取API列表 -func (a *ApiHandler) ListApis(ctx *gin.Context) { +func (h *ApiHandler) ListApis(ctx *gin.Context) { var req model.ListApisRequest utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return a.svc.ListApis(ctx, &req) + return h.svc.ListApis(ctx, &req) }) } // CreateAPI 创建新的API -func (a *ApiHandler) CreateAPI(ctx *gin.Context) { +func (h *ApiHandler) CreateAPI(ctx *gin.Context) { var req model.CreateApiRequest utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.CreateApi(ctx, &req) + return nil, h.svc.CreateApi(ctx, &req) }) } // UpdateAPI 更新API信息 -func (a *ApiHandler) UpdateAPI(ctx *gin.Context) { +func (h *ApiHandler) UpdateAPI(ctx *gin.Context) { var req model.UpdateApiRequest id, err := utils.GetParamID(ctx) @@ -84,12 +84,12 @@ func (a *ApiHandler) UpdateAPI(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.UpdateApi(ctx, &req) + return nil, h.svc.UpdateApi(ctx, &req) }) } // DeleteAPI 删除API -func (a *ApiHandler) DeleteAPI(ctx *gin.Context) { +func (h *ApiHandler) DeleteAPI(ctx *gin.Context) { var req model.DeleteApiRequest id, err := utils.GetParamID(ctx) @@ -101,12 +101,12 @@ func (a *ApiHandler) DeleteAPI(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, a.svc.DeleteApi(ctx, req.ID) + return nil, h.svc.DeleteApi(ctx, req.ID) }) } // DetailAPI 获取API详情 -func (a *ApiHandler) DetailAPI(ctx *gin.Context) { +func (h *ApiHandler) DetailAPI(ctx *gin.Context) { var req model.GetApiRequest id, err := utils.GetParamID(ctx) @@ -118,13 +118,13 @@ func (a *ApiHandler) DetailAPI(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return a.svc.GetApiById(ctx, id) + return h.svc.GetApiById(ctx, id) }) } // GetApiStatistics 获取API统计 -func (a *ApiHandler) GetApiStatistics(ctx *gin.Context) { +func (h *ApiHandler) GetApiStatistics(ctx *gin.Context) { utils.HandleRequest(ctx, nil, func() (interface{}, error) { - return a.svc.GetApiStatistics(ctx) + return h.svc.GetApiStatistics(ctx) }) } diff --git a/internal/system/api/role_handler.go b/internal/system/api/role_handler.go index 1cf85229..ed265cff 100644 --- a/internal/system/api/role_handler.go +++ b/internal/system/api/role_handler.go @@ -42,71 +42,71 @@ func NewRoleHandler(svc service.RoleService) *RoleHandler { } } -func (r *RoleHandler) RegisterRouters(server *gin.Engine) { +func (h *RoleHandler) RegisterRouters(server *gin.Engine) { roleGroup := server.Group("/api/role") { // 角色管理 - roleGroup.GET("/list", r.ListRoles) - roleGroup.POST("/create", r.CreateRole) - roleGroup.PUT("/update/:id", r.UpdateRole) - roleGroup.DELETE("/delete/:id", r.DeleteRole) - roleGroup.GET("/detail/:id", r.GetRoleDetail) + roleGroup.GET("/list", h.ListRoles) + roleGroup.POST("/create", h.CreateRole) + roleGroup.PUT("/update/:id", h.UpdateRole) + roleGroup.DELETE("/delete/:id", h.DeleteRole) + roleGroup.GET("/detail/:id", h.GetRoleDetail) // 角色权限管理 - roleGroup.POST("/assign-apis", r.AssignApisToRole) - roleGroup.POST("/revoke-apis", r.RevokeApisFromRole) - roleGroup.GET("/apis/:id", r.GetRoleApis) + roleGroup.POST("/assign-apis", h.AssignApisToRole) + roleGroup.POST("/revoke-apis", h.RevokeApisFromRole) + roleGroup.GET("/apis/:id", h.GetRoleApis) // 用户角色管理 - roleGroup.POST("/assign_users", r.AssignRolesToUser) - roleGroup.POST("/revoke_users", r.RevokeRolesFromUser) - roleGroup.GET("/users/:id", r.GetRoleUsers) - roleGroup.GET("/user_roles/:id", r.GetUserRoles) + roleGroup.POST("/assign_users", h.AssignRolesToUser) + roleGroup.POST("/revoke_users", h.RevokeRolesFromUser) + roleGroup.GET("/users/:id", h.GetRoleUsers) + roleGroup.GET("/user_roles/:id", h.GetUserRoles) // 权限检查 - roleGroup.POST("/check_permission", r.CheckUserPermission) - roleGroup.GET("/user_permissions/:id", r.GetUserPermissions) + roleGroup.POST("/check_permission", h.CheckUserPermission) + roleGroup.GET("/user_permissions/:id", h.GetUserPermissions) } } // ListRoles 获取角色列表 -func (r *RoleHandler) ListRoles(ctx *gin.Context) { +func (h *RoleHandler) ListRoles(ctx *gin.Context) { var req model.ListRolesRequest utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.svc.ListRoles(ctx, &req) + return h.svc.ListRoles(ctx, &req) }) } // CreateRole 创建角色 -func (r *RoleHandler) CreateRole(ctx *gin.Context) { +func (h *RoleHandler) CreateRole(ctx *gin.Context) { var req model.CreateRoleRequest utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.svc.CreateRole(ctx, &req) + return h.svc.CreateRole(ctx, &req) }) } // UpdateRole 更新角色 -func (r *RoleHandler) UpdateRole(ctx *gin.Context) { +func (h *RoleHandler) UpdateRole(ctx *gin.Context) { var req model.UpdateRoleRequest utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.svc.UpdateRole(ctx, &req) + return h.svc.UpdateRole(ctx, &req) }) } // DeleteRole 删除角色 -func (r *RoleHandler) DeleteRole(ctx *gin.Context) { +func (h *RoleHandler) DeleteRole(ctx *gin.Context) { var req model.DeleteRoleRequest utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, r.svc.DeleteRole(ctx, req.ID) + return nil, h.svc.DeleteRole(ctx, req.ID) }) } // GetRoleDetail 获取角色详情 -func (r *RoleHandler) GetRoleDetail(ctx *gin.Context) { +func (h *RoleHandler) GetRoleDetail(ctx *gin.Context) { var req model.GetRoleRequest id, err := utils.GetParamID(ctx) @@ -116,30 +116,30 @@ func (r *RoleHandler) GetRoleDetail(ctx *gin.Context) { } utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.svc.GetRoleByID(ctx, id) + return h.svc.GetRoleByID(ctx, id) }) } // AssignApisToRole 为角色分配API权限 -func (r *RoleHandler) AssignApisToRole(ctx *gin.Context) { +func (h *RoleHandler) AssignApisToRole(ctx *gin.Context) { var req model.AssignRoleApiRequest utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, r.svc.AssignApisToRole(ctx, req.RoleID, req.ApiIds) + return nil, h.svc.AssignApisToRole(ctx, req.RoleID, req.ApiIds) }) } // RevokeApisFromRole 撤销角色的API权限 -func (r *RoleHandler) RevokeApisFromRole(ctx *gin.Context) { +func (h *RoleHandler) RevokeApisFromRole(ctx *gin.Context) { var req model.RevokeRoleApiRequest utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, r.svc.RevokeApisFromRole(ctx, req.RoleID, req.ApiIds) + return nil, h.svc.RevokeApisFromRole(ctx, req.RoleID, req.ApiIds) }) } // GetRoleApis 获取角色的API权限列表 -func (r *RoleHandler) GetRoleApis(ctx *gin.Context) { +func (h *RoleHandler) GetRoleApis(ctx *gin.Context) { var req model.GetRoleApiRequest id, err := utils.GetParamID(ctx) @@ -149,12 +149,12 @@ func (r *RoleHandler) GetRoleApis(ctx *gin.Context) { } utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.svc.GetRoleApis(ctx, id) + return h.svc.GetRoleApis(ctx, id) }) } // AssignRolesToUser 为用户分配角色 -func (r *RoleHandler) AssignRolesToUser(ctx *gin.Context) { +func (h *RoleHandler) AssignRolesToUser(ctx *gin.Context) { var req model.AssignRolesToUserRequest user := ctx.MustGet("user").(utils.UserClaims) @@ -162,12 +162,12 @@ func (r *RoleHandler) AssignRolesToUser(ctx *gin.Context) { req.UserID = user.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, r.svc.AssignRolesToUser(ctx, req.UserID, req.RoleIds, 0) + return nil, h.svc.AssignRolesToUser(ctx, req.UserID, req.RoleIds, 0) }) } // RevokeRolesFromUser 撤销用户角色 -func (r *RoleHandler) RevokeRolesFromUser(ctx *gin.Context) { +func (h *RoleHandler) RevokeRolesFromUser(ctx *gin.Context) { var req model.RevokeRolesFromUserRequest user := ctx.MustGet("user").(utils.UserClaims) @@ -175,12 +175,12 @@ func (r *RoleHandler) RevokeRolesFromUser(ctx *gin.Context) { req.UserID = user.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, r.svc.RevokeRolesFromUser(ctx, req.UserID, req.RoleIds) + return nil, h.svc.RevokeRolesFromUser(ctx, req.UserID, req.RoleIds) }) } // GetRoleUsers 获取角色下的用户列表 -func (r *RoleHandler) GetRoleUsers(ctx *gin.Context) { +func (h *RoleHandler) GetRoleUsers(ctx *gin.Context) { var req model.GetRoleUsersRequest id, err := utils.GetParamID(ctx) @@ -190,12 +190,12 @@ func (r *RoleHandler) GetRoleUsers(ctx *gin.Context) { } utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.svc.GetRoleUsers(ctx, id) + return h.svc.GetRoleUsers(ctx, id) }) } // GetUserRoles 获取用户的角色列表 -func (r *RoleHandler) GetUserRoles(ctx *gin.Context) { +func (h *RoleHandler) GetUserRoles(ctx *gin.Context) { var req model.GetUserRolesRequest id, err := utils.GetParamID(ctx) @@ -207,24 +207,24 @@ func (r *RoleHandler) GetUserRoles(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.svc.GetUserRoles(ctx, req.ID) + return h.svc.GetUserRoles(ctx, req.ID) }) } // CheckUserPermission 检查用户权限 -func (r *RoleHandler) CheckUserPermission(ctx *gin.Context) { +func (h *RoleHandler) CheckUserPermission(ctx *gin.Context) { var req model.CheckUserPermissionRequest user := ctx.MustGet("user").(utils.UserClaims) req.UserID = user.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.svc.CheckUserPermission(ctx, req.UserID, req.Method, req.Path) + return h.svc.CheckUserPermission(ctx, req.UserID, req.Method, req.Path) }) } // GetUserPermissions 获取用户的所有权限 -func (r *RoleHandler) GetUserPermissions(ctx *gin.Context) { +func (h *RoleHandler) GetUserPermissions(ctx *gin.Context) { var req model.GetUserPermissionsRequest id, err := utils.GetParamID(ctx) @@ -236,6 +236,6 @@ func (r *RoleHandler) GetUserPermissions(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return r.svc.GetUserPermissions(ctx, req.ID) + return h.svc.GetUserPermissions(ctx, req.ID) }) } diff --git a/internal/system/dao/api_dao.go b/internal/system/dao/api_dao.go index 515bef2f..0e25d0b2 100644 --- a/internal/system/dao/api_dao.go +++ b/internal/system/dao/api_dao.go @@ -57,7 +57,7 @@ func NewApiDAO(db *gorm.DB, l *zap.Logger) ApiDAO { } // CreateApi 创建新的API记录 -func (a *apiDAO) CreateApi(ctx context.Context, api *model.Api) error { +func (d *apiDAO) CreateApi(ctx context.Context, api *model.Api) error { if api == nil { return errors.New("API对象不能为空") } @@ -76,24 +76,24 @@ func (a *apiDAO) CreateApi(ctx context.Context, api *model.Api) error { // 检查API名称是否已存在 var count int64 - if err := a.db.WithContext(ctx).Model(&model.Api{}).Where("name = ? AND deleted_at = ?", api.Name, 0).Count(&count).Error; err != nil { + if err := d.db.WithContext(ctx).Model(&model.Api{}).Where("name = ? AND deleted_at = ?", api.Name, 0).Count(&count).Error; err != nil { return fmt.Errorf("检查API名称失败: %v", err) } if count > 0 { return errors.New("API名称已存在") } - return a.db.WithContext(ctx).Create(api).Error + return d.db.WithContext(ctx).Create(api).Error } // GetApiById 根据ID获取API记录 -func (a *apiDAO) GetApiById(ctx context.Context, id int) (*model.Api, error) { +func (d *apiDAO) GetApiById(ctx context.Context, id int) (*model.Api, error) { if id <= 0 { return nil, errors.New("无效的API ID") } var api model.Api - if err := a.db.WithContext(ctx).Where("id = ?", id).First(&api).Error; err != nil { + if err := d.db.WithContext(ctx).Where("id = ?", id).First(&api).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } @@ -104,7 +104,7 @@ func (a *apiDAO) GetApiById(ctx context.Context, id int) (*model.Api, error) { } // UpdateApi 更新API记录 -func (a *apiDAO) UpdateApi(ctx context.Context, api *model.Api) error { +func (d *apiDAO) UpdateApi(ctx context.Context, api *model.Api) error { if api == nil { return errors.New("API对象不能为空") } @@ -126,7 +126,7 @@ func (a *apiDAO) UpdateApi(ctx context.Context, api *model.Api) error { } // 获取旧的API记录 - oldApi, err := a.GetApiById(ctx, api.ID) + oldApi, err := d.GetApiById(ctx, api.ID) if err != nil { return err } @@ -138,7 +138,7 @@ func (a *apiDAO) UpdateApi(ctx context.Context, api *model.Api) error { // 检查API名称是否已被其他记录使用 if oldApi.Name != api.Name { var count int64 - if err := a.db.WithContext(ctx).Model(&model.Api{}).Where("name = ? AND id != ?", api.Name, api.ID).Count(&count).Error; err != nil { + if err := d.db.WithContext(ctx).Model(&model.Api{}).Where("name = ? AND id != ?", api.Name, api.ID).Count(&count).Error; err != nil { return fmt.Errorf("检查API名称失败: %v", err) } if count > 0 { @@ -157,7 +157,7 @@ func (a *apiDAO) UpdateApi(ctx context.Context, api *model.Api) error { } // 开启事务 - tx := a.db.WithContext(ctx).Begin() + tx := d.db.WithContext(ctx).Begin() if tx.Error != nil { return tx.Error } @@ -174,13 +174,13 @@ func (a *apiDAO) UpdateApi(ctx context.Context, api *model.Api) error { } // DeleteApi 软删除API记录 -func (a *apiDAO) DeleteApi(ctx context.Context, id int) error { +func (d *apiDAO) DeleteApi(ctx context.Context, id int) error { if id <= 0 { return errors.New("无效的API ID") } // 检查API是否存在 - api, err := a.GetApiById(ctx, id) + api, err := d.GetApiById(ctx, id) if err != nil { return err } @@ -190,14 +190,14 @@ func (a *apiDAO) DeleteApi(ctx context.Context, id int) error { // 检查API是否被角色使用 var count int64 - if err := a.db.WithContext(ctx).Table("cl_system_role_apis").Where("api_id = ?", id).Count(&count).Error; err != nil { + if err := d.db.WithContext(ctx).Table("cl_system_role_apis").Where("api_id = ?", id).Count(&count).Error; err != nil { return fmt.Errorf("检查API使用情况失败: %v", err) } if count > 0 { return errors.New("该API已被角色使用,无法删除") } - result := a.db.WithContext(ctx).Model(&model.Api{}).Where("id = ?", id).Delete(&model.Api{}) + result := d.db.WithContext(ctx).Model(&model.Api{}).Where("id = ?", id).Delete(&model.Api{}) if result.Error != nil { return fmt.Errorf("删除API失败: %v", result.Error) } @@ -210,7 +210,7 @@ func (a *apiDAO) DeleteApi(ctx context.Context, id int) error { } // ListApis 分页获取API列表 -func (a *apiDAO) ListApis(ctx context.Context, page, size int, search string, isPublic int, method int) ([]*model.Api, int64, error) { +func (d *apiDAO) ListApis(ctx context.Context, page, size int, search string, isPublic int, method int) ([]*model.Api, int64, error) { if page <= 0 { page = 1 } @@ -218,7 +218,7 @@ func (a *apiDAO) ListApis(ctx context.Context, page, size int, search string, is size = 10 } - query := a.db.WithContext(ctx).Model(&model.Api{}) + query := d.db.WithContext(ctx).Model(&model.Api{}) if search != "" { query = query.Where("name LIKE ? OR path LIKE ?", "%"+search+"%", "%"+search+"%") } @@ -248,14 +248,14 @@ func (a *apiDAO) ListApis(ctx context.Context, page, size int, search string, is return apis, total, nil } -func (a *apiDAO) GetApiStatistics(ctx context.Context) (*model.ApiStatistics, error) { +func (d *apiDAO) GetApiStatistics(ctx context.Context) (*model.ApiStatistics, error) { var statistics model.ApiStatistics - if err := a.db.WithContext(ctx).Model(&model.Api{}).Where("is_public = ?", 1).Count(&statistics.PublicCount).Error; err != nil { + if err := d.db.WithContext(ctx).Model(&model.Api{}).Where("is_public = ?", 1).Count(&statistics.PublicCount).Error; err != nil { return nil, fmt.Errorf("获取公开API数量失败: %v", err) } - if err := a.db.WithContext(ctx).Model(&model.Api{}).Where("is_public = ?", 2).Count(&statistics.PrivateCount).Error; err != nil { + if err := d.db.WithContext(ctx).Model(&model.Api{}).Where("is_public = ?", 2).Count(&statistics.PrivateCount).Error; err != nil { return nil, fmt.Errorf("获取私有API数量失败: %v", err) } diff --git a/internal/system/dao/role_dao.go b/internal/system/dao/role_dao.go index 2b4f86cd..becd54cb 100644 --- a/internal/system/dao/role_dao.go +++ b/internal/system/dao/role_dao.go @@ -69,11 +69,11 @@ func NewRoleDAO(db *gorm.DB) RoleDAO { } // ListRoles 获取角色列表 -func (r *roleDAO) ListRoles(ctx context.Context, req *model.ListRolesRequest) ([]*model.Role, int64, error) { +func (d *roleDAO) ListRoles(ctx context.Context, req *model.ListRolesRequest) ([]*model.Role, int64, error) { var roles []*model.Role var total int64 - query := r.db.WithContext(ctx).Model(&model.Role{}) + query := d.db.WithContext(ctx).Model(&model.Role{}) // 状态筛选 if req.Status != nil { @@ -102,8 +102,8 @@ func (r *roleDAO) ListRoles(ctx context.Context, req *model.ListRolesRequest) ([ } // CreateRole 创建角色 -func (r *roleDAO) CreateRole(ctx context.Context, role *model.Role, apiIds []int) (*model.Role, error) { - tx := r.db.WithContext(ctx).Begin() +func (d *roleDAO) CreateRole(ctx context.Context, role *model.Role, apiIds []int) (*model.Role, error) { + tx := d.db.WithContext(ctx).Begin() defer func() { if r := recover(); r != nil { tx.Rollback() @@ -136,12 +136,12 @@ func (r *roleDAO) CreateRole(ctx context.Context, role *model.Role, apiIds []int } // 重新加载角色数据 - return r.GetRoleByID(ctx, role.ID) + return d.GetRoleByID(ctx, role.ID) } // UpdateRole 更新角色 -func (r *roleDAO) UpdateRole(ctx context.Context, role *model.Role, apiIds []int) (*model.Role, error) { - tx := r.db.WithContext(ctx).Begin() +func (d *roleDAO) UpdateRole(ctx context.Context, role *model.Role, apiIds []int) (*model.Role, error) { + tx := d.db.WithContext(ctx).Begin() defer func() { if r := recover(); r != nil { tx.Rollback() @@ -185,12 +185,12 @@ func (r *roleDAO) UpdateRole(ctx context.Context, role *model.Role, apiIds []int } // 重新加载角色数据 - return r.GetRoleByID(ctx, role.ID) + return d.GetRoleByID(ctx, role.ID) } // DeleteRole 删除角色 -func (r *roleDAO) DeleteRole(ctx context.Context, id int) error { - tx := r.db.WithContext(ctx).Begin() +func (d *roleDAO) DeleteRole(ctx context.Context, id int) error { + tx := d.db.WithContext(ctx).Begin() defer func() { if r := recover(); r != nil { tx.Rollback() @@ -219,9 +219,9 @@ func (r *roleDAO) DeleteRole(ctx context.Context, id int) error { } // GetRoleByID 根据ID获取角色 -func (r *roleDAO) GetRoleByID(ctx context.Context, id int) (*model.Role, error) { +func (d *roleDAO) GetRoleByID(ctx context.Context, id int) (*model.Role, error) { var role model.Role - if err := r.db.WithContext(ctx).Preload("Apis").Preload("Users"). + if err := d.db.WithContext(ctx).Preload("Apis").Preload("Users"). First(&role, id).Error; err != nil { return nil, err } @@ -229,9 +229,9 @@ func (r *roleDAO) GetRoleByID(ctx context.Context, id int) (*model.Role, error) } // CheckRoleExists 检查角色名称或编码是否已存在 -func (r *roleDAO) CheckRoleExists(ctx context.Context, name, code string, excludeID int) (bool, error) { +func (d *roleDAO) CheckRoleExists(ctx context.Context, name, code string, excludeID int) (bool, error) { var count int64 - query := r.db.WithContext(ctx).Model(&model.Role{}). + query := d.db.WithContext(ctx).Model(&model.Role{}). Where("(name = ? OR code = ?)", name, code) if excludeID > 0 { @@ -246,9 +246,9 @@ func (r *roleDAO) CheckRoleExists(ctx context.Context, name, code string, exclud } // CheckRoleHasUsers 检查角色是否有关联用户 -func (r *roleDAO) CheckRoleHasUsers(ctx context.Context, roleID int) (bool, error) { +func (d *roleDAO) CheckRoleHasUsers(ctx context.Context, roleID int) (bool, error) { var count int64 - if err := r.db.WithContext(ctx).Model(&model.UserRole{}). + if err := d.db.WithContext(ctx).Model(&model.UserRole{}). Where("role_id = ?", roleID).Count(&count).Error; err != nil { return false, err } @@ -257,8 +257,8 @@ func (r *roleDAO) CheckRoleHasUsers(ctx context.Context, roleID int) (bool, erro } // AssignApisToRole 为角色分配API权限 -func (r *roleDAO) AssignApisToRole(ctx context.Context, roleID int, apiIds []int) error { - tx := r.db.WithContext(ctx).Begin() +func (d *roleDAO) AssignApisToRole(ctx context.Context, roleID int, apiIds []int) error { + tx := d.db.WithContext(ctx).Begin() defer func() { if r := recover(); r != nil { tx.Rollback() @@ -290,15 +290,15 @@ func (r *roleDAO) AssignApisToRole(ctx context.Context, roleID int, apiIds []int } // RevokeApisFromRole 撤销角色的API权限 -func (r *roleDAO) RevokeApisFromRole(ctx context.Context, roleID int, apiIds []int) error { - return r.db.WithContext(ctx).Where("role_id = ? AND api_id IN ?", roleID, apiIds). +func (d *roleDAO) RevokeApisFromRole(ctx context.Context, roleID int, apiIds []int) error { + return d.db.WithContext(ctx).Where("role_id = ? AND api_id IN ?", roleID, apiIds). Delete(&model.RoleApi{}).Error } // GetRoleApis 获取角色的API权限列表 -func (r *roleDAO) GetRoleApis(ctx context.Context, roleID int) ([]*model.Api, error) { +func (d *roleDAO) GetRoleApis(ctx context.Context, roleID int) ([]*model.Api, error) { var apis []*model.Api - if err := r.db.WithContext(ctx).Model(&model.Api{}). + if err := d.db.WithContext(ctx).Model(&model.Api{}). Joins("JOIN cl_system_role_apis ON cl_system_apis.id = cl_system_role_apis.api_id"). Where("cl_system_role_apis.role_id = ?", roleID). Find(&apis).Error; err != nil { @@ -309,8 +309,8 @@ func (r *roleDAO) GetRoleApis(ctx context.Context, roleID int) ([]*model.Api, er } // AssignRolesToUser 为用户分配角色 -func (r *roleDAO) AssignRolesToUser(ctx context.Context, userID int, roleIds []int, grantedBy int) error { - tx := r.db.WithContext(ctx).Begin() +func (d *roleDAO) AssignRolesToUser(ctx context.Context, userID int, roleIds []int, grantedBy int) error { + tx := d.db.WithContext(ctx).Begin() defer func() { if r := recover(); r != nil { tx.Rollback() @@ -342,15 +342,15 @@ func (r *roleDAO) AssignRolesToUser(ctx context.Context, userID int, roleIds []i } // RevokeRolesFromUser 撤销用户角色 -func (r *roleDAO) RevokeRolesFromUser(ctx context.Context, userID int, roleIds []int) error { - return r.db.WithContext(ctx).Where("user_id = ? AND role_id IN ?", userID, roleIds). +func (d *roleDAO) RevokeRolesFromUser(ctx context.Context, userID int, roleIds []int) error { + return d.db.WithContext(ctx).Where("user_id = ? AND role_id IN ?", userID, roleIds). Delete(&model.UserRole{}).Error } // GetRoleUsers 获取角色下的用户列表 -func (r *roleDAO) GetRoleUsers(ctx context.Context, roleID int) ([]*model.User, error) { +func (d *roleDAO) GetRoleUsers(ctx context.Context, roleID int) ([]*model.User, error) { var users []*model.User - if err := r.db.WithContext(ctx).Model(&model.User{}). + if err := d.db.WithContext(ctx).Model(&model.User{}). Joins("JOIN cl_system_user_roles ON cl_system_users.id = cl_system_user_roles.user_id"). Where("cl_system_user_roles.role_id = ?", roleID). Find(&users).Error; err != nil { @@ -361,9 +361,9 @@ func (r *roleDAO) GetRoleUsers(ctx context.Context, roleID int) ([]*model.User, } // GetUserRoles 获取用户的角色列表 -func (r *roleDAO) GetUserRoles(ctx context.Context, userID int) ([]*model.Role, error) { +func (d *roleDAO) GetUserRoles(ctx context.Context, userID int) ([]*model.Role, error) { var roles []*model.Role - if err := r.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Preload("Apis"). Model(&model.Role{}). Joins("JOIN cl_system_user_roles ON cl_system_roles.id = cl_system_user_roles.role_id"). @@ -376,7 +376,7 @@ func (r *roleDAO) GetUserRoles(ctx context.Context, userID int) ([]*model.Role, } // CheckUserPermission 检查用户权限 -func (r *roleDAO) CheckUserPermission(ctx context.Context, userID int, method, path string) (bool, error) { +func (d *roleDAO) CheckUserPermission(ctx context.Context, userID int, method, path string) (bool, error) { var count int64 // 通过用户角色查询是否有对应的API权限 @@ -385,14 +385,14 @@ func (r *roleDAO) CheckUserPermission(ctx context.Context, userID int, method, p FROM cl_system_apis a JOIN cl_system_role_apis ra ON a.id = ra.api_id JOIN cl_system_user_roles ur ON ra.role_id = ur.role_id - JOIN cl_system_roles r ON ur.role_id = r.id + JOIN cl_system_roles r ON ur.role_id = d.id WHERE cl_system_user_roles.user_id = ? - AND r.status = 1 + AND d.status = 1 AND a.method = ? AND a.path = ? ` - if err := r.db.WithContext(ctx).Raw(query, userID, method, path).Count(&count).Error; err != nil { + if err := d.db.WithContext(ctx).Raw(query, userID, method, path).Count(&count).Error; err != nil { return false, err } @@ -400,7 +400,7 @@ func (r *roleDAO) CheckUserPermission(ctx context.Context, userID int, method, p } // GetUserPermissions 获取用户的所有权限 -func (r *roleDAO) GetUserPermissions(ctx context.Context, userID int) ([]*model.Api, error) { +func (d *roleDAO) GetUserPermissions(ctx context.Context, userID int) ([]*model.Api, error) { var apis []*model.Api query := ` @@ -408,12 +408,12 @@ func (r *roleDAO) GetUserPermissions(ctx context.Context, userID int) ([]*model. FROM cl_system_apis a JOIN cl_system_role_apis ra ON a.id = ra.api_id JOIN cl_system_user_roles ur ON ra.role_id = ur.role_id - JOIN cl_system_roles r ON ur.role_id = r.id - WHERE ur.user_id = ? AND r.status = 1 + JOIN cl_system_roles r ON ur.role_id = d.id + WHERE ur.user_id = ? AND d.status = 1 ORDER BY a.created_at DESC ` - if err := r.db.WithContext(ctx).Raw(query, userID).Scan(&apis).Error; err != nil { + if err := d.db.WithContext(ctx).Raw(query, userID).Scan(&apis).Error; err != nil { return nil, err } diff --git a/internal/system/service/api_service.go b/internal/system/service/api_service.go index 7a35a0da..26e9a248 100644 --- a/internal/system/service/api_service.go +++ b/internal/system/service/api_service.go @@ -56,55 +56,55 @@ func NewApiService(l *zap.Logger, dao dao.ApiDAO) ApiService { } // CreateApi 创建新的API -func (a *apiService) CreateApi(ctx context.Context, req *model.CreateApiRequest) error { +func (s *apiService) CreateApi(ctx context.Context, req *model.CreateApiRequest) error { if req == nil { - a.l.Warn("API不能为空") + s.l.Warn("API不能为空") return errors.New("api不能为空") } - return a.dao.CreateApi(ctx, a.buildCreateApi(req)) + return s.dao.CreateApi(ctx, s.buildCreateApi(req)) } // GetApiById 根据ID获取API -func (a *apiService) GetApiById(ctx context.Context, id int) (*model.Api, error) { +func (s *apiService) GetApiById(ctx context.Context, id int) (*model.Api, error) { if id <= 0 { - a.l.Warn("API ID无效", zap.Int("ID", id)) + s.l.Warn("API ID无效", zap.Int("ID", id)) return nil, errors.New("api id无效") } - return a.dao.GetApiById(ctx, id) + return s.dao.GetApiById(ctx, id) } // UpdateApi 更新API信息 -func (a *apiService) UpdateApi(ctx context.Context, req *model.UpdateApiRequest) error { +func (s *apiService) UpdateApi(ctx context.Context, req *model.UpdateApiRequest) error { if req == nil { - a.l.Warn("API不能为空") + s.l.Warn("API不能为空") return errors.New("api不能为空") } - return a.dao.UpdateApi(ctx, a.buildUpdateApi(req)) + return s.dao.UpdateApi(ctx, s.buildUpdateApi(req)) } // DeleteApi 删除指定ID的API -func (a *apiService) DeleteApi(ctx context.Context, id int) error { +func (s *apiService) DeleteApi(ctx context.Context, id int) error { if id <= 0 { - a.l.Warn("API ID无效", zap.Int("ID", id)) + s.l.Warn("API ID无效", zap.Int("ID", id)) return errors.New("api id无效") } - return a.dao.DeleteApi(ctx, id) + return s.dao.DeleteApi(ctx, id) } // ListApis 分页获取API列表 -func (a *apiService) ListApis(ctx context.Context, req *model.ListApisRequest) (model.ListResp[*model.Api], error) { +func (s *apiService) ListApis(ctx context.Context, req *model.ListApisRequest) (model.ListResp[*model.Api], error) { if req.Page < 1 || req.Size < 1 { - a.l.Warn("分页参数无效", zap.Int("页码", req.Page), zap.Int("每页数量", req.Size)) + s.l.Warn("分页参数无效", zap.Int("页码", req.Page), zap.Int("每页数量", req.Size)) return model.ListResp[*model.Api]{}, errors.New("分页参数无效") } - apis, total, err := a.dao.ListApis(ctx, req.Page, req.Size, req.Search, req.IsPublic, req.Method) + apis, total, err := s.dao.ListApis(ctx, req.Page, req.Size, req.Search, req.IsPublic, req.Method) if err != nil { - a.l.Error("获取API列表失败", zap.Error(err)) + s.l.Error("获取API列表失败", zap.Error(err)) return model.ListResp[*model.Api]{}, err } @@ -114,7 +114,7 @@ func (a *apiService) ListApis(ctx context.Context, req *model.ListApisRequest) ( }, nil } -func (a *apiService) buildCreateApi(req *model.CreateApiRequest) *model.Api { +func (s *apiService) buildCreateApi(req *model.CreateApiRequest) *model.Api { return &model.Api{ Name: req.Name, Path: req.Path, @@ -126,7 +126,7 @@ func (a *apiService) buildCreateApi(req *model.CreateApiRequest) *model.Api { } } -func (a *apiService) buildUpdateApi(req *model.UpdateApiRequest) *model.Api { +func (s *apiService) buildUpdateApi(req *model.UpdateApiRequest) *model.Api { return &model.Api{ Model: model.Model{ ID: req.ID, @@ -141,10 +141,10 @@ func (a *apiService) buildUpdateApi(req *model.UpdateApiRequest) *model.Api { } } -func (a *apiService) GetApiStatistics(ctx context.Context) (*model.ApiStatistics, error) { - statistics, err := a.dao.GetApiStatistics(ctx) +func (s *apiService) GetApiStatistics(ctx context.Context) (*model.ApiStatistics, error) { + statistics, err := s.dao.GetApiStatistics(ctx) if err != nil { - a.l.Error("获取API统计失败", zap.Error(err)) + s.l.Error("获取API统计失败", zap.Error(err)) return nil, err } diff --git a/internal/tree/service/tree_local_service.go b/internal/tree/service/tree_local_service.go index ed371fc8..33bd47c6 100644 --- a/internal/tree/service/tree_local_service.go +++ b/internal/tree/service/tree_local_service.go @@ -63,7 +63,7 @@ func NewTreeLocalService(logger *zap.Logger, dao dao.TreeLocalDAO) TreeLocalServ } // GetTreeLocalList 获取本地主机列表 -func (t *treeLocalService) GetTreeLocalList(ctx context.Context, req *model.GetTreeLocalResourceListReq) (model.ListResp[*model.TreeLocalResource], error) { +func (s *treeLocalService) GetTreeLocalList(ctx context.Context, req *model.GetTreeLocalResourceListReq) (model.ListResp[*model.TreeLocalResource], error) { // 兜底分页参数,避免offset为负或size为0 if req.Page <= 0 { req.Page = 1 @@ -71,9 +71,9 @@ func (t *treeLocalService) GetTreeLocalList(ctx context.Context, req *model.GetT if req.Size <= 0 { req.Size = 10 } - locals, total, err := t.dao.GetList(ctx, req) + locals, total, err := s.dao.GetList(ctx, req) if err != nil { - t.logger.Error("获取本地主机列表失败", zap.Error(err)) + s.logger.Error("获取本地主机列表失败", zap.Error(err)) return model.ListResp[*model.TreeLocalResource]{}, err } @@ -84,17 +84,17 @@ func (t *treeLocalService) GetTreeLocalList(ctx context.Context, req *model.GetT } // GetTreeLocalDetail 获取本地主机详情 -func (t *treeLocalService) GetTreeLocalDetail(ctx context.Context, req *model.GetTreeLocalResourceDetailReq) (*model.TreeLocalResource, error) { +func (s *treeLocalService) GetTreeLocalDetail(ctx context.Context, req *model.GetTreeLocalResourceDetailReq) (*model.TreeLocalResource, error) { if req.ID <= 0 { return nil, errors.New("无效的主机ID") } - local, err := t.dao.GetByID(ctx, req.ID) + local, err := s.dao.GetByID(ctx, req.ID) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, errors.New("本地主机不存在") } - t.logger.Error("获取本地主机详情失败", zap.Int("id", req.ID), zap.Error(err)) + s.logger.Error("获取本地主机详情失败", zap.Int("id", req.ID), zap.Error(err)) return nil, err } @@ -102,25 +102,25 @@ func (t *treeLocalService) GetTreeLocalDetail(ctx context.Context, req *model.Ge } // GetTreeLocalForConnection 获取用于连接的本地主机详情(包含解密后的密码) -func (t *treeLocalService) GetTreeLocalForConnection(ctx context.Context, req *model.GetTreeLocalResourceDetailReq) (*model.TreeLocalResource, error) { +func (s *treeLocalService) GetTreeLocalForConnection(ctx context.Context, req *model.GetTreeLocalResourceDetailReq) (*model.TreeLocalResource, error) { if req.ID <= 0 { return nil, errors.New("无效的主机ID") } - local, err := t.dao.GetByID(ctx, req.ID) + local, err := s.dao.GetByID(ctx, req.ID) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, errors.New("本地主机不存在") } - t.logger.Error("获取本地主机详情失败", zap.Int("id", req.ID), zap.Error(err)) + s.logger.Error("获取本地主机详情失败", zap.Int("id", req.ID), zap.Error(err)) return nil, err } // 解密密码以供连接使用 if local.AuthMode == model.AuthModePassword && local.Password != "" { - plainPassword, err := t.decryptPassword(local.Password) + plainPassword, err := s.decryptPassword(local.Password) if err != nil { - t.logger.Error("密码解密失败", zap.Int("id", req.ID), zap.Error(err)) + s.logger.Error("密码解密失败", zap.Int("id", req.ID), zap.Error(err)) return nil, fmt.Errorf("密码解密失败: %w", err) } local.Password = plainPassword @@ -129,9 +129,9 @@ func (t *treeLocalService) GetTreeLocalForConnection(ctx context.Context, req *m return local, nil } -func (t *treeLocalService) CreateTreeLocal(ctx context.Context, req *model.CreateTreeLocalResourceReq) error { +func (s *treeLocalService) CreateTreeLocal(ctx context.Context, req *model.CreateTreeLocalResourceReq) error { // 检查IP地址是否已存在 - existing, err := t.dao.GetByIP(ctx, req.IpAddr) + existing, err := s.dao.GetByIP(ctx, req.IpAddr) if err == nil && existing != nil { return fmt.Errorf("IP地址 %s 已存在", req.IpAddr) } @@ -166,41 +166,41 @@ func (t *treeLocalService) CreateTreeLocal(ctx context.Context, req *model.Creat // 加密 if local.AuthMode == model.AuthModePassword && req.Password != "" { - encryptedPassword, err := t.encryptPassword(req.Password) + encryptedPassword, err := s.encryptPassword(req.Password) if err != nil { - t.logger.Error("密码加密失败", zap.Error(err)) + s.logger.Error("密码加密失败", zap.Error(err)) return fmt.Errorf("密码加密失败: %w", err) } local.Password = encryptedPassword } - if err := t.dao.Create(ctx, local); err != nil { - t.logger.Error("创建本地主机失败", zap.Error(err)) + if err := s.dao.Create(ctx, local); err != nil { + s.logger.Error("创建本地主机失败", zap.Error(err)) return err } return nil } -func (t *treeLocalService) UpdateTreeLocal(ctx context.Context, req *model.UpdateTreeLocalResourceReq) error { +func (s *treeLocalService) UpdateTreeLocal(ctx context.Context, req *model.UpdateTreeLocalResourceReq) error { if req.ID <= 0 { return errors.New("无效的主机ID") } // 检查是否存在 - host, err := t.dao.GetByID(ctx, req.ID) + host, err := s.dao.GetByID(ctx, req.ID) switch { case errors.Is(err, gorm.ErrRecordNotFound): return errors.New("本地主机不存在") case err != nil: - t.logger.Error("获取本地主机失败", zap.Int("id", req.ID), zap.Error(err)) + s.logger.Error("获取本地主机失败", zap.Int("id", req.ID), zap.Error(err)) return err } // 检查 IP 冲突 if req.IpAddr != "" && req.IpAddr != host.IpAddr { - if h, _ := t.dao.GetByIP(ctx, req.IpAddr); h != nil && h.ID != req.ID { - t.logger.Error("IP 已被占用", zap.String("ip", req.IpAddr), zap.Int("existing_id", h.ID)) + if h, _ := s.dao.GetByIP(ctx, req.IpAddr); h != nil && h.ID != req.ID { + s.logger.Error("IP 已被占用", zap.String("ip", req.IpAddr), zap.Int("existing_id", h.ID)) return fmt.Errorf("IP %s 已被其他主机使用", req.IpAddr) } } @@ -224,9 +224,9 @@ func (t *treeLocalService) UpdateTreeLocal(ctx context.Context, req *model.Updat // 加密密码 if req.AuthMode == model.AuthModePassword && req.Password != "" { - pwd, err := t.encryptPassword(req.Password) + pwd, err := s.encryptPassword(req.Password) if err != nil { - t.logger.Error("密码加密失败", zap.Error(err)) + s.logger.Error("密码加密失败", zap.Error(err)) return fmt.Errorf("密码加密失败: %w", err) } local.Password = pwd @@ -242,8 +242,8 @@ func (t *treeLocalService) UpdateTreeLocal(ctx context.Context, req *model.Updat return fmt.Errorf("合并字段失败: %w", err) } - if err := t.dao.Update(ctx, host); err != nil { - t.logger.Error("更新本地主机失败", zap.Int("id", req.ID), zap.Error(err)) + if err := s.dao.Update(ctx, host); err != nil { + s.logger.Error("更新本地主机失败", zap.Int("id", req.ID), zap.Error(err)) return err } @@ -251,42 +251,42 @@ func (t *treeLocalService) UpdateTreeLocal(ctx context.Context, req *model.Updat } // DeleteTreeLocal 删除本地主机 -func (t *treeLocalService) DeleteTreeLocal(ctx context.Context, req *model.DeleteTreeLocalResourceReq) error { +func (s *treeLocalService) DeleteTreeLocal(ctx context.Context, req *model.DeleteTreeLocalResourceReq) error { if req.ID <= 0 { return errors.New("无效的主机ID") } - if err := t.dao.Delete(ctx, req.ID); err != nil { + if err := s.dao.Delete(ctx, req.ID); err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("本地主机不存在") } - t.logger.Error("删除本地主机失败", zap.Int("id", req.ID), zap.Error(err)) + s.logger.Error("删除本地主机失败", zap.Int("id", req.ID), zap.Error(err)) return err } return nil } -func (t *treeLocalService) BindTreeLocal(ctx context.Context, req *model.BindTreeLocalResourceReq) error { +func (s *treeLocalService) BindTreeLocal(ctx context.Context, req *model.BindTreeLocalResourceReq) error { if req.ID <= 0 { return errors.New("无效的主机ID") } - if err := t.dao.BindTreeNodes(ctx, req.ID, req.TreeNodeIDs); err != nil { - t.logger.Error("绑定主机失败", zap.Int("id", req.ID), zap.Error(err)) + if err := s.dao.BindTreeNodes(ctx, req.ID, req.TreeNodeIDs); err != nil { + s.logger.Error("绑定主机失败", zap.Int("id", req.ID), zap.Error(err)) return err } return nil } -func (t *treeLocalService) UnBindLocalResource(ctx context.Context, req *model.UnBindTreeLocalResourceReq) error { +func (s *treeLocalService) UnBindLocalResource(ctx context.Context, req *model.UnBindTreeLocalResourceReq) error { if req.ID <= 0 { return errors.New("无效的主机ID") } - if err := t.dao.UnBindTreeNodes(ctx, req.ID, req.TreeNodeIDs); err != nil { - t.logger.Error("解绑主机失败", zap.Int("id", req.ID), zap.Error(err)) + if err := s.dao.UnBindTreeNodes(ctx, req.ID, req.TreeNodeIDs); err != nil { + s.logger.Error("解绑主机失败", zap.Int("id", req.ID), zap.Error(err)) return err } @@ -294,7 +294,7 @@ func (t *treeLocalService) UnBindLocalResource(ctx context.Context, req *model.U } // encryptPassword 加密密码 -func (t *treeLocalService) encryptPassword(password string) (string, error) { +func (s *treeLocalService) encryptPassword(password string) (string, error) { if password == "" { return "", nil } @@ -311,7 +311,7 @@ func (t *treeLocalService) encryptPassword(password string) (string, error) { } // decryptPassword 解密密码 -func (t *treeLocalService) decryptPassword(encryptedPassword string) (string, error) { +func (s *treeLocalService) decryptPassword(encryptedPassword string) (string, error) { if encryptedPassword == "" { return "", nil } diff --git a/internal/tree/service/tree_node_service.go b/internal/tree/service/tree_node_service.go index 54a75f08..4078a428 100644 --- a/internal/tree/service/tree_node_service.go +++ b/internal/tree/service/tree_node_service.go @@ -86,16 +86,16 @@ func NewTreeNodeService(logger *zap.Logger, dao dao.TreeNodeDAO, userDao userDao } // GetTreeList 获取树节点列表 -func (t *treeService) GetTreeList(ctx context.Context, req *model.GetTreeNodeListReq) (model.ListResp[*model.TreeNode], error) { +func (s *treeService) GetTreeList(ctx context.Context, req *model.GetTreeNodeListReq) (model.ListResp[*model.TreeNode], error) { if req.Level < 0 { return model.ListResp[*model.TreeNode]{}, errors.New("层级不能为负数") } - t.logger.Debug("获取树节点列表", zap.Int("level", req.Level), zap.Int("status", int(req.Status))) + s.logger.Debug("获取树节点列表", zap.Int("level", req.Level), zap.Int("status", int(req.Status))) - trees, total, err := t.dao.GetTreeList(ctx, req) + trees, total, err := s.dao.GetTreeList(ctx, req) if err != nil { - t.logger.Error("获取树节点列表失败", zap.Error(err)) + s.logger.Error("获取树节点列表失败", zap.Error(err)) return model.ListResp[*model.TreeNode]{}, err } @@ -106,10 +106,10 @@ func (t *treeService) GetTreeList(ctx context.Context, req *model.GetTreeNodeLis } // GetNodeDetail 获取节点详情 -func (t *treeService) GetNodeDetail(ctx context.Context, id int) (*model.TreeNode, error) { - node, err := t.dao.GetNode(ctx, id) +func (s *treeService) GetNodeDetail(ctx context.Context, id int) (*model.TreeNode, error) { + node, err := s.dao.GetNode(ctx, id) if err != nil { - t.logger.Error("获取节点详情失败", zap.Int("id", id), zap.Error(err)) + s.logger.Error("获取节点详情失败", zap.Int("id", id), zap.Error(err)) return nil, err } @@ -117,20 +117,20 @@ func (t *treeService) GetNodeDetail(ctx context.Context, id int) (*model.TreeNod } // GetChildNodes 获取直接子节点 -func (t *treeService) GetChildNodes(ctx context.Context, parentID int) ([]*model.TreeNode, error) { +func (s *treeService) GetChildNodes(ctx context.Context, parentID int) ([]*model.TreeNode, error) { if parentID < 0 { return nil, errors.New("父节点ID无效") } - return t.dao.GetChildNodes(ctx, parentID) + return s.dao.GetChildNodes(ctx, parentID) } // GetTreeStatistics 获取服务树统计信息 -func (t *treeService) GetTreeStatistics(ctx context.Context) (*model.TreeNodeStatisticsResp, error) { - return t.dao.GetTreeStatistics(ctx) +func (s *treeService) GetTreeStatistics(ctx context.Context) (*model.TreeNodeStatisticsResp, error) { + return s.dao.GetTreeStatistics(ctx) } // CreateNode 创建节点 -func (t *treeService) CreateNode(ctx context.Context, req *model.CreateTreeNodeReq) error { +func (s *treeService) CreateNode(ctx context.Context, req *model.CreateTreeNodeReq) error { // 设置默认状态 status := model.ACTIVE if req.Status != 0 { @@ -148,11 +148,11 @@ func (t *treeService) CreateNode(ctx context.Context, req *model.CreateTreeNodeR CreateUserName: req.CreateUserName, } - return t.dao.CreateNode(ctx, node) + return s.dao.CreateNode(ctx, node) } // UpdateNode 更新节点 -func (t *treeService) UpdateNode(ctx context.Context, req *model.UpdateTreeNodeReq) error { +func (s *treeService) UpdateNode(ctx context.Context, req *model.UpdateTreeNodeReq) error { // 设置默认状态 status := model.ACTIVE if req.Status != 0 { @@ -169,16 +169,16 @@ func (t *treeService) UpdateNode(ctx context.Context, req *model.UpdateTreeNodeR IsLeaf: req.IsLeaf, } - return t.dao.UpdateNode(ctx, node) + return s.dao.UpdateNode(ctx, node) } // DeleteNode 删除节点 -func (t *treeService) DeleteNode(ctx context.Context, id int) error { - return t.dao.DeleteNode(ctx, id) +func (s *treeService) DeleteNode(ctx context.Context, id int) error { + return s.dao.DeleteNode(ctx, id) } // MoveNode 移动节点 -func (t *treeService) MoveNode(ctx context.Context, nodeId, newParentId int) error { +func (s *treeService) MoveNode(ctx context.Context, nodeId, newParentId int) error { if newParentId < 0 { return errors.New("新父节点ID不能为负数") } @@ -187,10 +187,10 @@ func (t *treeService) MoveNode(ctx context.Context, nodeId, newParentId int) err return errors.New("节点不能移动到自己") } - t.logger.Info("移动节点", zap.Int("nodeId", nodeId), zap.Int("newParentId", newParentId)) + s.logger.Info("移动节点", zap.Int("nodeId", nodeId), zap.Int("newParentId", newParentId)) // 获取当前节点信息 - node, err := t.dao.GetNode(ctx, nodeId) + node, err := s.dao.GetNode(ctx, nodeId) if err != nil { return err } @@ -204,20 +204,20 @@ func (t *treeService) MoveNode(ctx context.Context, nodeId, newParentId int) err ParentID: newParentId, } - return t.dao.UpdateNode(ctx, updateReq) + return s.dao.UpdateNode(ctx, updateReq) } // GetNodeMembers 获取节点成员列表 -func (t *treeService) GetNodeMembers(ctx context.Context, nodeId int, memberType string) (model.ListResp[*model.User], error) { +func (s *treeService) GetNodeMembers(ctx context.Context, nodeId int, memberType string) (model.ListResp[*model.User], error) { if memberType != "" && memberType != NodeAdminRole && memberType != NodeMemberRole && memberType != "all" { return model.ListResp[*model.User]{}, errors.New("成员类型只能是admin、member或all") } - t.logger.Debug("获取节点成员", zap.Int("nodeId", nodeId), zap.String("memberType", memberType)) + s.logger.Debug("获取节点成员", zap.Int("nodeId", nodeId), zap.String("memberType", memberType)) - users, err := t.dao.GetNodeMembers(ctx, nodeId, memberType) + users, err := s.dao.GetNodeMembers(ctx, nodeId, memberType) if err != nil { - t.logger.Error("获取节点成员失败", zap.Int("nodeId", nodeId), zap.String("memberType", memberType), zap.Error(err)) + s.logger.Error("获取节点成员失败", zap.Int("nodeId", nodeId), zap.String("memberType", memberType), zap.Error(err)) return model.ListResp[*model.User]{}, err } @@ -228,51 +228,51 @@ func (t *treeService) GetNodeMembers(ctx context.Context, nodeId int, memberType } // AddNodeMember 添加节点成员 -func (t *treeService) AddNodeMember(ctx context.Context, req *model.AddTreeNodeMemberReq) error { +func (s *treeService) AddNodeMember(ctx context.Context, req *model.AddTreeNodeMemberReq) error { if req.MemberType != model.AdminRole && req.MemberType != model.MemberRole { return errors.New("成员类型只能是admin或member") } - t.logger.Info("添加节点成员", + s.logger.Info("添加节点成员", zap.Int("nodeId", req.NodeID), zap.Int("userId", req.UserID), zap.Int8("type", int8(req.MemberType))) - return t.dao.AddNodeMember(ctx, req.NodeID, req.UserID, req.MemberType) + return s.dao.AddNodeMember(ctx, req.NodeID, req.UserID, req.MemberType) } // RemoveNodeMember 移除节点成员 -func (t *treeService) RemoveNodeMember(ctx context.Context, req *model.RemoveTreeNodeMemberReq) error { +func (s *treeService) RemoveNodeMember(ctx context.Context, req *model.RemoveTreeNodeMemberReq) error { if req.MemberType != model.AdminRole && req.MemberType != model.MemberRole { return errors.New("成员类型只能是admin或member") } - t.logger.Info("移除节点成员", + s.logger.Info("移除节点成员", zap.Int("nodeId", req.NodeID), zap.Int("userId", req.UserID), zap.Int8("type", int8(req.MemberType))) - return t.dao.RemoveNodeMember(ctx, req.NodeID, req.UserID, req.MemberType) + return s.dao.RemoveNodeMember(ctx, req.NodeID, req.UserID, req.MemberType) } // BindResource 绑定资源到节点 -func (t *treeService) BindResource(ctx context.Context, req *model.BindTreeNodeResourceReq) error { +func (s *treeService) BindResource(ctx context.Context, req *model.BindTreeNodeResourceReq) error { if len(req.ResourceIDs) == 0 { return errors.New("资源ID列表不能为空") } - return t.dao.BindResource(ctx, req.NodeID, req.ResourceIDs) + return s.dao.BindResource(ctx, req.NodeID, req.ResourceIDs) } // UnbindResource 解绑资源 -func (t *treeService) UnbindResource(ctx context.Context, req *model.UnbindTreeNodeResourceReq) error { +func (s *treeService) UnbindResource(ctx context.Context, req *model.UnbindTreeNodeResourceReq) error { if req.ResourceID <= 0 { return errors.New("资源ID不能为空或小于等于0") } - t.logger.Info("解绑资源", + s.logger.Info("解绑资源", zap.Int("nodeId", req.NodeID), zap.Int("resourceId", req.ResourceID)) - return t.dao.UnbindResource(ctx, req.NodeID, req.ResourceID) + return s.dao.UnbindResource(ctx, req.NodeID, req.ResourceID) } diff --git a/internal/user/api/user_handler.go b/internal/user/api/user_handler.go index 69d7e8d0..cfd1bc63 100644 --- a/internal/user/api/user_handler.go +++ b/internal/user/api/user_handler.go @@ -51,40 +51,40 @@ func NewUserHandler(service service.UserService, ijwt ijwt.Handler) *UserHandler } } -func (u *UserHandler) RegisterRoutes(server *gin.Engine) { +func (h *UserHandler) RegisterRoutes(server *gin.Engine) { userGroup := server.Group("/api/user") { - userGroup.POST("/signup", u.SignUp) - userGroup.POST("/login", u.Login) - userGroup.POST("/refresh_token", u.RefreshToken) - userGroup.POST("/logout", u.Logout) - userGroup.GET("/profile", u.Profile) - userGroup.GET("/codes", u.GetPermCode) - userGroup.GET("/detail/:id", u.GetUserDetail) - userGroup.GET("/list", u.GetUserList) - userGroup.POST("/change_password", u.ChangePassword) - userGroup.POST("/write_off", u.WriteOff) - userGroup.PUT("/profile/update/:id", u.UpdateProfile) - userGroup.DELETE("/:id", u.DeleteUser) - userGroup.GET("/statistics", u.GetUserStatistics) + userGroup.POST("/signup", h.SignUp) + userGroup.POST("/login", h.Login) + userGroup.POST("/refresh_token", h.RefreshToken) + userGroup.POST("/logout", h.Logout) + userGroup.GET("/profile", h.Profile) + userGroup.GET("/codes", h.GetPermCode) + userGroup.GET("/detail/:id", h.GetUserDetail) + userGroup.GET("/list", h.GetUserList) + userGroup.POST("/change_password", h.ChangePassword) + userGroup.POST("/write_off", h.WriteOff) + userGroup.PUT("/profile/update/:id", h.UpdateProfile) + userGroup.DELETE("/:id", h.DeleteUser) + userGroup.GET("/statistics", h.GetUserStatistics) } } // SignUp 用户注册处理 -func (u *UserHandler) SignUp(ctx *gin.Context) { +func (h *UserHandler) SignUp(ctx *gin.Context) { var req model.UserSignUpReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, u.service.SignUp(ctx, &req) + return nil, h.service.SignUp(ctx, &req) }) } // Login 用户登录处理 -func (u *UserHandler) Login(ctx *gin.Context) { +func (h *UserHandler) Login(ctx *gin.Context) { var req model.UserLoginReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - user, err := u.service.Login(ctx, &req) + user, err := h.service.Login(ctx, &req) if err != nil { switch { case errors.Is(err, constants.ErrorUserNotExist): @@ -96,7 +96,7 @@ func (u *UserHandler) Login(ctx *gin.Context) { } } - accessToken, refreshToken, err := u.ijwt.SetLoginToken(ctx, user.ID, user.Username, user.AccountType) + accessToken, refreshToken, err := h.ijwt.SetLoginToken(ctx, user.ID, user.Username, user.AccountType) if err != nil { return nil, fmt.Errorf("生成令牌失败: %w", err) } @@ -114,26 +114,26 @@ func (u *UserHandler) Login(ctx *gin.Context) { } // Logout 用户登出处理 -func (u *UserHandler) Logout(ctx *gin.Context) { +func (h *UserHandler) Logout(ctx *gin.Context) { utils.HandleRequest(ctx, nil, func() (interface{}, error) { - return nil, u.ijwt.ClearToken(ctx) + return nil, h.ijwt.ClearToken(ctx) }) } // Profile 获取用户信息 -func (u *UserHandler) Profile(ctx *gin.Context) { +func (h *UserHandler) Profile(ctx *gin.Context) { var req model.ProfileReq uc := ctx.MustGet("user").(ijwt.UserClaims) req.ID = uc.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return u.service.GetProfile(ctx, req.ID) + return h.service.GetProfile(ctx, req.ID) }) } // RefreshToken 刷新令牌 -func (u *UserHandler) RefreshToken(ctx *gin.Context) { +func (h *UserHandler) RefreshToken(ctx *gin.Context) { var req model.TokenRequest rc := ijwt.RefreshClaims{} @@ -148,7 +148,7 @@ func (u *UserHandler) RefreshToken(ctx *gin.Context) { return } - if err = u.ijwt.CheckSession(ctx, rc.Ssid); err != nil { + if err = h.ijwt.CheckSession(ctx, rc.Ssid); err != nil { utils.ErrorWithMessage(ctx, "会话已过期,请重新登录") return } @@ -159,54 +159,54 @@ func (u *UserHandler) RefreshToken(ctx *gin.Context) { req.AccountType = rc.AccountType utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return u.ijwt.SetJWTToken(ctx, req.UserID, req.Username, req.Ssid, req.AccountType) + return h.ijwt.SetJWTToken(ctx, req.UserID, req.Username, req.Ssid, req.AccountType) }) } // GetPermCode 获取权限码 -func (u *UserHandler) GetPermCode(ctx *gin.Context) { +func (h *UserHandler) GetPermCode(ctx *gin.Context) { var req model.GetPermCodeReq uc := ctx.MustGet("user").(ijwt.UserClaims) req.ID = uc.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return u.service.GetPermCode(ctx, req.ID) + return h.service.GetPermCode(ctx, req.ID) }) } // GetUserList 获取用户列表 -func (u *UserHandler) GetUserList(ctx *gin.Context) { +func (h *UserHandler) GetUserList(ctx *gin.Context) { var req model.GetUserListReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return u.service.GetUserList(ctx, &req) + return h.service.GetUserList(ctx, &req) }) } // ChangePassword 修改密码 -func (u *UserHandler) ChangePassword(ctx *gin.Context) { +func (h *UserHandler) ChangePassword(ctx *gin.Context) { var req model.ChangePasswordReq uc := ctx.MustGet("user").(ijwt.UserClaims) req.UserID = uc.Uid utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, u.service.ChangePassword(ctx, &req) + return nil, h.service.ChangePassword(ctx, &req) }) } // WriteOff 注销账号 -func (u *UserHandler) WriteOff(ctx *gin.Context) { +func (h *UserHandler) WriteOff(ctx *gin.Context) { var req model.WriteOffReq utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, u.service.WriteOff(ctx, req.Username, req.Password) + return nil, h.service.WriteOff(ctx, req.Username, req.Password) }) } // UpdateProfile 更新用户信息 -func (u *UserHandler) UpdateProfile(ctx *gin.Context) { +func (h *UserHandler) UpdateProfile(ctx *gin.Context) { var req model.UpdateProfileReq id, err := utils.GetParamID(ctx) @@ -217,12 +217,12 @@ func (u *UserHandler) UpdateProfile(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, u.service.UpdateProfile(ctx, &req) + return nil, h.service.UpdateProfile(ctx, &req) }) } // DeleteUser 删除用户 -func (u *UserHandler) DeleteUser(ctx *gin.Context) { +func (h *UserHandler) DeleteUser(ctx *gin.Context) { var req model.DeleteUserReq id, err := utils.GetParamID(ctx) @@ -234,12 +234,12 @@ func (u *UserHandler) DeleteUser(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, nil, func() (interface{}, error) { - return nil, u.service.DeleteUser(ctx, req.ID) + return nil, h.service.DeleteUser(ctx, req.ID) }) } // GetUserDetail 获取用户详情 -func (u *UserHandler) GetUserDetail(ctx *gin.Context) { +func (h *UserHandler) GetUserDetail(ctx *gin.Context) { var req model.GetUserDetailReq id, err := utils.GetParamID(ctx) @@ -251,13 +251,13 @@ func (u *UserHandler) GetUserDetail(ctx *gin.Context) { req.ID = id utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return u.service.GetUserDetail(ctx, req.ID) + return h.service.GetUserDetail(ctx, req.ID) }) } // GetUserStatistics 获取用户统计 -func (u *UserHandler) GetUserStatistics(ctx *gin.Context) { +func (h *UserHandler) GetUserStatistics(ctx *gin.Context) { utils.HandleRequest(ctx, nil, func() (interface{}, error) { - return u.service.GetUserStatistics(ctx) + return h.service.GetUserStatistics(ctx) }) } diff --git a/internal/user/dao/user_dao.go b/internal/user/dao/user_dao.go index 46ef2469..df9949c6 100644 --- a/internal/user/dao/user_dao.go +++ b/internal/user/dao/user_dao.go @@ -61,20 +61,20 @@ func NewUserDAO(db *gorm.DB, l *zap.Logger) UserDAO { } // CreateUser 创建用户 -func (u *userDAO) CreateUser(ctx context.Context, user *model.User) error { +func (d *userDAO) CreateUser(ctx context.Context, user *model.User) error { if user == nil { return errors.New("用户信息不能为空") } // 使用事务和一次性查询检查唯一性约束 - err := u.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + err := d.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { var count int64 query := tx.Model(&model.User{}).Where("deleted_at = ?", 0). Where("username = ? OR (mobile = ? AND mobile != '') OR (fei_shu_user_id = ? AND fei_shu_user_id != '')", user.Username, user.Mobile, user.FeiShuUserId) if err := query.Count(&count).Error; err != nil { - u.l.Error("检查唯一性约束失败", zap.Error(err)) + d.l.Error("检查唯一性约束失败", zap.Error(err)) return err } @@ -98,7 +98,7 @@ func (u *userDAO) CreateUser(ctx context.Context, user *model.User) error { // 创建用户 if err := tx.Create(user).Error; err != nil { - u.l.Error("创建用户失败", zap.Error(err), zap.String("username", user.Username)) + d.l.Error("创建用户失败", zap.Error(err), zap.String("username", user.Username)) return err } @@ -109,14 +109,14 @@ func (u *userDAO) CreateUser(ctx context.Context, user *model.User) error { } // GetUserByUsername 根据用户名获取用户信息 -func (u *userDAO) GetUserByUsername(ctx context.Context, username string) (*model.User, error) { +func (d *userDAO) GetUserByUsername(ctx context.Context, username string) (*model.User, error) { if username == "" { return nil, errors.New("username 不能为空") } var user model.User - if err := u.db.WithContext(ctx).Where("username = ?", username).First(&user).Error; err != nil { - u.l.Error("根据用户名获取用户失败", zap.String("username", username), zap.Error(err)) + if err := d.db.WithContext(ctx).Where("username = ?", username).First(&user).Error; err != nil { + d.l.Error("根据用户名获取用户失败", zap.String("username", username), zap.Error(err)) return nil, err } @@ -124,11 +124,11 @@ func (u *userDAO) GetUserByUsername(ctx context.Context, username string) (*mode } // GetAllUsers 获取所有用户 -func (u *userDAO) GetUserList(ctx context.Context, page, size int, search string, enable int8, accountType int8) ([]*model.User, int64, error) { +func (d *userDAO) GetUserList(ctx context.Context, page, size int, search string, enable int8, accountType int8) ([]*model.User, int64, error) { var users []*model.User var count int64 - query := u.db.WithContext(ctx).Model(&model.User{}) + query := d.db.WithContext(ctx).Model(&model.User{}) if search != "" { query = query.Where("username LIKE ? OR real_name LIKE ?", "%"+search+"%", "%"+search+"%") } @@ -142,12 +142,12 @@ func (u *userDAO) GetUserList(ctx context.Context, page, size int, search string } if err := query.Count(&count).Error; err != nil { - u.l.Error("获取用户总数失败", zap.Error(err)) + d.l.Error("获取用户总数失败", zap.Error(err)) return nil, 0, err } if err := query.Order("id desc").Offset((page - 1) * size).Limit(size).Preload("Apis").Find(&users).Error; err != nil { - u.l.Error("获取所有用户失败", zap.Error(err)) + d.l.Error("获取所有用户失败", zap.Error(err)) return nil, 0, err } @@ -155,17 +155,17 @@ func (u *userDAO) GetUserList(ctx context.Context, page, size int, search string } // GetUserByID 根据用户ID获取用户信息 -func (u *userDAO) GetUserByID(ctx context.Context, id int) (*model.User, error) { +func (d *userDAO) GetUserByID(ctx context.Context, id int) (*model.User, error) { if id <= 0 { return nil, errors.New("无效的用户ID") } var user model.User - if err := u.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("id = ?", id). Preload("Apis"). First(&user).Error; err != nil { - u.l.Error("根据ID获取用户失败", zap.Int("id", id), zap.Error(err)) + d.l.Error("根据ID获取用户失败", zap.Int("id", id), zap.Error(err)) return nil, err } @@ -173,7 +173,7 @@ func (u *userDAO) GetUserByID(ctx context.Context, id int) (*model.User, error) } // GetPermCode 获取用户权限码 -func (u *userDAO) GetPermCode(ctx context.Context, uid int) ([]string, error) { +func (d *userDAO) GetPermCode(ctx context.Context, uid int) ([]string, error) { if uid <= 0 { return nil, errors.New("无效的用户ID") } @@ -183,7 +183,7 @@ func (u *userDAO) GetPermCode(ctx context.Context, uid int) ([]string, error) { } // ChangePassword 修改密码 -func (u *userDAO) ChangePassword(ctx context.Context, uid int, password string) error { +func (d *userDAO) ChangePassword(ctx context.Context, uid int, password string) error { if uid <= 0 { return errors.New("无效的用户ID") } @@ -191,7 +191,7 @@ func (u *userDAO) ChangePassword(ctx context.Context, uid int, password string) return errors.New("密码不能为空") } - result := u.db.WithContext(ctx). + result := d.db.WithContext(ctx). Model(&model.User{}). Where("id = ?", uid). Updates(map[string]interface{}{ @@ -199,7 +199,7 @@ func (u *userDAO) ChangePassword(ctx context.Context, uid int, password string) }) if result.Error != nil { - u.l.Error("修改密码失败", zap.Int("uid", uid), zap.Error(result.Error)) + d.l.Error("修改密码失败", zap.Int("uid", uid), zap.Error(result.Error)) return result.Error } @@ -211,20 +211,20 @@ func (u *userDAO) ChangePassword(ctx context.Context, uid int, password string) } // UpdateProfile 更新用户信息 -func (u *userDAO) UpdateProfile(ctx context.Context, user *model.User) error { +func (d *userDAO) UpdateProfile(ctx context.Context, user *model.User) error { if user == nil || user.ID <= 0 { return errors.New("无效的用户信息") } // 使用事务和一次性查询检查唯一性约束 - err := u.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + err := d.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { var count int64 query := tx.Model(&model.User{}). Where("id != ? AND ((mobile = ? AND mobile != '') OR (fei_shu_user_id = ? AND fei_shu_user_id != ''))", user.ID, user.Mobile, user.FeiShuUserId) if err := query.Count(&count).Error; err != nil { - u.l.Error("检查唯一性约束失败", zap.Error(err)) + d.l.Error("检查唯一性约束失败", zap.Error(err)) return err } @@ -260,7 +260,7 @@ func (u *userDAO) UpdateProfile(ctx context.Context, user *model.User) error { Updates(updates) if result.Error != nil { - u.l.Error("更新用户信息失败", zap.Int("uid", user.ID), zap.Error(result.Error)) + d.l.Error("更新用户信息失败", zap.Int("uid", user.ID), zap.Error(result.Error)) return result.Error } @@ -275,18 +275,18 @@ func (u *userDAO) UpdateProfile(ctx context.Context, user *model.User) error { } // WriteOff 注销用户 -func (u *userDAO) WriteOff(ctx context.Context, username string, password string) error { +func (d *userDAO) WriteOff(ctx context.Context, username string, password string) error { if username == "" || password == "" { return errors.New("用户名和密码不能为空") } - result := u.db.WithContext(ctx). + result := d.db.WithContext(ctx). Model(&model.User{}). Where("username = ?", username). Delete(&model.User{}) if result.Error != nil { - u.l.Error("注销用户失败", zap.String("username", username), zap.Error(result.Error)) + d.l.Error("注销用户失败", zap.String("username", username), zap.Error(result.Error)) return result.Error } @@ -298,22 +298,22 @@ func (u *userDAO) WriteOff(ctx context.Context, username string, password string } // DeleteUser 删除用户 -func (u *userDAO) DeleteUser(ctx context.Context, uid int) error { +func (d *userDAO) DeleteUser(ctx context.Context, uid int) error { if uid <= 0 { return errors.New("无效的用户ID") } - return u.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + return d.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { // 删除用户API关联 if err := tx.Table("user_apis").Where("user_id = ?", uid).Delete(nil).Error; err != nil { - u.l.Warn("删除用户API关联失败", zap.Int("uid", uid), zap.Error(err)) + d.l.Warn("删除用户API关联失败", zap.Int("uid", uid), zap.Error(err)) // 继续执行,不中断事务 } // 删除用户 result := tx.Where("id = ?", uid).Delete(&model.User{}) if result.Error != nil { - u.l.Error("删除用户失败", zap.Int("uid", uid), zap.Error(result.Error)) + d.l.Error("删除用户失败", zap.Int("uid", uid), zap.Error(result.Error)) return result.Error } @@ -326,34 +326,34 @@ func (u *userDAO) DeleteUser(ctx context.Context, uid int) error { } // GetUserByIDs 批量获取用户信息 -func (u *userDAO) GetUserByIDs(ctx context.Context, ids []int) ([]*model.User, error) { +func (d *userDAO) GetUserByIDs(ctx context.Context, ids []int) ([]*model.User, error) { if len(ids) == 0 { return nil, errors.New("用户ID列表不能为空") } var users []*model.User - if err := u.db.WithContext(ctx). + if err := d.db.WithContext(ctx). Where("id in (?)", ids). Find(&users).Error; err != nil { - u.l.Error("批量获取用户失败", zap.Ints("ids", ids), zap.Error(err)) + d.l.Error("批量获取用户失败", zap.Ints("ids", ids), zap.Error(err)) return nil, err } return users, nil } -func (u *userDAO) GetUserStatistics(ctx context.Context) (*model.UserStatistics, error) { +func (d *userDAO) GetUserStatistics(ctx context.Context) (*model.UserStatistics, error) { var statistics model.UserStatistics // 获取管理员总数 - if err := u.db.WithContext(ctx).Model(&model.User{}).Count(&statistics.AdminCount).Error; err != nil { - u.l.Error("获取管理员总数失败", zap.Error(err)) + if err := d.db.WithContext(ctx).Model(&model.User{}).Count(&statistics.AdminCount).Error; err != nil { + d.l.Error("获取管理员总数失败", zap.Error(err)) return nil, err } // 获取活跃用户数量 - if err := u.db.WithContext(ctx).Model(&model.User{}).Where("enable = ?", 1).Count(&statistics.ActiveUserCount).Error; err != nil { - u.l.Error("获取活跃用户数量失败", zap.Error(err)) + if err := d.db.WithContext(ctx).Model(&model.User{}).Where("enable = ?", 1).Count(&statistics.ActiveUserCount).Error; err != nil { + d.l.Error("获取活跃用户数量失败", zap.Error(err)) return nil, err } diff --git a/internal/workorder/dao/form_design_dao.go b/internal/workorder/dao/form_design_dao.go index 015b17ed..109611b6 100644 --- a/internal/workorder/dao/form_design_dao.go +++ b/internal/workorder/dao/form_design_dao.go @@ -62,9 +62,9 @@ func NewWorkorderFormDesignDAO(db *gorm.DB, logger *zap.Logger) WorkorderFormDes } // CreateFormDesign 创建表单设计 -func (f *workorderFormDesignDAO) CreateFormDesign(ctx context.Context, formDesign *model.WorkorderFormDesign) error { - if err := f.db.WithContext(ctx).Create(formDesign).Error; err != nil { - f.logger.Error("创建表单设计失败", zap.Error(err), zap.String("name", formDesign.Name)) +func (d *workorderFormDesignDAO) CreateFormDesign(ctx context.Context, formDesign *model.WorkorderFormDesign) error { + if err := d.db.WithContext(ctx).Create(formDesign).Error; err != nil { + d.logger.Error("创建表单设计失败", zap.Error(err), zap.String("name", formDesign.Name)) return fmt.Errorf("创建表单设计失败: %w", err) } @@ -72,7 +72,7 @@ func (f *workorderFormDesignDAO) CreateFormDesign(ctx context.Context, formDesig } // UpdateFormDesign 更新表单设计 -func (f *workorderFormDesignDAO) UpdateFormDesign(ctx context.Context, formDesign *model.WorkorderFormDesign) error { +func (d *workorderFormDesignDAO) UpdateFormDesign(ctx context.Context, formDesign *model.WorkorderFormDesign) error { updateData := map[string]any{ "name": formDesign.Name, "description": formDesign.Description, @@ -82,18 +82,18 @@ func (f *workorderFormDesignDAO) UpdateFormDesign(ctx context.Context, formDesig "tags": formDesign.Tags, "is_template": formDesign.IsTemplate, } - result := f.db.WithContext(ctx). + result := d.db.WithContext(ctx). Model(&model.WorkorderFormDesign{}). Where("id = ?", formDesign.ID). Updates(updateData) if result.Error != nil { - f.logger.Error("更新表单设计失败", zap.Error(result.Error), zap.Int("id", int(formDesign.ID))) + d.logger.Error("更新表单设计失败", zap.Error(result.Error), zap.Int("id", int(formDesign.ID))) return fmt.Errorf("更新表单设计失败: %w", result.Error) } if result.RowsAffected == 0 { - f.logger.Warn("表单设计不存在", zap.Int("id", int(formDesign.ID))) + d.logger.Warn("表单设计不存在", zap.Int("id", int(formDesign.ID))) return ErrFormDesignNotFound } @@ -101,15 +101,15 @@ func (f *workorderFormDesignDAO) UpdateFormDesign(ctx context.Context, formDesig } // DeleteFormDesign 删除表单设计(软删除) -func (f *workorderFormDesignDAO) DeleteFormDesign(ctx context.Context, id int) error { - result := f.db.WithContext(ctx).Delete(&model.WorkorderFormDesign{}, id) +func (d *workorderFormDesignDAO) DeleteFormDesign(ctx context.Context, id int) error { + result := d.db.WithContext(ctx).Delete(&model.WorkorderFormDesign{}, id) if result.Error != nil { - f.logger.Error("删除表单设计失败", zap.Error(result.Error), zap.Int("id", id)) + d.logger.Error("删除表单设计失败", zap.Error(result.Error), zap.Int("id", id)) return fmt.Errorf("删除表单设计失败: %w", result.Error) } if result.RowsAffected == 0 { - f.logger.Warn("表单设计不存在", zap.Int("id", id)) + d.logger.Warn("表单设计不存在", zap.Int("id", id)) return ErrFormDesignNotFound } @@ -117,33 +117,33 @@ func (f *workorderFormDesignDAO) DeleteFormDesign(ctx context.Context, id int) e } // GetFormDesign 获取表单设计 -func (f *workorderFormDesignDAO) GetFormDesign(ctx context.Context, id int) (*model.WorkorderFormDesign, error) { +func (d *workorderFormDesignDAO) GetFormDesign(ctx context.Context, id int) (*model.WorkorderFormDesign, error) { var formDesign model.WorkorderFormDesign - err := f.db.WithContext(ctx).Preload("Category").Where("id = ?", id).First(&formDesign).Error + err := d.db.WithContext(ctx).Preload("Category").Where("id = ?", id).First(&formDesign).Error if err != nil { if err == gorm.ErrRecordNotFound { - f.logger.Warn("表单设计不存在", zap.Int("id", id)) + d.logger.Warn("表单设计不存在", zap.Int("id", id)) return nil, ErrFormDesignNotFound } - f.logger.Error("获取表单设计失败", zap.Error(err), zap.Int("id", id)) + d.logger.Error("获取表单设计失败", zap.Error(err), zap.Int("id", id)) return nil, fmt.Errorf("获取表单设计失败: %w", err) } return &formDesign, nil } -func (f *workorderFormDesignDAO) GetFormDesignByName(ctx context.Context, name string) (*model.WorkorderFormDesign, error) { +func (d *workorderFormDesignDAO) GetFormDesignByName(ctx context.Context, name string) (*model.WorkorderFormDesign, error) { var formDesign model.WorkorderFormDesign - err := f.db.WithContext(ctx).Where("name = ?", name).First(&formDesign).Error + err := d.db.WithContext(ctx).Where("name = ?", name).First(&formDesign).Error if err != nil { if err == gorm.ErrRecordNotFound { - f.logger.Warn("表单设计不存在", zap.String("name", name)) + d.logger.Warn("表单设计不存在", zap.String("name", name)) return nil, ErrFormDesignNotFound } - f.logger.Error("获取表单设计失败", zap.Error(err), zap.String("name", name)) + d.logger.Error("获取表单设计失败", zap.Error(err), zap.String("name", name)) return nil, err } @@ -151,18 +151,18 @@ func (f *workorderFormDesignDAO) GetFormDesignByName(ctx context.Context, name s } // ListFormDesign 获取表单设计列表 -func (f *workorderFormDesignDAO) ListFormDesign(ctx context.Context, req *model.ListWorkorderFormDesignReq) ([]*model.WorkorderFormDesign, int64, error) { +func (d *workorderFormDesignDAO) ListFormDesign(ctx context.Context, req *model.ListWorkorderFormDesignReq) ([]*model.WorkorderFormDesign, int64, error) { var formDesigns []*model.WorkorderFormDesign var total int64 - db := f.db.WithContext(ctx).Model(&model.WorkorderFormDesign{}) + db := d.db.WithContext(ctx).Model(&model.WorkorderFormDesign{}) // 构建查询条件 - db = f.buildListQuery(db, req) + db = d.buildListQuery(db, req) // 获取总数 if err := db.Count(&total).Error; err != nil { - f.logger.Error("获取表单设计总数失败", zap.Error(err)) + d.logger.Error("获取表单设计总数失败", zap.Error(err)) return nil, 0, fmt.Errorf("获取表单设计总数失败: %w", err) } @@ -175,7 +175,7 @@ func (f *workorderFormDesignDAO) ListFormDesign(ctx context.Context, req *model. Find(&formDesigns).Error if err != nil { - f.logger.Error("获取表单设计列表失败", zap.Error(err)) + d.logger.Error("获取表单设计列表失败", zap.Error(err)) return nil, 0, fmt.Errorf("获取表单设计列表失败: %w", err) } @@ -183,20 +183,20 @@ func (f *workorderFormDesignDAO) ListFormDesign(ctx context.Context, req *model. } // CheckFormDesignNameExists 检查表单设计名称是否存在 -func (f *workorderFormDesignDAO) CheckFormDesignNameExists(ctx context.Context, name string, excludeID ...int) (bool, error) { +func (d *workorderFormDesignDAO) CheckFormDesignNameExists(ctx context.Context, name string, excludeID ...int) (bool, error) { if name == "" { return false, fmt.Errorf("表单设计名称不能为空") } var count int64 - db := f.db.WithContext(ctx).Model(&model.WorkorderFormDesign{}).Where("name = ?", name) + db := d.db.WithContext(ctx).Model(&model.WorkorderFormDesign{}).Where("name = ?", name) if len(excludeID) > 0 && excludeID[0] > 0 { db = db.Where("id != ?", excludeID[0]) } if err := db.Count(&count).Error; err != nil { - f.logger.Error("检查表单设计名称是否存在失败", zap.Error(err), zap.String("name", name)) + d.logger.Error("检查表单设计名称是否存在失败", zap.Error(err), zap.String("name", name)) return false, fmt.Errorf("检查表单设计名称是否存在失败: %w", err) } @@ -204,7 +204,7 @@ func (f *workorderFormDesignDAO) CheckFormDesignNameExists(ctx context.Context, } // buildListQuery 构建列表查询条件 -func (f *workorderFormDesignDAO) buildListQuery(db *gorm.DB, req *model.ListWorkorderFormDesignReq) *gorm.DB { +func (d *workorderFormDesignDAO) buildListQuery(db *gorm.DB, req *model.ListWorkorderFormDesignReq) *gorm.DB { if req.Search != "" { searchTerm := sanitizeSearchInput(req.Search) db = db.Where("name LIKE ? OR description LIKE ?", "%"+searchTerm+"%", "%"+searchTerm+"%") diff --git a/internal/workorder/dao/instance_time_line_dao.go b/internal/workorder/dao/instance_time_line_dao.go index 3c63585c..50cbfb3e 100644 --- a/internal/workorder/dao/instance_time_line_dao.go +++ b/internal/workorder/dao/instance_time_line_dao.go @@ -55,13 +55,13 @@ func NewInstanceTimeLineDAO(db *gorm.DB, logger *zap.Logger) WorkorderInstanceTi } // Create 创建时间线记录 -func (i *instanceTimeLineDAO) Create(ctx context.Context, timeline *model.WorkorderInstanceTimeline) error { +func (d *instanceTimeLineDAO) Create(ctx context.Context, timeline *model.WorkorderInstanceTimeline) error { if timeline == nil { return fmt.Errorf("时间线记录不能为空") } - if err := i.db.WithContext(ctx).Create(timeline).Error; err != nil { - i.logger.Error("创建时间线记录失败", zap.Error(err), zap.Int("instanceID", timeline.InstanceID)) + if err := d.db.WithContext(ctx).Create(timeline).Error; err != nil { + d.logger.Error("创建时间线记录失败", zap.Error(err), zap.Int("instanceID", timeline.InstanceID)) return fmt.Errorf("创建时间线记录失败: %w", err) } @@ -69,13 +69,13 @@ func (i *instanceTimeLineDAO) Create(ctx context.Context, timeline *model.Workor } // GetByID 根据ID获取时间线记录 -func (i *instanceTimeLineDAO) GetByID(ctx context.Context, id int) (*model.WorkorderInstanceTimeline, error) { +func (d *instanceTimeLineDAO) GetByID(ctx context.Context, id int) (*model.WorkorderInstanceTimeline, error) { if id <= 0 { return nil, fmt.Errorf("时间线记录ID无效") } var timeline model.WorkorderInstanceTimeline - err := i.db.WithContext(ctx). + err := d.db.WithContext(ctx). Where("id = ?", id). First(&timeline).Error @@ -83,7 +83,7 @@ func (i *instanceTimeLineDAO) GetByID(ctx context.Context, id int) (*model.Worko if errors.Is(err, gorm.ErrRecordNotFound) { return nil, fmt.Errorf("时间线记录不存在") } - i.logger.Error("获取时间线记录失败", zap.Error(err), zap.Int("id", id)) + d.logger.Error("获取时间线记录失败", zap.Error(err), zap.Int("id", id)) return nil, fmt.Errorf("获取时间线记录失败: %w", err) } @@ -91,19 +91,19 @@ func (i *instanceTimeLineDAO) GetByID(ctx context.Context, id int) (*model.Worko } // GetByInstanceID 根据工单ID获取时间线记录列表 -func (i *instanceTimeLineDAO) GetByInstanceID(ctx context.Context, instanceID int) ([]*model.WorkorderInstanceTimeline, error) { +func (d *instanceTimeLineDAO) GetByInstanceID(ctx context.Context, instanceID int) ([]*model.WorkorderInstanceTimeline, error) { if instanceID <= 0 { return nil, fmt.Errorf("工单ID无效") } var timelines []*model.WorkorderInstanceTimeline - err := i.db.WithContext(ctx). + err := d.db.WithContext(ctx). Where("instance_id = ?", instanceID). Order("created_at DESC"). Find(&timelines).Error if err != nil { - i.logger.Error("获取工单时间线记录失败", zap.Error(err), zap.Int("instanceID", instanceID)) + d.logger.Error("获取工单时间线记录失败", zap.Error(err), zap.Int("instanceID", instanceID)) return nil, fmt.Errorf("获取工单时间线记录失败: %w", err) } @@ -111,13 +111,13 @@ func (i *instanceTimeLineDAO) GetByInstanceID(ctx context.Context, instanceID in } // List 获取时间线记录列表 -func (i *instanceTimeLineDAO) List(ctx context.Context, req *model.ListWorkorderInstanceTimelineReq) ([]*model.WorkorderInstanceTimeline, int64, error) { +func (d *instanceTimeLineDAO) List(ctx context.Context, req *model.ListWorkorderInstanceTimelineReq) ([]*model.WorkorderInstanceTimeline, int64, error) { var timelines []*model.WorkorderInstanceTimeline var total int64 req.Page, req.Size = ValidatePagination(req.Page, req.Size) - db := i.db.WithContext(ctx).Model(&model.WorkorderInstanceTimeline{}) + db := d.db.WithContext(ctx).Model(&model.WorkorderInstanceTimeline{}) // 构建查询条件 if req.InstanceID != nil { @@ -139,7 +139,7 @@ func (i *instanceTimeLineDAO) List(ctx context.Context, req *model.ListWorkorder // 获取总数 if err := db.Count(&total).Error; err != nil { - i.logger.Error("获取时间线记录总数失败", zap.Error(err)) + d.logger.Error("获取时间线记录总数失败", zap.Error(err)) return nil, 0, fmt.Errorf("获取时间线记录总数失败: %w", err) } @@ -151,7 +151,7 @@ func (i *instanceTimeLineDAO) List(ctx context.Context, req *model.ListWorkorder Find(&timelines).Error if err != nil { - i.logger.Error("获取时间线记录列表失败", zap.Error(err)) + d.logger.Error("获取时间线记录列表失败", zap.Error(err)) return nil, 0, fmt.Errorf("获取时间线记录列表失败: %w", err) } @@ -159,12 +159,12 @@ func (i *instanceTimeLineDAO) List(ctx context.Context, req *model.ListWorkorder } // UpdateInstanceTimeLine 更新时间线记录 -func (i *instanceTimeLineDAO) UpdateInstanceTimeLine(ctx context.Context, timeline *model.WorkorderInstanceTimeline) error { +func (d *instanceTimeLineDAO) UpdateInstanceTimeLine(ctx context.Context, timeline *model.WorkorderInstanceTimeline) error { if timeline == nil || timeline.ID <= 0 { return fmt.Errorf("时间线记录ID无效") } - result := i.db.WithContext(ctx). + result := d.db.WithContext(ctx). Model(&model.WorkorderInstanceTimeline{}). Where("id = ?", timeline.ID). Updates(map[string]any{ @@ -172,7 +172,7 @@ func (i *instanceTimeLineDAO) UpdateInstanceTimeLine(ctx context.Context, timeli }) if result.Error != nil { - i.logger.Error("更新时间线记录失败", zap.Error(result.Error), zap.Int("id", timeline.ID)) + d.logger.Error("更新时间线记录失败", zap.Error(result.Error), zap.Int("id", timeline.ID)) return fmt.Errorf("更新时间线记录失败: %w", result.Error) } @@ -184,14 +184,14 @@ func (i *instanceTimeLineDAO) UpdateInstanceTimeLine(ctx context.Context, timeli } // DeleteInstanceTimeLine 删除时间线记录 -func (i *instanceTimeLineDAO) DeleteInstanceTimeLine(ctx context.Context, id int) error { +func (d *instanceTimeLineDAO) DeleteInstanceTimeLine(ctx context.Context, id int) error { if id <= 0 { return fmt.Errorf("时间线记录ID无效") } - result := i.db.WithContext(ctx).Delete(&model.WorkorderInstanceTimeline{}, id) + result := d.db.WithContext(ctx).Delete(&model.WorkorderInstanceTimeline{}, id) if result.Error != nil { - i.logger.Error("删除时间线记录失败", zap.Error(result.Error), zap.Int("id", id)) + d.logger.Error("删除时间线记录失败", zap.Error(result.Error), zap.Int("id", id)) return fmt.Errorf("删除时间线记录失败: %w", result.Error) } @@ -203,13 +203,13 @@ func (i *instanceTimeLineDAO) DeleteInstanceTimeLine(ctx context.Context, id int } // GetInstanceTimeLine 获取时间线记录详情 -func (i *instanceTimeLineDAO) GetInstanceTimeLine(ctx context.Context, id int) (*model.WorkorderInstanceTimeline, error) { +func (d *instanceTimeLineDAO) GetInstanceTimeLine(ctx context.Context, id int) (*model.WorkorderInstanceTimeline, error) { if id <= 0 { return nil, fmt.Errorf("时间线记录ID无效") } var timeline model.WorkorderInstanceTimeline - err := i.db.WithContext(ctx). + err := d.db.WithContext(ctx). Where("id = ?", id). First(&timeline).Error @@ -217,7 +217,7 @@ func (i *instanceTimeLineDAO) GetInstanceTimeLine(ctx context.Context, id int) ( if errors.Is(err, gorm.ErrRecordNotFound) { return nil, fmt.Errorf("时间线记录不存在") } - i.logger.Error("获取时间线记录失败", zap.Error(err), zap.Int("id", id)) + d.logger.Error("获取时间线记录失败", zap.Error(err), zap.Int("id", id)) return nil, fmt.Errorf("获取时间线记录失败: %w", err) } @@ -225,13 +225,13 @@ func (i *instanceTimeLineDAO) GetInstanceTimeLine(ctx context.Context, id int) ( } // ListInstanceTimeLine 获取时间线记录列表 -func (i *instanceTimeLineDAO) ListInstanceTimeLine(ctx context.Context, req *model.ListWorkorderInstanceTimelineReq) ([]*model.WorkorderInstanceTimeline, int64, error) { +func (d *instanceTimeLineDAO) ListInstanceTimeLine(ctx context.Context, req *model.ListWorkorderInstanceTimelineReq) ([]*model.WorkorderInstanceTimeline, int64, error) { var timelines []*model.WorkorderInstanceTimeline var total int64 req.Page, req.Size = ValidatePagination(req.Page, req.Size) - db := i.db.WithContext(ctx).Model(&model.WorkorderInstanceTimeline{}) + db := d.db.WithContext(ctx).Model(&model.WorkorderInstanceTimeline{}) // 构建查询条件 if req.InstanceID != nil { @@ -253,7 +253,7 @@ func (i *instanceTimeLineDAO) ListInstanceTimeLine(ctx context.Context, req *mod // 获取总数 if err := db.Count(&total).Error; err != nil { - i.logger.Error("获取时间线记录总数失败", zap.Error(err)) + d.logger.Error("获取时间线记录总数失败", zap.Error(err)) return nil, 0, fmt.Errorf("获取时间线记录总数失败: %w", err) } @@ -265,7 +265,7 @@ func (i *instanceTimeLineDAO) ListInstanceTimeLine(ctx context.Context, req *mod Find(&timelines).Error if err != nil { - i.logger.Error("获取时间线记录列表失败", zap.Error(err)) + d.logger.Error("获取时间线记录列表失败", zap.Error(err)) return nil, 0, fmt.Errorf("获取时间线记录列表失败: %w", err) } diff --git a/internal/workorder/dao/notification_dao.go b/internal/workorder/dao/notification_dao.go index 8e716ebf..aeac7079 100644 --- a/internal/workorder/dao/notification_dao.go +++ b/internal/workorder/dao/notification_dao.go @@ -63,7 +63,7 @@ func NewNotificationDAO(db *gorm.DB, logger *zap.Logger) WorkorderNotificationDA } // CreateNotification 创建通知配置 -func (n *notificationDAO) CreateNotification(ctx context.Context, req *model.CreateWorkorderNotificationReq) error { +func (d *notificationDAO) CreateNotification(ctx context.Context, req *model.CreateWorkorderNotificationReq) error { notification := &model.WorkorderNotification{ Name: req.Name, Description: req.Description, @@ -91,8 +91,8 @@ func (n *notificationDAO) CreateNotification(ctx context.Context, req *model.Cre Settings: req.Settings, } - if err := n.db.WithContext(ctx).Create(notification).Error; err != nil { - n.logger.Error("创建通知配置失败", zap.Error(err), zap.String("name", req.Name)) + if err := d.db.WithContext(ctx).Create(notification).Error; err != nil { + d.logger.Error("创建通知配置失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("创建通知配置失败: %w", err) } @@ -100,7 +100,7 @@ func (n *notificationDAO) CreateNotification(ctx context.Context, req *model.Cre } // UpdateNotification 更新通知配置 -func (n *notificationDAO) UpdateNotification(ctx context.Context, req *model.UpdateWorkorderNotificationReq) error { +func (d *notificationDAO) UpdateNotification(ctx context.Context, req *model.UpdateWorkorderNotificationReq) error { updateData := map[string]any{} if req.Name != "" { @@ -171,12 +171,12 @@ func (n *notificationDAO) UpdateNotification(ctx context.Context, req *model.Upd updateData["settings"] = req.Settings } - result := n.db.WithContext(ctx).Model(&model.WorkorderNotification{}). + result := d.db.WithContext(ctx).Model(&model.WorkorderNotification{}). Where("id = ?", req.ID). Updates(updateData) if result.Error != nil { - n.logger.Error("更新通知配置失败", zap.Error(result.Error), zap.Int("id", req.ID)) + d.logger.Error("更新通知配置失败", zap.Error(result.Error), zap.Int("id", req.ID)) return fmt.Errorf("更新通知配置失败: %w", result.Error) } @@ -188,10 +188,10 @@ func (n *notificationDAO) UpdateNotification(ctx context.Context, req *model.Upd } // DeleteNotification 删除通知配置 -func (n *notificationDAO) DeleteNotification(ctx context.Context, req *model.DeleteWorkorderNotificationReq) error { - result := n.db.WithContext(ctx).Delete(&model.WorkorderNotification{}, req.ID) +func (d *notificationDAO) DeleteNotification(ctx context.Context, req *model.DeleteWorkorderNotificationReq) error { + result := d.db.WithContext(ctx).Delete(&model.WorkorderNotification{}, req.ID) if result.Error != nil { - n.logger.Error("删除通知配置失败", zap.Error(result.Error), zap.Int("id", req.ID)) + d.logger.Error("删除通知配置失败", zap.Error(result.Error), zap.Int("id", req.ID)) return fmt.Errorf("删除通知配置失败: %w", result.Error) } @@ -203,13 +203,13 @@ func (n *notificationDAO) DeleteNotification(ctx context.Context, req *model.Del } // ListNotification 获取通知配置列表 -func (n *notificationDAO) ListNotification(ctx context.Context, req *model.ListWorkorderNotificationReq) (*model.ListResp[*model.WorkorderNotification], error) { +func (d *notificationDAO) ListNotification(ctx context.Context, req *model.ListWorkorderNotificationReq) (*model.ListResp[*model.WorkorderNotification], error) { var notifications []*model.WorkorderNotification var total int64 req.Page, req.PageSize = ValidatePagination(req.Page, req.PageSize) - db := n.db.WithContext(ctx).Model(&model.WorkorderNotification{}) + db := d.db.WithContext(ctx).Model(&model.WorkorderNotification{}) if req.Name != "" { searchTerm := sanitizeSearchInput(req.Name) @@ -232,14 +232,14 @@ func (n *notificationDAO) ListNotification(ctx context.Context, req *model.ListW } if err := db.Count(&total).Error; err != nil { - n.logger.Error("获取通知配置总数失败", zap.Error(err)) + d.logger.Error("获取通知配置总数失败", zap.Error(err)) return nil, fmt.Errorf("获取通知配置总数失败: %w", err) } offset := (req.Page - 1) * req.PageSize err := db.Order("id DESC").Offset(offset).Limit(req.PageSize).Find(¬ifications).Error if err != nil { - n.logger.Error("获取通知配置列表失败", zap.Error(err)) + d.logger.Error("获取通知配置列表失败", zap.Error(err)) return nil, fmt.Errorf("获取通知配置列表失败: %w", err) } @@ -250,50 +250,50 @@ func (n *notificationDAO) ListNotification(ctx context.Context, req *model.ListW } // DetailNotification 获取通知配置详情 -func (n *notificationDAO) DetailNotification(ctx context.Context, req *model.DetailWorkorderNotificationReq) (*model.WorkorderNotification, error) { +func (d *notificationDAO) DetailNotification(ctx context.Context, req *model.DetailWorkorderNotificationReq) (*model.WorkorderNotification, error) { var notification model.WorkorderNotification - err := n.db.WithContext(ctx).First(¬ification, req.ID).Error + err := d.db.WithContext(ctx).First(¬ification, req.ID).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, fmt.Errorf("通知配置不存在") } - n.logger.Error("获取通知配置详情失败", zap.Error(err), zap.Int("id", req.ID)) + d.logger.Error("获取通知配置详情失败", zap.Error(err), zap.Int("id", req.ID)) return nil, fmt.Errorf("获取通知配置详情失败: %w", err) } return ¬ification, nil } // GetNotificationByID 根据ID获取通知配置 -func (n *notificationDAO) GetNotificationByID(ctx context.Context, id int) (*model.WorkorderNotification, error) { +func (d *notificationDAO) GetNotificationByID(ctx context.Context, id int) (*model.WorkorderNotification, error) { var notification model.WorkorderNotification - err := n.db.WithContext(ctx).First(¬ification, id).Error + err := d.db.WithContext(ctx).First(¬ification, id).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, fmt.Errorf("通知配置不存在") } - n.logger.Error("根据ID获取通知配置失败", zap.Error(err), zap.Int("id", id)) + d.logger.Error("根据ID获取通知配置失败", zap.Error(err), zap.Int("id", id)) return nil, fmt.Errorf("根据ID获取通知配置失败: %w", err) } return ¬ification, nil } // AddSendLog 添加发送日志 -func (n *notificationDAO) AddSendLog(ctx context.Context, log *model.WorkorderNotificationLog) error { - if err := n.db.WithContext(ctx).Create(log).Error; err != nil { - n.logger.Error("添加发送日志失败", zap.Error(err)) +func (d *notificationDAO) AddSendLog(ctx context.Context, log *model.WorkorderNotificationLog) error { + if err := d.db.WithContext(ctx).Create(log).Error; err != nil { + d.logger.Error("添加发送日志失败", zap.Error(err)) return fmt.Errorf("添加发送日志失败: %w", err) } return nil } // GetSendLogs 获取发送日志列表 -func (n *notificationDAO) GetSendLogs(ctx context.Context, req *model.ListWorkorderNotificationLogReq) (*model.ListResp[*model.WorkorderNotificationLog], error) { +func (d *notificationDAO) GetSendLogs(ctx context.Context, req *model.ListWorkorderNotificationLogReq) (*model.ListResp[*model.WorkorderNotificationLog], error) { var logs []*model.WorkorderNotificationLog var total int64 req.Page, req.PageSize = ValidatePagination(req.Page, req.PageSize) - db := n.db.WithContext(ctx).Model(&model.WorkorderNotificationLog{}) + db := d.db.WithContext(ctx).Model(&model.WorkorderNotificationLog{}) if req.NotificationID != nil { db = db.Where("notification_id = ?", *req.NotificationID) @@ -318,14 +318,14 @@ func (n *notificationDAO) GetSendLogs(ctx context.Context, req *model.ListWorkor } if err := db.Count(&total).Error; err != nil { - n.logger.Error("获取发送日志总数失败", zap.Error(err)) + d.logger.Error("获取发送日志总数失败", zap.Error(err)) return nil, fmt.Errorf("获取发送日志总数失败: %w", err) } offset := (req.Page - 1) * req.PageSize err := db.Order("id DESC").Offset(offset).Limit(req.PageSize).Find(&logs).Error if err != nil { - n.logger.Error("获取发送日志列表失败", zap.Error(err)) + d.logger.Error("获取发送日志列表失败", zap.Error(err)) return nil, fmt.Errorf("获取发送日志列表失败: %w", err) } @@ -336,23 +336,23 @@ func (n *notificationDAO) GetSendLogs(ctx context.Context, req *model.ListWorkor } // IncrementSentCount 增加发送计数 -func (n *notificationDAO) IncrementSentCount(ctx context.Context, id int) error { - err := n.db.WithContext(ctx).Model(&model.WorkorderNotification{}). +func (d *notificationDAO) IncrementSentCount(ctx context.Context, id int) error { + err := d.db.WithContext(ctx).Model(&model.WorkorderNotification{}). Where("id = ?", id). Update("updated_at", time.Now()).Error if err != nil { - n.logger.Error("更新发送计数失败", zap.Error(err), zap.Int("id", id)) + d.logger.Error("更新发送计数失败", zap.Error(err), zap.Int("id", id)) return fmt.Errorf("更新发送计数失败: %w", err) } return nil } // GetActiveNotificationsByEventType 根据事件类型和流程ID获取活跃的通知配置 -func (n *notificationDAO) GetActiveNotificationsByEventType(ctx context.Context, eventType string, processID int) ([]*model.WorkorderNotification, error) { +func (d *notificationDAO) GetActiveNotificationsByEventType(ctx context.Context, eventType string, processID int) ([]*model.WorkorderNotification, error) { var notifications []*model.WorkorderNotification // 构建查询条件 - db := n.db.WithContext(ctx).Model(&model.WorkorderNotification{}). + db := d.db.WithContext(ctx).Model(&model.WorkorderNotification{}). Where("status = ?", 1) // 1-启用状态 db = db.Where("(process_id IS NULL OR process_id = ?)", processID) @@ -360,7 +360,7 @@ func (n *notificationDAO) GetActiveNotificationsByEventType(ctx context.Context, err := db.Order("priority ASC, id ASC").Find(¬ifications).Error if err != nil { - n.logger.Error("获取活跃通知配置失败", + d.logger.Error("获取活跃通知配置失败", zap.Error(err), zap.String("event_type", eventType), zap.Int("process_id", processID)) @@ -371,14 +371,14 @@ func (n *notificationDAO) GetActiveNotificationsByEventType(ctx context.Context, } // GetInstanceByID 根据ID获取工单实例信息 -func (n *notificationDAO) GetInstanceByID(ctx context.Context, instanceID int) (*model.WorkorderInstance, error) { +func (d *notificationDAO) GetInstanceByID(ctx context.Context, instanceID int) (*model.WorkorderInstance, error) { var instance model.WorkorderInstance - err := n.db.WithContext(ctx).First(&instance, instanceID).Error + err := d.db.WithContext(ctx).First(&instance, instanceID).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, fmt.Errorf("工单实例不存在") } - n.logger.Error("根据ID获取工单实例失败", zap.Error(err), zap.Int("instance_id", instanceID)) + d.logger.Error("根据ID获取工单实例失败", zap.Error(err), zap.Int("instance_id", instanceID)) return nil, fmt.Errorf("根据ID获取工单实例失败: %w", err) } return &instance, nil diff --git a/internal/workorder/dao/template_dao.go b/internal/workorder/dao/template_dao.go index 0898d759..61bd9229 100644 --- a/internal/workorder/dao/template_dao.go +++ b/internal/workorder/dao/template_dao.go @@ -66,15 +66,15 @@ func NewTemplateDAO(db *gorm.DB, logger *zap.Logger) WorkorderTemplateDAO { } // CreateTemplate 创建模板 -func (t *templateDAO) CreateTemplate(ctx context.Context, template *model.WorkorderTemplate) error { +func (d *templateDAO) CreateTemplate(ctx context.Context, template *model.WorkorderTemplate) error { // 设置默认值 if len(template.DefaultValues) == 0 { template.DefaultValues = model.JSONMap{} } - if err := t.db.WithContext(ctx).Create(template).Error; err != nil { - t.logger.Error("创建模板失败", zap.Error(err), zap.String("name", template.Name)) - if t.isDuplicateKeyError(err) { + if err := d.db.WithContext(ctx).Create(template).Error; err != nil { + d.logger.Error("创建模板失败", zap.Error(err), zap.String("name", template.Name)) + if d.isDuplicateKeyError(err) { return ErrTemplateNameExists } return fmt.Errorf("创建模板失败: %w", err) @@ -84,7 +84,7 @@ func (t *templateDAO) CreateTemplate(ctx context.Context, template *model.Workor } // UpdateTemplate 更新模板 -func (t *templateDAO) UpdateTemplate(ctx context.Context, template *model.WorkorderTemplate) error { +func (d *templateDAO) UpdateTemplate(ctx context.Context, template *model.WorkorderTemplate) error { if template.ID <= 0 { return ErrInvalidID } @@ -104,13 +104,13 @@ func (t *templateDAO) UpdateTemplate(ctx context.Context, template *model.Workor "category_id": template.CategoryID, } - result := t.db.WithContext(ctx).Model(&model.WorkorderTemplate{}). + result := d.db.WithContext(ctx).Model(&model.WorkorderTemplate{}). Where("id = ?", template.ID). Updates(updates) if result.Error != nil { - t.logger.Error("更新模板失败", zap.Error(result.Error), zap.Int("id", template.ID)) - if t.isDuplicateKeyError(result.Error) { + d.logger.Error("更新模板失败", zap.Error(result.Error), zap.Int("id", template.ID)) + if d.isDuplicateKeyError(result.Error) { return ErrTemplateNameExists } return fmt.Errorf("更新模板失败: %w", result.Error) @@ -124,14 +124,14 @@ func (t *templateDAO) UpdateTemplate(ctx context.Context, template *model.Workor } // DeleteTemplate 删除模板 -func (t *templateDAO) DeleteTemplate(ctx context.Context, id int) error { +func (d *templateDAO) DeleteTemplate(ctx context.Context, id int) error { if id <= 0 { return ErrInvalidID } - result := t.db.WithContext(ctx).Where("id = ?", id).Delete(&model.WorkorderTemplate{}) + result := d.db.WithContext(ctx).Where("id = ?", id).Delete(&model.WorkorderTemplate{}) if result.Error != nil { - t.logger.Error("删除模板失败", zap.Error(result.Error), zap.Int("id", id)) + d.logger.Error("删除模板失败", zap.Error(result.Error), zap.Int("id", id)) return fmt.Errorf("删除模板失败: %w", result.Error) } @@ -143,13 +143,13 @@ func (t *templateDAO) DeleteTemplate(ctx context.Context, id int) error { } // GetTemplate 获取单个模板 -func (t *templateDAO) GetTemplate(ctx context.Context, id int) (*model.WorkorderTemplate, error) { +func (d *templateDAO) GetTemplate(ctx context.Context, id int) (*model.WorkorderTemplate, error) { if id <= 0 { return nil, ErrInvalidID } var template model.WorkorderTemplate - err := t.db.WithContext(ctx). + err := d.db.WithContext(ctx). Where("id = ?", id). Preload("Process"). Preload("Category"). @@ -160,7 +160,7 @@ func (t *templateDAO) GetTemplate(ctx context.Context, id int) (*model.Workorder if errors.Is(err, gorm.ErrRecordNotFound) { return nil, ErrTemplateNotFound } - t.logger.Error("获取模板失败", zap.Error(err), zap.Int("id", id)) + d.logger.Error("获取模板失败", zap.Error(err), zap.Int("id", id)) return nil, fmt.Errorf("获取模板失败: %w", err) } @@ -173,7 +173,7 @@ func (t *templateDAO) GetTemplate(ctx context.Context, id int) (*model.Workorder } // ListTemplate 列表查询模板 -func (t *templateDAO) ListTemplate(ctx context.Context, req *model.ListWorkorderTemplateReq) ([]*model.WorkorderTemplate, int64, error) { +func (d *templateDAO) ListTemplate(ctx context.Context, req *model.ListWorkorderTemplateReq) ([]*model.WorkorderTemplate, int64, error) { if req == nil { return nil, 0, fmt.Errorf("请求参数不能为空") } @@ -184,14 +184,14 @@ func (t *templateDAO) ListTemplate(ctx context.Context, req *model.ListWorkorder var templates []*model.WorkorderTemplate var total int64 - db := t.db.WithContext(ctx).Model(&model.WorkorderTemplate{}) + db := d.db.WithContext(ctx).Model(&model.WorkorderTemplate{}) // 构建查询条件 - db = t.buildListQuery(db, req) + db = d.buildListQuery(db, req) // 获取总数 if err := db.Count(&total).Error; err != nil { - t.logger.Error("获取模板总数失败", zap.Error(err)) + d.logger.Error("获取模板总数失败", zap.Error(err)) return nil, 0, fmt.Errorf("获取模板总数失败: %w", err) } @@ -206,7 +206,7 @@ func (t *templateDAO) ListTemplate(ctx context.Context, req *model.ListWorkorder Find(&templates).Error if err != nil { - t.logger.Error("查询模板列表失败", zap.Error(err)) + d.logger.Error("查询模板列表失败", zap.Error(err)) return nil, 0, fmt.Errorf("查询模板列表失败: %w", err) } @@ -221,21 +221,21 @@ func (t *templateDAO) ListTemplate(ctx context.Context, req *model.ListWorkorder } // UpdateTemplateStatus 更新模板状态 -func (t *templateDAO) UpdateTemplateStatus(ctx context.Context, id int, status int8) error { +func (d *templateDAO) UpdateTemplateStatus(ctx context.Context, id int, status int8) error { if id <= 0 { return ErrInvalidID } - if !t.isValidStatus(status) { + if !d.isValidStatus(status) { return ErrInvalidStatus } - result := t.db.WithContext(ctx).Model(&model.WorkorderTemplate{}). + result := d.db.WithContext(ctx).Model(&model.WorkorderTemplate{}). Where("id = ?", id). Update("status", status) if result.Error != nil { - t.logger.Error("更新模板状态失败", zap.Error(result.Error), zap.Int("id", id)) + d.logger.Error("更新模板状态失败", zap.Error(result.Error), zap.Int("id", id)) return fmt.Errorf("更新模板状态失败: %w", result.Error) } @@ -247,14 +247,14 @@ func (t *templateDAO) UpdateTemplateStatus(ctx context.Context, id int, status i } // IsTemplateNameExists 检查模板名称是否存在 -func (t *templateDAO) IsTemplateNameExists(ctx context.Context, name string, excludeID int) (bool, error) { +func (d *templateDAO) IsTemplateNameExists(ctx context.Context, name string, excludeID int) (bool, error) { name = strings.TrimSpace(name) if name == "" { return false, fmt.Errorf("模板名称不能为空") } var count int64 - query := t.db.WithContext(ctx).Model(&model.WorkorderTemplate{}).Where("name = ?", name) + query := d.db.WithContext(ctx).Model(&model.WorkorderTemplate{}).Where("name = ?", name) if excludeID > 0 { query = query.Where("id != ?", excludeID) @@ -262,7 +262,7 @@ func (t *templateDAO) IsTemplateNameExists(ctx context.Context, name string, exc err := query.Count(&count).Error if err != nil { - t.logger.Error("检查模板名称是否存在失败", zap.Error(err)) + d.logger.Error("检查模板名称是否存在失败", zap.Error(err)) return false, fmt.Errorf("检查模板名称是否存在失败: %w", err) } @@ -270,7 +270,7 @@ func (t *templateDAO) IsTemplateNameExists(ctx context.Context, name string, exc } // buildListQuery 构建列表查询条件 -func (t *templateDAO) buildListQuery(db *gorm.DB, req *model.ListWorkorderTemplateReq) *gorm.DB { +func (d *templateDAO) buildListQuery(db *gorm.DB, req *model.ListWorkorderTemplateReq) *gorm.DB { // 通用搜索 if req.Search != "" { searchTerm := "%" + strings.TrimSpace(req.Search) + "%" @@ -301,7 +301,7 @@ func (t *templateDAO) buildListQuery(db *gorm.DB, req *model.ListWorkorderTempla } // isDuplicateKeyError 判断是否为重复键错误 -func (t *templateDAO) isDuplicateKeyError(err error) bool { +func (d *templateDAO) isDuplicateKeyError(err error) bool { if err == nil { return false } @@ -313,6 +313,6 @@ func (t *templateDAO) isDuplicateKeyError(err error) bool { } // isValidStatus 验证状态值是否有效 -func (t *templateDAO) isValidStatus(status int8) bool { +func (d *templateDAO) isValidStatus(status int8) bool { return status == model.TemplateStatusEnabled || status == model.TemplateStatusDisabled } diff --git a/internal/workorder/service/form_design_service.go b/internal/workorder/service/form_design_service.go index 85c218e2..d3f91033 100644 --- a/internal/workorder/service/form_design_service.go +++ b/internal/workorder/service/form_design_service.go @@ -62,26 +62,26 @@ func NewFormDesignService(dao dao.WorkorderFormDesignDAO, categoryDao dao.Workor } // CreateFormDesign 创建表单设计 -func (f *formDesignService) CreateFormDesign(ctx context.Context, formDesignReq *model.CreateWorkorderFormDesignReq) error { +func (s *formDesignService) CreateFormDesign(ctx context.Context, formDesignReq *model.CreateWorkorderFormDesignReq) error { // 检查名称唯一性 - exists, err := f.dao.CheckFormDesignNameExists(ctx, formDesignReq.Name) + exists, err := s.dao.CheckFormDesignNameExists(ctx, formDesignReq.Name) if err != nil { - f.logger.Error("检查表单设计名称是否存在失败", zap.Error(err), zap.String("name", formDesignReq.Name)) + s.logger.Error("检查表单设计名称是否存在失败", zap.Error(err), zap.String("name", formDesignReq.Name)) return fmt.Errorf("检查表单设计名称失败: %w", err) } if exists { - f.logger.Warn("表单设计名称已存在", zap.String("name", formDesignReq.Name)) + s.logger.Warn("表单设计名称已存在", zap.String("name", formDesignReq.Name)) return dao.ErrFormDesignNameExists } // 验证表单结构 if len(formDesignReq.Schema.Fields) == 0 { - f.logger.Error("表单结构不能为空") + s.logger.Error("表单结构不能为空") return errors.New("表单结构不能为空") } // 生成表单字段ID - f.generateFieldIDs(&formDesignReq.Schema) + s.generateFieldIDs(&formDesignReq.Schema) // 校验标签 if len(formDesignReq.Tags) > 0 { @@ -94,7 +94,7 @@ func (f *formDesignService) CreateFormDesign(ctx context.Context, formDesignReq schemaJSON, err := json.Marshal(formDesignReq.Schema) if err != nil { - f.logger.Error("表单结构序列化失败", zap.Error(err)) + s.logger.Error("表单结构序列化失败", zap.Error(err)) return fmt.Errorf("表单结构序列化失败: %w", err) } @@ -102,7 +102,7 @@ func (f *formDesignService) CreateFormDesign(ctx context.Context, formDesignReq var schemaMap model.JSONMap err = json.Unmarshal(schemaJSON, &schemaMap) if err != nil { - f.logger.Error("转换表单结构为JSONMap失败", zap.Error(err)) + s.logger.Error("转换表单结构为JSONMap失败", zap.Error(err)) return fmt.Errorf("转换表单结构失败: %w", err) } @@ -120,8 +120,8 @@ func (f *formDesignService) CreateFormDesign(ctx context.Context, formDesignReq } // 创建表单设计 - if err := f.dao.CreateFormDesign(ctx, formDesign); err != nil { - f.logger.Error("创建表单设计失败", zap.Error(err), zap.String("name", formDesignReq.Name)) + if err := s.dao.CreateFormDesign(ctx, formDesign); err != nil { + s.logger.Error("创建表单设计失败", zap.Error(err), zap.String("name", formDesignReq.Name)) return err } @@ -129,30 +129,30 @@ func (f *formDesignService) CreateFormDesign(ctx context.Context, formDesignReq } // UpdateFormDesign 更新表单设计 -func (f *formDesignService) UpdateFormDesign(ctx context.Context, formDesignReq *model.UpdateWorkorderFormDesignReq) error { - existingFormDesign, err := f.dao.GetFormDesignByName(ctx, formDesignReq.Name) +func (s *formDesignService) UpdateFormDesign(ctx context.Context, formDesignReq *model.UpdateWorkorderFormDesignReq) error { + existingFormDesign, err := s.dao.GetFormDesignByName(ctx, formDesignReq.Name) if err != nil { if errors.Is(err, dao.ErrFormDesignNotFound) { // 表单设计未找到,继续处理 } else { - f.logger.Error("获取表单设计失败", zap.Error(err), zap.String("name", formDesignReq.Name)) + s.logger.Error("获取表单设计失败", zap.Error(err), zap.String("name", formDesignReq.Name)) return fmt.Errorf("获取表单设计失败: %w", err) } } if existingFormDesign != nil && existingFormDesign.ID != formDesignReq.ID { - f.logger.Warn("表单设计名称已存在", zap.String("name", formDesignReq.Name)) + s.logger.Warn("表单设计名称已存在", zap.String("name", formDesignReq.Name)) return dao.ErrFormDesignNameExists } // 验证表单结构 if len(formDesignReq.Schema.Fields) == 0 { - f.logger.Error("表单结构不能为空") + s.logger.Error("表单结构不能为空") return errors.New("表单结构不能为空") } // 生成表单字段ID - f.generateFieldIDs(&formDesignReq.Schema) + s.generateFieldIDs(&formDesignReq.Schema) // 校验标签 if len(formDesignReq.Tags) > 0 { @@ -165,7 +165,7 @@ func (f *formDesignService) UpdateFormDesign(ctx context.Context, formDesignReq schemaJSON, err := json.Marshal(formDesignReq.Schema) if err != nil { - f.logger.Error("表单结构序列化失败", zap.Error(err)) + s.logger.Error("表单结构序列化失败", zap.Error(err)) return fmt.Errorf("表单结构序列化失败: %w", err) } @@ -173,7 +173,7 @@ func (f *formDesignService) UpdateFormDesign(ctx context.Context, formDesignReq var schemaMap model.JSONMap err = json.Unmarshal(schemaJSON, &schemaMap) if err != nil { - f.logger.Error("转换表单结构为JSONMap失败", zap.Error(err)) + s.logger.Error("转换表单结构为JSONMap失败", zap.Error(err)) return fmt.Errorf("转换表单结构失败: %w", err) } @@ -190,8 +190,8 @@ func (f *formDesignService) UpdateFormDesign(ctx context.Context, formDesignReq } // 更新表单设计 - if err := f.dao.UpdateFormDesign(ctx, formDesign); err != nil { - f.logger.Error("更新表单设计失败", zap.Error(err), zap.Int("id", formDesignReq.ID)) + if err := s.dao.UpdateFormDesign(ctx, formDesign); err != nil { + s.logger.Error("更新表单设计失败", zap.Error(err), zap.Int("id", formDesignReq.ID)) return err } @@ -199,21 +199,21 @@ func (f *formDesignService) UpdateFormDesign(ctx context.Context, formDesignReq } // DeleteFormDesign 删除表单设计 -func (f *formDesignService) DeleteFormDesign(ctx context.Context, id int) error { +func (s *formDesignService) DeleteFormDesign(ctx context.Context, id int) error { if id <= 0 { return errors.New("表单设计ID无效") } // 检查表单设计是否存在 - _, err := f.dao.GetFormDesign(ctx, id) + _, err := s.dao.GetFormDesign(ctx, id) if err != nil { - f.logger.Error("获取表单设计失败", zap.Error(err), zap.Int("id", id)) + s.logger.Error("获取表单设计失败", zap.Error(err), zap.Int("id", id)) return err } // 删除表单设计 - if err := f.dao.DeleteFormDesign(ctx, id); err != nil { - f.logger.Error("删除表单设计失败", zap.Error(err), zap.Int("id", id)) + if err := s.dao.DeleteFormDesign(ctx, id); err != nil { + s.logger.Error("删除表单设计失败", zap.Error(err), zap.Int("id", id)) return err } @@ -221,15 +221,15 @@ func (f *formDesignService) DeleteFormDesign(ctx context.Context, id int) error } // GetFormDesign 获取表单设计 -func (f *formDesignService) GetFormDesign(ctx context.Context, id int) (*model.WorkorderFormDesign, error) { +func (s *formDesignService) GetFormDesign(ctx context.Context, id int) (*model.WorkorderFormDesign, error) { if id <= 0 { return nil, errors.New("表单设计ID无效") } // 获取表单设计 - formDesign, err := f.dao.GetFormDesign(ctx, id) + formDesign, err := s.dao.GetFormDesign(ctx, id) if err != nil { - f.logger.Error("获取表单设计失败", zap.Error(err), zap.Int("id", id)) + s.logger.Error("获取表单设计失败", zap.Error(err), zap.Int("id", id)) return nil, err } @@ -237,11 +237,11 @@ func (f *formDesignService) GetFormDesign(ctx context.Context, id int) (*model.W } // ListFormDesign 获取表单设计列表 -func (f *formDesignService) ListFormDesign(ctx context.Context, req *model.ListWorkorderFormDesignReq) (*model.ListResp[*model.WorkorderFormDesign], error) { +func (s *formDesignService) ListFormDesign(ctx context.Context, req *model.ListWorkorderFormDesignReq) (*model.ListResp[*model.WorkorderFormDesign], error) { // 获取表单设计列表 - formDesigns, total, err := f.dao.ListFormDesign(ctx, req) + formDesigns, total, err := s.dao.ListFormDesign(ctx, req) if err != nil { - f.logger.Error("获取表单设计列表失败", zap.Error(err)) + s.logger.Error("获取表单设计列表失败", zap.Error(err)) return nil, err } @@ -252,7 +252,7 @@ func (f *formDesignService) ListFormDesign(ctx context.Context, req *model.ListW } // generateFieldIDs 生成字段ID -func (f *formDesignService) generateFieldIDs(schema *model.FormSchema) { +func (s *formDesignService) generateFieldIDs(schema *model.FormSchema) { for i := range schema.Fields { schema.Fields[i].ID = strconv.Itoa(i + 1) } diff --git a/internal/workorder/service/instance_time_line_service.go b/internal/workorder/service/instance_time_line_service.go index 8ab4f4c1..a0bdf705 100644 --- a/internal/workorder/service/instance_time_line_service.go +++ b/internal/workorder/service/instance_time_line_service.go @@ -55,7 +55,7 @@ func NewWorkorderInstanceTimeLineService( } // CreateInstanceTimeLine 创建时间线 -func (i *instanceTimeLineService) CreateInstanceTimeLine(ctx context.Context, req *model.CreateWorkorderInstanceTimelineReq, creatorID int, creatorName string) (*model.WorkorderInstanceTimeline, error) { +func (s *instanceTimeLineService) CreateInstanceTimeLine(ctx context.Context, req *model.CreateWorkorderInstanceTimelineReq, creatorID int, creatorName string) (*model.WorkorderInstanceTimeline, error) { timeline := &model.WorkorderInstanceTimeline{ InstanceID: req.InstanceID, Action: req.Action, @@ -64,8 +64,8 @@ func (i *instanceTimeLineService) CreateInstanceTimeLine(ctx context.Context, re OperatorName: creatorName, } - if err := i.dao.Create(ctx, timeline); err != nil { - i.logger.Error("创建时间线记录失败", zap.Error(err)) + if err := s.dao.Create(ctx, timeline); err != nil { + s.logger.Error("创建时间线记录失败", zap.Error(err)) return nil, err } @@ -73,20 +73,20 @@ func (i *instanceTimeLineService) CreateInstanceTimeLine(ctx context.Context, re } // GetInstanceTimeLine 获取时间线记录 -func (i *instanceTimeLineService) GetInstanceTimeLine(ctx context.Context, id int) (*model.WorkorderInstanceTimeline, error) { - timeline, err := i.dao.GetByID(ctx, id) +func (s *instanceTimeLineService) GetInstanceTimeLine(ctx context.Context, id int) (*model.WorkorderInstanceTimeline, error) { + timeline, err := s.dao.GetByID(ctx, id) if err != nil { - i.logger.Error("获取时间线记录失败", zap.Error(err), zap.Int("id", id)) + s.logger.Error("获取时间线记录失败", zap.Error(err), zap.Int("id", id)) return nil, err } return timeline, nil } // ListInstanceTimeLine 获取时间线列表 -func (i *instanceTimeLineService) ListInstanceTimeLine(ctx context.Context, req *model.ListWorkorderInstanceTimelineReq) (*model.ListResp[*model.WorkorderInstanceTimeline], error) { - timelines, total, err := i.dao.List(ctx, req) +func (s *instanceTimeLineService) ListInstanceTimeLine(ctx context.Context, req *model.ListWorkorderInstanceTimelineReq) (*model.ListResp[*model.WorkorderInstanceTimeline], error) { + timelines, total, err := s.dao.List(ctx, req) if err != nil { - i.logger.Error("获取时间线记录列表失败", zap.Error(err)) + s.logger.Error("获取时间线记录列表失败", zap.Error(err)) return nil, err } diff --git a/internal/workorder/service/notification_service.go b/internal/workorder/service/notification_service.go index 43da80c1..dcd02b2a 100644 --- a/internal/workorder/service/notification_service.go +++ b/internal/workorder/service/notification_service.go @@ -74,13 +74,13 @@ func NewWorkorderNotificationService(dao workorderDao.WorkorderNotificationDAO, } // CreateNotification 创建通知配置 -func (n *workorderNotificationService) CreateNotification(ctx context.Context, req *model.CreateWorkorderNotificationReq) error { - return n.dao.CreateNotification(ctx, req) +func (s *workorderNotificationService) CreateNotification(ctx context.Context, req *model.CreateWorkorderNotificationReq) error { + return s.dao.CreateNotification(ctx, req) } // UpdateNotification 更新通知配置 -func (n *workorderNotificationService) UpdateNotification(ctx context.Context, req *model.UpdateWorkorderNotificationReq) error { - _, err := n.dao.GetNotificationByID(ctx, req.ID) +func (s *workorderNotificationService) UpdateNotification(ctx context.Context, req *model.UpdateWorkorderNotificationReq) error { + _, err := s.dao.GetNotificationByID(ctx, req.ID) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("通知配置不存在") @@ -88,12 +88,12 @@ func (n *workorderNotificationService) UpdateNotification(ctx context.Context, r return fmt.Errorf("查询通知配置失败: %w", err) } - return n.dao.UpdateNotification(ctx, req) + return s.dao.UpdateNotification(ctx, req) } // DeleteNotification 删除通知配置 -func (n *workorderNotificationService) DeleteNotification(ctx context.Context, req *model.DeleteWorkorderNotificationReq) error { - _, err := n.dao.GetNotificationByID(ctx, req.ID) +func (s *workorderNotificationService) DeleteNotification(ctx context.Context, req *model.DeleteWorkorderNotificationReq) error { + _, err := s.dao.GetNotificationByID(ctx, req.ID) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("通知配置不存在") @@ -101,37 +101,37 @@ func (n *workorderNotificationService) DeleteNotification(ctx context.Context, r return fmt.Errorf("查询通知配置失败: %w", err) } - return n.dao.DeleteNotification(ctx, req) + return s.dao.DeleteNotification(ctx, req) } // ListNotification 获取通知配置列表 -func (n *workorderNotificationService) ListNotification(ctx context.Context, req *model.ListWorkorderNotificationReq) (*model.ListResp[*model.WorkorderNotification], error) { - result, err := n.dao.ListNotification(ctx, req) +func (s *workorderNotificationService) ListNotification(ctx context.Context, req *model.ListWorkorderNotificationReq) (*model.ListResp[*model.WorkorderNotification], error) { + result, err := s.dao.ListNotification(ctx, req) if err != nil { - n.logger.Error("获取通知配置列表失败", zap.Error(err)) + s.logger.Error("获取通知配置列表失败", zap.Error(err)) return nil, fmt.Errorf("获取通知配置列表失败: %w", err) } return result, nil } // DetailNotification 获取通知配置 -func (n *workorderNotificationService) DetailNotification(ctx context.Context, req *model.DetailWorkorderNotificationReq) (*model.WorkorderNotification, error) { - return n.dao.DetailNotification(ctx, req) +func (s *workorderNotificationService) DetailNotification(ctx context.Context, req *model.DetailWorkorderNotificationReq) (*model.WorkorderNotification, error) { + return s.dao.DetailNotification(ctx, req) } // GetSendLogs 获取发送日志 -func (n *workorderNotificationService) GetSendLogs(ctx context.Context, req *model.ListWorkorderNotificationLogReq) (*model.ListResp[*model.WorkorderNotificationLog], error) { - result, err := n.dao.GetSendLogs(ctx, req) +func (s *workorderNotificationService) GetSendLogs(ctx context.Context, req *model.ListWorkorderNotificationLogReq) (*model.ListResp[*model.WorkorderNotificationLog], error) { + result, err := s.dao.GetSendLogs(ctx, req) if err != nil { - n.logger.Error("获取发送日志失败", zap.Error(err)) + s.logger.Error("获取发送日志失败", zap.Error(err)) return nil, fmt.Errorf("获取发送日志失败: %w", err) } return result, nil } // TestSendNotification 测试发送指定通知配置 -func (n *workorderNotificationService) TestSendNotification(ctx context.Context, req *model.TestSendWorkorderNotificationReq) error { - notificationConfig, err := n.dao.GetNotificationByID(ctx, req.NotificationID) +func (s *workorderNotificationService) TestSendNotification(ctx context.Context, req *model.TestSendWorkorderNotificationReq) error { + notificationConfig, err := s.dao.GetNotificationByID(ctx, req.NotificationID) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("通知配置不存在") @@ -207,7 +207,7 @@ func (n *workorderNotificationService) TestSendNotification(ctx context.Context, sendRequest.Templates["platform_name"] = "运维管理平台" sendRequest.Templates["department"] = "技术运维部" sendRequest.Templates["test_content"] = "本次测试验证了系统通知功能的完整性,包括邮件发送、飞书消息推送等多个渠道的有效性。" - response, err := n.notificationMgr.SendNotification(ctx, sendRequest) + response, err := s.notificationMgr.SendNotification(ctx, sendRequest) log := &model.WorkorderNotificationLog{ NotificationID: notificationConfig.ID, @@ -239,19 +239,19 @@ func (n *workorderNotificationService) TestSendNotification(ctx context.Context, } } - if err := n.dao.AddSendLog(ctx, log); err != nil { - n.logger.Error("记录发送日志失败", zap.Error(err)) + if err := s.dao.AddSendLog(ctx, log); err != nil { + s.logger.Error("记录发送日志失败", zap.Error(err)) } } - return n.dao.IncrementSentCount(ctx, notificationConfig.ID) + return s.dao.IncrementSentCount(ctx, notificationConfig.ID) } // SendWorkorderNotification 发送工单相关通知 -func (n *workorderNotificationService) SendWorkorderNotification(ctx context.Context, instanceID int, eventType string, customContent ...string) error { - instance, err := n.instanceDAO.GetInstanceByID(ctx, instanceID) +func (s *workorderNotificationService) SendWorkorderNotification(ctx context.Context, instanceID int, eventType string, customContent ...string) error { + instance, err := s.instanceDAO.GetInstanceByID(ctx, instanceID) if err != nil { - n.logger.Error("获取工单实例失败", + s.logger.Error("获取工单实例失败", zap.Int("instance_id", instanceID), zap.Error(err)) return fmt.Errorf("获取工单实例失败: %w", err) @@ -264,9 +264,9 @@ func (n *workorderNotificationService) SendWorkorderNotification(ctx context.Con } } - notifications, err := n.dao.GetActiveNotificationsByEventType(ctx, eventType, instance.ProcessID) + notifications, err := s.dao.GetActiveNotificationsByEventType(ctx, eventType, instance.ProcessID) if err != nil { - n.logger.Error("获取通知配置失败", + s.logger.Error("获取通知配置失败", zap.String("event_type", eventType), zap.Int("process_id", instance.ProcessID), zap.Error(err)) @@ -274,15 +274,15 @@ func (n *workorderNotificationService) SendWorkorderNotification(ctx context.Con } if len(notifications) == 0 { - n.logger.Info("没有找到匹配的通知配置", + s.logger.Info("没有找到匹配的通知配置", zap.String("event_type", eventType), zap.Int("process_id", instance.ProcessID)) return nil } for _, notification := range notifications { - if err := n.processNotification(ctx, notification, instance, eventType, senderID, customContent...); err != nil { - n.logger.Error("处理通知配置失败", + if err := s.processNotification(ctx, notification, instance, eventType, senderID, customContent...); err != nil { + s.logger.Error("处理通知配置失败", zap.Int("notification_id", notification.ID), zap.Int("instance_id", instanceID), zap.Error(err)) @@ -290,7 +290,7 @@ func (n *workorderNotificationService) SendWorkorderNotification(ctx context.Con } } - n.logger.Info("工单通知发送完成", + s.logger.Info("工单通知发送完成", zap.Int("instance_id", instanceID), zap.String("event_type", eventType), zap.Int("notification_count", len(notifications))) @@ -299,16 +299,16 @@ func (n *workorderNotificationService) SendWorkorderNotification(ctx context.Con } // processNotification 处理并发送单个通知配置 -func (n *workorderNotificationService) processNotification(ctx context.Context, notification *model.WorkorderNotification, +func (s *workorderNotificationService) processNotification(ctx context.Context, notification *model.WorkorderNotification, instance *model.WorkorderInstance, eventType string, senderID int, customContent ...string) error { - recipients, err := n.getRecipients(ctx, notification, instance) + recipients, err := s.getRecipients(ctx, notification, instance) if err != nil { return fmt.Errorf("获取接收人失败: %w", err) } if len(recipients) == 0 { - n.logger.Info("没有找到接收人", + s.logger.Info("没有找到接收人", zap.Int("notification_id", notification.ID), zap.Int("instance_id", instance.ID)) return nil @@ -329,14 +329,14 @@ func (n *workorderNotificationService) processNotification(ctx context.Context, defer cancel() } - if err := n.sendChannelNotification(channelCtx, notification, instance, ch, recipients, eventType, senderID, customContent...); err != nil { - n.logger.Error("发送渠道通知失败", + if err := s.sendChannelNotification(channelCtx, notification, instance, ch, recipients, eventType, senderID, customContent...); err != nil { + s.logger.Error("发送渠道通知失败", zap.String("channel", ch), zap.Int("notification_id", notification.ID), zap.Error(err)) channelErrors <- fmt.Errorf("渠道 %s 发送失败: %w", ch, err) } else { - n.logger.Info("渠道通知发送成功", + s.logger.Info("渠道通知发送成功", zap.String("channel", ch), zap.Int("notification_id", notification.ID)) } @@ -352,7 +352,7 @@ func (n *workorderNotificationService) processNotification(ctx context.Context, } if len(errors) > 0 { - n.logger.Warn("部分渠道发送失败,但其他渠道已成功发送", + s.logger.Warn("部分渠道发送失败,但其他渠道已成功发送", zap.Strings("errors", errors), zap.Int("notification_id", notification.ID)) } @@ -361,7 +361,7 @@ func (n *workorderNotificationService) processNotification(ctx context.Context, } // getRecipients 根据配置获取接收人列表 -func (n *workorderNotificationService) getRecipients(ctx context.Context, notification *model.WorkorderNotification, +func (s *workorderNotificationService) getRecipients(ctx context.Context, notification *model.WorkorderNotification, instance *model.WorkorderInstance) ([]RecipientInfo, error) { var recipients []RecipientInfo @@ -377,7 +377,7 @@ func (n *workorderNotificationService) getRecipients(ctx context.Context, notifi case model.RecipientTypeAssignee: if instance.AssigneeID != nil { assigneeName := "处理人" - if user, err := n.userDAO.GetUserByID(ctx, *instance.AssigneeID); err == nil { + if user, err := s.userDAO.GetUserByID(ctx, *instance.AssigneeID); err == nil { assigneeName = user.RealName } @@ -391,13 +391,13 @@ func (n *workorderNotificationService) getRecipients(ctx context.Context, notifi for _, userIDStr := range notification.RecipientUsers { userID, err := strconv.Atoi(userIDStr) if err != nil { - n.logger.Warn("无效的用户ID", + s.logger.Warn("无效的用户ID", zap.String("user_id", userIDStr)) continue } userName := "指定用户" - if user, err := n.userDAO.GetUserByID(ctx, userID); err == nil { + if user, err := s.userDAO.GetUserByID(ctx, userID); err == nil { userName = user.RealName } @@ -408,13 +408,13 @@ func (n *workorderNotificationService) getRecipients(ctx context.Context, notifi }) } case model.RecipientTypeRole: - n.logger.Info("角色用户通知暂未实现", + s.logger.Info("角色用户通知暂未实现", zap.Strings("roles", notification.RecipientRoles)) case model.RecipientTypeDept: - n.logger.Info("部门用户通知暂未实现", + s.logger.Info("部门用户通知暂未实现", zap.Strings("depts", notification.RecipientDepts)) case model.RecipientTypeCustom: - n.logger.Info("自定义用户通知暂未实现") + s.logger.Info("自定义用户通知暂未实现") } } @@ -422,10 +422,10 @@ func (n *workorderNotificationService) getRecipients(ctx context.Context, notifi } // sendChannelNotification 通过指定渠道发送通知 -func (n *workorderNotificationService) sendChannelNotification(ctx context.Context, notificationConfig *model.WorkorderNotification, +func (s *workorderNotificationService) sendChannelNotification(ctx context.Context, notificationConfig *model.WorkorderNotification, instance *model.WorkorderInstance, channel string, recipients []RecipientInfo, eventType string, senderID int, customContent ...string) error { - subject, content := n.buildMessageContent(notificationConfig, instance, eventType, customContent...) + subject, content := s.buildMessageContent(notificationConfig, instance, eventType, customContent...) var wg sync.WaitGroup recipientErrors := make(chan error, len(recipients)) @@ -442,15 +442,15 @@ func (n *workorderNotificationService) sendChannelNotification(ctx context.Conte defer cancel() } - recipientAddr := n.getRecipientAddress(rec, channel) + recipientAddr := s.getRecipientAddress(rec, channel) if recipientAddr == "" { - n.logger.Warn("无法获取接收人地址", + s.logger.Warn("无法获取接收人地址", zap.String("recipient_id", rec.ID), zap.String("channel", channel)) return } - recipientType := n.getRecipientTypeForChannel(channel) + recipientType := s.getRecipientTypeForChannel(channel) sendRequest := ¬ification.SendRequest{ Subject: subject, @@ -470,7 +470,7 @@ func (n *workorderNotificationService) sendChannelNotification(ctx context.Conte }, } - response, err := n.notificationMgr.SendNotification(recipientCtx, sendRequest) + response, err := s.notificationMgr.SendNotification(recipientCtx, sendRequest) log := &model.WorkorderNotificationLog{ NotificationID: notificationConfig.ID, @@ -491,7 +491,7 @@ func (n *workorderNotificationService) sendChannelNotification(ctx context.Conte if err != nil { log.Status = 4 log.ErrorMessage = err.Error() - n.logger.Error("发送通知失败", + s.logger.Error("发送通知失败", zap.String("channel", channel), zap.String("recipient", recipientAddr), zap.Error(err)) @@ -506,13 +506,13 @@ func (n *workorderNotificationService) sendChannelNotification(ctx context.Conte if response.Cost != nil { log.Cost = response.Cost } - n.logger.Info("通知发送成功", + s.logger.Info("通知发送成功", zap.String("channel", channel), zap.String("recipient", recipientAddr)) } - if err := n.dao.AddSendLog(recipientCtx, log); err != nil { - n.logger.Error("记录发送日志失败", zap.Error(err)) + if err := s.dao.AddSendLog(recipientCtx, log); err != nil { + s.logger.Error("记录发送日志失败", zap.Error(err)) } }(recipient) } @@ -526,7 +526,7 @@ func (n *workorderNotificationService) sendChannelNotification(ctx context.Conte } if len(errors) > 0 { - n.logger.Warn("部分接收人发送失败,但其他接收人已成功发送", + s.logger.Warn("部分接收人发送失败,但其他接收人已成功发送", zap.Strings("errors", errors), zap.String("channel", channel)) } @@ -535,7 +535,7 @@ func (n *workorderNotificationService) sendChannelNotification(ctx context.Conte } // buildMessageContent 根据模板构建消息内容 -func (n *workorderNotificationService) buildMessageContent(notificationConfig *model.WorkorderNotification, +func (s *workorderNotificationService) buildMessageContent(notificationConfig *model.WorkorderNotification, instance *model.WorkorderInstance, eventType string, customContent ...string) (string, string) { // 创建发送请求对象,用于模板渲染 @@ -569,7 +569,7 @@ func (n *workorderNotificationService) buildMessageContent(notificationConfig *m // 处理处理人名称 assigneeName := "待分配" if instance.AssigneeID != nil { - if user, err := n.userDAO.GetUserByID(context.Background(), *instance.AssigneeID); err == nil && user != nil { + if user, err := s.userDAO.GetUserByID(context.Background(), *instance.AssigneeID); err == nil && user != nil { assigneeName = user.RealName } } @@ -647,7 +647,7 @@ AI-CloudOps 技术运维部 content = renderedContent } - n.logger.Debug("消息内容构建完成", + s.logger.Debug("消息内容构建完成", zap.String("subject", subject), zap.String("content", content)) @@ -655,18 +655,18 @@ AI-CloudOps 技术运维部 } // getRecipientAddress 根据渠道类型获取接收人地址 -func (n *workorderNotificationService) getRecipientAddress(recipient RecipientInfo, channel string) string { +func (s *workorderNotificationService) getRecipientAddress(recipient RecipientInfo, channel string) string { userID, err := strconv.Atoi(recipient.ID) if err != nil { - n.logger.Error("无效的用户ID", + s.logger.Error("无效的用户ID", zap.String("recipient_id", recipient.ID), zap.Error(err)) return "" } - user, err := n.userDAO.GetUserByID(context.Background(), userID) + user, err := s.userDAO.GetUserByID(context.Background(), userID) if err != nil { - n.logger.Error("获取用户信息失败", + s.logger.Error("获取用户信息失败", zap.Int("user_id", userID), zap.Error(err)) return "" @@ -675,7 +675,7 @@ func (n *workorderNotificationService) getRecipientAddress(recipient RecipientIn switch channel { case model.NotificationChannelEmail: if user.Email == "" { - n.logger.Warn("用户没有配置邮箱", + s.logger.Warn("用户没有配置邮箱", zap.Int("user_id", userID), zap.String("user_name", user.RealName)) return "" @@ -683,7 +683,7 @@ func (n *workorderNotificationService) getRecipientAddress(recipient RecipientIn return user.Email case model.NotificationChannelFeishu: if user.FeiShuUserId == "" { - n.logger.Warn("用户没有配置飞书用户ID", + s.logger.Warn("用户没有配置飞书用户ID", zap.Int("user_id", userID), zap.String("user_name", user.RealName)) return "" @@ -691,26 +691,26 @@ func (n *workorderNotificationService) getRecipientAddress(recipient RecipientIn return user.FeiShuUserId case model.NotificationChannelSMS: if user.Mobile == "" { - n.logger.Warn("用户没有配置手机号", + s.logger.Warn("用户没有配置手机号", zap.Int("user_id", userID), zap.String("user_name", user.RealName)) return "" } return user.Mobile case model.NotificationChannelWebhook: - n.logger.Warn("Webhook地址需要配置", + s.logger.Warn("Webhook地址需要配置", zap.Int("user_id", userID), zap.String("user_name", user.RealName)) return "" default: - n.logger.Warn("不支持的通知渠道", + s.logger.Warn("不支持的通知渠道", zap.String("channel", channel)) return "" } } // getRecipientTypeForChannel 获取渠道对应的接收人类型 -func (n *workorderNotificationService) getRecipientTypeForChannel(channel string) string { +func (s *workorderNotificationService) getRecipientTypeForChannel(channel string) string { switch channel { case model.NotificationChannelEmail: return "email" @@ -726,8 +726,8 @@ func (n *workorderNotificationService) getRecipientTypeForChannel(channel string } // SendNotificationByChannels 通过多个渠道发送通知 -func (n *workorderNotificationService) SendNotificationByChannels(ctx context.Context, channels []string, recipient, subject, content string) error { - if n.notificationMgr == nil { +func (s *workorderNotificationService) SendNotificationByChannels(ctx context.Context, channels []string, recipient, subject, content string) error { + if s.notificationMgr == nil { return errors.New("通知管理器未初始化") } @@ -741,9 +741,9 @@ func (n *workorderNotificationService) SendNotificationByChannels(ctx context.Co EventType: "manual", } - _, err := n.notificationMgr.SendNotification(ctx, sendRequest) + _, err := s.notificationMgr.SendNotification(ctx, sendRequest) if err != nil { - n.logger.Error("发送通知失败", + s.logger.Error("发送通知失败", zap.String("channel", channel), zap.String("recipient", recipient), zap.Error(err)) @@ -755,15 +755,15 @@ func (n *workorderNotificationService) SendNotificationByChannels(ctx context.Co } // GetAvailableChannels 获取当前可用的通知渠道列表 -func (n *workorderNotificationService) GetAvailableChannels() *model.ListResp[*model.WorkorderNotificationChannel] { - if n.notificationMgr == nil { +func (s *workorderNotificationService) GetAvailableChannels() *model.ListResp[*model.WorkorderNotificationChannel] { + if s.notificationMgr == nil { return &model.ListResp[*model.WorkorderNotificationChannel]{ Items: []*model.WorkorderNotificationChannel{}, Total: 0, } } - availableChannels := n.notificationMgr.GetAvailableChannels() + availableChannels := s.notificationMgr.GetAvailableChannels() channels := make([]*model.WorkorderNotificationChannel, 0, len(availableChannels)) for _, channel := range availableChannels { diff --git a/internal/workorder/service/process_service.go b/internal/workorder/service/process_service.go index 7a8a5be5..4ef41e5c 100644 --- a/internal/workorder/service/process_service.go +++ b/internal/workorder/service/process_service.go @@ -69,11 +69,11 @@ func NewWorkorderProcessService( } // CreateWorkorderProcess 创建流程 -func (p *workorderProcessService) CreateWorkorderProcess(ctx context.Context, req *model.CreateWorkorderProcessReq) error { +func (s *workorderProcessService) CreateWorkorderProcess(ctx context.Context, req *model.CreateWorkorderProcessReq) error { // 检查流程名称是否已存在 - exists, err := p.dao.CheckProcessNameExists(ctx, req.Name) + exists, err := s.dao.CheckProcessNameExists(ctx, req.Name) if err != nil { - p.logger.Error("检查流程名称失败", + s.logger.Error("检查流程名称失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("检查流程名称失败: %w", err) @@ -84,18 +84,18 @@ func (p *workorderProcessService) CreateWorkorderProcess(ctx context.Context, re // 检查表单设计是否存在 if req.FormDesignID > 0 { - _, err := p.formDesignDao.GetFormDesign(ctx, req.FormDesignID) + _, err := s.formDesignDao.GetFormDesign(ctx, req.FormDesignID) if err != nil { - p.logger.Error("表单设计不存在", zap.Error(err), zap.Int("formDesignID", req.FormDesignID)) + s.logger.Error("表单设计不存在", zap.Error(err), zap.Int("formDesignID", req.FormDesignID)) return fmt.Errorf("表单设计不存在: %w", err) } } // 检查分类是否存在 if req.CategoryID != nil && *req.CategoryID > 0 { - _, err := p.categoryDao.GetCategory(ctx, *req.CategoryID) + _, err := s.categoryDao.GetCategory(ctx, *req.CategoryID) if err != nil { - p.logger.Error("流程分类不存在", zap.Error(err), zap.Int("categoryID", *req.CategoryID)) + s.logger.Error("流程分类不存在", zap.Error(err), zap.Int("categoryID", *req.CategoryID)) return fmt.Errorf("流程分类不存在: %w", err) } } @@ -115,30 +115,30 @@ func (p *workorderProcessService) CreateWorkorderProcess(ctx context.Context, re // 处理流程定义 if len(req.Definition.Steps) > 0 || len(req.Definition.Connections) > 0 { // 执行验证 - if err := p.dao.ValidateProcessDefinition(ctx, &req.Definition); err != nil { - p.logger.Error("流程定义验证失败", zap.Error(err)) + if err := s.dao.ValidateProcessDefinition(ctx, &req.Definition); err != nil { + s.logger.Error("流程定义验证失败", zap.Error(err)) return fmt.Errorf("流程定义验证失败: %w", err) } // 序列化流程定义 definitionJSON, err := json.Marshal(req.Definition) if err != nil { - p.logger.Error("序列化流程定义失败", zap.Error(err)) + s.logger.Error("序列化流程定义失败", zap.Error(err)) return fmt.Errorf("序列化流程定义失败: %w", err) } // 转换为JSONMap var definitionMap model.JSONMap err = json.Unmarshal(definitionJSON, &definitionMap) if err != nil { - p.logger.Error("转换流程定义为JSONMap失败", zap.Error(err)) + s.logger.Error("转换流程定义为JSONMap失败", zap.Error(err)) return fmt.Errorf("转换流程定义失败: %w", err) } process.Definition = definitionMap } // 创建流程 - if err := p.dao.CreateProcess(ctx, process); err != nil { - p.logger.Error("创建流程失败", + if err := s.dao.CreateProcess(ctx, process); err != nil { + s.logger.Error("创建流程失败", zap.Error(err), zap.String("name", req.Name), zap.Int("createUserID", req.OperatorID)) @@ -149,23 +149,23 @@ func (p *workorderProcessService) CreateWorkorderProcess(ctx context.Context, re } // UpdateWorkorderProcess 更新流程 -func (p *workorderProcessService) UpdateWorkorderProcess(ctx context.Context, req *model.UpdateWorkorderProcessReq) error { +func (s *workorderProcessService) UpdateWorkorderProcess(ctx context.Context, req *model.UpdateWorkorderProcessReq) error { if req.ID <= 0 { return errors.New("流程ID无效") } // 获取现有流程 - existingProcess, err := p.dao.GetProcessByID(ctx, req.ID) + existingProcess, err := s.dao.GetProcessByID(ctx, req.ID) if err != nil { - p.logger.Error("获取流程失败", zap.Error(err), zap.Int("id", req.ID)) + s.logger.Error("获取流程失败", zap.Error(err), zap.Int("id", req.ID)) return fmt.Errorf("获取流程失败: %w", err) } // 检查流程名称是否已存在 if req.Name != "" && req.Name != existingProcess.Name { - exists, err := p.dao.CheckProcessNameExists(ctx, req.Name, req.ID) + exists, err := s.dao.CheckProcessNameExists(ctx, req.Name, req.ID) if err != nil { - p.logger.Error("检查流程名称失败", + s.logger.Error("检查流程名称失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("检查流程名称失败: %w", err) @@ -177,18 +177,18 @@ func (p *workorderProcessService) UpdateWorkorderProcess(ctx context.Context, re // 检查表单设计是否存在 if req.FormDesignID > 0 && req.FormDesignID != existingProcess.FormDesignID { - _, err := p.formDesignDao.GetFormDesign(ctx, req.FormDesignID) + _, err := s.formDesignDao.GetFormDesign(ctx, req.FormDesignID) if err != nil { - p.logger.Error("表单设计不存在", zap.Error(err), zap.Int("formDesignID", req.FormDesignID)) + s.logger.Error("表单设计不存在", zap.Error(err), zap.Int("formDesignID", req.FormDesignID)) return fmt.Errorf("表单设计不存在: %w", err) } } // 检查分类是否存在 if req.CategoryID != nil && *req.CategoryID > 0 && req.CategoryID != existingProcess.CategoryID { - _, err := p.categoryDao.GetCategory(ctx, *req.CategoryID) + _, err := s.categoryDao.GetCategory(ctx, *req.CategoryID) if err != nil { - p.logger.Error("流程分类不存在", zap.Error(err), zap.Int("categoryID", *req.CategoryID)) + s.logger.Error("流程分类不存在", zap.Error(err), zap.Int("categoryID", *req.CategoryID)) return fmt.Errorf("流程分类不存在: %w", err) } } @@ -208,29 +208,29 @@ func (p *workorderProcessService) UpdateWorkorderProcess(ctx context.Context, re // 处理流程定义 if len(req.Definition.Steps) > 0 || len(req.Definition.Connections) > 0 { // 执行验证 - if err := p.dao.ValidateProcessDefinition(ctx, &req.Definition); err != nil { - p.logger.Error("流程定义验证失败", zap.Error(err)) + if err := s.dao.ValidateProcessDefinition(ctx, &req.Definition); err != nil { + s.logger.Error("流程定义验证失败", zap.Error(err)) return fmt.Errorf("流程定义验证失败: %w", err) } definitionJSON, err := json.Marshal(req.Definition) if err != nil { - p.logger.Error("序列化流程定义失败", zap.Error(err)) + s.logger.Error("序列化流程定义失败", zap.Error(err)) return fmt.Errorf("序列化流程定义失败: %w", err) } // 转换为JSONMap var definitionMap model.JSONMap err = json.Unmarshal(definitionJSON, &definitionMap) if err != nil { - p.logger.Error("转换流程定义为JSONMap失败", zap.Error(err)) + s.logger.Error("转换流程定义为JSONMap失败", zap.Error(err)) return fmt.Errorf("转换流程定义失败: %w", err) } process.Definition = definitionMap } // 更新流程 - if err := p.dao.UpdateProcess(ctx, process); err != nil { - p.logger.Error("更新流程失败", + if err := s.dao.UpdateProcess(ctx, process); err != nil { + s.logger.Error("更新流程失败", zap.Error(err), zap.Int("id", req.ID)) return fmt.Errorf("更新流程失败: %w", err) @@ -240,14 +240,14 @@ func (p *workorderProcessService) UpdateWorkorderProcess(ctx context.Context, re } // DeleteWorkorderProcess 删除流程 -func (p *workorderProcessService) DeleteWorkorderProcess(ctx context.Context, id int) error { +func (s *workorderProcessService) DeleteWorkorderProcess(ctx context.Context, id int) error { if id <= 0 { return errors.New("流程ID无效") } - process, err := p.dao.GetProcessByID(ctx, id) + process, err := s.dao.GetProcessByID(ctx, id) if err != nil { - p.logger.Error("获取流程失败", zap.Error(err), zap.Int("id", id)) + s.logger.Error("获取流程失败", zap.Error(err), zap.Int("id", id)) return fmt.Errorf("获取流程失败: %w", err) } @@ -258,7 +258,7 @@ func (p *workorderProcessService) DeleteWorkorderProcess(ctx context.Context, id page := 1 size := 100 for { - instances, total, err := p.instanceDao.ListInstance(ctx, &model.ListWorkorderInstanceReq{ + instances, total, err := s.instanceDao.ListInstance(ctx, &model.ListWorkorderInstanceReq{ ProcessID: &id, ListReq: model.ListReq{ Page: page, @@ -266,7 +266,7 @@ func (p *workorderProcessService) DeleteWorkorderProcess(ctx context.Context, id }, }) if err != nil { - p.logger.Error("获取流程实例失败", zap.Error(err)) + s.logger.Error("获取流程实例失败", zap.Error(err)) return fmt.Errorf("获取流程实例失败: %w", err) } if len(instances) > 0 { @@ -280,8 +280,8 @@ func (p *workorderProcessService) DeleteWorkorderProcess(ctx context.Context, id } // 执行删除 - if err := p.dao.DeleteProcess(ctx, id); err != nil { - p.logger.Error("删除流程失败", + if err := s.dao.DeleteProcess(ctx, id); err != nil { + s.logger.Error("删除流程失败", zap.Error(err), zap.Int("id", id), zap.String("name", process.Name)) @@ -292,10 +292,10 @@ func (p *workorderProcessService) DeleteWorkorderProcess(ctx context.Context, id } // ListWorkorderProcess 获取流程列表 -func (p *workorderProcessService) ListWorkorderProcess(ctx context.Context, req *model.ListWorkorderProcessReq) (*model.ListResp[*model.WorkorderProcess], error) { - processes, total, err := p.dao.ListProcess(ctx, req) +func (s *workorderProcessService) ListWorkorderProcess(ctx context.Context, req *model.ListWorkorderProcessReq) (*model.ListResp[*model.WorkorderProcess], error) { + processes, total, err := s.dao.ListProcess(ctx, req) if err != nil { - p.logger.Error("获取流程列表失败", zap.Error(err)) + s.logger.Error("获取流程列表失败", zap.Error(err)) return nil, fmt.Errorf("获取流程列表失败: %w", err) } @@ -308,15 +308,15 @@ func (p *workorderProcessService) ListWorkorderProcess(ctx context.Context, req } // DetailWorkorderProcess 获取流程 -func (p *workorderProcessService) DetailWorkorderProcess(ctx context.Context, id int) (*model.WorkorderProcess, error) { +func (s *workorderProcessService) DetailWorkorderProcess(ctx context.Context, id int) (*model.WorkorderProcess, error) { if id <= 0 { return nil, errors.New("流程ID无效") } // 从数据库获取 - process, err := p.dao.GetProcessByID(ctx, id) + process, err := s.dao.GetProcessByID(ctx, id) if err != nil { - p.logger.Error("获取流程详情失败", + s.logger.Error("获取流程详情失败", zap.Error(err), zap.Int("id", id)) return nil, fmt.Errorf("获取流程详情失败: %w", err) diff --git a/internal/workorder/service/template_service.go b/internal/workorder/service/template_service.go index f4480cd6..169d9b84 100644 --- a/internal/workorder/service/template_service.go +++ b/internal/workorder/service/template_service.go @@ -68,22 +68,22 @@ func NewWorkorderTemplateService( } // CreateTemplate 创建模板 -func (t *workorderTemplateService) CreateTemplate(ctx context.Context, req *model.CreateWorkorderTemplateReq) error { - exists, err := t.checkTemplateNameExists(ctx, req.Name) +func (s *workorderTemplateService) CreateTemplate(ctx context.Context, req *model.CreateWorkorderTemplateReq) error { + exists, err := s.checkTemplateNameExists(ctx, req.Name) if err != nil { - t.l.Error("检查模板名称失败", zap.Error(err), zap.String("name", req.Name), zap.Int("creatorID", req.OperatorID)) + s.l.Error("检查模板名称失败", zap.Error(err), zap.String("name", req.Name), zap.Int("creatorID", req.OperatorID)) return fmt.Errorf("检查模板名称失败: %w", err) } if exists { return fmt.Errorf("模板名称已存在: %s", req.Name) } - if err := t.validateProcessExists(ctx, req.ProcessID); err != nil { + if err := s.validateProcessExists(ctx, req.ProcessID); err != nil { return err } if req.CategoryID != nil && *req.CategoryID > 0 { - if err := t.validateCategoryExists(ctx, *req.CategoryID); err != nil { + if err := s.validateCategoryExists(ctx, *req.CategoryID); err != nil { return err } } @@ -101,8 +101,8 @@ func (t *workorderTemplateService) CreateTemplate(ctx context.Context, req *mode Tags: req.Tags, } - if err := t.dao.CreateTemplate(ctx, template); err != nil { - t.l.Error("创建模板失败", zap.Error(err), zap.String("name", req.Name), zap.Int("creatorID", req.OperatorID)) + if err := s.dao.CreateTemplate(ctx, template); err != nil { + s.l.Error("创建模板失败", zap.Error(err), zap.String("name", req.Name), zap.Int("creatorID", req.OperatorID)) return fmt.Errorf("创建模板失败: %w", err) } @@ -110,20 +110,20 @@ func (t *workorderTemplateService) CreateTemplate(ctx context.Context, req *mode } // UpdateTemplate 更新模板 -func (t *workorderTemplateService) UpdateTemplate(ctx context.Context, req *model.UpdateWorkorderTemplateReq) error { +func (s *workorderTemplateService) UpdateTemplate(ctx context.Context, req *model.UpdateWorkorderTemplateReq) error { if req.ID <= 0 { return errors.New("模板ID无效") } - existingTemplate, err := t.dao.GetTemplate(ctx, req.ID) + existingTemplate, err := s.dao.GetTemplate(ctx, req.ID) if err != nil { return fmt.Errorf("获取模板失败: %w", err) } if req.Name != existingTemplate.Name { - exists, err := t.dao.IsTemplateNameExists(ctx, req.Name, req.ID) + exists, err := s.dao.IsTemplateNameExists(ctx, req.Name, req.ID) if err != nil { - t.l.Error("检查模板名称失败", zap.Error(err), zap.String("name", req.Name)) + s.l.Error("检查模板名称失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("检查模板名称失败: %w", err) } @@ -133,13 +133,13 @@ func (t *workorderTemplateService) UpdateTemplate(ctx context.Context, req *mode } if req.ProcessID != existingTemplate.ProcessID { - if err := t.validateProcessExists(ctx, req.ProcessID); err != nil { + if err := s.validateProcessExists(ctx, req.ProcessID); err != nil { return err } } if req.CategoryID != nil && *req.CategoryID > 0 { - if err := t.validateCategoryExists(ctx, *req.CategoryID); err != nil { + if err := s.validateCategoryExists(ctx, *req.CategoryID); err != nil { return err } } @@ -156,8 +156,8 @@ func (t *workorderTemplateService) UpdateTemplate(ctx context.Context, req *mode Tags: req.Tags, } - if err := t.dao.UpdateTemplate(ctx, template); err != nil { - t.l.Error("更新模板失败", zap.Error(err), zap.Int("id", req.ID)) + if err := s.dao.UpdateTemplate(ctx, template); err != nil { + s.l.Error("更新模板失败", zap.Error(err), zap.Int("id", req.ID)) return fmt.Errorf("更新模板失败: %w", err) } @@ -165,31 +165,31 @@ func (t *workorderTemplateService) UpdateTemplate(ctx context.Context, req *mode } // DeleteTemplate 删除模板 -func (t *workorderTemplateService) DeleteTemplate(ctx context.Context, req *model.DeleteWorkorderTemplateReq) error { +func (s *workorderTemplateService) DeleteTemplate(ctx context.Context, req *model.DeleteWorkorderTemplateReq) error { if req.ID <= 0 { return errors.New("模板ID无效") } - template, err := t.dao.GetTemplate(ctx, req.ID) + template, err := s.dao.GetTemplate(ctx, req.ID) if err != nil { return fmt.Errorf("获取模板失败: %w", err) } - instances, _, err := t.instanceDao.ListInstance(ctx, &model.ListWorkorderInstanceReq{ + instances, _, err := s.instanceDao.ListInstance(ctx, &model.ListWorkorderInstanceReq{ ProcessID: &template.ProcessID, }) if err != nil { - t.l.Error("获取关联工单失败", zap.Error(err), zap.Int("templateID", req.ID)) + s.l.Error("获取关联工单失败", zap.Error(err), zap.Int("templateID", req.ID)) return fmt.Errorf("获取关联工单失败: %w", err) } if len(instances) > 0 { - t.l.Warn("模板有关联的工单,无法删除", zap.Int("templateID", req.ID), zap.Int("instanceCount", len(instances))) + s.l.Warn("模板有关联的工单,无法删除", zap.Int("templateID", req.ID), zap.Int("instanceCount", len(instances))) return errors.New("模板有关联的工单,无法删除") } - if err := t.dao.DeleteTemplate(ctx, req.ID); err != nil { - t.l.Error("删除模板失败", zap.Error(err), zap.Int("id", req.ID), zap.String("name", template.Name)) + if err := s.dao.DeleteTemplate(ctx, req.ID); err != nil { + s.l.Error("删除模板失败", zap.Error(err), zap.Int("id", req.ID), zap.String("name", template.Name)) return fmt.Errorf("删除模板失败: %w", err) } @@ -197,10 +197,10 @@ func (t *workorderTemplateService) DeleteTemplate(ctx context.Context, req *mode } // ListTemplate 获取模板列表 -func (t *workorderTemplateService) ListTemplate(ctx context.Context, req *model.ListWorkorderTemplateReq) (*model.ListResp[*model.WorkorderTemplate], error) { - templates, total, err := t.dao.ListTemplate(ctx, req) +func (s *workorderTemplateService) ListTemplate(ctx context.Context, req *model.ListWorkorderTemplateReq) (*model.ListResp[*model.WorkorderTemplate], error) { + templates, total, err := s.dao.ListTemplate(ctx, req) if err != nil { - t.l.Error("获取模板列表失败", zap.Error(err)) + s.l.Error("获取模板列表失败", zap.Error(err)) return nil, fmt.Errorf("获取模板列表失败: %w", err) } @@ -213,14 +213,14 @@ func (t *workorderTemplateService) ListTemplate(ctx context.Context, req *model. } // DetailTemplate 获取模板 -func (t *workorderTemplateService) DetailTemplate(ctx context.Context, req *model.DetailWorkorderTemplateReq) (*model.WorkorderTemplate, error) { +func (s *workorderTemplateService) DetailTemplate(ctx context.Context, req *model.DetailWorkorderTemplateReq) (*model.WorkorderTemplate, error) { if req.ID <= 0 { return nil, errors.New("模板ID无效") } - template, err := t.dao.GetTemplate(ctx, req.ID) + template, err := s.dao.GetTemplate(ctx, req.ID) if err != nil { - t.l.Error("获取模板详情失败", zap.Error(err), zap.Int("id", req.ID)) + s.l.Error("获取模板详情失败", zap.Error(err), zap.Int("id", req.ID)) return nil, fmt.Errorf("获取模板详情失败: %w", err) } @@ -228,7 +228,7 @@ func (t *workorderTemplateService) DetailTemplate(ctx context.Context, req *mode } // checkTemplateNameExists 检查模板名称 -func (t *workorderTemplateService) checkTemplateNameExists(ctx context.Context, name string, excludeID ...int) (bool, error) { +func (s *workorderTemplateService) checkTemplateNameExists(ctx context.Context, name string, excludeID ...int) (bool, error) { if name == "" { return false, errors.New("模板名称不能为空") } @@ -239,18 +239,18 @@ func (t *workorderTemplateService) checkTemplateNameExists(ctx context.Context, id = excludeID[0] } - return t.dao.IsTemplateNameExists(ctx, name, id) + return s.dao.IsTemplateNameExists(ctx, name, id) } // validateProcessExists 验证流程是否存在 -func (t *workorderTemplateService) validateProcessExists(ctx context.Context, processID int) error { +func (s *workorderTemplateService) validateProcessExists(ctx context.Context, processID int) error { if processID <= 0 { return errors.New("流程ID无效") } - _, err := t.processDao.GetProcessByID(ctx, processID) + _, err := s.processDao.GetProcessByID(ctx, processID) if err != nil { - t.l.Error("验证流程发生错误", zap.Error(err)) + s.l.Error("验证流程发生错误", zap.Error(err)) return errors.New("关联的流程不存在或无效") } @@ -258,14 +258,14 @@ func (t *workorderTemplateService) validateProcessExists(ctx context.Context, pr } // validateCategoryExists 验证分类 -func (t *workorderTemplateService) validateCategoryExists(ctx context.Context, categoryID int) error { +func (s *workorderTemplateService) validateCategoryExists(ctx context.Context, categoryID int) error { if categoryID <= 0 { return errors.New("分类ID无效") } - _, err := t.categoryDao.GetCategory(ctx, categoryID) + _, err := s.categoryDao.GetCategory(ctx, categoryID) if err != nil { - t.l.Error("验证分类发生错误", zap.Error(err)) + s.l.Error("验证分类发生错误", zap.Error(err)) return errors.New("关联的分类不存在或无效") } From e51292ac485d26a5d6cd83ef1d7aea9b4c30adb7 Mon Sep 17 00:00:00 2001 From: Bamboo <13664854532@163.com> Date: Wed, 1 Oct 2025 12:34:20 +0800 Subject: [PATCH 2/6] chore: Remove unused dependencies go.uber.org/fx and go.uber.org/dig from go.mod and go.sum --- go.mod | 2 -- go.sum | 5 ----- 2 files changed, 7 deletions(-) diff --git a/go.mod b/go.mod index 69c5198a..aa439431 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,6 @@ require ( github.com/swaggo/files v1.0.1 github.com/swaggo/gin-swagger v1.6.0 github.com/swaggo/swag v1.16.6 - go.uber.org/fx v1.24.0 go.uber.org/zap v1.27.0 golang.org/x/crypto v0.41.0 golang.org/x/sync v0.16.0 @@ -201,7 +200,6 @@ require ( go.opentelemetry.io/otel/metric v1.36.0 // indirect go.opentelemetry.io/otel/trace v1.36.0 // indirect go.uber.org/atomic v1.11.0 // indirect - go.uber.org/dig v1.19.0 // indirect go.uber.org/goleak v1.3.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect diff --git a/go.sum b/go.sum index f9b045cd..59f69bda 100644 --- a/go.sum +++ b/go.sum @@ -326,7 +326,6 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -693,10 +692,6 @@ go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKr go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4= -go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= -go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg= -go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo= go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= From 1157ac5904f245649ed5b51328c6f4fdd79c120c Mon Sep 17 00:00:00 2001 From: Bamboo <13664854532@163.com> Date: Wed, 1 Oct 2025 23:08:29 +0800 Subject: [PATCH 3/6] refactor: Remove overwrite parameter from AddOrUpdateNodeLabels method and update related usages; enhance logging and comments --- internal/k8s/manager/node_manager.go | 17 ++++++----------- internal/k8s/service/node_service.go | 3 +-- internal/model/k8s_node.go | 7 +++---- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/internal/k8s/manager/node_manager.go b/internal/k8s/manager/node_manager.go index 1f184be0..d483a624 100644 --- a/internal/k8s/manager/node_manager.go +++ b/internal/k8s/manager/node_manager.go @@ -44,7 +44,7 @@ type NodeManager interface { DrainNode(ctx context.Context, clusterID int, nodeName string, options *utils.DrainOptions) error CordonNode(ctx context.Context, clusterID int, nodeName string) error UncordonNode(ctx context.Context, clusterID int, nodeName string) error - AddOrUpdateNodeLabels(ctx context.Context, clusterID int, nodeName string, labels map[string]string, overwrite int8) error + AddOrUpdateNodeLabels(ctx context.Context, clusterID int, nodeName string, labels map[string]string) error DeleteNodeLabels(ctx context.Context, clusterID int, nodeName string, labelKeys []string) error GetNodeTaints(ctx context.Context, clusterID int, nodeName string) ([]*model.NodeTaint, int64, error) } @@ -205,7 +205,8 @@ func (m *nodeManager) UncordonNode(ctx context.Context, clusterID int, nodeName return nil } -func (m *nodeManager) AddOrUpdateNodeLabels(ctx context.Context, clusterID int, nodeName string, labels map[string]string, overwrite int8) error { +// AddOrUpdateNodeLabels 添加或更新节点标签 +func (m *nodeManager) AddOrUpdateNodeLabels(ctx context.Context, clusterID int, nodeName string, labels map[string]string) error { if err := utils.ValidateNodeName(nodeName); err != nil { return err } @@ -225,15 +226,9 @@ func (m *nodeManager) AddOrUpdateNodeLabels(ctx context.Context, clusterID int, return fmt.Errorf("获取节点失败: %w", err) } - if node.Labels == nil { - node.Labels = make(map[string]string) - } - + // 以传入的 labels 为主,完全覆盖原有标签 + node.Labels = make(map[string]string) for key, value := range labels { - // 如果标签存在且不允许覆盖,则跳过 - if _, exists := node.Labels[key]; exists && overwrite == 0 { - continue - } node.Labels[key] = value } @@ -243,7 +238,7 @@ func (m *nodeManager) AddOrUpdateNodeLabels(ctx context.Context, clusterID int, return fmt.Errorf("更新节点标签失败: %w", err) } - m.logger.Info("节点标签更新成功", zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName)) + m.logger.Info("节点标签已添加或更新", zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName)) return nil } diff --git a/internal/k8s/service/node_service.go b/internal/k8s/service/node_service.go index 5a773a33..446a2875 100644 --- a/internal/k8s/service/node_service.go +++ b/internal/k8s/service/node_service.go @@ -161,13 +161,12 @@ func (s *nodeService) AddOrUpdateNodeLabel(ctx context.Context, req *model.AddLa } // 使用 NodeManager 添加或更新节点标签 - err := s.nodeManager.AddOrUpdateNodeLabels(ctx, req.ClusterID, req.NodeName, req.Labels, req.Overwrite) + err := s.nodeManager.AddOrUpdateNodeLabels(ctx, req.ClusterID, req.NodeName, req.Labels) if err != nil { s.logger.Error("AddOrUpdateNodeLabel: 添加节点标签失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Any("labels", req.Labels)) return fmt.Errorf("添加节点标签失败: %w", err) } - s.logger.Info("AddOrUpdateNodeLabel: 成功添加节点标签", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Any("labels", req.Labels), zap.Bool("overwrite", req.Overwrite == 1)) return nil } diff --git a/internal/model/k8s_node.go b/internal/model/k8s_node.go index e45a3f36..eb4d00b8 100644 --- a/internal/model/k8s_node.go +++ b/internal/model/k8s_node.go @@ -92,10 +92,9 @@ type GetNodeDetailReq struct { // AddLabelNodesReq 添加节点标签请求 type AddLabelNodesReq struct { - ClusterID int `json:"cluster_id" binding:"required"` // 集群ID - NodeName string `json:"node_name" binding:"required"` // 节点名称 - Labels map[string]string `json:"labels" binding:"required"` // 要添加的标签 - Overwrite int8 `json:"overwrite" binding:"required,oneof=1 2"` // 是否覆盖已存在的标签 + ClusterID int `json:"cluster_id" binding:"required"` // 集群ID + NodeName string `json:"node_name" binding:"required"` // 节点名称 + Labels map[string]string `json:"labels" binding:"required"` // 要添加的标签 } // DeleteLabelNodesReq 删除节点标签请求 From 3b9e170282229a2a619254fc103176ed95a16626 Mon Sep 17 00:00:00 2001 From: Bamboo <13664854532@163.com> Date: Thu, 2 Oct 2025 10:49:36 +0800 Subject: [PATCH 4/6] refactor: Update node label management to use a new UpdateNodeLabels method; enhance API routes and logging for better clarity --- go.sum | 1 + internal/k8s/api/node.go | 79 ++++------------- internal/k8s/manager/node_manager.go | 117 +++++++++++++++----------- internal/k8s/manager/taint_manager.go | 31 ------- internal/k8s/service/node_service.go | 58 ++++--------- internal/k8s/service/taint_service.go | 48 +---------- internal/model/k8s_node.go | 20 +---- 7 files changed, 105 insertions(+), 249 deletions(-) diff --git a/go.sum b/go.sum index 59f69bda..6cd4482c 100644 --- a/go.sum +++ b/go.sum @@ -326,6 +326,7 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= diff --git a/internal/k8s/api/node.go b/internal/k8s/api/node.go index 8b4ffaa0..6be67bb3 100644 --- a/internal/k8s/api/node.go +++ b/internal/k8s/api/node.go @@ -47,19 +47,18 @@ func NewK8sNodeHandler(nodeService service.NodeService, taintService service.Tai func (h *K8sNodeHandler) RegisterRouters(server *gin.Engine) { k8sGroup := server.Group("/api/k8s") { - // Node基础管理 - k8sGroup.GET("/clusters/:cluster_id/nodes", h.GetNodeList) // 获取Node列表 - k8sGroup.GET("/clusters/:cluster_id/nodes/:node_name", h.GetNodeDetail) // 获取Node详情 - k8sGroup.POST("/clusters/:cluster_id/nodes/:node_name/labels", h.AddLabelNodes) // 添加Node标签 - k8sGroup.DELETE("/clusters/:cluster_id/nodes/:node_name/labels", h.DeleteLabelNodes) // 删除Node标签 - k8sGroup.POST("/clusters/:cluster_id/nodes/:node_name/drain", h.DrainNode) // 驱逐Node - k8sGroup.POST("/clusters/:cluster_id/nodes/:node_name/cordon", h.CordonNode) // 封锁Node - k8sGroup.POST("/clusters/:cluster_id/nodes/:node_name/uncordon", h.UncordonNode) // 解封Node - k8sGroup.POST("/clusters/:cluster_id/nodes/:node_name/schedule/switch", h.SwitchNodeSchedule) // 切换Node调度状态 - k8sGroup.GET("/clusters/:cluster_id/nodes/:node_name/taints", h.GetNodeTaints) // 获取Node污点 - k8sGroup.POST("/clusters/:cluster_id/nodes/:node_name/taints", h.AddNodeTaints) // 添加Node污点 - k8sGroup.DELETE("/clusters/:cluster_id/nodes/:node_name/taints", h.DeleteNodeTaints) // 删除Node污点 - k8sGroup.POST("/clusters/:cluster_id/nodes/:node_name/taints/check", h.CheckTaintYaml) // 检查污点YAML + // Node管理 + k8sGroup.GET("/node/:cluster_id/list", h.GetNodeList) // 获取Node列表 + k8sGroup.GET("/node/:cluster_id/:node_name/detail", h.GetNodeDetail) // 获取Node详情 + k8sGroup.POST("/node/:cluster_id/:node_name/labels/update", h.UpdateNodeLabels) // 更新Node标签(完全覆盖) + k8sGroup.POST("/node/:cluster_id/:node_name/drain", h.DrainNode) // 驱逐Node + k8sGroup.POST("/node/:cluster_id/:node_name/cordon", h.CordonNode) // 封锁Node(禁止调度) + k8sGroup.POST("/node/:cluster_id/:node_name/uncordon", h.UncordonNode) // 解封Node(允许调度) + // 污点管理 + k8sGroup.GET("/node/:cluster_id/:node_name/taints/list", h.GetNodeTaints) // 获取Node污点 + k8sGroup.POST("/node/:cluster_id/:node_name/taints/add", h.AddNodeTaints) // 添加Node污点 + k8sGroup.DELETE("/node/:cluster_id/:node_name/taints/delete", h.DeleteNodeTaints) // 删除Node污点 + k8sGroup.POST("/node/:cluster_id/:node_name/taints/check", h.CheckTaintYaml) // 检查污点YAML } } @@ -103,8 +102,9 @@ func (h *K8sNodeHandler) GetNodeDetail(ctx *gin.Context) { }) } -func (h *K8sNodeHandler) AddLabelNodes(ctx *gin.Context) { - var req model.AddLabelNodesReq +// UpdateNodeLabels 更新节点标签 +func (h *K8sNodeHandler) UpdateNodeLabels(ctx *gin.Context) { + var req model.UpdateNodeLabelsReq clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") if err != nil { @@ -122,30 +122,7 @@ func (h *K8sNodeHandler) AddLabelNodes(ctx *gin.Context) { req.NodeName = nodeName utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, h.nodeService.AddOrUpdateNodeLabel(ctx, &req) - }) -} - -func (h *K8sNodeHandler) DeleteLabelNodes(ctx *gin.Context) { - var req model.DeleteLabelNodesReq - - clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") - if err != nil { - utils.BadRequestError(ctx, err.Error()) - return - } - - nodeName, err := utils.GetParamCustomName(ctx, "node_name") - if err != nil { - utils.BadRequestError(ctx, err.Error()) - return - } - - req.ClusterID = clusterID - req.NodeName = nodeName - - utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, h.nodeService.DeleteNodeLabel(ctx, &req) + return nil, h.nodeService.UpdateNodeLabels(ctx, &req) }) } @@ -316,27 +293,3 @@ func (h *K8sNodeHandler) CheckTaintYaml(ctx *gin.Context) { return nil, h.taintService.CheckTaintYaml(ctx, &req) }) } - -// SwitchNodeSchedule 切换节点调度状态 -func (h *K8sNodeHandler) SwitchNodeSchedule(ctx *gin.Context) { - var req model.SwitchNodeScheduleReq - - clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") - if err != nil { - utils.BadRequestError(ctx, err.Error()) - return - } - - nodeName, err := utils.GetParamCustomName(ctx, "node_name") - if err != nil { - utils.BadRequestError(ctx, err.Error()) - return - } - - req.ClusterID = clusterID - req.NodeName = nodeName - - utils.HandleRequest(ctx, &req, func() (interface{}, error) { - return nil, h.taintService.SwitchNodeSchedule(ctx, &req) - }) -} diff --git a/internal/k8s/manager/node_manager.go b/internal/k8s/manager/node_manager.go index d483a624..733c68d2 100644 --- a/internal/k8s/manager/node_manager.go +++ b/internal/k8s/manager/node_manager.go @@ -34,6 +34,7 @@ import ( "github.com/GoSimplicity/AI-CloudOps/internal/model" "go.uber.org/zap" corev1 "k8s.io/api/core/v1" + policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -44,8 +45,7 @@ type NodeManager interface { DrainNode(ctx context.Context, clusterID int, nodeName string, options *utils.DrainOptions) error CordonNode(ctx context.Context, clusterID int, nodeName string) error UncordonNode(ctx context.Context, clusterID int, nodeName string) error - AddOrUpdateNodeLabels(ctx context.Context, clusterID int, nodeName string, labels map[string]string) error - DeleteNodeLabels(ctx context.Context, clusterID int, nodeName string, labelKeys []string) error + UpdateNodeLabels(ctx context.Context, clusterID int, nodeName string, labels map[string]string) error GetNodeTaints(ctx context.Context, clusterID int, nodeName string) ([]*model.NodeTaint, int64, error) } @@ -132,20 +132,68 @@ func (m *nodeManager) DrainNode(ctx context.Context, clusterID int, nodeName str return fmt.Errorf("获取节点Pod列表失败: %w", err) } + var drainErrors []error + successCount := 0 + skipCount := 0 + for _, pod := range pods.Items { if utils.ShouldSkipPodDrain(pod, options) { + skipCount++ + m.logger.Debug("跳过Pod驱逐", + zap.String("podName", pod.Name), + zap.String("namespace", pod.Namespace), + zap.String("reason", "shouldSkip")) continue } + // 使用Eviction API而不是直接删除,这样会遵守PDB deleteOptions := utils.BuildDeleteOptions(options.GracePeriodSeconds) - err := clientset.CoreV1().Pods(pod.Namespace).Delete(ctx, pod.Name, deleteOptions) + eviction := &policyv1.Eviction{ + ObjectMeta: metav1.ObjectMeta{ + Name: pod.Name, + Namespace: pod.Namespace, + }, + DeleteOptions: &deleteOptions, + } + + err := clientset.PolicyV1().Evictions(pod.Namespace).Evict(ctx, eviction) if err != nil { - m.logger.Error("驱逐Pod失败", zap.Error(err), zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName), zap.String("podName", pod.Name)) + m.logger.Error("驱逐Pod失败", + zap.Error(err), + zap.Int("clusterID", clusterID), + zap.String("nodeName", nodeName), + zap.String("podName", pod.Name), + zap.String("namespace", pod.Namespace)) + drainErrors = append(drainErrors, fmt.Errorf("驱逐Pod %s/%s 失败: %w", pod.Namespace, pod.Name, err)) + + // 如果强制驱逐,即使失败也继续 + if options.Force == 2 { + continue + } + // 非强制模式下,遇到错误就停止 + return fmt.Errorf("驱逐节点失败: %w", err) } + + successCount++ + m.logger.Info("成功驱逐Pod", + zap.String("podName", pod.Name), + zap.String("namespace", pod.Namespace), + zap.String("nodeName", nodeName)) + } + + m.logger.Info("节点驱逐完成", + zap.Int("clusterID", clusterID), + zap.String("nodeName", nodeName), + zap.Int("successCount", successCount), + zap.Int("skipCount", skipCount), + zap.Int("errorCount", len(drainErrors))) + + // 如果有错误但是是强制模式,返回成功但记录错误 + if len(drainErrors) > 0 { + m.logger.Warn("部分Pod驱逐失败", zap.Errors("errors", drainErrors)) } - m.logger.Info("节点驱逐完成", zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName)) return nil } @@ -205,13 +253,17 @@ func (m *nodeManager) UncordonNode(ctx context.Context, clusterID int, nodeName return nil } -// AddOrUpdateNodeLabels 添加或更新节点标签 -func (m *nodeManager) AddOrUpdateNodeLabels(ctx context.Context, clusterID int, nodeName string, labels map[string]string) error { +// UpdateNodeLabels 更新节点标签 +func (m *nodeManager) UpdateNodeLabels(ctx context.Context, clusterID int, nodeName string, labels map[string]string) error { if err := utils.ValidateNodeName(nodeName); err != nil { return err } - if err := utils.ValidateNodeLabelsMap(labels); err != nil { - return err + + // 允许传入空标签,用于清空所有标签 + if labels != nil { + if err := utils.ValidateNodeLabelsMap(labels); err != nil { + return err + } } clientset, err := m.client.GetKubeClient(clusterID) @@ -226,10 +278,11 @@ func (m *nodeManager) AddOrUpdateNodeLabels(ctx context.Context, clusterID int, return fmt.Errorf("获取节点失败: %w", err) } - // 以传入的 labels 为主,完全覆盖原有标签 - node.Labels = make(map[string]string) - for key, value := range labels { - node.Labels[key] = value + // 完全覆盖原有标签 + if labels == nil { + node.Labels = make(map[string]string) + } else { + node.Labels = labels } _, err = clientset.CoreV1().Nodes().Update(ctx, node, metav1.UpdateOptions{}) @@ -238,43 +291,7 @@ func (m *nodeManager) AddOrUpdateNodeLabels(ctx context.Context, clusterID int, return fmt.Errorf("更新节点标签失败: %w", err) } - m.logger.Info("节点标签已添加或更新", zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName)) - return nil -} - -func (m *nodeManager) DeleteNodeLabels(ctx context.Context, clusterID int, nodeName string, labelKeys []string) error { - if err := utils.ValidateNodeName(nodeName); err != nil { - return err - } - if err := utils.ValidateLabelKeys(labelKeys); err != nil { - return err - } - - clientset, err := m.client.GetKubeClient(clusterID) - if err != nil { - m.logger.Error("获取Kubernetes客户端失败", zap.Error(err), zap.Int("clusterID", clusterID)) - return fmt.Errorf("获取Kubernetes客户端失败: %w", err) - } - - node, err := clientset.CoreV1().Nodes().Get(ctx, nodeName, metav1.GetOptions{}) - if err != nil { - m.logger.Error("获取节点失败", zap.Error(err), zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName)) - return fmt.Errorf("获取节点失败: %w", err) - } - - if node.Labels != nil { - for _, key := range labelKeys { - delete(node.Labels, key) - } - } - - _, err = clientset.CoreV1().Nodes().Update(ctx, node, metav1.UpdateOptions{}) - if err != nil { - m.logger.Error("删除节点标签失败", zap.Error(err), zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName)) - return fmt.Errorf("删除节点标签失败: %w", err) - } - - m.logger.Info("节点标签删除成功", zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName)) + m.logger.Info("节点标签更新成功", zap.Int("clusterID", clusterID), zap.String("nodeName", nodeName), zap.Any("labels", labels)) return nil } diff --git a/internal/k8s/manager/taint_manager.go b/internal/k8s/manager/taint_manager.go index 863703d4..637456c9 100644 --- a/internal/k8s/manager/taint_manager.go +++ b/internal/k8s/manager/taint_manager.go @@ -49,7 +49,6 @@ const ( type TaintManager interface { CheckTaintYaml(ctx context.Context, clusterID int, nodeName string, taintYaml string) error - EnableSwitchNode(ctx context.Context, clusterID int, nodeName string, scheduleEnable bool) error AddOrUpdateNodeTaint(ctx context.Context, clusterID int, nodeName string, taintYaml string, modType string) error DrainPods(ctx context.Context, clusterID int, nodeName string) error GetNodeTaints(ctx context.Context, clusterID int, nodeName string) ([]corev1.Taint, error) @@ -107,36 +106,6 @@ func (tm *taintManager) CheckTaintYaml(ctx context.Context, clusterID int, nodeN return nil } -func (tm *taintManager) EnableSwitchNode(ctx context.Context, clusterID int, nodeName string, scheduleEnable bool) error { - cluster, err := tm.clusterDao.GetClusterByID(ctx, clusterID) - if err != nil { - tm.logger.Error("获取集群信息失败", zap.Error(err), zap.Int("clusterID", clusterID)) - return fmt.Errorf("获取集群信息失败: %w", err) - } - - kubeClient, err := tm.client.GetKubeClient(cluster.ID) - if err != nil { - tm.logger.Error("获取 Kubernetes 客户端失败", zap.Error(err), zap.Int("clusterID", clusterID)) - return fmt.Errorf("获取 Kubernetes 客户端失败: %w", err) - } - - node, err := kubeClient.CoreV1().Nodes().Get(ctx, nodeName, metav1.GetOptions{}) - if err != nil { - tm.logger.Error("获取节点信息失败", zap.Error(err), zap.String("nodeName", nodeName)) - return fmt.Errorf("获取节点 %s 信息失败: %w", nodeName, err) - } - - node.Spec.Unschedulable = !scheduleEnable - if _, err := kubeClient.CoreV1().Nodes().Update(ctx, node, metav1.UpdateOptions{}); err != nil { - tm.logger.Error("更新节点调度状态失败", zap.Error(err), - zap.String("nodeName", nodeName), zap.Bool("scheduleEnable", scheduleEnable)) - return fmt.Errorf("更新节点 %s 调度状态失败: %w", nodeName, err) - } - - tm.logger.Info("更新节点调度状态成功", zap.String("nodeName", nodeName), zap.Bool("scheduleEnable", scheduleEnable)) - return nil -} - func (tm *taintManager) AddOrUpdateNodeTaint(ctx context.Context, clusterID int, nodeName string, taintYaml string, modType string) error { cluster, err := tm.clusterDao.GetClusterByID(ctx, clusterID) if err != nil { diff --git a/internal/k8s/service/node_service.go b/internal/k8s/service/node_service.go index 446a2875..78485b51 100644 --- a/internal/k8s/service/node_service.go +++ b/internal/k8s/service/node_service.go @@ -41,12 +41,11 @@ import ( type NodeService interface { GetNodeList(ctx context.Context, req *model.GetNodeListReq) (model.ListResp[*model.K8sNode], error) GetNodeDetail(ctx context.Context, req *model.GetNodeDetailReq) (*model.K8sNode, error) - AddOrUpdateNodeLabel(ctx context.Context, req *model.AddLabelNodesReq) error + UpdateNodeLabels(ctx context.Context, req *model.UpdateNodeLabelsReq) error GetNodeTaints(ctx context.Context, req *model.GetNodeTaintsReq) (model.ListResp[*model.NodeTaint], error) DrainNode(ctx context.Context, req *model.DrainNodeReq) error CordonNode(ctx context.Context, req *model.NodeCordonReq) error UncordonNode(ctx context.Context, req *model.NodeUncordonReq) error - DeleteNodeLabel(ctx context.Context, req *model.DeleteLabelNodesReq) error } type nodeService struct { @@ -140,58 +139,33 @@ func (s *nodeService) GetNodeDetail(ctx context.Context, req *model.GetNodeDetai return k8sNode, nil } -// AddOrUpdateNodeLabel 添加或更新节点标签 -func (s *nodeService) AddOrUpdateNodeLabel(ctx context.Context, req *model.AddLabelNodesReq) error { +// UpdateNodeLabels 更新节点标签(完全覆盖) +func (s *nodeService) UpdateNodeLabels(ctx context.Context, req *model.UpdateNodeLabelsReq) error { if req == nil { - return fmt.Errorf("添加节点标签请求参数不能为空") + return fmt.Errorf("更新节点标签请求参数不能为空") } if err := utils.ValidateBasicParams(req.ClusterID, req.NodeName); err != nil { return err } - if len(req.Labels) == 0 { - return fmt.Errorf("要添加的标签不能为空") - } - - // 验证标签 - if err := utils.ValidateNodeLabelsMap(req.Labels); err != nil { - s.logger.Error("AddOrUpdateNodeLabel: 标签验证失败", zap.Error(err)) - return fmt.Errorf("标签验证失败: %w", err) - } - - // 使用 NodeManager 添加或更新节点标签 - err := s.nodeManager.AddOrUpdateNodeLabels(ctx, req.ClusterID, req.NodeName, req.Labels) - if err != nil { - s.logger.Error("AddOrUpdateNodeLabel: 添加节点标签失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Any("labels", req.Labels)) - return fmt.Errorf("添加节点标签失败: %w", err) - } - - return nil -} - -// DeleteNodeLabel 删除节点标签 -func (s *nodeService) DeleteNodeLabel(ctx context.Context, req *model.DeleteLabelNodesReq) error { - if req == nil { - return fmt.Errorf("删除节点标签请求参数不能为空") - } - - if err := utils.ValidateBasicParams(req.ClusterID, req.NodeName); err != nil { - return err - } - - if len(req.LabelKeys) == 0 { - return fmt.Errorf("要删除的标签键不能为空") + // 允许传入空标签,表示清空所有标签 + if req.Labels != nil { + // 验证标签 + if err := utils.ValidateNodeLabelsMap(req.Labels); err != nil { + s.logger.Error("UpdateNodeLabels: 标签验证失败", zap.Error(err)) + return fmt.Errorf("标签验证失败: %w", err) + } } - // 使用 NodeManager 删除节点标签 - err := s.nodeManager.DeleteNodeLabels(ctx, req.ClusterID, req.NodeName, req.LabelKeys) + // 使用 NodeManager 更新节点标签(完全覆盖) + err := s.nodeManager.UpdateNodeLabels(ctx, req.ClusterID, req.NodeName, req.Labels) if err != nil { - s.logger.Error("DeleteNodeLabel: 删除节点标签失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Strings("labelKeys", req.LabelKeys)) - return fmt.Errorf("删除节点标签失败: %w", err) + s.logger.Error("UpdateNodeLabels: 更新节点标签失败", zap.Error(err), zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Any("labels", req.Labels)) + return fmt.Errorf("更新节点标签失败: %w", err) } - s.logger.Info("DeleteNodeLabel: 成功删除节点标签", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Strings("labelKeys", req.LabelKeys)) + s.logger.Info("UpdateNodeLabels: 成功更新节点标签", zap.Int("clusterID", req.ClusterID), zap.String("nodeName", req.NodeName), zap.Any("labels", req.Labels)) return nil } diff --git a/internal/k8s/service/taint_service.go b/internal/k8s/service/taint_service.go index 66f3ed04..9d7f80ee 100644 --- a/internal/k8s/service/taint_service.go +++ b/internal/k8s/service/taint_service.go @@ -37,12 +37,10 @@ import ( type TaintService interface { CheckTaintYaml(ctx context.Context, taint *model.CheckTaintYamlReq) error - EnableSwitchNode(ctx context.Context, req *model.NodeCordonReq) error + AddNodeTaint(ctx context.Context, taint *model.AddNodeTaintsReq) error + DeleteNodeTaint(ctx context.Context, taint *model.DeleteNodeTaintsReq) error AddOrUpdateNodeTaint(ctx context.Context, taint *model.AddNodeTaintsReq) error DrainPods(ctx context.Context, req *model.DrainNodeReq) error - DeleteNodeTaint(ctx context.Context, taint *model.DeleteNodeTaintsReq) error - SwitchNodeSchedule(ctx context.Context, req *model.SwitchNodeScheduleReq) error - AddNodeTaint(ctx context.Context, taint *model.AddNodeTaintsReq) error } type taintService struct { @@ -114,27 +112,6 @@ func (s *taintService) DeleteNodeTaint(ctx context.Context, req *model.DeleteNod return nil } -// SwitchNodeSchedule 切换节点调度状态 -func (s *taintService) SwitchNodeSchedule(ctx context.Context, req *model.SwitchNodeScheduleReq) error { - if req.ClusterID <= 0 { - return fmt.Errorf("集群ID不能为空") - } - if req.NodeName == "" { - return fmt.Errorf("节点名称不能为空") - } - - if err := s.manager.EnableSwitchNode(ctx, req.ClusterID, req.NodeName, req.Enable == 1); err != nil { - s.logger.Error("切换节点调度状态失败", - zap.Int("clusterID", req.ClusterID), - zap.String("nodeName", req.NodeName), - zap.Bool("enable", req.Enable == 1), - zap.Error(err)) - return err - } - - return nil -} - // AddOrUpdateNodeTaint 添加或更新节点污点 func (s *taintService) AddOrUpdateNodeTaint(ctx context.Context, req *model.AddNodeTaintsReq) error { if req.ClusterID <= 0 { @@ -168,27 +145,6 @@ func (s *taintService) AddOrUpdateNodeTaint(ctx context.Context, req *model.AddN return nil } -// BatchEnableSwitchNodes 批量切换节点调度状态 -func (s *taintService) EnableSwitchNode(ctx context.Context, req *model.NodeCordonReq) error { - if req.ClusterID <= 0 { - return fmt.Errorf("集群ID不能为空") - } - if req.NodeName == "" { - return fmt.Errorf("节点名称不能为空") - } - - // NodeCordonReq 用于禁用节点调度,所以这里 scheduleEnable 为 false - if err := s.manager.EnableSwitchNode(ctx, req.ClusterID, req.NodeName, false); err != nil { - s.logger.Error("禁用节点调度失败", - zap.Int("clusterID", req.ClusterID), - zap.String("nodeName", req.NodeName), - zap.Error(err)) - return err - } - - return nil -} - // CheckTaintYaml 检查污点YAML配置 func (s *taintService) CheckTaintYaml(ctx context.Context, req *model.CheckTaintYamlReq) error { if req.ClusterID <= 0 { diff --git a/internal/model/k8s_node.go b/internal/model/k8s_node.go index eb4d00b8..aafd1301 100644 --- a/internal/model/k8s_node.go +++ b/internal/model/k8s_node.go @@ -90,18 +90,11 @@ type GetNodeDetailReq struct { NodeName string `json:"node_name" binding:"required"` // 节点名称 } -// AddLabelNodesReq 添加节点标签请求 -type AddLabelNodesReq struct { +// UpdateNodeLabelsReq 更新节点标签请求 +type UpdateNodeLabelsReq struct { ClusterID int `json:"cluster_id" binding:"required"` // 集群ID NodeName string `json:"node_name" binding:"required"` // 节点名称 - Labels map[string]string `json:"labels" binding:"required"` // 要添加的标签 -} - -// DeleteLabelNodesReq 删除节点标签请求 -type DeleteLabelNodesReq struct { - ClusterID int `json:"cluster_id" binding:"required"` // 集群ID - NodeName string `json:"node_name" binding:"required"` // 节点名称 - LabelKeys []string `json:"label_keys" binding:"required"` // 要删除的标签键 + Labels map[string]string `json:"labels"` // 标签(完全覆盖现有标签,传空map表示清空所有标签) } // DrainNodeReq 驱逐节点请求 @@ -153,10 +146,3 @@ type CheckTaintYamlReq struct { NodeName string `json:"node_name" binding:"required"` // 节点名称 YamlData string `json:"yaml_data" binding:"required"` // YAML数据 } - -// SwitchNodeScheduleReq 切换节点调度状态请求 -type SwitchNodeScheduleReq struct { - ClusterID int `json:"cluster_id" binding:"required"` // 集群ID - NodeName string `json:"node_name" binding:"required"` // 节点名称 - Enable int8 `json:"enable" binding:"required,oneof=1 2"` // 是否启用调度 -} From 9e3fb45aae9ccd46a66716540d20344ab0e57c59 Mon Sep 17 00:00:00 2001 From: Bamboo <13664854532@163.com> Date: Thu, 2 Oct 2025 21:57:19 +0800 Subject: [PATCH 5/6] chore: Disable automatic Swagger documentation generation; update Makefile and related scripts for manual generation instructions --- .air.toml | 4 +- Makefile | 78 ++---- internal/k8s/api/deployment.go | 8 + internal/k8s/manager/deployment_manager.go | 72 ++++-- internal/k8s/utils/deployment.go | 5 +- scripts/setup-git-hooks.sh | 209 +--------------- scripts/swagger-auto-sync.sh | 267 --------------------- scripts/swagger-watcher.sh | 17 -- 8 files changed, 93 insertions(+), 567 deletions(-) delete mode 100755 scripts/swagger-auto-sync.sh delete mode 100755 scripts/swagger-watcher.sh diff --git a/.air.toml b/.air.toml index 3fb20e7a..ad58ea4e 100644 --- a/.air.toml +++ b/.air.toml @@ -9,10 +9,10 @@ tmp_dir = "tmp" [build] # 构建命令 +# 注意:Swagger 文档自动生成已禁用,请使用 make swagger 手动生成 pre_cmd = [ "echo '🔄 开始构建...'", - "echo '📄 检查 Swagger 文档生成设置...'", - "if [ \"${SWAGGER_ENABLED:-true}\" = \"false\" ]; then echo '⏭️ Swagger 文档生成已禁用,跳过生成'; else echo '📄 自动生成 Swagger 文档...'; go generate; echo '✅ Swagger 文档已自动更新'; fi" + "echo '📝 提示: 如需生成 Swagger 文档,请手动运行 make swagger'" ] # 编译后的二进制文件名 diff --git a/Makefile b/Makefile index 0094fc67..03f78b29 100644 --- a/Makefile +++ b/Makefile @@ -8,21 +8,13 @@ swagger-manual: @echo "API文档已生成到 docs/ 目录" @echo "访问地址: http://localhost:8889/swagger/index.html" -# 生成 Swagger API 文档(无需手动注释,同步到 docs.go) +# 生成 Swagger API 文档 swagger: @echo "🚀 正在生成API文档..." @echo "📄 使用生成工具生成文档..." @bash scripts/generate-swagger.sh @echo "✅ Swagger 文档生成完成!" -# 禁用 Swagger 生成(设置环境变量) -swagger-disable: - @echo "🔒 禁用 Swagger 文档生成..." - @export SWAGGER_ENABLED=false - @export SWAGGER_VERBOSE=false - @echo "✅ Swagger 生成已禁用" - @echo "💡 提示: 使用 'export SWAGGER_ENABLED=false' 永久禁用" - # 兼容旧的命令名 openai: swagger @@ -83,33 +75,11 @@ swagger-clean: @rm -f docs/docs.go docs/swagger.json docs/swagger.yaml @echo "✅ 文档已清理" -# 完整的 Swagger 工作流(包含同步) +# 完整的 Swagger 工作流(手动生成) swagger-all: swagger-clean swagger swagger-validate swagger-check - @echo "🎉 Swagger 文档生成并同步完成!" - -# 安装 Git hooks 和同步机制 -swagger-setup: - @echo "设置 Swagger 生成和同步..." - @bash scripts/setup-git-hooks.sh - -# 启用监控模式(开发时使用) -swagger-watch: - @echo "⚠️ 监控功能已被禁用以防止循环生成问题" - @echo "💡 建议手动使用: make swagger" - @echo "🔧 如需启用监控,请联系开发者进行安全配置" - -# 快速构建(包含 swagger 生成) -build-with-docs: swagger - @echo "构建项目(包含文档)..." - @go build -o bin/ai-cloudops main.go - @echo "✅ 构建完成,可执行文件: bin/ai-cloudops" - -# 开发模式启动(生成文档) -dev-with-docs: swagger - @echo "开发模式启动(包含最新文档)..." - @go run main.go - -# 检查并自动修复 Swagger 注解 + @echo "🎉 Swagger 文档生成完成!" + +# 检查并修复 Swagger 注解 swagger-fix: @echo "检查并修复 Swagger 注解..." @bash scripts/swagger-helper.sh fix @@ -121,41 +91,29 @@ install-dev-tools: @go install github.com/swaggo/swag/cmd/swag@latest @echo "✅ 开发工具安装完成" -# 使用 Air 启动开发服务器(支持热重载和生成 Swagger) +# 使用 Air 启动开发服务器(不自动生成 Swagger) dev-air: @if ! command -v air &> /dev/null; then \ echo "❌ air 工具未安装,正在安装..."; \ go install github.com/air-verse/air@latest; \ fi - @echo "🚀 启动开发服务器 (Air + Swagger 生成)..." + @echo "🚀 启动开发服务器 (Air 热重载)..." + @echo "💡 提示: 如需生成文档,请手动运行 make swagger" @air -# 检查文档同步状态 -swagger-sync-check: - @echo "检查 Swagger 文档同步状态..." - @bash scripts/swagger-auto-sync.sh verify - -# 手动同步文档 -swagger-sync: - @echo "手动同步 Swagger 文档..." - @bash scripts/swagger-auto-sync.sh sync - -# 强制重新同步文档 -swagger-sync-force: - @echo "强制重新同步 Swagger 文档..." - @bash scripts/swagger-auto-sync.sh force - -# 开发环境完整设置 -dev-setup: swagger-setup install-dev-tools +# 开发环境设置(不包含自动生成功能) +dev-setup: install-dev-tools @echo "🎉 开发环境设置完成!" @echo "" @echo "可用命令:" @echo " make dev-air # 使用 Air 热重载启动" - @echo " make swagger-watch # 监控 Swagger 文档变化" - @echo " make swagger # 生成文档并同步" - @echo " make swagger-sync # 手动同步文档" - @echo " make swagger-sync-check # 检查同步状态" - @echo " go generate # 使用 Go generate 生成文档" + @echo " make swagger # 手动生成 Swagger 文档" + @echo " make swagger-manual # 使用传统方式生成" + @echo " make swagger-validate # 验证生成的文档" + @echo " make swagger-check # 检查注解完整性" + @echo " make swagger-clean # 清理生成的文档" + @echo "" + @echo "📝 注意: Swagger 文档需要手动生成" docker-build: docker build -t Bamboo/gomodd:v1.23.1 . @@ -177,4 +135,4 @@ docker-net-remove: dev: docker-build docker-start-env docker-start-server -stop: docker-stop-env docker-stop-server docker-net-remove \ No newline at end of file +stop: docker-stop-env docker-stop-server docker-net-remove diff --git a/internal/k8s/api/deployment.go b/internal/k8s/api/deployment.go index d500829b..bba4ae55 100644 --- a/internal/k8s/api/deployment.go +++ b/internal/k8s/api/deployment.go @@ -445,6 +445,14 @@ func (h *K8sDeploymentHandler) ResumeDeployment(ctx *gin.Context) { func (h *K8sDeploymentHandler) CreateDeploymentByYaml(ctx *gin.Context) { var req model.CreateDeploymentByYamlReq + clusterID, err := utils.GetCustomParamID(ctx, "cluster_id") + if err != nil { + utils.BadRequestError(ctx, err.Error()) + return + } + + req.ClusterID = clusterID + utils.HandleRequest(ctx, &req, func() (interface{}, error) { return nil, h.deploymentService.CreateDeploymentByYaml(ctx, &req) }) diff --git a/internal/k8s/manager/deployment_manager.go b/internal/k8s/manager/deployment_manager.go index be703fae..fc0c136e 100644 --- a/internal/k8s/manager/deployment_manager.go +++ b/internal/k8s/manager/deployment_manager.go @@ -28,6 +28,7 @@ package manager import ( "context" "fmt" + "strings" "time" "github.com/GoSimplicity/AI-CloudOps/internal/k8s/client" @@ -223,14 +224,13 @@ func (m *deploymentManager) DeleteDeployment(ctx context.Context, clusterID int, return nil } -// RestartDeployment 重启deployment +// RestartDeployment 重启deployment的所有pod func (m *deploymentManager) RestartDeployment(ctx context.Context, clusterID int, namespace, name string) error { kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } - // 使用 Patch 方式重启 patchData := fmt.Sprintf(`{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt":"%s"}}}}}`, time.Now().Format(time.RFC3339)) @@ -244,7 +244,7 @@ func (m *deploymentManager) RestartDeployment(ctx context.Context, clusterID int return fmt.Errorf("重启 Deployment 失败: %w", err) } - m.logger.Info("成功重启 Deployment", + m.logger.Info("成功触发 Deployment 滚动重启,将逐个重启所有 Pod", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name)) @@ -258,20 +258,19 @@ func (m *deploymentManager) ScaleDeployment(ctx context.Context, clusterID int, return err } - // 获取当前 Deployment - deployment, err := kubeClient.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) + scale, err := kubeClient.AppsV1().Deployments(namespace).GetScale(ctx, name, metav1.GetOptions{}) if err != nil { - m.logger.Error("获取 Deployment 失败", + m.logger.Error("获取 Deployment Scale 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), zap.Error(err)) - return fmt.Errorf("获取 Deployment 失败: %w", err) + return fmt.Errorf("获取 Deployment Scale 失败: %w", err) } // 更新副本数 - deployment.Spec.Replicas = &replicas - _, err = kubeClient.AppsV1().Deployments(namespace).Update(ctx, deployment, metav1.UpdateOptions{}) + scale.Spec.Replicas = replicas + _, err = kubeClient.AppsV1().Deployments(namespace).UpdateScale(ctx, name, scale, metav1.UpdateOptions{}) if err != nil { m.logger.Error("扩缩容 Deployment 失败", zap.Int("clusterID", clusterID), @@ -343,14 +342,39 @@ func (m *deploymentManager) GetDeploymentPods(ctx context.Context, clusterID int } // RollbackDeployment 回滚 Deployment 到指定版本 +// 通过查找对应版本的 ReplicaSet,并将其 PodTemplateSpec 应用到 Deployment func (m *deploymentManager) RollbackDeployment(ctx context.Context, clusterID int, namespace, name string, revision int64) error { kubeClient, err := m.getKubeClient(clusterID) if err != nil { return err } + // 首先获取当前 Deployment 以获取其 selector + deployment, err := kubeClient.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) + if err != nil { + m.logger.Error("获取 Deployment 失败", + zap.Int("clusterID", clusterID), + zap.String("namespace", namespace), + zap.String("name", name), + zap.Error(err)) + return fmt.Errorf("获取 Deployment 失败: %w", err) + } + + // 使用 selector 过滤,只获取属于该 Deployment 的 ReplicaSet + var labelSelectors []string + if deployment.Spec.Selector != nil && deployment.Spec.Selector.MatchLabels != nil { + for key, value := range deployment.Spec.Selector.MatchLabels { + labelSelectors = append(labelSelectors, fmt.Sprintf("%s=%s", key, value)) + } + } + + listOptions := metav1.ListOptions{} + if len(labelSelectors) > 0 { + listOptions.LabelSelector = strings.Join(labelSelectors, ",") + } + // 获取 ReplicaSet 列表,找到指定版本的 ReplicaSet - replicaSets, err := kubeClient.AppsV1().ReplicaSets(namespace).List(ctx, metav1.ListOptions{}) + replicaSets, err := kubeClient.AppsV1().ReplicaSets(namespace).List(ctx, listOptions) if err != nil { m.logger.Error("获取 ReplicaSet 列表失败", zap.Int("clusterID", clusterID), @@ -361,7 +385,9 @@ func (m *deploymentManager) RollbackDeployment(ctx context.Context, clusterID in } var targetReplicaSet *appsv1.ReplicaSet - for _, rs := range replicaSets.Items { + for i := range replicaSets.Items { + rs := &replicaSets.Items[i] + // 检查 ReplicaSet 是否属于该 Deployment isOwned := false for _, ownerRef := range rs.OwnerReferences { @@ -375,7 +401,7 @@ func (m *deploymentManager) RollbackDeployment(ctx context.Context, clusterID in if isOwned { if revisionStr, ok := rs.Annotations["deployment.kubernetes.io/revision"]; ok { if revisionStr == fmt.Sprintf("%d", revision) { - targetReplicaSet = &rs + targetReplicaSet = rs break } } @@ -383,23 +409,24 @@ func (m *deploymentManager) RollbackDeployment(ctx context.Context, clusterID in } if targetReplicaSet == nil { - return fmt.Errorf("未找到版本 %d 的 ReplicaSet", revision) - } - - // 获取当前 Deployment - deployment, err := kubeClient.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) - if err != nil { - m.logger.Error("获取 Deployment 失败", + m.logger.Error("未找到指定版本的 ReplicaSet", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), - zap.Error(err)) - return fmt.Errorf("获取 Deployment 失败: %w", err) + zap.Int64("revision", revision)) + return fmt.Errorf("未找到版本 %d 的 ReplicaSet,请检查该版本是否存在", revision) } // 使用目标 ReplicaSet 的 PodTemplateSpec 更新 Deployment + // 这会触发滚动更新,逐步替换为旧版本的 Pod deployment.Spec.Template = targetReplicaSet.Spec.Template + // 添加回滚注解,方便追踪 + if deployment.Annotations == nil { + deployment.Annotations = make(map[string]string) + } + deployment.Annotations["kubernetes.io/change-cause"] = fmt.Sprintf("Rollback to revision %d", revision) + // 更新 Deployment _, err = kubeClient.AppsV1().Deployments(namespace).Update(ctx, deployment, metav1.UpdateOptions{}) if err != nil { @@ -416,7 +443,8 @@ func (m *deploymentManager) RollbackDeployment(ctx context.Context, clusterID in zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), - zap.Int64("revision", revision)) + zap.Int64("revision", revision), + zap.String("targetReplicaSet", targetReplicaSet.Name)) return nil } diff --git a/internal/k8s/utils/deployment.go b/internal/k8s/utils/deployment.go index ae87ae67..c792781a 100644 --- a/internal/k8s/utils/deployment.go +++ b/internal/k8s/utils/deployment.go @@ -570,11 +570,12 @@ func BuildDeploymentFromYaml(req *model.CreateDeploymentByYamlReq) (*appsv1.Depl return nil, err } - // YAML中必须包含namespace和name信息 + // 如果YAML中没有指定namespace,使用default if deployment.Namespace == "" { - return nil, fmt.Errorf("YAML中必须指定namespace") + deployment.Namespace = "default" } + // YAML中必须包含name信息 if deployment.Name == "" { return nil, fmt.Errorf("YAML中必须指定name") } diff --git a/scripts/setup-git-hooks.sh b/scripts/setup-git-hooks.sh index e59e051d..abea7e82 100755 --- a/scripts/setup-git-hooks.sh +++ b/scripts/setup-git-hooks.sh @@ -30,155 +30,6 @@ log_error() { echo -e "${RED}[ERROR]${NC} $1" } -# 创建 pre-commit hook -create_pre_commit_hook() { - local hooks_dir=".git/hooks" - local pre_commit_file="$hooks_dir/pre-commit" - - log_info "创建 pre-commit git hook..." - - # 确保 hooks 目录存在 - mkdir -p "$hooks_dir" - - # 创建 pre-commit hook - cat > "$pre_commit_file" << 'EOF' -#!/bin/bash - -# AI-CloudOps Swagger 文档自动同步 Pre-commit Hook - -set -e - -PROJECT_ROOT="$(git rev-parse --show-toplevel)" -cd "$PROJECT_ROOT" - -echo "🔍 检查 Swagger 文档同步状态..." - -# 检查是否有 swagger 相关文件的变更 -if git diff --cached --name-only | grep -E "\.(go)$|swagger\.(json|yaml)$" > /dev/null; then - echo "📄 检测到代码或文档变更,检查同步状态..." - - # 运行同步检查 - if [ -f "scripts/swagger-auto-sync.sh" ]; then - # 验证当前同步状态 - if ! bash scripts/swagger-auto-sync.sh verify > /dev/null 2>&1; then - echo "⚠️ 检测到文档可能未同步,正在自动同步..." - - # 自动同步 - if bash scripts/swagger-auto-sync.sh sync; then - echo "✅ 文档同步完成" - - # 将更新的 docs.go 加入到 staging area - if [ -f "docs/docs.go" ]; then - git add docs/docs.go - echo "📝 已将更新的 docs.go 加入提交" - fi - else - echo "❌ 文档同步失败,请手动修复后重新提交" - echo "建议运行: bash scripts/swagger-auto-sync.sh force" - exit 1 - fi - else - echo "✅ 文档同步状态正常" - fi - else - echo "⚠️ 未找到自动同步脚本,跳过同步检查" - fi -else - echo "📄 未检测到相关文件变更,跳过文档同步检查" -fi - -echo "🚀 Pre-commit 检查完成" -EOF - - # 给 hook 添加执行权限 - chmod +x "$pre_commit_file" - - log_success "✅ Pre-commit hook 创建成功" -} - -# 创建 post-merge hook -create_post_merge_hook() { - local hooks_dir=".git/hooks" - local post_merge_file="$hooks_dir/post-merge" - - log_info "创建 post-merge git hook..." - - # 创建 post-merge hook - cat > "$post_merge_file" << 'EOF' -#!/bin/bash - -# AI-CloudOps Swagger 文档自动同步 Post-merge Hook - -set -e - -PROJECT_ROOT="$(git rev-parse --show-toplevel)" -cd "$PROJECT_ROOT" - -echo "🔄 合并后检查 Swagger 文档同步状态..." - -# 检查是否有 swagger 相关文件的变更 -if git diff HEAD~1 --name-only | grep -E "\.(go)$|swagger\.(json|yaml)$" > /dev/null; then - echo "📄 检测到代码或文档变更,检查同步状态..." - - # 运行同步检查 - if [ -f "scripts/swagger-auto-sync.sh" ]; then - if ! bash scripts/swagger-auto-sync.sh verify > /dev/null 2>&1; then - echo "⚠️ 检测到文档可能未同步,建议运行同步:" - echo " bash scripts/swagger-auto-sync.sh sync" - echo " 或者运行: make swagger" - else - echo "✅ 文档同步状态正常" - fi - fi -else - echo "📄 未检测到相关文件变更" -fi - -echo "🎉 Post-merge 检查完成" -EOF - - # 给 hook 添加执行权限 - chmod +x "$post_merge_file" - - log_success "✅ Post-merge hook 创建成功" -} - -# 创建 swagger 同步提醒的 wrapper -create_swagger_watcher() { - local watcher_file="scripts/swagger-watcher.sh" - - log_info "创建 Swagger 文档监控脚本..." - - cat > "$watcher_file" << 'EOF' -#!/bin/bash - -# Swagger 文档开发时自动监控脚本 - -set -e - -PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$PROJECT_ROOT" - -echo "🔍 启动 Swagger 文档开发监控..." -echo "📁 监控目录: $PROJECT_ROOT" -echo "🎯 监控文件: *.go, swagger.json, swagger.yaml" -echo "⏹️ 按 Ctrl+C 退出" - -# 启动自动同步监控 -if [ -f "scripts/swagger-auto-sync.sh" ]; then - bash scripts/swagger-auto-sync.sh watch -else - echo "❌ 未找到 swagger-auto-sync.sh 脚本" - exit 1 -fi -EOF - - # 给脚本添加执行权限 - chmod +x "$watcher_file" - - log_success "✅ Swagger 监控脚本创建成功" -} - # 检查 git 仓库 check_git_repo() { if [ ! -d ".git" ]; then @@ -187,22 +38,6 @@ check_git_repo() { fi } -# 备份现有的 hooks -backup_existing_hooks() { - local hooks_dir=".git/hooks" - local backup_dir=".git/hooks.backup.$(date +%Y%m%d_%H%M%S)" - - if [ -f "$hooks_dir/pre-commit" ] || [ -f "$hooks_dir/post-merge" ]; then - log_info "备份现有的 Git hooks..." - mkdir -p "$backup_dir" - - [ -f "$hooks_dir/pre-commit" ] && cp "$hooks_dir/pre-commit" "$backup_dir/" - [ -f "$hooks_dir/post-merge" ] && cp "$hooks_dir/post-merge" "$backup_dir/" - - log_success "现有 hooks 已备份到: $backup_dir" - fi -} - # 显示设置结果 show_setup_result() { echo "" @@ -210,49 +45,29 @@ show_setup_result() { echo "🎉 Git Hooks 设置完成!" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" - echo "已设置的 Hooks:" - echo " ✅ pre-commit - 提交前自动检查并同步文档" - echo " ✅ post-merge - 合并后提醒检查文档同步状态" - echo "" - echo "可用的开发工具:" - echo " 📜 scripts/swagger-auto-sync.sh - 手动同步工具" - echo " 🔍 scripts/swagger-watcher.sh - 开发时监控工具" - echo "" - echo "使用方法:" - echo " # 手动同步文档" - echo " bash scripts/swagger-auto-sync.sh sync" - echo "" - echo " # 开发时自动监控(推荐)" - echo " make swagger-watch" - echo " # 或者" - echo " bash scripts/swagger-watcher.sh" + echo "📝 注意:" + echo " Swagger 自动生成功能已禁用" + echo " 请使用以下命令手动生成文档:" echo "" - echo " # 验证同步状态" - echo " bash scripts/swagger-auto-sync.sh verify" - echo "" - echo " # 强制重新同步" - echo " bash scripts/swagger-auto-sync.sh force" - echo "" - echo "Makefile 命令:" - echo " make swagger - 生成文档并自动同步" - echo " make swagger-watch - 启动文档监控" - echo " make swagger-all - 完整的文档生成流程" + echo " make swagger - 生成 Swagger 文档" + echo " make swagger-manual - 使用传统方式生成" + echo " make swagger-validate - 验证生成的文档" + echo " make swagger-clean - 清理生成的文档" echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" } # 主函数 main() { - log_info "🚀 开始设置 AI-CloudOps Swagger 自动同步..." + log_info "🚀 设置 AI-CloudOps Git Hooks..." check_git_repo - backup_existing_hooks - create_pre_commit_hook - create_post_merge_hook - create_swagger_watcher + + log_warning "Swagger 自动生成功能已被禁用" + log_info "文档生成已改为纯手动方式" show_setup_result } # 执行主函数 -main "$@" \ No newline at end of file +main "$@" diff --git a/scripts/swagger-auto-sync.sh b/scripts/swagger-auto-sync.sh deleted file mode 100755 index ef5bb07f..00000000 --- a/scripts/swagger-auto-sync.sh +++ /dev/null @@ -1,267 +0,0 @@ -#!/bin/bash - -set -e - -# 颜色定义 -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# 项目根目录 -PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$PROJECT_ROOT" - -# 日志函数 -log_info() { - echo -e "${BLUE}[INFO]${NC} $1" -} - -log_success() { - echo -e "${GREEN}[SUCCESS]${NC} $1" -} - -log_warning() { - echo -e "${YELLOW}[WARNING]${NC} $1" -} - -log_error() { - echo -e "${RED}[ERROR]${NC} $1" -} - -# 检查是否需要同步 -check_sync_needed() { - local swagger_json="docs/swagger.json" - local docs_go="docs/docs.go" - - if [ ! -f "$swagger_json" ]; then - log_warning "swagger.json 不存在,需要生成文档" - return 0 - fi - - if [ ! -f "$docs_go" ]; then - log_warning "docs.go 不存在,需要同步" - return 0 - fi - - # 检查文件修改时间 - local swagger_time=$(stat -f "%m" "$swagger_json" 2>/dev/null || echo "0") - local docs_time=$(stat -f "%m" "$docs_go" 2>/dev/null || echo "0") - - if [ "$swagger_time" -gt "$docs_time" ]; then - log_info "swagger.json 比 docs.go 更新,需要同步" - return 0 - fi - - # 检查内容是否一致 - if ! grep -q "swagger.json" "$docs_go" > /dev/null 2>&1; then - log_warning "docs.go 内容可能过期,需要同步" - return 0 - fi - - return 1 -} - -# 同步文档 -auto_sync() { - log_info "🔄 开始同步 Swagger 文档..." - - if check_sync_needed; then - log_info "执行同步操作..." - - # 运行 go generate - if go generate ./...; then - log_success "✅ 文档同步完成!" - - # 验证同步结果 - if [ -f "docs/docs.go" ] && [ -f "docs/swagger.json" ]; then - local docs_size=$(du -h docs/docs.go | cut -f1) - local swagger_size=$(du -h docs/swagger.json | cut -f1) - log_info "docs.go 大小: $docs_size" - log_info "swagger.json 大小: $swagger_size" - fi - else - log_error "❌ 同步失败!" - return 1 - fi - else - log_success "✅ 文档已是最新,无需同步" - fi -} - -# 监控模式 - 文件变化时同步 -watch_mode() { - log_info "🔍 启动文件监控模式..." - log_info "监控目录: docs/" - log_info "按 Ctrl+C 退出监控" - - # 检查是否有 fswatch 工具 - if command -v fswatch > /dev/null; then - log_info "使用 fswatch 监控文件变化..." - fswatch -o docs/swagger.json | while read f; do - log_info "检测到 swagger.json 文件变化,开始同步..." - auto_sync - done - elif command -v inotifywait > /dev/null; then - log_info "使用 inotifywait 监控文件变化..." - while true; do - inotifywait -e modify docs/swagger.json 2>/dev/null && { - log_info "检测到 swagger.json 文件变化,开始同步..." - auto_sync - } - done - else - log_warning "未找到文件监控工具,使用轮询模式(每5秒检查一次)..." - local last_check=0 - echo "⚠️ 监控模式已被禁用以防止循环生成问题" - echo "💡 请手动运行同步: bash scripts/swagger-auto-sync.sh sync" - echo "🔧 或使用: make swagger" - return 0 - fi -} - -# 强制同步 -force_sync() { - log_info "🔄 强制同步 Swagger 文档..." - - # 重新生成 swagger 文档 - log_info "重新生成 swagger 文档..." - if make swagger > /dev/null 2>&1; then - log_success "✅ 强制同步完成!" - else - log_error "❌ 强制同步失败!" - return 1 - fi -} - -# 验证同步状态 -verify_sync() { - log_info "🔍 验证文档同步状态..." - - local swagger_json="docs/swagger.json" - local docs_go="docs/docs.go" - - if [ ! -f "$swagger_json" ]; then - log_error "❌ swagger.json 不存在" - return 1 - fi - - if [ ! -f "$docs_go" ]; then - log_error "❌ docs.go 不存在" - return 1 - fi - - # 检查修改时间 - local swagger_time=$(stat -f "%m" "$swagger_json" 2>/dev/null || echo "0") - local docs_time=$(stat -f "%m" "$docs_go" 2>/dev/null || echo "0") - - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "📊 文档同步状态报告" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "swagger.json 修改时间: $(date -r "$swagger_time" 2>/dev/null || echo "未知")" - echo "docs.go 修改时间: $(date -r "$docs_time" 2>/dev/null || echo "未知")" - echo "swagger.json 大小: $(du -h "$swagger_json" | cut -f1)" - echo "docs.go 大小: $(du -h "$docs_go" | cut -f1)" - - if [ "$swagger_time" -le "$docs_time" ]; then - log_success "✅ 文档同步状态正常" - else - log_warning "⚠️ docs.go 可能需要更新" - echo "建议运行: bash scripts/swagger-auto-sync.sh sync" - fi - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -} - -# 安装文件监控工具 -install_tools() { - log_info "🔧 安装文件监控工具..." - - if [[ "$OSTYPE" == "darwin"* ]]; then - # macOS - if ! command -v fswatch > /dev/null; then - if command -v brew > /dev/null; then - log_info "使用 Homebrew 安装 fswatch..." - brew install fswatch - else - log_warning "请安装 Homebrew 或手动安装 fswatch" - fi - else - log_success "fswatch 已安装" - fi - elif [[ "$OSTYPE" == "linux"* ]]; then - # Linux - if ! command -v inotifywait > /dev/null; then - if command -v apt-get > /dev/null; then - log_info "使用 apt 安装 inotify-tools..." - sudo apt-get update && sudo apt-get install -y inotify-tools - elif command -v yum > /dev/null; then - log_info "使用 yum 安装 inotify-tools..." - sudo yum install -y inotify-tools - else - log_warning "请手动安装 inotify-tools" - fi - else - log_success "inotify-tools 已安装" - fi - fi -} - -# 显示帮助信息 -show_help() { - echo "Swagger 文档同步工具" - echo "" - echo "用法:" - echo " bash scripts/swagger-auto-sync.sh " - echo "" - echo "命令:" - echo " sync 检查并同步文档" - echo " watch 监控文件变化并同步" - echo " force 强制重新生成并同步" - echo " verify 验证当前同步状态" - echo " install 安装文件监控工具" - echo " help 显示此帮助信息" - echo "" - echo "示例:" - echo " bash scripts/swagger-auto-sync.sh sync" - echo " bash scripts/swagger-auto-sync.sh watch" - echo "" - echo "集成到开发流程:" - echo " # 在 .bashrc 或 .zshrc 中添加别名" - echo " alias swagger-sync='bash scripts/swagger-auto-sync.sh sync'" - echo " alias swagger-watch='bash scripts/swagger-auto-sync.sh watch'" -} - -# 主函数 -main() { - local command="${1:-help}" - - case "$command" in - "sync") - auto_sync - ;; - "watch") - watch_mode - ;; - "force") - force_sync - ;; - "verify") - verify_sync - ;; - "install") - install_tools - ;; - "help"|"-h"|"--help") - show_help - ;; - *) - log_error "未知命令: $command" - show_help - exit 1 - ;; - esac -} - -# 执行主函数 -main "$@" diff --git a/scripts/swagger-watcher.sh b/scripts/swagger-watcher.sh deleted file mode 100755 index 0690247b..00000000 --- a/scripts/swagger-watcher.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -# 颜色定义 -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -RED='\033[0;31m' -NC='\033[0m' - -# 项目根目录 -PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$PROJECT_ROOT" - -echo -e "${RED}⚠️ WARNING: 监控功能已被禁用以防止循环生成问题${NC}" -echo -e "${YELLOW}💡 如需监控,请手动运行: bash scripts/swagger-auto-sync.sh watch${NC}" -echo -e "${GREEN}🔧 建议使用: make swagger (手动同步)${NC}" - -exit 0 \ No newline at end of file From ad6514dfee4ec32b057bedb248ad05e620ecab34 Mon Sep 17 00:00:00 2001 From: Bamboo <13664854532@163.com> Date: Fri, 3 Oct 2025 11:00:40 +0800 Subject: [PATCH 6/6] refactor: Enhance DaemonSet and StatefulSet management by implementing YAML-based creation and update methods; improve rollback functionality and error handling --- internal/k8s/manager/daemonset_manager.go | 18 +- internal/k8s/manager/statefulset_manager.go | 20 +- internal/k8s/service/daemonset_service.go | 105 ++++---- internal/k8s/service/deployment_service.go | 30 ++- internal/k8s/service/statefulset_service.go | 106 +++++--- internal/k8s/utils/daemonset.go | 212 +++++++++++++--- internal/k8s/utils/statefulset.go | 256 ++++++++++++++++---- internal/model/k8s_deployment.go | 2 +- internal/model/k8s_statefulset.go | 2 +- 9 files changed, 568 insertions(+), 183 deletions(-) diff --git a/internal/k8s/manager/daemonset_manager.go b/internal/k8s/manager/daemonset_manager.go index db5d9f6b..c9af7c07 100644 --- a/internal/k8s/manager/daemonset_manager.go +++ b/internal/k8s/manager/daemonset_manager.go @@ -551,13 +551,23 @@ func (m *daemonSetManager) RollbackDaemonSet(ctx context.Context, clusterID int, return fmt.Errorf("找不到版本 %d 的 ControllerRevision", revision) } - // DaemonSet 不像 Deployment 有内置的回滚功能,需要手动实现 - // 这里我们提供一个简化的回滚:重新触发 DaemonSet 的滚动更新 + // 从 ControllerRevision 中提取 DaemonSet 模板 + var daemonSetTemplate appsv1.DaemonSet + err = utils.ExtractDaemonSetFromRevision(targetRevision, &daemonSetTemplate) + if err != nil { + m.logger.Error("从 ControllerRevision 提取 DaemonSet 模板失败", + zap.Int64("revision", revision), + zap.Error(err)) + return fmt.Errorf("提取 DaemonSet 模板失败: %w", err) + } + + // 更新当前 DaemonSet 的 spec + currentDaemonSet.Spec = daemonSetTemplate.Spec + + // 添加回滚注解 if currentDaemonSet.Annotations == nil { currentDaemonSet.Annotations = make(map[string]string) } - - // 添加回滚注解来触发更新 currentDaemonSet.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339) currentDaemonSet.Annotations["rollback.daemonset.kubernetes.io/revision"] = fmt.Sprintf("%d", revision) diff --git a/internal/k8s/manager/statefulset_manager.go b/internal/k8s/manager/statefulset_manager.go index 872b9a4d..d4bb1a31 100644 --- a/internal/k8s/manager/statefulset_manager.go +++ b/internal/k8s/manager/statefulset_manager.go @@ -28,6 +28,7 @@ package manager import ( "context" "fmt" + "sort" "strings" "sync" "time" @@ -267,22 +268,22 @@ func (m *statefulSetManager) ScaleStatefulSet(ctx context.Context, clusterID int return err } - // 获取当前 StatefulSet - statefulSet, err := kubeClient.AppsV1().StatefulSets(namespace).Get(ctx, name, metav1.GetOptions{}) + // 使用 Scale subresource API 进行扩缩容 + scale, err := kubeClient.AppsV1().StatefulSets(namespace).GetScale(ctx, name, metav1.GetOptions{}) if err != nil { - m.logger.Error("获取 StatefulSet 失败", + m.logger.Error("获取 StatefulSet Scale 失败", zap.Int("clusterID", clusterID), zap.String("namespace", namespace), zap.String("name", name), zap.Error(err)) - return fmt.Errorf("获取 StatefulSet 失败: %w", err) + return fmt.Errorf("获取 StatefulSet Scale 失败: %w", err) } // 更新副本数 - statefulSet.Spec.Replicas = &replicas + scale.Spec.Replicas = replicas - // 执行更新 - _, err = kubeClient.AppsV1().StatefulSets(namespace).Update(ctx, statefulSet, metav1.UpdateOptions{}) + // 执行扩缩容 + _, err = kubeClient.AppsV1().StatefulSets(namespace).UpdateScale(ctx, name, scale, metav1.UpdateOptions{}) if err != nil { m.logger.Error("扩缩容 StatefulSet 失败", zap.Int("clusterID", clusterID), @@ -450,6 +451,11 @@ func (m *statefulSetManager) GetStatefulSetHistory(ctx context.Context, clusterI } } + // 按版本号排序(从新到旧) + sort.Slice(history, func(i, j int) bool { + return history[i].Revision > history[j].Revision + }) + return history, int64(len(history)), nil } diff --git a/internal/k8s/service/daemonset_service.go b/internal/k8s/service/daemonset_service.go index 263b4279..7a607b04 100644 --- a/internal/k8s/service/daemonset_service.go +++ b/internal/k8s/service/daemonset_service.go @@ -126,13 +126,16 @@ func (s *daemonSetService) CreateDaemonSetByYaml(ctx context.Context, req *model return fmt.Errorf("YAML内容不能为空") } - // 解析YAML为DaemonSet对象 - daemonSet, err := utils.YAMLToDaemonSet(req.YAML) + s.logger.Info("开始通过YAML创建DaemonSet", + zap.Int("clusterID", req.ClusterID)) + + // 从YAML构建DaemonSet对象 + daemonSet, err := utils.BuildDaemonSetFromYaml(req) if err != nil { - s.logger.Error("CreateDaemonSetByYaml: 解析YAML失败", - zap.Error(err), - zap.Int("clusterID", req.ClusterID)) - return fmt.Errorf("解析YAML失败: %w", err) + s.logger.Error("从YAML构建DaemonSet失败", + zap.Int("clusterID", req.ClusterID), + zap.Error(err)) + return fmt.Errorf("从YAML构建DaemonSet失败: %w", err) } // 验证DaemonSet配置 @@ -143,17 +146,18 @@ func (s *daemonSetService) CreateDaemonSetByYaml(ctx context.Context, req *model return fmt.Errorf("daemonSet配置验证失败: %w", err) } + // 使用现有的创建方法 err = s.daemonSetManager.CreateDaemonSet(ctx, req.ClusterID, daemonSet.Namespace, daemonSet) if err != nil { - s.logger.Error("CreateDaemonSetByYaml: 创建DaemonSet失败", - zap.Error(err), + s.logger.Error("通过YAML创建DaemonSet失败", zap.Int("clusterID", req.ClusterID), zap.String("namespace", daemonSet.Namespace), - zap.String("name", daemonSet.Name)) - return fmt.Errorf("创建DaemonSet失败: %w", err) + zap.String("name", daemonSet.Name), + zap.Error(err)) + return fmt.Errorf("通过YAML创建DaemonSet失败: %w", err) } - s.logger.Info("CreateDaemonSetByYaml: 成功通过YAML创建DaemonSet", + s.logger.Info("通过YAML创建DaemonSet成功", zap.Int("clusterID", req.ClusterID), zap.String("namespace", daemonSet.Namespace), zap.String("name", daemonSet.Name)) @@ -497,57 +501,42 @@ func (s *daemonSetService) UpdateDaemonSetByYaml(ctx context.Context, req *model return fmt.Errorf("YAML内容不能为空") } - // 获取现有的DaemonSet - existingDaemonSet, err := s.daemonSetManager.GetDaemonSet(ctx, req.ClusterID, req.Namespace, req.Name) + s.logger.Info("开始通过YAML更新DaemonSet", + zap.Int("clusterID", req.ClusterID), + zap.String("namespace", req.Namespace), + zap.String("name", req.Name)) + + // 从YAML构建DaemonSet对象 + daemonSet, err := utils.BuildDaemonSetFromYamlForUpdate(req) if err != nil { - s.logger.Error("UpdateDaemonSetByYaml: 获取现有DaemonSet失败", - zap.Error(err), + s.logger.Error("从YAML构建DaemonSet失败", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), - zap.String("name", req.Name)) - return fmt.Errorf("获取现有DaemonSet失败: %w", err) - } - - // 解析YAML为DaemonSet对象 - yamlDaemonSet, err := utils.YAMLToDaemonSet(req.YAML) - if err != nil { - s.logger.Error("UpdateDaemonSetByYaml: 解析YAML失败", - zap.Error(err), - zap.String("name", req.Name)) - return fmt.Errorf("解析YAML失败: %w", err) - } - - // 保留现有的资源版本和其他元数据 - updatedDaemonSet := existingDaemonSet.DeepCopy() - updatedDaemonSet.Spec = yamlDaemonSet.Spec - - // 更新标签和注解(如果YAML中有的话) - if yamlDaemonSet.Labels != nil { - updatedDaemonSet.Labels = yamlDaemonSet.Labels - } - if yamlDaemonSet.Annotations != nil { - updatedDaemonSet.Annotations = yamlDaemonSet.Annotations + zap.String("name", req.Name), + zap.Error(err)) + return fmt.Errorf("从YAML构建DaemonSet失败: %w", err) } // 验证更新后的DaemonSet配置 - if err := utils.ValidateDaemonSet(updatedDaemonSet); err != nil { + if err := utils.ValidateDaemonSet(daemonSet); err != nil { s.logger.Error("UpdateDaemonSetByYaml: DaemonSet配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("daemonSet配置验证失败: %w", err) } - err = s.daemonSetManager.UpdateDaemonSet(ctx, req.ClusterID, req.Namespace, updatedDaemonSet) + // 使用现有的更新方法 + err = s.daemonSetManager.UpdateDaemonSet(ctx, req.ClusterID, req.Namespace, daemonSet) if err != nil { - s.logger.Error("UpdateDaemonSetByYaml: 更新DaemonSet失败", - zap.Error(err), + s.logger.Error("通过YAML更新DaemonSet失败", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), - zap.String("name", req.Name)) - return fmt.Errorf("更新DaemonSet失败: %w", err) + zap.String("name", req.Name), + zap.Error(err)) + return fmt.Errorf("通过YAML更新DaemonSet失败: %w", err) } - s.logger.Info("UpdateDaemonSetByYaml: 成功通过YAML更新DaemonSet", + s.logger.Info("通过YAML更新DaemonSet成功", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), zap.String("name", req.Name)) @@ -607,8 +596,30 @@ func (s *daemonSetService) UpdateDaemonSet(ctx context.Context, req *model.Updat } } if req.Labels != nil { - updatedDaemonSet.Labels = req.Labels - updatedDaemonSet.Spec.Template.Labels = req.Labels + // 合并标签到对象级别 + if updatedDaemonSet.Labels == nil { + updatedDaemonSet.Labels = make(map[string]string) + } + for k, v := range req.Labels { + updatedDaemonSet.Labels[k] = v + } + + // 更新 template labels,确保包含 selector 中的所有必需标签 + if updatedDaemonSet.Spec.Template.Labels == nil { + updatedDaemonSet.Spec.Template.Labels = make(map[string]string) + } + + // 先添加用户指定的标签 + for k, v := range req.Labels { + updatedDaemonSet.Spec.Template.Labels[k] = v + } + + // 然后强制保留 selector 的标签(selector 是不可变的,必须匹配) + if updatedDaemonSet.Spec.Selector != nil && updatedDaemonSet.Spec.Selector.MatchLabels != nil { + for k, v := range updatedDaemonSet.Spec.Selector.MatchLabels { + updatedDaemonSet.Spec.Template.Labels[k] = v + } + } } if req.Annotations != nil { updatedDaemonSet.Annotations = req.Annotations diff --git a/internal/k8s/service/deployment_service.go b/internal/k8s/service/deployment_service.go index 0e830608..b95b32af 100644 --- a/internal/k8s/service/deployment_service.go +++ b/internal/k8s/service/deployment_service.go @@ -501,8 +501,8 @@ func (s *deploymentService) UpdateDeployment(ctx context.Context, req *model.Upd updatedDeployment := existingDeployment.DeepCopy() // 更新基本字段 - if req.Replicas > 0 { - updatedDeployment.Spec.Replicas = &req.Replicas + if req.Replicas != nil { + updatedDeployment.Spec.Replicas = req.Replicas } if len(req.Images) > 0 { for i, image := range req.Images { @@ -512,8 +512,30 @@ func (s *deploymentService) UpdateDeployment(ctx context.Context, req *model.Upd } } if req.Labels != nil { - updatedDeployment.Labels = req.Labels - updatedDeployment.Spec.Template.Labels = req.Labels + // 合并标签到对象级别 + if updatedDeployment.Labels == nil { + updatedDeployment.Labels = make(map[string]string) + } + for k, v := range req.Labels { + updatedDeployment.Labels[k] = v + } + + // 更新 template labels,确保包含 selector 中的所有必需标签 + if updatedDeployment.Spec.Template.Labels == nil { + updatedDeployment.Spec.Template.Labels = make(map[string]string) + } + + // 先添加用户指定的标签 + for k, v := range req.Labels { + updatedDeployment.Spec.Template.Labels[k] = v + } + + // 然后强制保留 selector 的标签(selector 是不可变的,必须匹配) + if updatedDeployment.Spec.Selector != nil && updatedDeployment.Spec.Selector.MatchLabels != nil { + for k, v := range updatedDeployment.Spec.Selector.MatchLabels { + updatedDeployment.Spec.Template.Labels[k] = v + } + } } if req.Annotations != nil { updatedDeployment.Annotations = req.Annotations diff --git a/internal/k8s/service/statefulset_service.go b/internal/k8s/service/statefulset_service.go index fa5e6263..94584662 100644 --- a/internal/k8s/service/statefulset_service.go +++ b/internal/k8s/service/statefulset_service.go @@ -131,12 +131,16 @@ func (s *statefulSetService) CreateStatefulSetByYaml(ctx context.Context, req *m return fmt.Errorf("YAML内容不能为空") } - // 解析YAML为StatefulSet对象 - statefulSet, err := utils.YAMLToStatefulSet(req.YAML) + s.logger.Info("开始通过YAML创建StatefulSet", + zap.Int("clusterID", req.ClusterID)) + + // 从YAML构建StatefulSet对象 + statefulSet, err := utils.BuildStatefulSetFromYaml(req) if err != nil { - s.logger.Error("CreateStatefulSetByYaml: 解析YAML失败", + s.logger.Error("从YAML构建StatefulSet失败", + zap.Int("clusterID", req.ClusterID), zap.Error(err)) - return fmt.Errorf("解析YAML失败: %w", err) + return fmt.Errorf("从YAML构建StatefulSet失败: %w", err) } // 验证StatefulSet配置 @@ -147,16 +151,22 @@ func (s *statefulSetService) CreateStatefulSetByYaml(ctx context.Context, req *m return fmt.Errorf("statefulSet配置验证失败: %w", err) } + // 使用现有的创建方法 err = s.statefulSetManager.CreateStatefulSet(ctx, req.ClusterID, statefulSet.Namespace, statefulSet) if err != nil { - s.logger.Error("CreateStatefulSetByYaml: 创建StatefulSet失败", - zap.Error(err), + s.logger.Error("通过YAML创建StatefulSet失败", zap.Int("clusterID", req.ClusterID), zap.String("namespace", statefulSet.Namespace), - zap.String("name", statefulSet.Name)) - return fmt.Errorf("创建StatefulSet失败: %w", err) + zap.String("name", statefulSet.Name), + zap.Error(err)) + return fmt.Errorf("通过YAML创建StatefulSet失败: %w", err) } + s.logger.Info("通过YAML创建StatefulSet成功", + zap.Int("clusterID", req.ClusterID), + zap.String("namespace", statefulSet.Namespace), + zap.String("name", statefulSet.Name)) + return nil } @@ -534,47 +544,45 @@ func (s *statefulSetService) UpdateStatefulSetByYaml(ctx context.Context, req *m return fmt.Errorf("YAML内容不能为空") } - // 解析YAML为StatefulSet对象 - yamlStatefulSet, err := utils.YAMLToStatefulSet(req.YAML) + s.logger.Info("开始通过YAML更新StatefulSet", + zap.Int("clusterID", req.ClusterID), + zap.String("namespace", req.Namespace), + zap.String("name", req.Name)) + + // 从YAML构建StatefulSet对象 + statefulSet, err := utils.BuildStatefulSetFromYamlForUpdate(req) if err != nil { - s.logger.Error("UpdateStatefulSetByYaml: 解析YAML失败", - zap.Error(err), - zap.String("name", req.Name)) - return fmt.Errorf("解析YAML失败: %w", err) + s.logger.Error("从YAML构建StatefulSet失败", + zap.Int("clusterID", req.ClusterID), + zap.String("namespace", req.Namespace), + zap.String("name", req.Name), + zap.Error(err)) + return fmt.Errorf("从YAML构建StatefulSet失败: %w", err) } // 验证StatefulSet配置 - if err := utils.ValidateStatefulSet(yamlStatefulSet); err != nil { + if err := utils.ValidateStatefulSet(statefulSet); err != nil { s.logger.Error("UpdateStatefulSetByYaml: StatefulSet配置验证失败", zap.Error(err), zap.String("name", req.Name)) return fmt.Errorf("statefulSet配置验证失败: %w", err) } - // 获取现有StatefulSet以保持资源版本等元数据 - existingStatefulSet, err := s.statefulSetManager.GetStatefulSet(ctx, req.ClusterID, req.Namespace, req.Name) + // 使用现有的更新方法 + err = s.statefulSetManager.UpdateStatefulSet(ctx, req.ClusterID, req.Namespace, statefulSet) if err != nil { - s.logger.Error("UpdateStatefulSetByYaml: 获取现有StatefulSet失败", - zap.Error(err), + s.logger.Error("通过YAML更新StatefulSet失败", zap.Int("clusterID", req.ClusterID), zap.String("namespace", req.Namespace), - zap.String("name", req.Name)) - return fmt.Errorf("获取现有StatefulSet失败: %w", err) + zap.String("name", req.Name), + zap.Error(err)) + return fmt.Errorf("通过YAML更新StatefulSet失败: %w", err) } - // 保留必要的元数据并更新spec - yamlStatefulSet.ObjectMeta.ResourceVersion = existingStatefulSet.ObjectMeta.ResourceVersion - yamlStatefulSet.ObjectMeta.UID = existingStatefulSet.ObjectMeta.UID - - err = s.statefulSetManager.UpdateStatefulSet(ctx, req.ClusterID, req.Namespace, yamlStatefulSet) - if err != nil { - s.logger.Error("UpdateStatefulSetByYaml: 更新StatefulSet失败", - zap.Error(err), - zap.Int("clusterID", req.ClusterID), - zap.String("namespace", req.Namespace), - zap.String("name", req.Name)) - return fmt.Errorf("更新StatefulSet失败: %w", err) - } + s.logger.Info("通过YAML更新StatefulSet成功", + zap.Int("clusterID", req.ClusterID), + zap.String("namespace", req.Namespace), + zap.String("name", req.Name)) return nil } @@ -623,8 +631,8 @@ func (s *statefulSetService) UpdateStatefulSet(ctx context.Context, req *model.U updatedStatefulSet.Annotations = yamlStatefulSet.Annotations } else { // 更新基本字段 - if req.Replicas > 0 { - updatedStatefulSet.Spec.Replicas = &req.Replicas + if req.Replicas != nil { + updatedStatefulSet.Spec.Replicas = req.Replicas } if len(req.Images) > 0 { for i, image := range req.Images { @@ -634,8 +642,30 @@ func (s *statefulSetService) UpdateStatefulSet(ctx context.Context, req *model.U } } if req.Labels != nil { - updatedStatefulSet.Labels = req.Labels - updatedStatefulSet.Spec.Template.Labels = req.Labels + // 合并标签到对象级别 + if updatedStatefulSet.Labels == nil { + updatedStatefulSet.Labels = make(map[string]string) + } + for k, v := range req.Labels { + updatedStatefulSet.Labels[k] = v + } + + // 更新 template labels,确保包含 selector 中的所有必需标签 + if updatedStatefulSet.Spec.Template.Labels == nil { + updatedStatefulSet.Spec.Template.Labels = make(map[string]string) + } + + // 先添加用户指定的标签 + for k, v := range req.Labels { + updatedStatefulSet.Spec.Template.Labels[k] = v + } + + // 然后强制保留 selector 的标签(selector 是不可变的,必须匹配) + if updatedStatefulSet.Spec.Selector != nil && updatedStatefulSet.Spec.Selector.MatchLabels != nil { + for k, v := range updatedStatefulSet.Spec.Selector.MatchLabels { + updatedStatefulSet.Spec.Template.Labels[k] = v + } + } } if req.Annotations != nil { updatedStatefulSet.Annotations = req.Annotations diff --git a/internal/k8s/utils/daemonset.go b/internal/k8s/utils/daemonset.go index 6f7a4ddf..6d7c1548 100644 --- a/internal/k8s/utils/daemonset.go +++ b/internal/k8s/utils/daemonset.go @@ -27,9 +27,11 @@ package utils import ( "context" + "encoding/json" "fmt" "sort" "strings" + "time" "github.com/GoSimplicity/AI-CloudOps/internal/model" appsv1 "k8s.io/api/apps/v1" @@ -44,28 +46,23 @@ func BuildK8sDaemonSet(ctx context.Context, clusterID int, daemonSet appsv1.Daem return nil, fmt.Errorf("无效的集群ID: %d", clusterID) } - // 获取DaemonSet状态 status := getDaemonSetStatus(daemonSet) - // 获取更新策略信息 updateStrategy := "RollingUpdate" if daemonSet.Spec.UpdateStrategy.Type == appsv1.OnDeleteDaemonSetStrategyType { updateStrategy = "OnDelete" } - // 获取容器镜像列表 var images []string for _, container := range daemonSet.Spec.Template.Spec.Containers { images = append(images, container.Image) } - // 构建标签选择器 selector := make(map[string]string) if daemonSet.Spec.Selector != nil && daemonSet.Spec.Selector.MatchLabels != nil { selector = daemonSet.Spec.Selector.MatchLabels } - // 构建Conditions var conditions []model.DaemonSetCondition for _, condition := range daemonSet.Status.Conditions { dsCondition := model.DaemonSetCondition{ @@ -79,13 +76,11 @@ func BuildK8sDaemonSet(ctx context.Context, clusterID int, daemonSet appsv1.Daem conditions = append(conditions, dsCondition) } - // 设置历史版本限制 - revisionHistoryLimit := int32(10) // 默认值 + revisionHistoryLimit := int32(10) if daemonSet.Spec.RevisionHistoryLimit != nil { revisionHistoryLimit = *daemonSet.Spec.RevisionHistoryLimit } - // 构建基础DaemonSet信息 k8sDaemonSet := &model.K8sDaemonSet{ Name: daemonSet.Name, Namespace: daemonSet.Namespace, @@ -94,7 +89,7 @@ func BuildK8sDaemonSet(ctx context.Context, clusterID int, daemonSet appsv1.Daem Labels: daemonSet.Labels, Annotations: daemonSet.Annotations, CreatedAt: daemonSet.CreationTimestamp.Time, - UpdatedAt: daemonSet.CreationTimestamp.Time, + UpdatedAt: time.Now(), Status: status, DesiredNumberScheduled: daemonSet.Status.DesiredNumberScheduled, CurrentNumberScheduled: daemonSet.Status.CurrentNumberScheduled, @@ -121,16 +116,16 @@ func getDaemonSetStatus(daemonSet appsv1.DaemonSet) model.K8sDaemonSetStatus { available := daemonSet.Status.NumberAvailable unavailable := daemonSet.Status.NumberUnavailable - if unavailable > 0 { - return model.K8sDaemonSetStatusUpdating + if ready == desired && available == desired && desired > 0 { + return model.K8sDaemonSetStatusRunning } - if ready == desired && available == desired { - return model.K8sDaemonSetStatusRunning + if unavailable > 0 || ready < desired { + return model.K8sDaemonSetStatusUpdating } - if ready == 0 { - return model.K8sDaemonSetStatusError + if ready == 0 && desired == 0 { + return model.K8sDaemonSetStatusRunning } return model.K8sDaemonSetStatusError @@ -258,10 +253,7 @@ func ValidateDaemonSet(daemonSet *appsv1.DaemonSet) error { // BuildDaemonSetListOptions 构建DaemonSet列表查询选项 func BuildDaemonSetListOptions(req *model.GetDaemonSetListReq) metav1.ListOptions { - listOptions := metav1.ListOptions{} - - // 基础查询选项,可以根据需要扩展 - return listOptions + return metav1.ListOptions{} } // PaginateK8sDaemonSets 对DaemonSet列表进行分页 @@ -294,13 +286,11 @@ func BuildK8sDaemonSetHistory(revision appsv1.ControllerRevision) (*model.K8sDae return &model.K8sDaemonSetHistory{ Revision: revision.Revision, Date: revision.CreationTimestamp.Time, - Message: getChangeReason(revision.Annotations), + Message: GetChangeReason(revision.Annotations), }, nil } -// ExtractDaemonSetFromRevision 从ControllerRevision中提取DaemonSet模板 -// 注意:DaemonSet回滚相比Deployment更复杂,因为Kubernetes没有内置的DaemonSet回滚API -// 这个函数提供基础框架,在实际使用中需要根据具体需求实现反序列化逻辑 +// ExtractDaemonSetFromRevision 从ControllerRevision提取DaemonSet配置用于回滚 func ExtractDaemonSetFromRevision(revision *appsv1.ControllerRevision, daemonSet *appsv1.DaemonSet) error { if revision == nil { return fmt.Errorf("ControllerRevision不能为空") @@ -310,34 +300,52 @@ func ExtractDaemonSetFromRevision(revision *appsv1.ControllerRevision, daemonSet return fmt.Errorf("DaemonSet对象不能为空") } - // 简化实现:ControllerRevision的Data包含序列化的对象数据 - // 对于DaemonSet,通常需要从ControllerRevision.Data中反序列化DaemonSetSpec - if revision.Data.Raw == nil { + if len(revision.Data.Raw) == 0 { return fmt.Errorf("ControllerRevision数据为空") } - // DaemonSet回滚说明: - // 1. DaemonSet不像Deployment有内置回滚功能 - // 2. 通常通过重新应用历史版本的配置来实现 - // 3. 实际项目中可以通过kubectl rollout undo daemonset/ --to-revision= + var revisionDaemonSet appsv1.DaemonSet + if err := json.Unmarshal(revision.Data.Raw, &revisionDaemonSet); err != nil { + var patchData map[string]interface{} + if err := json.Unmarshal(revision.Data.Raw, &patchData); err != nil { + return fmt.Errorf("反序列化数据失败: %w", err) + } + + if spec, ok := patchData["spec"]; ok { + specBytes, err := json.Marshal(spec) + if err != nil { + return fmt.Errorf("序列化spec失败: %w", err) + } + + var daemonSetSpec appsv1.DaemonSetSpec + if err := json.Unmarshal(specBytes, &daemonSetSpec); err != nil { + return fmt.Errorf("反序列化spec失败: %w", err) + } - d := daemonSet - _ = d // 避免未使用变量警告 + daemonSet.Spec = daemonSetSpec + return nil + } - // 这里可以添加具体的JSON反序列化逻辑 - // 例如:json.Unmarshal(revision.Data.Raw, &daemonSetSpec) - // 然后将spec应用到传入的daemonSet对象 + return fmt.Errorf("无法提取DaemonSet配置") + } + + daemonSet.Spec = revisionDaemonSet.Spec + if revisionDaemonSet.Labels != nil { + daemonSet.Labels = revisionDaemonSet.Labels + } + if revisionDaemonSet.Annotations != nil { + daemonSet.Annotations = revisionDaemonSet.Annotations + } - return fmt.Errorf("DaemonSet回滚功能需要实现具体的反序列化逻辑") + return nil } -// getChangeReason 获取变更原因 -func getChangeReason(annotations map[string]string) string { +// GetChangeReason 从annotations中获取变更原因 +func GetChangeReason(annotations map[string]string) string { if annotations == nil { return "" } - // 常见的变更原因注解 changeReasonKeys := []string{ "deployment.kubernetes.io/revision-change-cause", "kubernetes.io/change-cause", @@ -393,4 +401,128 @@ func getDaemonSetStatusString(status model.K8sDaemonSetStatus) string { } } -// GetDaemonSetResourceUsage 计算DaemonSet资源使用情况 +// BuildDaemonSetFromYaml 从YAML构建DaemonSet对象 +func BuildDaemonSetFromYaml(req *model.CreateDaemonSetByYamlReq) (*appsv1.DaemonSet, error) { + if req == nil { + return nil, fmt.Errorf("请求不能为空") + } + + if req.YAML == "" { + return nil, fmt.Errorf("YAML内容不能为空") + } + + daemonSet, err := YAMLToDaemonSet(req.YAML) + if err != nil { + return nil, err + } + + if daemonSet.Namespace == "" { + daemonSet.Namespace = "default" + } + + if daemonSet.Name == "" { + return nil, fmt.Errorf("YAML中必须指定name") + } + + return daemonSet, nil +} + +// BuildDaemonSetFromYamlForUpdate 构建用于更新的DaemonSet对象 +func BuildDaemonSetFromYamlForUpdate(req *model.UpdateDaemonSetByYamlReq) (*appsv1.DaemonSet, error) { + if req == nil { + return nil, fmt.Errorf("请求不能为空") + } + + if req.YAML == "" { + return nil, fmt.Errorf("YAML内容不能为空") + } + + daemonSet, err := YAMLToDaemonSet(req.YAML) + if err != nil { + return nil, err + } + + if daemonSet.Namespace != "" && daemonSet.Namespace != req.Namespace { + return nil, fmt.Errorf("YAML中的namespace与请求参数不一致") + } + + if daemonSet.Name != "" && daemonSet.Name != req.Name { + return nil, fmt.Errorf("YAML中的name与请求参数不一致") + } + + if daemonSet.Namespace == "" { + daemonSet.Namespace = req.Namespace + } + + if daemonSet.Name == "" { + daemonSet.Name = req.Name + } + + return daemonSet, nil +} + +// ConvertToK8sDaemonSet 将 appsv1.DaemonSet 转换为 model.K8sDaemonSet +func ConvertToK8sDaemonSet(daemonSet *appsv1.DaemonSet) *model.K8sDaemonSet { + if daemonSet == nil { + return nil + } + + status := getDaemonSetStatus(*daemonSet) + + updateStrategy := "RollingUpdate" + if daemonSet.Spec.UpdateStrategy.Type == appsv1.OnDeleteDaemonSetStrategyType { + updateStrategy = "OnDelete" + } + + var images []string + for _, container := range daemonSet.Spec.Template.Spec.Containers { + images = append(images, container.Image) + } + + selector := make(map[string]string) + if daemonSet.Spec.Selector != nil && daemonSet.Spec.Selector.MatchLabels != nil { + selector = daemonSet.Spec.Selector.MatchLabels + } + + var conditions []model.DaemonSetCondition + for _, condition := range daemonSet.Status.Conditions { + dsCondition := model.DaemonSetCondition{ + Type: string(condition.Type), + Status: string(condition.Status), + LastUpdateTime: condition.LastTransitionTime.Time, + LastTransitionTime: condition.LastTransitionTime.Time, + Reason: condition.Reason, + Message: condition.Message, + } + conditions = append(conditions, dsCondition) + } + + revisionHistoryLimit := int32(10) + if daemonSet.Spec.RevisionHistoryLimit != nil { + revisionHistoryLimit = *daemonSet.Spec.RevisionHistoryLimit + } + + return &model.K8sDaemonSet{ + Name: daemonSet.Name, + Namespace: daemonSet.Namespace, + UID: string(daemonSet.UID), + Labels: daemonSet.Labels, + Annotations: daemonSet.Annotations, + CreatedAt: daemonSet.CreationTimestamp.Time, + UpdatedAt: time.Now(), + Status: status, + DesiredNumberScheduled: daemonSet.Status.DesiredNumberScheduled, + CurrentNumberScheduled: daemonSet.Status.CurrentNumberScheduled, + NumberReady: daemonSet.Status.NumberReady, + NumberAvailable: daemonSet.Status.NumberAvailable, + NumberUnavailable: daemonSet.Status.NumberUnavailable, + UpdatedNumberScheduled: daemonSet.Status.UpdatedNumberScheduled, + NumberMisscheduled: daemonSet.Status.NumberMisscheduled, + Images: images, + Selector: selector, + UpdateStrategy: updateStrategy, + RevisionHistoryLimit: revisionHistoryLimit, + Conditions: conditions, + RawDaemonSet: daemonSet, + } +} diff --git a/internal/k8s/utils/statefulset.go b/internal/k8s/utils/statefulset.go index f5e45ad9..07d6cab4 100644 --- a/internal/k8s/utils/statefulset.go +++ b/internal/k8s/utils/statefulset.go @@ -27,9 +27,11 @@ package utils import ( "context" + "encoding/json" "fmt" "sort" "strings" + "time" "github.com/GoSimplicity/AI-CloudOps/internal/model" appsv1 "k8s.io/api/apps/v1" @@ -44,60 +46,74 @@ func BuildK8sStatefulSet(ctx context.Context, clusterID int, statefulSet appsv1. return nil, fmt.Errorf("无效的集群ID: %d", clusterID) } - // 获取StatefulSet状态 status := getStatefulSetStatus(statefulSet) - // 获取更新策略信息 updateStrategy := "RollingUpdate" - if statefulSet.Spec.UpdateStrategy.Type == appsv1.OnDeleteStatefulSetStrategyType { updateStrategy = "OnDelete" } - // 获取容器镜像列表 + podManagementPolicy := string(appsv1.OrderedReadyPodManagement) + if statefulSet.Spec.PodManagementPolicy != "" { + podManagementPolicy = string(statefulSet.Spec.PodManagementPolicy) + } + var images []string for _, container := range statefulSet.Spec.Template.Spec.Containers { images = append(images, container.Image) } - // 构建标签选择器 selector := make(map[string]string) if statefulSet.Spec.Selector != nil && statefulSet.Spec.Selector.MatchLabels != nil { selector = statefulSet.Spec.Selector.MatchLabels } - // 获取持久卷声明模板 - var volumeClaimTemplates []string - for _, pvc := range statefulSet.Spec.VolumeClaimTemplates { - volumeClaimTemplates = append(volumeClaimTemplates, pvc.Name) + var conditions []model.StatefulSetCondition + for _, condition := range statefulSet.Status.Conditions { + stsCondition := model.StatefulSetCondition{ + Type: string(condition.Type), + Status: string(condition.Status), + LastUpdateTime: condition.LastTransitionTime.Time, + LastTransitionTime: condition.LastTransitionTime.Time, + Reason: condition.Reason, + Message: condition.Message, + } + conditions = append(conditions, stsCondition) + } + + revisionHistoryLimit := int32(10) + if statefulSet.Spec.RevisionHistoryLimit != nil { + revisionHistoryLimit = *statefulSet.Spec.RevisionHistoryLimit } - // 构建基础StatefulSet信息 replicas := int32(0) if statefulSet.Spec.Replicas != nil { replicas = *statefulSet.Spec.Replicas } k8sStatefulSet := &model.K8sStatefulSet{ - Name: statefulSet.Name, - Namespace: statefulSet.Namespace, - ClusterID: clusterID, - UID: string(statefulSet.UID), - Labels: statefulSet.Labels, - Annotations: statefulSet.Annotations, - CreatedAt: statefulSet.CreationTimestamp.Time, - Status: status, - Replicas: replicas, - ReadyReplicas: statefulSet.Status.ReadyReplicas, - CurrentReplicas: statefulSet.Status.CurrentReplicas, - UpdatedReplicas: statefulSet.Status.UpdatedReplicas, - Images: images, - Selector: selector, - ServiceName: statefulSet.Spec.ServiceName, - UpdateStrategy: updateStrategy, - } - - // 设置条件状态已在模型中处理 + Name: statefulSet.Name, + Namespace: statefulSet.Namespace, + ClusterID: clusterID, + UID: string(statefulSet.UID), + Labels: statefulSet.Labels, + Annotations: statefulSet.Annotations, + CreatedAt: statefulSet.CreationTimestamp.Time, + UpdatedAt: time.Now(), + Status: status, + Replicas: replicas, + ReadyReplicas: statefulSet.Status.ReadyReplicas, + CurrentReplicas: statefulSet.Status.CurrentReplicas, + UpdatedReplicas: statefulSet.Status.UpdatedReplicas, + Images: images, + Selector: selector, + ServiceName: statefulSet.Spec.ServiceName, + UpdateStrategy: updateStrategy, + PodManagementPolicy: podManagementPolicy, + RevisionHistoryLimit: revisionHistoryLimit, + Conditions: conditions, + RawStatefulSet: &statefulSet, + } return k8sStatefulSet, nil } @@ -257,10 +273,7 @@ func ValidateStatefulSet(statefulSet *appsv1.StatefulSet) error { // BuildStatefulSetListOptions 构建StatefulSet列表查询选项 func BuildStatefulSetListOptions(req *model.GetStatefulSetListReq) metav1.ListOptions { - listOptions := metav1.ListOptions{} - - // 基础查询选项,可以根据需要扩展 - return listOptions + return metav1.ListOptions{} } // PaginateK8sStatefulSets 对StatefulSet列表进行分页 @@ -293,11 +306,11 @@ func BuildK8sStatefulSetHistory(revision appsv1.ControllerRevision) (*model.K8sS return &model.K8sStatefulSetHistory{ Revision: revision.Revision, Date: revision.CreationTimestamp.Time, - Message: getChangeReason(revision.Annotations), + Message: GetChangeReason(revision.Annotations), }, nil } -// ExtractStatefulSetFromRevision 从ControllerRevision中提取StatefulSet模板 +// ExtractStatefulSetFromRevision 从ControllerRevision提取StatefulSet配置用于回滚 func ExtractStatefulSetFromRevision(revision *appsv1.ControllerRevision, statefulSet *appsv1.StatefulSet) error { if revision == nil { return fmt.Errorf("ControllerRevision不能为空") @@ -307,14 +320,42 @@ func ExtractStatefulSetFromRevision(revision *appsv1.ControllerRevision, statefu return fmt.Errorf("StatefulSet对象不能为空") } - // 简化实现,实际上ControllerRevision的Data包含序列化的对象数据 - // 这里可以根据需要实现具体的反序列化逻辑 - if revision.Data.Raw == nil { + if len(revision.Data.Raw) == 0 { return fmt.Errorf("ControllerRevision数据为空") } - // 这里可以添加具体的反序列化逻辑 - // 暂时返回成功,实际使用中需要实现具体的反序列化 + var revisionStatefulSet appsv1.StatefulSet + if err := json.Unmarshal(revision.Data.Raw, &revisionStatefulSet); err != nil { + var patchData map[string]interface{} + if err := json.Unmarshal(revision.Data.Raw, &patchData); err != nil { + return fmt.Errorf("反序列化数据失败: %w", err) + } + + if spec, ok := patchData["spec"]; ok { + specBytes, err := json.Marshal(spec) + if err != nil { + return fmt.Errorf("序列化spec失败: %w", err) + } + + var statefulSetSpec appsv1.StatefulSetSpec + if err := json.Unmarshal(specBytes, &statefulSetSpec); err != nil { + return fmt.Errorf("反序列化spec失败: %w", err) + } + + statefulSet.Spec = statefulSetSpec + return nil + } + + return fmt.Errorf("无法提取StatefulSet配置") + } + + statefulSet.Spec = revisionStatefulSet.Spec + if revisionStatefulSet.Labels != nil { + statefulSet.Labels = revisionStatefulSet.Labels + } + if revisionStatefulSet.Annotations != nil { + statefulSet.Annotations = revisionStatefulSet.Annotations + } return nil } @@ -362,4 +403,137 @@ func getStatefulSetStatusString(status model.K8sStatefulSetStatus) string { } } -// GetStatefulSetResourceUsage 计算StatefulSet资源使用情况 +// BuildStatefulSetFromYaml 从YAML构建StatefulSet对象 +func BuildStatefulSetFromYaml(req *model.CreateStatefulSetByYamlReq) (*appsv1.StatefulSet, error) { + if req == nil { + return nil, fmt.Errorf("请求不能为空") + } + + if req.YAML == "" { + return nil, fmt.Errorf("YAML内容不能为空") + } + + statefulSet, err := YAMLToStatefulSet(req.YAML) + if err != nil { + return nil, err + } + + if statefulSet.Namespace == "" { + statefulSet.Namespace = "default" + } + + if statefulSet.Name == "" { + return nil, fmt.Errorf("YAML中必须指定name") + } + + return statefulSet, nil +} + +// BuildStatefulSetFromYamlForUpdate 构建用于更新的StatefulSet对象 +func BuildStatefulSetFromYamlForUpdate(req *model.UpdateStatefulSetByYamlReq) (*appsv1.StatefulSet, error) { + if req == nil { + return nil, fmt.Errorf("请求不能为空") + } + + if req.YAML == "" { + return nil, fmt.Errorf("YAML内容不能为空") + } + + statefulSet, err := YAMLToStatefulSet(req.YAML) + if err != nil { + return nil, err + } + + if statefulSet.Namespace != "" && statefulSet.Namespace != req.Namespace { + return nil, fmt.Errorf("YAML中的namespace与请求参数不一致") + } + + if statefulSet.Name != "" && statefulSet.Name != req.Name { + return nil, fmt.Errorf("YAML中的name与请求参数不一致") + } + + if statefulSet.Namespace == "" { + statefulSet.Namespace = req.Namespace + } + + if statefulSet.Name == "" { + statefulSet.Name = req.Name + } + + return statefulSet, nil +} + +// ConvertToK8sStatefulSet 将 appsv1.StatefulSet 转换为 model.K8sStatefulSet +func ConvertToK8sStatefulSet(statefulSet *appsv1.StatefulSet) *model.K8sStatefulSet { + if statefulSet == nil { + return nil + } + + status := getStatefulSetStatus(*statefulSet) + + updateStrategy := "RollingUpdate" + if statefulSet.Spec.UpdateStrategy.Type == appsv1.OnDeleteStatefulSetStrategyType { + updateStrategy = "OnDelete" + } + + podManagementPolicy := string(appsv1.OrderedReadyPodManagement) + if statefulSet.Spec.PodManagementPolicy != "" { + podManagementPolicy = string(statefulSet.Spec.PodManagementPolicy) + } + + var images []string + for _, container := range statefulSet.Spec.Template.Spec.Containers { + images = append(images, container.Image) + } + + selector := make(map[string]string) + if statefulSet.Spec.Selector != nil && statefulSet.Spec.Selector.MatchLabels != nil { + selector = statefulSet.Spec.Selector.MatchLabels + } + + var conditions []model.StatefulSetCondition + for _, condition := range statefulSet.Status.Conditions { + stsCondition := model.StatefulSetCondition{ + Type: string(condition.Type), + Status: string(condition.Status), + LastUpdateTime: condition.LastTransitionTime.Time, + LastTransitionTime: condition.LastTransitionTime.Time, + Reason: condition.Reason, + Message: condition.Message, + } + conditions = append(conditions, stsCondition) + } + + revisionHistoryLimit := int32(10) + if statefulSet.Spec.RevisionHistoryLimit != nil { + revisionHistoryLimit = *statefulSet.Spec.RevisionHistoryLimit + } + + replicas := int32(0) + if statefulSet.Spec.Replicas != nil { + replicas = *statefulSet.Spec.Replicas + } + + return &model.K8sStatefulSet{ + Name: statefulSet.Name, + Namespace: statefulSet.Namespace, + UID: string(statefulSet.UID), + Labels: statefulSet.Labels, + Annotations: statefulSet.Annotations, + CreatedAt: statefulSet.CreationTimestamp.Time, + UpdatedAt: time.Now(), + Status: status, + Replicas: replicas, + ReadyReplicas: statefulSet.Status.ReadyReplicas, + CurrentReplicas: statefulSet.Status.CurrentReplicas, + UpdatedReplicas: statefulSet.Status.UpdatedReplicas, + Images: images, + Selector: selector, + ServiceName: statefulSet.Spec.ServiceName, + UpdateStrategy: updateStrategy, + PodManagementPolicy: podManagementPolicy, + RevisionHistoryLimit: revisionHistoryLimit, + Conditions: conditions, + RawStatefulSet: statefulSet, + } +} diff --git a/internal/model/k8s_deployment.go b/internal/model/k8s_deployment.go index c7da5b0b..94a9d870 100644 --- a/internal/model/k8s_deployment.go +++ b/internal/model/k8s_deployment.go @@ -135,7 +135,7 @@ type UpdateDeploymentReq struct { ClusterID int `json:"cluster_id" form:"cluster_id" binding:"required" comment:"集群ID"` // 集群ID Name string `json:"name" form:"name" binding:"required" comment:"Deployment名称"` // Deployment名称 Namespace string `json:"namespace" form:"namespace" binding:"required" comment:"命名空间"` // 命名空间 - Replicas int32 `json:"replicas" comment:"副本数量"` // 副本数量 + Replicas *int32 `json:"replicas" comment:"副本数量"` // 副本数量 Images []string `json:"images" comment:"容器镜像列表"` // 容器镜像列表 Labels map[string]string `json:"labels" comment:"标签"` // 标签 Annotations map[string]string `json:"annotations" comment:"注解"` // 注解 diff --git a/internal/model/k8s_statefulset.go b/internal/model/k8s_statefulset.go index 532c77f2..ca5012d4 100644 --- a/internal/model/k8s_statefulset.go +++ b/internal/model/k8s_statefulset.go @@ -145,7 +145,7 @@ type UpdateStatefulSetReq struct { ClusterID int `json:"cluster_id"` // 集群ID Name string `json:"name"` // StatefulSet名称 Namespace string `json:"namespace"` // 命名空间 - Replicas int32 `json:"replicas"` // 副本数量 + Replicas *int32 `json:"replicas"` // 副本数量 ServiceName string `json:"service_name"` // 服务名称 Images []string `json:"images"` // 容器镜像列表 Labels map[string]string `json:"labels"` // 标签