From 8a850b90b454fd34b66959201dca09e7cbd49f1a Mon Sep 17 00:00:00 2001 From: Awuqing <3184394176@qq.com> Date: Wed, 1 Apr 2026 00:10:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=AE=A1=E8=AE=A1?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=A1=A5=E5=85=85=E6=93=8D=E4=BD=9C=E8=AF=A6?= =?UTF-8?q?=E6=83=85=20+=20=E7=89=88=E6=9C=AC=E5=8F=B7=E6=B3=A8=E5=85=A5?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 审计日志:所有 handler 的 recordAudit 调用补充有意义的 detail, 包括创建/更新时记录类型、删除时记录 ID、设置变更时记录修改的 key 2. 版本号:Makefile 的 run/build 都通过 ldflags 注入 git 版本号, 开发模式不再显示 "dev" --- server/Makefile | 5 +++-- server/internal/http/backup_record_handler.go | 4 ++-- server/internal/http/backup_task_handler.go | 8 ++++---- server/internal/http/settings_handler.go | 9 ++++++++- server/internal/http/storage_target_handler.go | 6 +++--- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/server/Makefile b/server/Makefile index 5a5fb00..6b372ff 100644 --- a/server/Makefile +++ b/server/Makefile @@ -1,14 +1,15 @@ APP_NAME=backupx BUILD_DIR=./bin +VERSION=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") .PHONY: build run test build: mkdir -p $(BUILD_DIR) - go build -o $(BUILD_DIR)/$(APP_NAME) ./cmd/backupx + go build -trimpath -ldflags "-s -w -X main.version=$(VERSION)" -o $(BUILD_DIR)/$(APP_NAME) ./cmd/backupx run: - go run ./cmd/backupx + go run -ldflags "-X main.version=$(VERSION)" ./cmd/backupx test: go test ./... diff --git a/server/internal/http/backup_record_handler.go b/server/internal/http/backup_record_handler.go index 0f13237..18f3c24 100644 --- a/server/internal/http/backup_record_handler.go +++ b/server/internal/http/backup_record_handler.go @@ -130,7 +130,7 @@ func (h *BackupRecordHandler) Restore(c *gin.Context) { response.Error(c, err) return } - recordAudit(c, h.auditService, "backup_record", "restore", "backup_record", fmt.Sprintf("%d", id), "", "") + recordAudit(c, h.auditService, "backup_record", "restore", "backup_record", fmt.Sprintf("%d", id), "", fmt.Sprintf("恢复备份记录 #%d", id)) response.Success(c, gin.H{"restored": true}) } @@ -143,7 +143,7 @@ func (h *BackupRecordHandler) Delete(c *gin.Context) { response.Error(c, err) return } - recordAudit(c, h.auditService, "backup_record", "delete", "backup_record", fmt.Sprintf("%d", id), "", "") + recordAudit(c, h.auditService, "backup_record", "delete", "backup_record", fmt.Sprintf("%d", id), "", fmt.Sprintf("删除备份记录 #%d", id)) response.Success(c, gin.H{"deleted": true}) } diff --git a/server/internal/http/backup_task_handler.go b/server/internal/http/backup_task_handler.go index 41da780..2534ca8 100644 --- a/server/internal/http/backup_task_handler.go +++ b/server/internal/http/backup_task_handler.go @@ -51,7 +51,7 @@ func (h *BackupTaskHandler) Create(c *gin.Context) { response.Error(c, err) return } - recordAudit(c, h.auditService, "backup_task", "create", "backup_task", fmt.Sprintf("%d", item.ID), item.Name, "") + recordAudit(c, h.auditService, "backup_task", "create", "backup_task", fmt.Sprintf("%d", item.ID), item.Name, fmt.Sprintf("类型: %s", input.Type)) response.Success(c, item) } @@ -70,7 +70,7 @@ func (h *BackupTaskHandler) Update(c *gin.Context) { response.Error(c, err) return } - recordAudit(c, h.auditService, "backup_task", "update", "backup_task", fmt.Sprintf("%d", item.ID), item.Name, "") + recordAudit(c, h.auditService, "backup_task", "update", "backup_task", fmt.Sprintf("%d", item.ID), item.Name, fmt.Sprintf("类型: %s, Cron: %s", input.Type, input.CronExpr)) response.Success(c, item) } @@ -83,7 +83,7 @@ func (h *BackupTaskHandler) Delete(c *gin.Context) { response.Error(c, err) return } - recordAudit(c, h.auditService, "backup_task", "delete", "backup_task", fmt.Sprintf("%d", id), "", "") + recordAudit(c, h.auditService, "backup_task", "delete", "backup_task", fmt.Sprintf("%d", id), "", fmt.Sprintf("删除备份任务 #%d", id)) response.Success(c, gin.H{"deleted": true}) } @@ -115,6 +115,6 @@ func (h *BackupTaskHandler) Toggle(c *gin.Context) { if !enabled { action = "disable" } - recordAudit(c, h.auditService, "backup_task", action, "backup_task", fmt.Sprintf("%d", id), item.Name, "") + recordAudit(c, h.auditService, "backup_task", action, "backup_task", fmt.Sprintf("%d", id), item.Name, fmt.Sprintf("%s 备份任务", action)) response.Success(c, item) } diff --git a/server/internal/http/settings_handler.go b/server/internal/http/settings_handler.go index d52e3ec..ae1f2a7 100644 --- a/server/internal/http/settings_handler.go +++ b/server/internal/http/settings_handler.go @@ -1,6 +1,9 @@ package http import ( + "fmt" + "strings" + "backupx/server/internal/apperror" "backupx/server/internal/service" "backupx/server/pkg/response" @@ -36,6 +39,10 @@ func (h *SettingsHandler) Update(c *gin.Context) { response.Error(c, err) return } - recordAudit(c, h.auditService, "settings", "update", "settings", "", "", "") + keys := make([]string, 0, len(input)) + for k := range input { + keys = append(keys, k) + } + recordAudit(c, h.auditService, "settings", "update", "settings", "", "", fmt.Sprintf("修改设置: %s", strings.Join(keys, ", "))) response.Success(c, settings) } diff --git a/server/internal/http/storage_target_handler.go b/server/internal/http/storage_target_handler.go index 4c1c2b5..3a18c48 100644 --- a/server/internal/http/storage_target_handler.go +++ b/server/internal/http/storage_target_handler.go @@ -65,7 +65,7 @@ func (h *StorageTargetHandler) Create(c *gin.Context) { response.Error(c, err) return } - recordAudit(c, h.auditService, "storage_target", "create", "storage_target", fmt.Sprintf("%d", item.ID), item.Name, "") + recordAudit(c, h.auditService, "storage_target", "create", "storage_target", fmt.Sprintf("%d", item.ID), item.Name, fmt.Sprintf("类型: %s", input.Type)) response.Success(c, item) } @@ -84,7 +84,7 @@ func (h *StorageTargetHandler) Update(c *gin.Context) { response.Error(c, err) return } - recordAudit(c, h.auditService, "storage_target", "update", "storage_target", fmt.Sprintf("%d", item.ID), item.Name, "") + recordAudit(c, h.auditService, "storage_target", "update", "storage_target", fmt.Sprintf("%d", item.ID), item.Name, fmt.Sprintf("类型: %s", input.Type)) response.Success(c, item) } @@ -97,7 +97,7 @@ func (h *StorageTargetHandler) Delete(c *gin.Context) { response.Error(c, err) return } - recordAudit(c, h.auditService, "storage_target", "delete", "storage_target", fmt.Sprintf("%d", id), "", "") + recordAudit(c, h.auditService, "storage_target", "delete", "storage_target", fmt.Sprintf("%d", id), "", fmt.Sprintf("删除存储目标 #%d", id)) response.Success(c, gin.H{"deleted": true}) }