1 Star 0 Fork 0

李童 / cmdb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
task.go 3.33 KB
一键复制 编辑 原始数据 按行查看 历史
李童 提交于 2023-03-05 16:40 . 提交restful init
package impl
import (
"context"
"fmt"
"time"
resouce "gitee.com/vak80/cmdb/apps/resource"
"gitee.com/vak80/cmdb/apps/secret"
"gitee.com/vak80/cmdb/apps/task"
"gitee.com/vak80/cmdb/conf"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
func (i *impl) CreateTask(ctx context.Context, req *task.CreateTaskRequst) (*task.Task, error) {
//1.查询secret
ins, err := task.NewTask(req)
if err != nil {
return nil, err
}
// filename := "instance.txt"
// file, err := os.Create(filename)
// if err != nil {
// i.log.Error("创建文件失败")
// return nil, err
// }
// defer func() {
// _ = file.Close()
// }()
i.log.Debug("query secret key by secret id")
s, err := i.secret.DescribeSecret(ctx, secret.NewDescribeSecretRequest(req.SecretId))
if err != nil {
return nil, err
}
//解密 screte key
if err := s.Data.DecryptAPISecret(conf.C().App.EncryptKey); err != nil {
return nil, err
}
ins.Run()
var taskCancel context.CancelFunc
switch req.Type {
case task.TaskType_RESOURCE_SYNC:
switch s.Data.Vendor {
case resouce.Vendor_TENCENT:
switch req.ResourceType {
case resouce.Type_HOST:
// //实现腾讯云下的主机资源同步任务
// txConn := connectivity.NewTencentCloudClient(s.Data.ApiKey, s.Data.ApiSecret, s.Data.AllowRegionString())
// cvmclient, err := txConn.CvmClient()
// if err != nil {
// return nil, err
// }
// cvmOperator := cvm.NewCVMOperator(cvmclient)
// //同步资源分页查询默认pagesize 20
// pagger := cvm.NewPagger(cvmOperator)
// ins.Run()
// for pagger.Next() {
// set := machine.NewHostSet()
// //查询分页数据
// if err := pagger.Scan(ctx, set); err != nil {
// ins.Failed(err.Error())
// return nil, err
// }
// //保存该页数据到,同步时间,记录日志
// for index := range set.Items {
// _, err := i.host.SyncHost(ctx, set.Items[index])
// if err != nil {
// i.log.Errorf("sync host error:%s,instance:", err, set.Items[index].Information.Name)
// ins.Status.TotalFailed++
// file.WriteString(set.Items[index].Base.Id + set.Items[index].Information.Name + "\n")
// continue
// }
// ins.Status.TotalSucceed++
// }
// }
taskExecCtx, cancel := context.WithTimeout(context.Background(), time.Duration(req.Timeout)*time.Second)
taskCancel = cancel
go i.SyncHost(taskExecCtx, newSyncHostRequest(s, ins))
case resouce.Type_BILL:
case resouce.Type_RDS:
}
case resouce.Vendor_ALIYUN:
case resouce.Vendor_AMAZON:
case resouce.Vendor_HUAWEI:
}
case task.TaskType_RESOURCE_RELEASE:
default:
return nil, fmt.Errorf("unknow task type %s", req.Type)
}
//这里存入失败就取消同步任务逻辑有问题
//还没有插入就update的可能风险 可以使用channel
if err := i.insert(ctx, ins); err != nil {
if taskCancel != nil {
taskCancel()
}
return nil, err
}
// time.Sleep(10 * time.Second)
return ins, err
}
func (i *impl) QueryTask(ctx context.Context, req *task.QueryTaskRequest) (*task.TaskSet, error) {
return nil, status.Errorf(codes.Unimplemented, "method QueryBook not implemented")
}
func (i *impl) DescribeTask(ctx context.Context, req *task.DescribeTaskRequest) (*task.Task, error) {
return nil, status.Errorf(codes.Unimplemented, "method DescribeBook not implemented")
}
Go
1
https://gitee.com/vak80/cmdb.git
git@gitee.com:vak80/cmdb.git
vak80
cmdb
cmdb
v0.0.4

搜索帮助