|
- package urchin
-
- import (
- "code.gitea.io/gitea/modules/labelmsg"
- "code.gitea.io/gitea/modules/setting"
- "encoding/json"
- "fmt"
- "strings"
-
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/log"
- )
-
- type DecompressReq struct {
- SourceFile string `json:"source_file"`
- DestPath string `json:"dest_path"`
- }
-
- const (
- modelSuffix = "models.zip"
- )
-
- var urfsClient Urchinfs
-
- func getUrfsClient() {
- if urfsClient != nil {
- return
- }
-
- urfsClient = New()
- }
-
- func GetBackNpuModel(cloudbrainID int64, endpoint, bucket, objectKey, destPeerHost string) error {
- getUrfsClient()
- res, err := urfsClient.ScheduleDataToPeerByKey(endpoint, bucket, objectKey, destPeerHost)
- if err != nil {
- log.Error("ScheduleDataToPeerByKey failed:%v", err)
- return err
- }
-
- _, err = models.InsertScheduleRecord(&models.ScheduleRecord{
- CloudbrainID: cloudbrainID,
- EndPoint: res.DataEndpoint,
- Bucket: res.DataRoot,
- ObjectKey: res.DataPath,
- ProxyServer: destPeerHost,
- Status: res.StatusCode,
- })
- if err != nil {
- log.Error("InsertScheduleRecord failed:%v", err)
- return err
- }
-
- switch res.StatusCode {
- case models.StorageScheduleSucceed:
- log.Info("ScheduleDataToPeerByKey succeed")
- decompress(res.DataRoot+"/"+res.DataPath, setting.Bucket+"/"+strings.TrimSuffix(res.DataPath, modelSuffix))
- case models.StorageScheduleProcessing:
- log.Info("ScheduleDataToPeerByKey processing")
- case models.StorageScheduleFailed:
- log.Error("ScheduleDataToPeerByKey failed:%s", res.StatusMsg)
- return fmt.Errorf("GetBackNpuModel failed:%s", res.StatusMsg)
- default:
- log.Info("ScheduleDataToPeerByKey failed, unknown StatusCode:%d", res.StatusCode)
- return fmt.Errorf("GetBackNpuModel failed, unknow StatusCode:%d", res.StatusCode)
- }
-
- return nil
- }
-
- func HandleScheduleRecords() error {
- getUrfsClient()
- records, err := models.GetSchedulingRecord()
- if err != nil {
- log.Error("GetSchedulingRecord failed:%v", err)
- return err
- }
-
- for _, record := range records {
- res, err := urfsClient.CheckScheduleTaskStatusByKey(record.EndPoint, record.Bucket, record.ObjectKey, record.ProxyServer)
- if err != nil {
- log.Error("CheckScheduleTaskStatusByKey(%d) failed:%v", record.ID, err)
- continue
- }
-
- record.Status = res.StatusCode
- models.UpdateScheduleCols(record, "status")
-
- switch res.StatusCode {
- case models.StorageScheduleSucceed:
- log.Info("ScheduleDataToPeerByKey(%s) succeed", record.ObjectKey)
- decompress(record.Bucket+"/"+record.ObjectKey, setting.Bucket+"/"+strings.TrimSuffix(record.ObjectKey, modelSuffix))
- case models.StorageScheduleProcessing:
- log.Info("ScheduleDataToPeerByKey(%s) processing", record.ObjectKey)
- case models.StorageScheduleFailed:
- log.Error("ScheduleDataToPeerByKey(%s) failed:%s", record.ObjectKey, res.StatusMsg)
-
- default:
- log.Info("ScheduleDataToPeerByKey(%s) failed, unknown StatusCode:%d", record.ObjectKey, res.StatusCode)
- }
-
- }
-
- return nil
- }
-
- func decompress(sourceFile, destPath string) {
- req, _ := json.Marshal(DecompressReq{
- SourceFile: sourceFile,
- DestPath: destPath,
- })
- err := labelmsg.SendDecompressAttachToLabelOBS(string(req))
- if err != nil {
- log.Error("SendDecompressTask to labelsystem (%s) failed:%s", sourceFile, err.Error())
- }
- }
|