refactor: extract path logic to path.go and run go fmt on codebase

This commit is contained in:
duorameng
2026-05-22 14:52:51 +08:00
parent b6fd889661
commit 4c283a60d5
55 changed files with 409 additions and 420 deletions
+3 -4
View File
@@ -12,8 +12,8 @@ import (
"github.com/engigu/baihu-panel/internal/constant"
"github.com/engigu/baihu-panel/internal/database"
"github.com/engigu/baihu-panel/internal/logger"
"github.com/engigu/baihu-panel/internal/executor"
"github.com/engigu/baihu-panel/internal/logger"
"github.com/engigu/baihu-panel/internal/models"
"github.com/engigu/baihu-panel/internal/services/tasks"
"github.com/engigu/baihu-panel/internal/utils"
@@ -324,7 +324,7 @@ func (s *AgentService) GetTasks(agentID string) []models.AgentTask {
for i, task := range tasksList {
// 加载环境配置
var envVars []string
// 检查全量注入模式
allEnvs := false
if task.Config != "" {
@@ -344,7 +344,7 @@ func (s *AgentService) GetTasks(agentID string) []models.AgentTask {
}
envVarsStr := executor.FormatEnvVars(envVars)
command := string(task.Command)
preCommand := string(task.PreCommand)
postCommand := string(task.PostCommand)
@@ -378,7 +378,6 @@ func (s *AgentService) GetTasks(agentID string) []models.AgentTask {
return result
}
// ReportResult Agent 上报执行结果
func (s *AgentService) ReportResult(result *models.AgentTaskResult) error {
// 获取依赖的服务
+3 -3
View File
@@ -16,9 +16,9 @@ import (
// AgentWSManager WebSocket 连接管理器
type AgentWSManager struct {
connections map[string]*AgentConnection // Agent ID -> 连接对象
ipConnections map[string]int // IP -> 连接数
ipLastAttempt map[string]time.Time // IP -> 最后连接尝试时间
ipFailCount map[string]int // IP -> 连续失败次数
ipConnections map[string]int // IP -> 连接数
ipLastAttempt map[string]time.Time // IP -> 最后连接尝试时间
ipFailCount map[string]int // IP -> 连续失败次数
remoteWaiters map[string]chan *models.AgentTaskResult // 日志 ID -> 结果通道
mu sync.RWMutex
}
-1
View File
@@ -372,7 +372,6 @@ func (s *BackupService) restoreScriptsDir(r *zip.ReadCloser) {
}
}
func (s *BackupService) addDirToZip(zipWriter *zip.Writer, srcDir, prefix string) error {
return filepath.Walk(srcDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
-2
View File
@@ -160,8 +160,6 @@ func LoadConfig(path string) (*AppConfig, error) {
return Config, nil
}
// applyEnvOverrides 从环境变量加载配置
func applyEnvOverrides() {
// Server
+2 -2
View File
@@ -25,7 +25,7 @@ func ParseRequirements(content string) []models.Dependency {
var deps []models.Dependency
// 使用正则表达式按行分割,兼容 Windows 和 Linux 的换行符
lines := regexp.MustCompile(`\r?\n`).Split(content, -1)
// 用于分割包名和版本的正则 (支持 ==, >=, <=, ~=, >, <, @)
versionRegex := regexp.MustCompile(`[=><~@]+`)
@@ -43,7 +43,7 @@ func ParseRequirements(content string) []models.Dependency {
if len(parts) > 1 {
// 清除可能存在的后续参数,比如 requests==2.31.0 --hash=sha256:...
versionPart := strings.TrimSpace(parts[1])
// 如果有逗号分隔的多个范围限制,比如 >=1.20,<2.0,只取第一个范围作为参考版本号
if idx := strings.Index(versionPart, ","); idx != -1 {
versionPart = versionPart[:idx]
+1 -1
View File
@@ -29,7 +29,7 @@ func (s *InitService) Initialize() *UserService {
// 创建管理员账号
s.initializeAdmin(userService)
// 初始化语言环境
s.initializeLanguages()
+3 -2
View File
@@ -109,7 +109,6 @@ func (s *MiseService) fetchLiveLanguages() ([]MiseLanguage, error) {
return s.listFallback()
}
func (s *MiseService) listFallback() ([]MiseLanguage, error) {
cmd := exec.Command("mise", "ls")
cmd.Env = os.Environ()
@@ -286,7 +285,7 @@ func (s *MiseService) syncToDB(languages []MiseLanguage) {
}
if queryErr == nil && rowsAffected == 0 {
// 如果不存在,则创建
// 如果不存在,则创建
newLang := models.Language{
ID: utils.GenerateID(),
Plugin: lang.Plugin,
@@ -329,6 +328,7 @@ func (s *MiseService) GetVerifyCommand(plugin, version string) (string, error) {
}
return m.GetVerifyCommand(version)
}
// UseGlobal 设置全局默认版本
func (s *MiseService) UseGlobal(plugin, version string) error {
cmd := exec.Command("mise", "use", "-g", fmt.Sprintf("%s@%s", plugin, version))
@@ -355,6 +355,7 @@ func (s *MiseService) UnsetGlobal(plugin, version string) error {
}
return nil
}
// Envs 获取全局环境变量
func (s *MiseService) Envs() (map[string]string, error) {
cmd := exec.Command("mise", "set")
+1 -1
View File
@@ -1,9 +1,9 @@
package repo
import (
"github.com/engigu/baihu-panel/internal/models"
"regexp"
"strings"
"github.com/engigu/baihu-panel/internal/models"
)
// QinglongStrategy 实现与青龙兼容的解析逻辑
+3 -3
View File
@@ -3,17 +3,17 @@ package repo
import (
"bufio"
"fmt"
"github.com/engigu/baihu-panel/internal/utils"
"github.com/robfig/cron/v3"
"os"
"path/filepath"
"regexp"
"strings"
"github.com/engigu/baihu-panel/internal/utils"
"github.com/robfig/cron/v3"
)
var (
// envRegex 匹配脚本中的环境名称设置,如 Env("名称")
envRegex = regexp.MustCompile(`(?i)(?:new[ \t]+)?Env\(['"]?([^'"]+)['"]?\)`)
envRegex = regexp.MustCompile(`(?i)(?:new[ \t]+)?Env\(['"]?([^'"]+)['"]?\)`)
// cronRegex 匹配脚本中的 cron 表达式设置
cronRegex = regexp.MustCompile(`(?i)(?:cron[ \t]*[:=][ \t]*['"]?([^'"\r\n]+))|(?:(?:^|[ \t\*\/])(([0-9\*\/\-,L?#]+[ \t]+){4,5}[0-9\*\/\-,L?#]+))`)
// cronFormatRegex 用于校验提取出的字符串是否符合 Cron 表达式格式 (5位或6位)
+1 -1
View File
@@ -101,7 +101,7 @@ func (m *SystemWSManager) SubscribeEvents(bus *eventbus.EventBus) {
constant.EventTaskRunning,
constant.EventTaskQueued,
}
for _, evt := range taskEvents {
bus.Subscribe(evt, func(e eventbus.Event) {
m.Broadcast(e.Type, e.Payload)
+2 -2
View File
@@ -486,7 +486,7 @@ func (es *ExecutorService) ExecuteDispatcher(ctx context.Context, req *executor.
// 组合指令逻辑已移至 executor.ExecuteWithHooks 中,此处不再处理
// 以避免指令被重复组合。
// 远程任务
if task.AgentID != nil && *task.AgentID != "" {
// 将请求中已包含的环境变量(已合并)传递给 Agent
@@ -806,7 +806,7 @@ func (es *ExecutorService) StopTaskExecution(logID string) error {
taskLog.Status = constant.TaskStatusFailed
errorMessage := "任务执行实例已丢失(可能由于系统重启导致),已自动同步状态为失败"
taskLog.Error = models.BigText(errorMessage)
// 更新数据库状态
database.DB.Model(&taskLog).Updates(map[string]interface{}{
"status": taskLog.Status,
+1 -1
View File
@@ -4,11 +4,11 @@ import (
"encoding/json"
"time"
"github.com/engigu/baihu-panel/internal/constant"
"github.com/engigu/baihu-panel/internal/database"
"github.com/engigu/baihu-panel/internal/logger"
"github.com/engigu/baihu-panel/internal/models"
"github.com/engigu/baihu-panel/internal/systime"
"github.com/engigu/baihu-panel/internal/constant"
"github.com/engigu/baihu-panel/internal/utils"
)
+3 -4
View File
@@ -92,7 +92,6 @@ func (ts *TaskService) CreateTask(p *TaskParam) *models.Task {
}
database.DB.Select("*").Create(task)
return task
}
@@ -111,7 +110,7 @@ func (ts *TaskService) GetTasksWithPagination(page, pageSize int, name string, a
if name != "" {
query = query.Where("name LIKE ? OR remark LIKE ?", "%"+name+"%", "%"+name+"%")
}
// 标签筛选 (并集)
if tags != "" {
tagList := strings.Split(tags, ",")
@@ -200,7 +199,7 @@ func (ts *TaskService) UpdateTask(id string, p *TaskParam) *models.Task {
func (ts *TaskService) DeleteTask(id string) bool {
// 同时删除关联的通知推送设置
database.DB.Where("type = ? AND data_id = ?", constant.BindingTypeTask, id).Delete(&models.NotifyBinding{})
result := database.DB.Where("id = ?", id).Delete(&models.Task{})
return result.RowsAffected > 0
}
@@ -208,7 +207,7 @@ func (ts *TaskService) DeleteTask(id string) bool {
func (ts *TaskService) BatchDeleteTasks(ids []string) int64 {
// 同时删除关联的通知推送设置
database.DB.Where("type = ? AND data_id IN ?", constant.BindingTypeTask, ids).Delete(&models.NotifyBinding{})
result := database.DB.Where("id IN ?", ids).Delete(&models.Task{})
return result.RowsAffected
}
+1 -1
View File
@@ -64,7 +64,7 @@ type TinyLog struct {
path string
writer *bufio.Writer
subscribers []chan []byte
remainder []byte // Leftover bytes from previous write (partial lines)
remainder []byte // Leftover bytes from previous write (partial lines)
masks []string // Secrets to mask
closed bool
}
+3 -3
View File
@@ -23,7 +23,7 @@ func TestTinyLog_UTF8Splitting(t *testing.T) {
}
_, _ = tl.Write(part2)
// Currently it should collect both parts but still no newline,
// Currently it should collect both parts but still no newline,
// so remainder should be 5 bytes.
if len(tl.remainder) != 5 {
t.Errorf("Expected remainder len 5, got %d", len(tl.remainder))
@@ -58,7 +58,7 @@ func TestTinyLog_CarriageReturn(t *testing.T) {
if err != nil {
t.Fatalf("ReadLastLines failed: %v", err)
}
// Should contain both progress lines (or at least be split correctly)
if !bytes.Contains(data, []byte("progress: 50%")) {
t.Errorf("Expected output to contain 'progress: 50%%', got %q", data)
@@ -94,7 +94,7 @@ func TestTinyLog_LongLineCut(t *testing.T) {
// Our logic finds the last safe boundary before maxLogBufferLen.
// RuneStart(E4) at maxLogBufferLen-1 is true. FullRune(E4 at maxLogBufferLen-1 in payload[:maxLogBufferLen]) is false.
// So lastSafe should be maxLogBufferLen-1.
// The first maxLogBufferLen-1 bytes (all 'A') should be processed.
// The "你" should be in remainder.