mirror of https://github.com/allinssl/allinssl
删除工作流时清理历史执行
parent
e31d5e2d04
commit
236076a031
|
@ -86,6 +86,11 @@ func DelWorkflow(id string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
// 清理工作流历史记录
|
||||||
|
err = CleanWorkflowHistory()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("清理工作流历史记录失败: %v", err)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@ import (
|
||||||
"ALLinSSL/backend/public"
|
"ALLinSSL/backend/public"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -114,3 +116,50 @@ func GetExecLog(id string) (string, error) {
|
||||||
}
|
}
|
||||||
return string(log), nil
|
return string(log), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CleanWorkflowHistory() error {
|
||||||
|
s, err := GetSqlite()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer s.Close()
|
||||||
|
// 获取所有工作流ID
|
||||||
|
data, err := s.Select()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
var workflowIds []string
|
||||||
|
for _, v := range data {
|
||||||
|
if workflowId, ok := v["id"].(int64); ok {
|
||||||
|
workflowIds = append(workflowIds, strconv.FormatInt(workflowId, 10))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
workflowIdsStr := strings.Join(workflowIds, ",")
|
||||||
|
s.TableName = "workflow_history"
|
||||||
|
// 获取无意义的工作流记录id
|
||||||
|
data, err = s.Where("workflow_id NOT IN ("+workflowIdsStr+")", nil).Select()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// 删除无意义的工作流记录
|
||||||
|
_, err = s.Where("workflow_id NOT IN ("+workflowIdsStr+")", nil).Delete()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// 删除工作流执行日志
|
||||||
|
logPath := public.GetSettingIgnoreError("workflow_log_path")
|
||||||
|
if logPath == "" {
|
||||||
|
logPath = "logs/workflow"
|
||||||
|
}
|
||||||
|
for _, v := range data {
|
||||||
|
if id, ok := v["id"].(string); ok && id != "" {
|
||||||
|
logFile := filepath.Join(logPath, id+".log")
|
||||||
|
if _, err := os.Stat(logFile); err == nil {
|
||||||
|
if err := os.Remove(logFile); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -81,16 +81,16 @@ func Register(r *gin.Engine) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. 提供静态文件服务
|
// 1. 提供静态文件服务
|
||||||
r.StaticFS("/static", http.Dir("./frontend/static")) // 静态资源路径
|
r.StaticFS("/static", http.Dir("./build/static")) // 静态资源路径
|
||||||
r.StaticFS("/auto-deploy/static", http.Dir("./frontend/static")) // 静态资源路径
|
r.StaticFS("/auto-deploy/static", http.Dir("./build/static")) // 静态资源路径
|
||||||
// 返回 favicon.ico
|
// 返回 favicon.ico
|
||||||
r.GET("/favicon.ico", func(c *gin.Context) {
|
r.GET("/favicon.ico", func(c *gin.Context) {
|
||||||
c.File("./frontend/favicon.ico")
|
c.File("./build/favicon.ico")
|
||||||
})
|
})
|
||||||
|
|
||||||
// 3. 前端路由托管:匹配所有其他路由并返回 index.html
|
// 3. 前端路由托管:匹配所有其他路由并返回 index.html
|
||||||
r.NoRoute(func(c *gin.Context) {
|
r.NoRoute(func(c *gin.Context) {
|
||||||
c.File("./frontend/index.html")
|
c.File("./build/index.html")
|
||||||
})
|
})
|
||||||
// v2 := r.Group("/v2")
|
// v2 := r.Group("/v2")
|
||||||
// {
|
// {
|
||||||
|
|
Loading…
Reference in New Issue