diff --git a/agent/app/dto/cronjob.go b/agent/app/dto/cronjob.go index a929b4866abe..165f167afc0b 100644 --- a/agent/app/dto/cronjob.go +++ b/agent/app/dto/cronjob.go @@ -53,6 +53,12 @@ type CronjobOperate struct { AlertCount uint `json:"alertCount"` AlertTitle string `json:"alertTitle"` AlertMethod string `json:"alertMethod"` + + CleanLogConfig +} + +type CleanLogConfig struct { + Scopes []string `json:"scopes"` } type SnapshotRule struct { diff --git a/agent/app/model/cronjob.go b/agent/app/model/cronjob.go index daaff43520af..7744967c9e0e 100644 --- a/agent/app/model/cronjob.go +++ b/agent/app/model/cronjob.go @@ -43,6 +43,8 @@ type Cronjob struct { EntryIDs string `json:"entryIDs"` Records []JobRecords `json:"records"` Secret string `json:"secret"` + + Config string `json:"config"` } type JobRecords struct { diff --git a/agent/app/service/cronjob.go b/agent/app/service/cronjob.go index 168f4c08e945..646ad8cce29e 100644 --- a/agent/app/service/cronjob.go +++ b/agent/app/service/cronjob.go @@ -108,6 +108,9 @@ func (u *CronjobService) LoadInfo(req dto.OperateByID) (*dto.CronjobOperate, err if cronjob.Type == "snapshot" && len(cronjob.SnapshotRule) != 0 { _ = json.Unmarshal([]byte(cronjob.SnapshotRule), &item.SnapshotRule) } + if cronjob.Type == "cleanLog" { + _ = json.Unmarshal([]byte(cronjob.Config), &item.CleanLogConfig) + } return &item, err } @@ -577,6 +580,10 @@ func (u *CronjobService) Create(req dto.CronjobOperate) error { } cronjob.Spec = spec cronjob.EntryIDs = entryIDs + if req.Type == "cleanLog" { + config, _ := json.Marshal(req.CleanLogConfig) + cronjob.Config = string(config) + } if err := cronjobRepo.Create(&cronjob); err != nil { return err } diff --git a/agent/app/service/cronjob_helper.go b/agent/app/service/cronjob_helper.go index 39ac44c56e8c..f0bb91a9d100 100644 --- a/agent/app/service/cronjob_helper.go +++ b/agent/app/service/cronjob_helper.go @@ -3,6 +3,7 @@ package service import ( "bufio" "context" + "encoding/json" "fmt" "io" "net/http" @@ -133,6 +134,8 @@ func (u *CronjobService) loadTask(cronjob *model.Cronjob, record *model.JobRecor err = u.handleSystemLog(*cronjob, record.StartTime, taskItem) case "syncIpGroup": u.handleSyncIpGroup(*cronjob, taskItem) + case "cleanLog": + u.handleCleanLog(*cronjob, taskItem) } return err } @@ -216,6 +219,48 @@ func (u *CronjobService) handleNtpSync(cronjob model.Cronjob, taskItem *task.Tas }, nil, int(cronjob.RetryTimes), time.Duration(cronjob.Timeout)*time.Second) } +func (u *CronjobService) handleCleanLog(cronjob model.Cronjob, taskItem *task.Task) { + taskItem.AddSubTaskWithOps(i18n.GetWithName("CleanLog", cronjob.Name), func(t *task.Task) error { + config := GetCleanLogConfig(cronjob) + for _, scope := range config.Scopes { + switch scope { + case "website": + websites, _ := websiteRepo.List() + for _, website := range websites { + curStr := i18n.GetWithName("CleanLogByName", website.PrimaryDomain) + t.LogStart(curStr) + accessLogPath := GetSitePath(website, SiteAccessLog) + if err := os.Truncate(accessLogPath, 0); err != nil { + t.LogFailedWithErr(curStr, err) + continue + } + errLogPath := GetSitePath(website, SiteErrorLog) + if err := os.Truncate(errLogPath, 0); err != nil { + t.LogFailedWithErr(curStr, err) + continue + } + t.LogSuccess(curStr) + } + appInstall, _ := getAppInstallByKey(constant.AppOpenresty) + if appInstall.ID > 0 { + curStr := i18n.GetWithName("CleanLogByName", "Openresty") + t.LogStart(curStr) + accessLogPath := path.Join(appInstall.GetPath(), "log", "access.log") + if err := os.Truncate(accessLogPath, 0); err != nil { + t.LogFailedWithErr(curStr, err) + } + errLogPath := path.Join(appInstall.GetPath(), "log", "error.log") + if err := os.Truncate(errLogPath, 0); err != nil { + t.LogFailedWithErr(curStr, err) + } + t.LogSuccess(curStr) + } + } + } + return nil + }, nil, int(cronjob.RetryTimes), time.Duration(cronjob.Timeout)*time.Second) +} + func (u *CronjobService) handleSyncIpGroup(cronjob model.Cronjob, taskItem *task.Task) { taskItem.AddSubTaskWithOps(i18n.GetWithName("SyncIpGroup", cronjob.Name), func(t *task.Task) error { appInstall, err := getAppInstallByKey(constant.AppOpenresty) @@ -417,7 +462,7 @@ func (u *CronjobService) removeExpiredLog(cronjob model.Cronjob) { _ = os.Remove(file) } } - _ = cronjobRepo.DeleteRecord(repo.WithByID(uint(records[i].ID))) + _ = cronjobRepo.DeleteRecord(repo.WithByID(records[i].ID)) _ = taskRepo.Delete(taskRepo.WithByID(records[i].TaskID)) _ = os.Remove(path.Join(global.CONF.Base.InstallDir, "1panel/log/task/Cronjob", records[i].TaskID+".log")) } @@ -436,3 +481,9 @@ func handleCronJobAlert(cronjob *model.Cronjob) { } _ = alert_push.PushAlert(pushAlert) } + +func GetCleanLogConfig(cronJob model.Cronjob) dto.CleanLogConfig { + config := &dto.CleanLogConfig{} + _ = json.Unmarshal([]byte(cronJob.Config), config) + return *config +} diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index ca0ec8967d09..118ba51f41e4 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -249,6 +249,8 @@ IgnoreUploadErr: "Upload failed, error: {{ .detail }}, ignoring this error..." LoadBackupFailed: "Failed to get backup account connection, error: {{ .detail }}" InExecuting: "The current task is being executed, please do not repeat the execution!" NoSuchResource: "No backup content found in the database, skipping..." +CleanLog: "Clean Log", +CleanLogByName: "Clean {{.name}} Log" #toolbox ErrNotExistUser: 'The current user does not exist, please modify and try again!' diff --git a/agent/i18n/lang/es-ES.yaml b/agent/i18n/lang/es-ES.yaml index eda664f45d6f..0dbfb4c74eb4 100644 --- a/agent/i18n/lang/es-ES.yaml +++ b/agent/i18n/lang/es-ES.yaml @@ -248,6 +248,8 @@ Upload: "Subir" LoadBackupFailed: "Error al obtener la conexión de la cuenta de respaldo, error: {{ .detail }}" InExecuting: "La tarea actual se está ejecutando, por favor no la repita" NoSuchResource: "No se encontraron contenidos de respaldo en la base de datos, omitiendo..." +CleanLog: "Limpiar registro" +CleanLogByName: "Limpiar registro de {{.name}}" #toolbox ErrNotExistUser: 'El usuario actual no existe, modifíquelo e intente de nuevo' diff --git a/agent/i18n/lang/ja.yaml b/agent/i18n/lang/ja.yaml index 42f0943fb5b0..a9198b7177d9 100644 --- a/agent/i18n/lang/ja.yaml +++ b/agent/i18n/lang/ja.yaml @@ -248,6 +248,8 @@ IgnoreUploadErr: "アップロード失敗、エラー: {{ .detail }}、この LoadBackupFailed: "バックアップアカウントの接続取得に失敗、エラー: {{ .detail }}" InExecuting: "現在のタスクは実行中です。重複して実行しないでください!" NoSuchResource: "データベースにバックアップ内容が見つかりませんでした。スキップします..." +CleanLog: "ログをクリーン" +CleanLogByName: "{{.name}} のログをクリーン" #toolbox ErrNotExistUser: '現在のユーザーは存在しません。変更してもう一度お試しください。' diff --git a/agent/i18n/lang/ko.yaml b/agent/i18n/lang/ko.yaml index b4e005b1b868..8df037328f18 100644 --- a/agent/i18n/lang/ko.yaml +++ b/agent/i18n/lang/ko.yaml @@ -249,6 +249,8 @@ IgnoreUploadErr: "업로드 실패, 오류: {{ .detail }}, 이 오류를 무시 LoadBackupFailed: "백업 계정 연결 획득 실패, 오류: {{ .detail }}" InExecuting: "현재 작업이 실행 중입니다. 중복 실행하지 마세요!" NoSuchResource: "데이터베이스에서 백업 내용을 찾을 수 없어 건너뜁니다..." +CleanLog: "로그 정리" +CleanLogByName: "{{.name}} 로그 정리" #도구상자 ErrNotExistUser: '현재 사용자가 존재하지 않습니다. 수정한 후 다시 시도하세요!' diff --git a/agent/i18n/lang/ms.yaml b/agent/i18n/lang/ms.yaml index 756303bd00e5..5385845b8cd6 100644 --- a/agent/i18n/lang/ms.yaml +++ b/agent/i18n/lang/ms.yaml @@ -249,6 +249,8 @@ IgnoreUploadErr: "Muat naik gagal, ralat: {{ .detail }}, abaikan ralat ini..." LoadBackupFailed: "Gagal mendapatkan sambungan akaun sandaran, ralat: {{ .detail }}" InExecuting: "Tugas semasa sedang dilaksanakan, jangan ulangi pelaksanaan!" NoSuchResource: "Tiada kandungan sandaran ditemui dalam pangkalan data, dilangkau..." +CleanLog: "Bersihkan log" +CleanLogByName: "Bersihkan log {{.name}}" #kotak alat ErrNotExistUser: 'Pengguna semasa tidak wujud, sila ubah suai dan cuba lagi!' diff --git a/agent/i18n/lang/pt-BR.yaml b/agent/i18n/lang/pt-BR.yaml index bee72b115ce4..fde7df3e6a5b 100644 --- a/agent/i18n/lang/pt-BR.yaml +++ b/agent/i18n/lang/pt-BR.yaml @@ -249,6 +249,8 @@ IgnoreUploadErr: "Upload falhou, erro: {{ .detail }}, ignorando este erro..." LoadBackupFailed: "Falha ao obter conexão da conta de backup, erro: {{ .detail }}" InExecuting: "A tarefa atual está sendo executada, não repita a execução!" NoSuchResource: "Nenhum conteúdo de backup encontrado no banco de dados, ignorando..." +CleanLog: "Limpar log" +CleanLogByName: "Limpar log de {{.name}}" #caixa de ferramentas ErrNotExistUser: 'O usuário atual não existe, modifique e tente novamente!' diff --git a/agent/i18n/lang/ru.yaml b/agent/i18n/lang/ru.yaml index 6f5e64bc2064..a6e5ff26dbbe 100644 --- a/agent/i18n/lang/ru.yaml +++ b/agent/i18n/lang/ru.yaml @@ -249,6 +249,8 @@ IgnoreUploadErr: "Ошибка загрузки: {{ .detail }}, игнориру LoadBackupFailed: "Не удалось получить подключение к учетной записи резервной копии, ошибка: {{ .detail }}" InExecuting: "Текущая задача выполняется, не повторяйте выполнение!" NoSuchResource: "В базе данных не найдено содержимое резервной копии, пропускаем..." +CleanLog: "Очистить журнал" +CleanLogByName: "Очистить журнал {{.name}}" #ящик для инструментов ErrNotExistUser: 'Текущий пользователь не существует, измените его и повторите попытку!' diff --git a/agent/i18n/lang/tr.yaml b/agent/i18n/lang/tr.yaml index a097fdc50395..b4c1f6ee7f9e 100644 --- a/agent/i18n/lang/tr.yaml +++ b/agent/i18n/lang/tr.yaml @@ -250,6 +250,8 @@ IgnoreUploadErr: "Yükleme başarısız, hata: {{ .detail }}, bu hata yoksayıl LoadBackupFailed: "Yedek hesap bağlantısı alınamadı, hata: {{ .detail }}" InExecuting: "Mevcut görev yürütülüyor, lütfen tekrar yürütmeyin!" NoSuchResource: "Veritabanında yedek içeriği bulunamadı, atlanıyor..." +CleanLog: "Günlüğü temizle" +CleanLogByName: "{{.name}} günlüğünü temizle" #toolbox ErrNotExistUser: 'Mevcut kullanıcı mevcut değil, lütfen değiştirin ve tekrar deneyin!' diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index 07135b001e4c..2e42046894bc 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -248,6 +248,8 @@ IgnoreUploadErr: "上傳失敗,錯誤:{{ .detail }},忽略本次錯誤..." LoadBackupFailed: "取得備份帳號連線失敗,錯誤:{{ .detail }}" InExecuting: "目前任務正在執行中,請勿重複執行!" NoSuchResource: "資料庫中未能查詢到備份內容,跳過..." +CleanLog: "清理日誌" +CleanLogByName: "清理 {{.name}} 日誌" #toolbox ErrNotExistUser: '目前使用者不存在,請修改後重試!' diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index 875e6bca5be1..d82336e69d06 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -249,6 +249,8 @@ IgnoreUploadErr: "上传失败,错误:{{ .detail }},忽略本次错误..." LoadBackupFailed: "获取备份账号连接失败,错误:{{ .detail }}" InExecuting: "当前任务正在执行中,请勿重复执行!" NoSuchResource: "数据库中未能查询到备份内容,跳过..." +CleanLog: "清理日志" +CleanLogByName: "清理 {{.name}} 日志" #toolbox ErrNotExistUser: "当前用户不存在,请修改后重试!" diff --git a/agent/init/migration/migrate.go b/agent/init/migration/migrate.go index 2c3dba6282e9..b4437f194735 100644 --- a/agent/init/migration/migrate.go +++ b/agent/init/migration/migrate.go @@ -49,6 +49,7 @@ func InitAgentDB() { migrations.AddTensorRTLLMModel, migrations.UpdateMonitorInterval, migrations.AddMonitorProcess, + migrations.UpdateCronJob, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/agent/init/migration/migrations/init.go b/agent/init/migration/migrations/init.go index 9790d66017f1..bc8d9872bd51 100644 --- a/agent/init/migration/migrations/init.go +++ b/agent/init/migration/migrations/init.go @@ -666,3 +666,10 @@ var AddMonitorProcess = &gormigrate.Migration{ return global.MonitorDB.AutoMigrate(&model.MonitorBase{}) }, } + +var UpdateCronJob = &gormigrate.Migration{ + ID: "20251105-update-cronjob", + Migrate: func(tx *gorm.DB) error { + return tx.AutoMigrate(&model.Cronjob{}) + }, +} diff --git a/frontend/src/api/interface/cronjob.ts b/frontend/src/api/interface/cronjob.ts index dbf10c8db3ae..340f3ffbdbae 100644 --- a/frontend/src/api/interface/cronjob.ts +++ b/frontend/src/api/interface/cronjob.ts @@ -64,6 +64,8 @@ export namespace Cronjob { alertTitle: string; alertMethod: string; alertMethodItems: Array; + + scopes?: string[]; } export interface Item { val: string; diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 762360c1298b..f57d0b0027e8 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -2421,7 +2421,6 @@ const message = { qiteSite: 'Enterprise', videoSite: 'Video', errLog: 'Error log', - accessLog: 'Website log', stopHelper: 'After stopping the site, it will not be able to access normally, and the user will display the stop page of the current site when visiting. Do you want to continue? ', startHelper: @@ -2432,7 +2431,6 @@ const message = { folderTitle: 'The website mainly contains the following folders', wafFolder: 'Firewall rules', indexFolder: 'Website root directory', - logFolder: 'Website log', sslFolder: 'Website Certificate', enableOrNot: 'Enable', oldSSL: 'Existing certificate', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index 8f33bf5aa06a..d16c1cc0fbc3 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -2419,7 +2419,6 @@ const message = { qiteSite: 'Empresa', videoSite: 'Video', errLog: 'Log de errores', - accessLog: 'Log de accesos', stopHelper: 'Al detener el sitio, no será accesible y mostrará una página de parada. ¿Deseas continuar?', startHelper: 'Al habilitar el sitio, los usuarios podrán acceder normalmente. ¿Deseas continuar?', sitePath: 'Directorio', @@ -2428,7 +2427,6 @@ const message = { folderTitle: 'El sitio contiene principalmente las siguientes carpetas', wafFolder: 'Reglas del firewall', indexFolder: 'Directorio raíz del sitio', - logFolder: 'Logs del sitio', sslFolder: 'Certificados del sitio', enableOrNot: 'Habilitar', oldSSL: 'Certificado existente', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 5e5e660434e3..577b9819a472 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2341,7 +2341,6 @@ const message = { qiteSite: '企業', videoSite: 'ビデオ', errLog: 'エラーログ', - accessLog: 'ウェブサイトログ', stopHelper: 'サイトを停止した後、正常にアクセスできなくなり、ユーザーは訪問時に現在のサイトの停止ページを表示します。続けたいですか?', startHelper: 'サイトを有効にした後、ユーザーは通常、サイトのコンテンツにアクセスできますが、続行しますか?', @@ -2351,7 +2350,6 @@ const message = { folderTitle: 'ウェブサイトには主に次のフォルダーが含まれています', wafFolder: 'ファイアウォールルール', indexFolder: 'ウェブサイトルートディレクトリ', - logFolder: 'ウェブサイトログ', sslFolder: 'ウェブサイト証明書', enableOrNot: '有効にする', oldSSL: '既存の証明書', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index e9a6a58e3c79..fe93fe4dd916 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -2302,7 +2302,6 @@ const message = { qiteSite: '기업', videoSite: '비디오', errLog: '오류 로그', - accessLog: '웹사이트 로그', stopHelper: '사이트를 중지하면 정상적으로 액세스할 수 없으며, 사용자가 해당 사이트의 중지 페이지를 보게 됩니다. 계속하시겠습니까?', startHelper: '사이트를 활성화하면 사용자가 정상적으로 사이트 내용을 액세스할 수 있습니다. 계속하시겠습니까?', @@ -2312,7 +2311,6 @@ const message = { folderTitle: '웹사이트는 다음과 같은 폴더를 포함합니다.', wafFolder: '방화벽 규칙', indexFolder: '웹사이트 루트 디렉터리', - logFolder: '웹사이트 로그', sslFolder: '웹사이트 인증서', enableOrNot: '활성화 여부', oldSSL: '기존 인증서', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index c2d28956ec67..1d8507f27b39 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -2398,7 +2398,6 @@ const message = { qiteSite: 'Syarikat', videoSite: 'Video', errLog: 'Log Ralat', - accessLog: 'Log Laman Web', stopHelper: 'Selepas menghentikan laman web, ia tidak akan dapat diakses dengan normal, dan pengguna akan melihat halaman berhenti laman web semasa apabila mengunjunginya. Adakah anda mahu meneruskan?', startHelper: @@ -2409,7 +2408,6 @@ const message = { folderTitle: 'Laman web ini terutamanya mengandungi folder berikut', wafFolder: 'Peraturan firewall', indexFolder: 'Direktori akar laman web', - logFolder: 'Log laman web', sslFolder: 'Sijil laman web', enableOrNot: 'Aktifkan', oldSSL: 'Sijil sedia ada', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 7075a2a31888..1273146ccb35 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -2400,7 +2400,6 @@ const message = { qiteSite: 'Empresarial', videoSite: 'Site de Vídeo', errLog: 'Erro de log', - accessLog: 'Log do site', stopHelper: 'Após parar o site, ele não poderá ser acessado normalmente, e o usuário verá a página de parada do site atual ao visitar. Deseja continuar?', startHelper: 'Após ativar o site, os usuários podem acessar o conteúdo do site normalmente, deseja continuar?', @@ -2410,7 +2409,6 @@ const message = { folderTitle: 'O site contém principalmente as seguintes pastas', wafFolder: 'Regras de firewall', indexFolder: 'Diretório raiz do site', - logFolder: 'Log do site', sslFolder: 'Certificado do site', enableOrNot: 'Habilitar', oldSSL: 'Certificado existente', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 8f712590245f..e4373c51024f 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -2397,7 +2397,6 @@ const message = { qiteSite: 'Корпоративный', videoSite: 'Видео', errLog: 'Лог ошибок', - accessLog: 'Лог веб-сайта', stopHelper: 'После остановки сайта он не будет доступен для нормального доступа, и пользователи будут видеть страницу остановки при посещении. Хотите продолжить?', startHelper: @@ -2408,7 +2407,6 @@ const message = { folderTitle: 'Веб-сайт в основном содержит следующие папки', wafFolder: 'Правила межсетевого экрана', indexFolder: 'Корневая директория веб-сайта', - logFolder: 'Лог веб-сайта', sslFolder: 'Сертификат веб-сайта', enableOrNot: 'Включить', oldSSL: 'Существующий сертификат', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index 532e88510b17..7ea762d95c5e 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -2455,7 +2455,6 @@ const message = { qiteSite: 'Kurumsal', videoSite: 'Video', errLog: 'Hata günlüğü', - accessLog: 'Web sitesi günlüğü', stopHelper: 'Site durdurulduktan sonra normal şekilde erişilemeyecek ve kullanıcı siteyi ziyaret ettiğinde mevcut sitenin durdurma sayfası görüntülenecektir. Devam etmek istiyor musunuz? ', startHelper: @@ -2466,7 +2465,6 @@ const message = { folderTitle: 'Web sitesi esas olarak aşağıdaki klasörleri içerir', wafFolder: 'Güvenlik duvarı kuralları', indexFolder: 'Web sitesi kök dizini', - logFolder: 'Web sitesi günlüğü', sslFolder: 'Web Sitesi Sertifikası', enableOrNot: 'Etkinleştir', oldSSL: 'Mevcut sertifika', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index e7354be412ba..3fea55f95f0c 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -2252,7 +2252,6 @@ const message = { qiteSite: '企業', videoSite: '影片', errLog: '錯誤日誌', - accessLog: '網站日誌', stopHelper: '停止站點後將無法正常訪問,使用者瀏覽會顯示目前站點停止頁面,是否繼續操作?', startHelper: '啟用站點後,使用者可以正常瀏覽網站內容,是否繼續操作?', sitePath: '網站目錄', @@ -2261,7 +2260,6 @@ const message = { folderTitle: '網站主要包含以下資料夾', wafFolder: '防火牆規則', indexFolder: '網站root目錄', - logFolder: '網站日誌', sslFolder: '網站證書', enableOrNot: '是否啟用', oldSSL: '選擇已有證書', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index f6363448c4b0..269d0fb718eb 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1128,6 +1128,9 @@ const message = { noSuchApp: '未检测到 {0} 服务,请前往脚本库页面手动安装!', syncHelper: '即将同步系统脚本库,该操作仅针对系统脚本,是否继续?', }, + + cleanLog: '清理日志', + cleanLogscope: '清理类型', }, monitor: { globalFilter: '全局过滤', @@ -2244,7 +2247,6 @@ const message = { qiteSite: '企业', videoSite: '视频', errLog: '错误日志', - accessLog: '网站日志', stopHelper: '停止站点后将无法正常访问,用户访问会显示当前站点停止页面,是否继续操作?', startHelper: '启用站点后,用户可以正常访问网站内容,是否继续操作?', sitePath: '网站目录', @@ -2253,7 +2255,6 @@ const message = { folderTitle: '网站主要包含以下文件夹', wafFolder: '防火墙规则', indexFolder: '网站 root 目录(PHP 运行环境 静态网站代码存放目录)', - logFolder: '网站日志', sslFolder: '网站证书', enableOrNot: '是否启用', oldSSL: '选择已有证书', diff --git a/frontend/src/views/cronjob/cronjob/config/clean-log.vue b/frontend/src/views/cronjob/cronjob/config/clean-log.vue new file mode 100644 index 000000000000..09ef32dc44b2 --- /dev/null +++ b/frontend/src/views/cronjob/cronjob/config/clean-log.vue @@ -0,0 +1,31 @@ + + + diff --git a/frontend/src/views/cronjob/cronjob/helper.ts b/frontend/src/views/cronjob/cronjob/helper.ts index 12a0aad989b1..46f9ecf6dad0 100644 --- a/frontend/src/views/cronjob/cronjob/helper.ts +++ b/frontend/src/views/cronjob/cronjob/helper.ts @@ -201,3 +201,19 @@ export function hasBackup(type: string) { type === 'cutWebsiteLog' ); } + +export const cronjobTypes = [ + { value: 'shell', label: i18n.global.t('cronjob.shell') }, + { value: 'app', label: i18n.global.t('cronjob.app') }, + { value: 'website', label: i18n.global.t('cronjob.website') }, + { value: 'database', label: i18n.global.t('cronjob.database') }, + { value: 'directory', label: i18n.global.t('cronjob.directory') }, + { value: 'log', label: i18n.global.t('cronjob.log') }, + { value: 'curl', label: i18n.global.t('cronjob.curl') }, + { value: 'cutWebsiteLog', label: i18n.global.t('cronjob.cutWebsiteLog') }, + { value: 'clean', label: i18n.global.t('setting.diskClean') }, + { value: 'snapshot', label: i18n.global.t('cronjob.snapshot') }, + { value: 'ntp', label: i18n.global.t('cronjob.ntp') }, + { value: 'syncIpGroup', label: i18n.global.t('cronjob.syncIpGroup') }, + { value: 'cleanLog', label: i18n.global.t('cronjob.cleanLog') }, +]; diff --git a/frontend/src/views/cronjob/cronjob/operate/index.vue b/frontend/src/views/cronjob/cronjob/operate/index.vue index 5578ad58b046..a41620675db7 100644 --- a/frontend/src/views/cronjob/cronjob/operate/index.vue +++ b/frontend/src/views/cronjob/cronjob/operate/index.vue @@ -15,18 +15,12 @@ @change="changeType" v-model="form.type" > - - - - - - - - - - - - +
{{ $t('cronjob.' + form.type) }} @@ -94,6 +88,12 @@ + + @@ -756,17 +756,19 @@