(req request.FileReadByLineReq)
| 1026 | } |
| 1027 | |
| 1028 | func (f *FileService) ReadLogByLine(req request.FileReadByLineReq) (*response.FileLineContent, error) { |
| 1029 | logFilePath := "" |
| 1030 | taskStatus := "" |
| 1031 | if len(req.Name) != 0 { |
| 1032 | safeName := path.Base(req.Name) |
| 1033 | if safeName != req.Name || strings.Contains(safeName, "..") { |
| 1034 | return nil, buserr.New("ErrInvalidParams") |
| 1035 | } |
| 1036 | } |
| 1037 | switch req.Type { |
| 1038 | case constant.TypeWebsite: |
| 1039 | website, err := websiteRepo.GetFirst(repo.WithByID(req.ID)) |
| 1040 | if err != nil { |
| 1041 | return nil, err |
| 1042 | } |
| 1043 | logFilePath = GetSitePath(website, req.Name) |
| 1044 | case constant.TypePhp: |
| 1045 | php, err := runtimeRepo.GetFirst(context.Background(), repo.WithByID(req.ID)) |
| 1046 | if err != nil { |
| 1047 | return nil, err |
| 1048 | } |
| 1049 | logFilePath = php.GetLogPath() |
| 1050 | case constant.TypeSSL: |
| 1051 | ssl, err := websiteSSLRepo.GetFirst(repo.WithByID(req.ID)) |
| 1052 | if err != nil { |
| 1053 | return nil, err |
| 1054 | } |
| 1055 | logFilePath = ssl.GetLogPath() |
| 1056 | case constant.TypeSystem: |
| 1057 | fileName := "" |
| 1058 | if len(req.Name) == 0 { |
| 1059 | fileName = "1Panel.log" |
| 1060 | } else { |
| 1061 | if strings.HasSuffix(req.Name, time.Now().Format("2006-01-02")) { |
| 1062 | fileName = "1Panel.log" |
| 1063 | if strings.HasPrefix(req.Name, "Core-") { |
| 1064 | fileName = "1Panel-Core.log" |
| 1065 | } |
| 1066 | } else { |
| 1067 | fileName = "1Panel-" + req.Name + ".log" |
| 1068 | } |
| 1069 | } |
| 1070 | logFilePath = path.Join(global.Dir.DataDir, "log", fileName) |
| 1071 | if _, err := os.Stat(logFilePath); err != nil { |
| 1072 | fileGzPath := path.Join(global.Dir.DataDir, "log", fileName+".gz") |
| 1073 | if _, err := os.Stat(fileGzPath); err != nil { |
| 1074 | return nil, buserr.New("ErrHttpReqNotFound") |
| 1075 | } |
| 1076 | if err := handleGunzip(fileGzPath); err != nil { |
| 1077 | return nil, fmt.Errorf("handle ungzip file %s failed, err: %v", fileGzPath, err) |
| 1078 | } |
| 1079 | } |
| 1080 | case constant.TypeTask: |
| 1081 | var opts []repo.DBOption |
| 1082 | if req.TaskID != "" { |
| 1083 | opts = append(opts, taskRepo.WithByID(req.TaskID)) |
| 1084 | } else { |
| 1085 | opts = append(opts, repo.WithOrderRuleBy("created_at", "desc"), repo.WithByType(req.TaskType), taskRepo.WithOperate(req.TaskOperate), taskRepo.WithResourceID(req.ResourceID)) |
nothing calls this directly
no test coverage detected