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.
85 lines
2.3 KiB
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
|
|
}
|
|
|