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.
 
 
 
 
 
 
openim-sdk-cpp/go/chao-sdk-core/internal/third/log.go

85 lines
2.3 KiB

package third
import (
"context"
"errors"
"fmt"
"github.com/openimsdk/openim-sdk-core/v3/internal/file"
"github.com/openimsdk/openim-sdk-core/v3/internal/util"
"github.com/openimsdk/openim-sdk-core/v3/pkg/ccontext"
"github.com/openimsdk/openim-sdk-core/v3/pkg/constant"
"github.com/openimsdk/protocol/third"
"io"
"math/rand"
"os"
"path/filepath"
"strings"
"time"
)
func (c *Third) UploadLogs(ctx context.Context, progress Progress) error {
logFilePath := c.LogFilePath
entrys, err := os.ReadDir(logFilePath)
if err != nil {
return err
}
files := make([]string, 0, len(entrys))
for _, entry := range entrys {
if (!entry.IsDir()) && (!strings.HasSuffix(entry.Name(), ".zip")) && checkLogPath(entry.Name()) {
files = append(files, filepath.Join(logFilePath, entry.Name()))
}
}
if len(files) == 0 {
return errors.New("not found log file")
}
zippath := filepath.Join(logFilePath, fmt.Sprintf("%d_%d.zip", time.Now().UnixMilli(), rand.Uint32()))
defer os.Remove(zippath)
if err := zipFiles(zippath, files); err != nil {
return err
}
reqUpload := &file.UploadFileReq{Filepath: zippath, Name: fmt.Sprintf("sdk_log_%s_%s", c.loginUserID, filepath.Base(zippath)), Cause: "sdklog", ContentType: "application/zip"}
resp, err := c.fileUploader.UploadFile(ctx, reqUpload, &progressConvert{ctx: ctx, p: progress})
if err != nil {
return err
}
ccontext.Info(ctx)
reqLog := &third.UploadLogsReq{
Platform: c.platformID,
SystemType: c.systemType,
Version: c.version,
FileURLs: []*third.FileURL{{Filename: zippath, URL: resp.URL}},
}
_, err = util.CallApi[third.UploadLogsResp](ctx, constant.UploadLogsRouter, reqLog)
return err
}
func checkLogPath(logPath string) bool {
if len(logPath) < len("open-im-sdk-core.yyyy-mm-dd") {
return false
}
logTime := logPath[len(logPath)-len(".yyyy-mm-dd"):]
if _, err := time.Parse(".2006-01-02", logTime); err != nil {
return false
}
if !strings.HasPrefix(logPath, "open-im-sdk-core.") {
return false
}
return true
}
func (c *Third) fileCopy(src, dst string) error {
_ = os.RemoveAll(dst)
srcFile, err := os.Open(src)
if err != nil {
return err
}
defer srcFile.Close()
dstFile, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY, 0777)
if err != nil {
return err
}
defer dstFile.Close()
_, err = io.Copy(dstFile, srcFile)
return err
}