mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-06 05:04:22 +00:00
- Update go.mod module path from mhsanaei/3x-ui/v3 to saeederamy/3x-ui/v3 - Update all 73 Go files' import paths accordingly - Fix README.fa_IR.md install command to point to fork's main branch The fork was referencing the original repo's module path in go.mod and all Go source imports, making it dependent on MHSanaei's namespace at build time. https://claude.ai/code/session_01M6d5atbWjuLTj6UwRHoK5m
78 lines
2.1 KiB
Go
78 lines
2.1 KiB
Go
package job
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/saeederamy/3x-ui/v3/logger"
|
|
"github.com/saeederamy/3x-ui/v3/xray"
|
|
)
|
|
|
|
// ClearLogsJob clears old log files to prevent disk space issues.
|
|
type ClearLogsJob struct{}
|
|
|
|
// NewClearLogsJob creates a new log cleanup job instance.
|
|
func NewClearLogsJob() *ClearLogsJob {
|
|
return new(ClearLogsJob)
|
|
}
|
|
|
|
// ensureFileExists creates the necessary directories and file if they don't exist
|
|
func ensureFileExists(path string) error {
|
|
dir := filepath.Dir(path)
|
|
if err := os.MkdirAll(dir, 0755); err != nil {
|
|
return err
|
|
}
|
|
|
|
file, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, 0644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
file.Close()
|
|
return nil
|
|
}
|
|
|
|
// Here Run is an interface method of the Job interface
|
|
func (j *ClearLogsJob) Run() {
|
|
logFiles := []string{xray.GetIPLimitLogPath(), xray.GetIPLimitBannedLogPath(), xray.GetAccessPersistentLogPath()}
|
|
logFilesPrev := []string{xray.GetIPLimitBannedPrevLogPath(), xray.GetAccessPersistentPrevLogPath()}
|
|
|
|
// Ensure all log files and their paths exist
|
|
for _, path := range append(logFiles, logFilesPrev...) {
|
|
if err := ensureFileExists(path); err != nil {
|
|
logger.Warning("Failed to ensure log file exists:", path, "-", err)
|
|
}
|
|
}
|
|
|
|
// Clear log files and copy to previous logs
|
|
for i := range len(logFiles) {
|
|
if i > 0 {
|
|
// Copy to previous logs
|
|
logFilePrev, err := os.OpenFile(logFilesPrev[i-1], os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
|
|
if err != nil {
|
|
logger.Warning("Failed to open previous log file for writing:", logFilesPrev[i-1], "-", err)
|
|
continue
|
|
}
|
|
|
|
logFile, err := os.OpenFile(logFiles[i], os.O_RDONLY, 0644)
|
|
if err != nil {
|
|
logger.Warning("Failed to open current log file for reading:", logFiles[i], "-", err)
|
|
logFilePrev.Close()
|
|
continue
|
|
}
|
|
|
|
_, err = io.Copy(logFilePrev, logFile)
|
|
if err != nil {
|
|
logger.Warning("Failed to copy log file:", logFiles[i], "to", logFilesPrev[i-1], "-", err)
|
|
}
|
|
|
|
logFile.Close()
|
|
logFilePrev.Close()
|
|
}
|
|
|
|
err := os.Truncate(logFiles[i], 0)
|
|
if err != nil {
|
|
logger.Warning("Failed to truncate log file:", logFiles[i], "-", err)
|
|
}
|
|
}
|
|
}
|