feat: add website log cleanup option to cache cleaning (#11457)

This commit is contained in:
CityFun 2025-12-25 15:43:02 +08:00 committed by GitHub
parent f27a429fc5
commit aa1bc6fa8e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 82 additions and 37 deletions

View file

@ -182,6 +182,8 @@ func (u *DeviceService) Clean(req []dto.Clean) {
} else {
dropTaskLog(path.Join(global.Dir.TaskDir, item.Name))
}
case "website_log":
dropWebsiteLog(item.Name)
case "script":
dropFileOrDir(path.Join(global.Dir.TmpDir, "script", item.Name))
case "images":
@ -621,7 +623,7 @@ func loadLogTree(fileOp fileUtils.FileOp) []dto.CleanTree {
for _, file := range list1 {
size += file.Size
}
treeData = append(treeData, dto.CleanTree{ID: uuid.NewString(), Label: "system_log", Size: uint64(size), Children: list1, Type: "system_log", IsRecommend: true})
treeData = append(treeData, dto.CleanTree{ID: uuid.NewString(), Label: "system_log", Size: size, Children: list1, Type: "system_log", IsRecommend: true})
path2 := path.Join(global.Dir.TaskDir)
list2 := loadTreeWithDir(false, "task_log", path2, fileOp)
@ -632,9 +634,37 @@ func loadLogTree(fileOp fileUtils.FileOp) []dto.CleanTree {
list3 := loadTreeWithAllFile(true, path3, "script", path3, fileOp)
size3, _ := fileOp.GetDirSize(path3)
treeData = append(treeData, dto.CleanTree{ID: uuid.NewString(), Label: "script", Size: uint64(size3), Children: list3, Type: "script", IsRecommend: true})
websiteLogList := loadWebsiteLogTree(fileOp)
logTotalSize := uint64(0)
for _, websiteLog := range websiteLogList {
logTotalSize += websiteLog.Size
}
treeData = append(treeData, dto.CleanTree{ID: uuid.NewString(), Label: "website_log", Size: logTotalSize, Children: websiteLogList, Type: "website_log", IsRecommend: false})
return treeData
}
func loadWebsiteLogTree(fileOp fileUtils.FileOp) []dto.CleanTree {
websites, _ := websiteRepo.List()
if len(websites) == 0 {
return nil
}
var res []dto.CleanTree
for _, website := range websites {
size3, _ := fileOp.GetDirSize(path.Join(GetSiteDir(website.Alias), "log"))
res = append(res, dto.CleanTree{
ID: uuid.NewString(),
Label: website.PrimaryDomain,
Size: uint64(size3),
IsCheck: size3 > 5*1024,
Type: "website_log",
Name: website.Alias,
})
}
return res
}
func loadContainerTree() []dto.CleanTree {
var treeData []dto.CleanTree
client, err := docker.NewDockerClient()
@ -849,6 +879,18 @@ func dropVolumes() (int, int) {
return len(res.VolumesDeleted), int(res.SpaceReclaimed)
}
func dropWebsiteLog(alias string) {
accessLogPath := path.Join(GetSiteDir(alias), "log", "access.log")
errorLogPath := path.Join(GetSiteDir(alias), "log", "error.log")
if err := os.Truncate(accessLogPath, 0); err != nil {
global.LOG.Errorf("truncate access log %s failed, err %v", accessLogPath, err)
}
if err := os.Truncate(errorLogPath, 0); err != nil {
global.LOG.Errorf("truncate error log %s failed, err %v", errorLogPath, err)
}
}
func dropTaskLog(logDir string) {
files, err := os.ReadDir(logDir)
if err != nil {

View file

@ -131,7 +131,7 @@ func createProxyFile(website *model.Website) error {
}
func createWebsiteFolder(website *model.Website, runtime *model.Runtime) error {
siteFolder := GteSiteDir(website.Alias)
siteFolder := GetSiteDir(website.Alias)
fileOp := files.NewFileOp()
if !fileOp.Stat(siteFolder) {
if err := fileOp.CreateDir(siteFolder, constant.DirPerm); err != nil {
@ -491,7 +491,7 @@ func delNginxConfig(website model.Website, force bool) error {
return err
}
}
sitePath := GteSiteDir(website.Alias)
sitePath := GetSiteDir(website.Alias)
if fileOp.Stat(sitePath) {
xpack.RemoveTamper(website.Alias)
_ = fileOp.DeleteDir(sitePath)
@ -1357,7 +1357,7 @@ func GetWebSiteRootDir() string {
return dir
}
func GteSiteDir(alias string) string {
func GetSiteDir(alias string) string {
return path.Join(GetWebSiteRootDir(), "sites", alias)
}
@ -1399,31 +1399,31 @@ func GetSitePath(website model.Website, confType string) string {
case StreamConf:
return path.Join(GetWebSiteRootDir(), "stream.d", website.Alias+".conf")
case SiteAccessLog:
return path.Join(GteSiteDir(website.Alias), "log", "access.log")
return path.Join(GetSiteDir(website.Alias), "log", "access.log")
case SiteErrorLog:
return path.Join(GteSiteDir(website.Alias), "log", "error.log")
return path.Join(GetSiteDir(website.Alias), "log", "error.log")
case SiteDir:
return GteSiteDir(website.Alias)
return GetSiteDir(website.Alias)
case SiteIndexDir:
return path.Join(GteSiteDir(website.Alias), "index")
return path.Join(GetSiteDir(website.Alias), "index")
case SiteCacheDir:
return path.Join(GteSiteDir(website.Alias), "cache")
return path.Join(GetSiteDir(website.Alias), "cache")
case SiteProxyDir:
return path.Join(GteSiteDir(website.Alias), "proxy")
return path.Join(GetSiteDir(website.Alias), "proxy")
case SiteSSLDir:
return path.Join(GteSiteDir(website.Alias), "ssl")
return path.Join(GetSiteDir(website.Alias), "ssl")
case SiteReWritePath:
return path.Join(GteSiteDir(website.Alias), "rewrite", website.Alias+".conf")
return path.Join(GetSiteDir(website.Alias), "rewrite", website.Alias+".conf")
case SiteRedirectDir:
return path.Join(GteSiteDir(website.Alias), "redirect")
return path.Join(GetSiteDir(website.Alias), "redirect")
case SiteRootAuthBasicPath:
return path.Join(GteSiteDir(website.Alias), "auth_basic", "auth.pass")
return path.Join(GetSiteDir(website.Alias), "auth_basic", "auth.pass")
case SitePathAuthBasicDir:
return path.Join(GteSiteDir(website.Alias), "path_auth")
return path.Join(GetSiteDir(website.Alias), "path_auth")
case SiteUpstreamDir:
return path.Join(GteSiteDir(website.Alias), "upstream")
return path.Join(GetSiteDir(website.Alias), "upstream")
case SiteCorsPath:
return path.Join(GteSiteDir(website.Alias), "cors", "cors.conf")
return path.Join(GetSiteDir(website.Alias), "cors", "cors.conf")
}
return ""
}

View file

@ -2221,8 +2221,8 @@ const message = {
downloadHelper: 'Temporary files downloaded from third-party backup accounts by the system',
directory: 'Directory',
systemLog: 'System Log Files',
systemLogHelper: 'System log and task log files',
systemLog: 'Log file',
systemLogHelper: 'System logs, task logs, website log files',
dockerLog: 'Container operation log files',
taskLog: 'Scheduled task execution log files',
shell: 'Shell script scheduled tasks',

View file

@ -2233,8 +2233,9 @@ const message = {
download: 'Archivos temporales de descarga',
downloadHelper: 'Archivos temporales descargados desde respaldos externos',
directory: 'Directorio',
systemLog: 'Archivos de log del sistema',
systemLogHelper: 'Archivos de registro del sistema y de tareas',
systemLog: 'Archivo de registro',
systemLogHelper: 'Registros del sistema, registros de tareas, archivos de registro del sitio web',
dockerLog: 'Archivos de registro de operaciones de contenedores',
taskLog: 'Archivos de registro de ejecución de tareas programadas',
shell: 'Tareas programadas de script de shell',

View file

@ -2141,8 +2141,8 @@ const message = {
downloadHelper: 'システムによってサードパーティのバックアップアカウントからダウンロードされた一時ファイル',
directory: 'ディレクトリ',
systemLog: 'システムログファイル',
systemLogHelper: 'システムログタスクログファイル',
systemLog: 'ログファイル',
systemLogHelper: 'システムログタスクログウェブサイトログファイル',
dockerLog: 'コンテナ操作ログファイル',
taskLog: 'スケジュールタスク実行ログファイル',
shell: 'シェルスクリプトスケジュールタスク',

View file

@ -2105,8 +2105,8 @@ const message = {
downloadHelper: '시스템에서 제3자 백업 계정으로 다운로드된 임시 파일',
directory: '디렉터리',
systemLog: '시스템 로그 파일',
systemLogHelper: '시스템 로그, 작업 로그 파일',
systemLog: '로그 파일',
systemLogHelper: '시스템 로그, 작업 로그, 웹사이트 로그 파일',
dockerLog: '컨테이너 작업 로그 파일',
taskLog: '예약 작업 실행 로그 파일',
shell: ' 스크립트 예약 작업',

View file

@ -2200,8 +2200,8 @@ const message = {
downloadHelper: 'Fail sementara dimuat turun dari akaun sandaran pihak ketiga oleh sistem',
directory: 'Direktori',
systemLog: 'Fail Log Sistem',
systemLogHelper: 'Fail log sistem dan log tugas',
systemLog: 'Fail log',
systemLogHelper: 'Log sistem, log tugas, fail log laman web',
dockerLog: 'Fail log operasi bekas',
taskLog: 'Fail log pelaksanaan tugas berjadual',
shell: 'Tugas berjadual skrip Shell',

View file

@ -2194,8 +2194,8 @@ const message = {
downloadHelper: 'Arquivos temporários baixados de contas de backup de terceiros pelo sistema',
directory: 'Diretório',
systemLog: 'Arquivos de log do sistema',
systemLogHelper: 'Arquivos de log do sistema e de tarefas',
systemLog: 'Arquivo de log',
systemLogHelper: 'Logs do sistema, logs de tarefas, arquivos de log do site',
dockerLog: 'Arquivos de log de operação de contêineres',
taskLog: 'Arquivos de log de execução de tarefas agendadas',
shell: 'Tarefas agendadas de script de shell',

View file

@ -2189,8 +2189,8 @@ const message = {
downloadHelper: 'Временные файлы, скачанные из сторонних аккаунтов резервного копирования системой',
directory: 'Директория',
systemLog: 'Системные файлы логов',
systemLogHelper: 'Файлы системных журналов и журналов задач',
systemLog: 'Файл журнала',
systemLogHelper: 'Системные журналы, журналы задач, файлы журналов веб-сайта',
dockerLog: 'Файлы журналов операций с контейнерами',
taskLog: 'Файлы журналов выполнения запланированных задач',
shell: 'Запланированные задачи скриптов оболочки',

View file

@ -2246,8 +2246,8 @@ const message = {
downloadHelper: 'Sistem tarafından üçüncü taraf yedek hesaplarından indirilen geçici dosyalar',
directory: 'Dizin',
systemLog: 'Sistem Günlük Dosyaları',
systemLogHelper: 'Sistem günlüğü ve görev günlüğü dosyaları',
systemLog: 'Günlük dosyası',
systemLogHelper: 'Sistem günlükleri, görev günlükleri, web sitesi günlük dosyaları',
dockerLog: 'Konteyner işlem günlüğü dosyaları',
taskLog: 'Zamanlanmış görev yürütme günlüğü dosyaları',
shell: 'Shell script zamanlanmış görevler',

View file

@ -2070,8 +2070,8 @@ const message = {
downloadHelper: '系統從第三方備份帳號下載的暫存檔',
directory: '資料夾',
systemLog: '系統日誌檔案',
systemLogHelper: '系統日誌任務日誌檔案',
systemLog: '日誌檔案',
systemLogHelper: '系統日誌任務日誌網站日誌檔案',
dockerLog: '容器操作日誌檔案',
taskLog: '計劃任務執行日誌檔案',
shell: 'Shell 腳本計劃任務',

View file

@ -2067,8 +2067,8 @@ const message = {
downloadHelper: '系统从第三方备份账号下载的临时文件',
directory: '文件夹',
systemLog: '系统日志文件',
systemLogHelper: '系统日志任务日志文件',
systemLog: '日志文件',
systemLogHelper: '系统日志任务日志网站日志文件',
dockerLog: '容器操作日志文件',
taskLog: '计划任务执行日志文件',
shell: 'Shell 脚本计划任务',

View file

@ -630,6 +630,8 @@ function load18n(label: string) {
return i18n.global.t('clean.volumes');
case 'build_cache':
return i18n.global.t('clean.buildCache');
case 'website_log':
return i18n.global.t('logs.websiteLog');
default:
return label;
}