mirror of https://github.com/1Panel-dev/1Panel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
1.9 KiB
82 lines
1.9 KiB
4 months ago
|
package service
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"path"
|
||
|
"path/filepath"
|
||
|
"sort"
|
||
|
"strings"
|
||
|
"time"
|
||
|
|
||
|
"github.com/1Panel-dev/1Panel/agent/buserr"
|
||
|
"github.com/1Panel-dev/1Panel/agent/global"
|
||
|
)
|
||
|
|
||
|
type LogService struct{}
|
||
|
|
||
|
type ILogService interface {
|
||
|
ListSystemLogFile() ([]string, error)
|
||
|
LoadSystemLog(name string) (string, error)
|
||
|
}
|
||
|
|
||
|
func NewILogService() ILogService {
|
||
|
return &LogService{}
|
||
|
}
|
||
|
|
||
|
func (u *LogService) ListSystemLogFile() ([]string, error) {
|
||
|
logDir := path.Join(global.CONF.System.BaseDir, "1panel/log")
|
||
|
var files []string
|
||
|
if err := filepath.Walk(logDir, func(pathItem string, info os.FileInfo, err error) error {
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if !info.IsDir() && strings.HasPrefix(info.Name(), "1Panel") {
|
||
|
if info.Name() == "1Panel.log" {
|
||
|
files = append(files, time.Now().Format("2006-01-02"))
|
||
|
return nil
|
||
|
}
|
||
|
itemFileName := strings.TrimPrefix(info.Name(), "1Panel-")
|
||
|
itemFileName = strings.TrimSuffix(itemFileName, ".gz")
|
||
|
itemFileName = strings.TrimSuffix(itemFileName, ".log")
|
||
|
files = append(files, itemFileName)
|
||
|
return nil
|
||
|
}
|
||
|
return nil
|
||
|
}); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if len(files) < 2 {
|
||
|
return files, nil
|
||
|
}
|
||
|
sort.Slice(files, func(i, j int) bool {
|
||
|
return files[i] > files[j]
|
||
|
})
|
||
|
|
||
|
return files, nil
|
||
|
}
|
||
|
|
||
|
func (u *LogService) LoadSystemLog(name string) (string, error) {
|
||
|
if name == time.Now().Format("2006-01-02") {
|
||
|
name = "1Panel.log"
|
||
|
} else {
|
||
|
name = "1Panel-" + name + ".log"
|
||
|
}
|
||
|
filePath := path.Join(global.CONF.System.DataDir, "log", name)
|
||
|
if _, err := os.Stat(filePath); err != nil {
|
||
|
fileGzPath := path.Join(global.CONF.System.DataDir, "log", name+".gz")
|
||
|
if _, err := os.Stat(fileGzPath); err != nil {
|
||
|
return "", buserr.New("ErrHttpReqNotFound")
|
||
|
}
|
||
|
if err := handleGunzip(fileGzPath); err != nil {
|
||
|
return "", fmt.Errorf("handle ungzip file %s failed, err: %v", fileGzPath, err)
|
||
|
}
|
||
|
}
|
||
|
content, err := os.ReadFile(filePath)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
return string(content), nil
|
||
|
}
|