Browse Source

ac对接core

pull/9/head
zhangwei 2 years ago
parent
commit
cfec6ac00e
19 changed files with 813 additions and 448 deletions
  1. +10
    -6
      adaptor/PCM-CORE/api/etc/pcm.yaml
  2. +2
    -4
      adaptor/PCM-CORE/api/internal/logic/core/tasklistlogic.go
  3. +19
    -4
      adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleHpc.go
  4. +1
    -1
      adaptor/PCM-CORE/model/aimodel.go
  5. +33
    -39
      adaptor/PCM-CORE/model/aimodel_gen.go
  6. +1
    -1
      adaptor/PCM-CORE/model/cloudmodel.go
  7. +45
    -51
      adaptor/PCM-CORE/model/cloudmodel_gen.go
  8. +1
    -1
      adaptor/PCM-CORE/model/hpcmodel.go
  9. +35
    -39
      adaptor/PCM-CORE/model/hpcmodel_gen.go
  10. +4
    -7
      adaptor/PCM-CORE/model/taskmodel_gen.go
  11. +39
    -33
      adaptor/PCM-CORE/rpc/internal/logic/infolistlogic.go
  12. +42
    -13
      adaptor/PCM-CORE/rpc/internal/logic/syncinfologic.go
  13. +39
    -12
      adaptor/PCM-CORE/rpc/pb/pcmCore.proto
  14. +447
    -174
      adaptor/PCM-CORE/rpc/pcmCore/pcmCore.pb.go
  15. +7
    -6
      adaptor/PCM-CORE/rpc/pcmcoreclient/pcmcore.go
  16. +68
    -37
      adaptor/PCM-HPC/PCM-AC/rpc/hpcac.go
  17. +0
    -1
      adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/submitjoblogic.go
  18. +8
    -16
      adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/pcmkubenative.go
  19. +12
    -3
      common/param/hpcBase.go

+ 10
- 6
adaptor/PCM-CORE/api/etc/pcm.yaml View File

@@ -6,9 +6,9 @@ Port: 8999
KqProducerConf:
Brokers:
- 10.101.15.174:31895
HpcTopic: Schedule-Hpc-Topic
CloudTopic: Schedule-Cloud-Topic
AiTopic: Schedule-Ai-Topic
HpcTopic: Schedule-Hpc-Topic-ZW
CloudTopic: Schedule-Cloud-Topic-ZW
AiTopic: Schedule-Ai-Topic-ZW

DB:
DataSource: root:uJpLd6u-J?HC1@(106.53.150.192:3306)/pcm?parseTime=true
@@ -27,7 +27,7 @@ HpcConsumerConf:
Brokers:
- 10.101.15.174:31895
Group: Schedule-Hpc-group
Topic: Schedule-Hpc-Topic
Topic: Schedule-Hpc-Topic-ZW
Offset: first
Consumers: 1
Processors: 1
@@ -37,7 +37,7 @@ AiConsumerConf:
Brokers:
- 10.101.15.174:31895
Group: Schedule-Ai-group
Topic: Schedule-Ai-Topic
Topic: Schedule-Ai-Topic-ZW
Offset: first
Consumers: 1
Processors: 1
@@ -47,7 +47,7 @@ CloudConsumerConf:
Brokers:
- 10.101.15.174:31895
Group: Schedule-Cloud-group
Topic: Schedule-Cloud-Topic
Topic: Schedule-Cloud-Topic-ZW
Offset: first
Consumers: 1
Processors: 1
@@ -60,6 +60,7 @@ K8sNativeConf:
Key: kubenative.rpc
User: root
Pass: I9wLvrRufj
NonBlock: true

#rpc
THRpcConf:
@@ -69,6 +70,7 @@ THRpcConf:
Key: hpcth.rpc
User: root
Pass: I9wLvrRufj
NonBlock: true

#rpc
ModelArtsRpcConf:
@@ -78,6 +80,7 @@ ModelArtsRpcConf:
Key: modelarts.rpc
User: root
Pass: I9wLvrRufj
NonBlock: true


#rpc
@@ -88,3 +91,4 @@ ACRpcConf:
Key: hpcac.rpc
User: root
Pass: I9wLvrRufj
NonBlock: true

+ 2
- 4
adaptor/PCM-CORE/api/internal/logic/core/tasklistlogic.go View File

@@ -45,10 +45,8 @@ func (l *TaskListLogic) TaskList() (resp *types.TaskListResp, err error) {
}
for _, task := range tasks {
resp.Data.TotalRunTime = int(task.RunningTime) + resp.Data.TotalRunTime
// 运行卡时数
if task.Kind == "hpc" && task.CardCount != 0 {
cardTime = int(task.RunningTime*task.CardCount) + cardTime
}
// 运行卡时数 todo

currentStatus, _ := l.svcCtx.RedisClient.Get(l.ctx, task.Status).Result()
if currentStatus == "" {
currentStatus = task.Status


+ 19
- 4
adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleHpc.go View File

@@ -3,10 +3,11 @@ package kq
import (
"PCM/adaptor/PCM-CORE/api/internal/svc"
"PCM/adaptor/PCM-CORE/api/internal/types"
"PCM/adaptor/PCM-CORE/model"
"PCM/common/param"
"PCM/common/tool"
"context"
"encoding/json"
"sigs.k8s.io/yaml"
)

/*
@@ -29,10 +30,24 @@ func (l *ScheduleHpcMq) Consume(_, val string) error {
// 接受消息
var req *types.ScheduleTaskReq
json.Unmarshal([]byte(val), &req)
var hpc model.Hpc
tool.Convert(req.Metadata, &hpc)
var hpcBaseList []param.HpcBase
tool.Convert(req.Metadata, &hpcBaseList)
for index, _ := range hpcBaseList {
hpcBaseList[index].TaskId = req.TaskId
hpcBaseList[index].Status = "Saved"
// 解析超算信息以yaml形式存储到数据库中
jsonBytes, err := json.Marshal(hpcBaseList[index])
if err != nil {
return err
}
bytes, err := yaml.JSONToYAML(jsonBytes)
if err != nil {
return err
}
hpcBaseList[index].YamlString = string(bytes)
}
// 存储数据
_, err := l.svcCtx.Db.NamedExec("insert into cloud (task_id,service_name,name,status) values (:task_id,:service_name,:name,:status)", hpc)
_, err := l.svcCtx.Db.NamedExec("insert into hpc (task_id,service_name,name,work_dir,wall_time,status) values (:task_id,:service_name,:name,:work_dir,:wall_time,:status)", hpcBaseList)
if err != nil {
return err
}


+ 1
- 1
adaptor/PCM-CORE/model/aimodel.go View File

@@ -22,6 +22,6 @@ type (
// NewAiModel returns a model for the database table.
func NewAiModel(conn sqlx.SqlConn, c cache.CacheConf) AiModel {
return &customAiModel{
defaultAiModel: newAiModel(conn, c),
defaultAiModel: newAiModel(conn),
}
}

+ 33
- 39
adaptor/PCM-CORE/model/aimodel_gen.go View File

@@ -9,7 +9,6 @@ import (
"strings"

"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
@@ -20,28 +19,27 @@ var (
aiRows = strings.Join(aiFieldNames, ",")
aiRowsExpectAutoSet = strings.Join(stringx.Remove(aiFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
aiRowsWithPlaceHolder = strings.Join(stringx.Remove(aiFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"

cachePcmAiIdPrefix = "cache:pcm:ai:id:"
)

type (
aiModel interface {
Insert(ctx context.Context, data *Ai) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Ai, error)
FindOneByServiceNameProjectIdName(ctx context.Context, serviceName sql.NullString, projectId sql.NullString, name sql.NullString) (*Ai, error)
Update(ctx context.Context, data *Ai) error
Delete(ctx context.Context, id int64) error
}

defaultAiModel struct {
sqlc.CachedConn
conn sqlx.SqlConn
table string
}

Ai struct {
Id int64 `db:"id"` // id
TaskId sql.NullInt64 `db:"task_id"` // 任务id
ProjectId string `db:"project_id"` // 项目id
Name string `db:"name"` // 名称
ProjectId sql.NullString `db:"project_id"` // 项目id
Name sql.NullString `db:"name"` // 名称
Status sql.NullString `db:"status"` // 状态
StartTime sql.NullTime `db:"start_time"` // 开始时间
RunningTime sql.NullInt64 `db:"running_time"` // 运行时间
@@ -50,32 +48,43 @@ type (
UpdatedBy sql.NullInt64 `db:"updated_by"` // 更新人
UpdatedTime sql.NullTime `db:"updated_time"` // 更新时间
DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是)
ServiceName sql.NullString `db:"service_name"`
Result sql.NullString `db:"result"`
YamlString sql.NullInt64 `db:"yaml_string"`
}
)

func newAiModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAiModel {
func newAiModel(conn sqlx.SqlConn) *defaultAiModel {
return &defaultAiModel{
CachedConn: sqlc.NewConn(conn, c),
table: "`ai`",
conn: conn,
table: "`ai`",
}
}

func (m *defaultAiModel) Delete(ctx context.Context, id int64) error {
pcmAiIdKey := fmt.Sprintf("%s%v", cachePcmAiIdPrefix, id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
return conn.ExecCtx(ctx, query, id)
}, pcmAiIdKey)
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
_, err := m.conn.ExecCtx(ctx, query, id)
return err
}

func (m *defaultAiModel) FindOne(ctx context.Context, id int64) (*Ai, error) {
pcmAiIdKey := fmt.Sprintf("%s%v", cachePcmAiIdPrefix, id)
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", aiRows, m.table)
var resp Ai
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}

func (m *defaultAiModel) FindOneByServiceNameProjectIdName(ctx context.Context, serviceName sql.NullString, projectId sql.NullString, name sql.NullString) (*Ai, error) {
var resp Ai
err := m.QueryRowCtx(ctx, &resp, pcmAiIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", aiRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id)
})
query := fmt.Sprintf("select %s from %s where `service_name` = ? and `project_id` = ? and `name` = ? limit 1", aiRows, m.table)
err := m.conn.QueryRowCtx(ctx, &resp, query, serviceName, projectId, name)
switch err {
case nil:
return &resp, nil
@@ -87,32 +96,17 @@ func (m *defaultAiModel) FindOne(ctx context.Context, id int64) (*Ai, error) {
}

func (m *defaultAiModel) Insert(ctx context.Context, data *Ai) (sql.Result, error) {
pcmAiIdKey := fmt.Sprintf("%s%v", cachePcmAiIdPrefix, data.Id)
ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, aiRowsExpectAutoSet)
return conn.ExecCtx(ctx, query, data.TaskId, data.ProjectId, data.Name, data.Status, data.StartTime, data.RunningTime, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag)
}, pcmAiIdKey)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, aiRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.TaskId, data.ProjectId, data.Name, data.Status, data.StartTime, data.RunningTime, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.ServiceName, data.Result, data.YamlString)
return ret, err
}

func (m *defaultAiModel) Update(ctx context.Context, data *Ai) error {
pcmAiIdKey := fmt.Sprintf("%s%v", cachePcmAiIdPrefix, data.Id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, aiRowsWithPlaceHolder)
return conn.ExecCtx(ctx, query, data.TaskId, data.ProjectId, data.Name, data.Status, data.StartTime, data.RunningTime, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.Id)
}, pcmAiIdKey)
func (m *defaultAiModel) Update(ctx context.Context, newData *Ai) error {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, aiRowsWithPlaceHolder)
_, err := m.conn.ExecCtx(ctx, query, newData.TaskId, newData.ProjectId, newData.Name, newData.Status, newData.StartTime, newData.RunningTime, newData.CreatedBy, newData.CreatedTime, newData.UpdatedBy, newData.UpdatedTime, newData.DeletedFlag, newData.ServiceName, newData.Result, newData.YamlString, newData.Id)
return err
}

func (m *defaultAiModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cachePcmAiIdPrefix, primary)
}

func (m *defaultAiModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", aiRows, m.table)
return conn.QueryRowCtx(ctx, v, query, primary)
}

func (m *defaultAiModel) tableName() string {
return m.table
}

+ 1
- 1
adaptor/PCM-CORE/model/cloudmodel.go View File

@@ -22,6 +22,6 @@ type (
// NewCloudModel returns a model for the database table.
func NewCloudModel(conn sqlx.SqlConn, c cache.CacheConf) CloudModel {
return &customCloudModel{
defaultCloudModel: newCloudModel(conn, c),
defaultCloudModel: newCloudModel(conn),
}
}

+ 45
- 51
adaptor/PCM-CORE/model/cloudmodel_gen.go View File

@@ -10,7 +10,6 @@ import (
"time"

"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
@@ -21,64 +20,74 @@ var (
cloudRows = strings.Join(cloudFieldNames, ",")
cloudRowsExpectAutoSet = strings.Join(stringx.Remove(cloudFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
cloudRowsWithPlaceHolder = strings.Join(stringx.Remove(cloudFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"

cachePcmCloudIdPrefix = "cache:pcm:cloud:id:"
)

type (
cloudModel interface {
Insert(ctx context.Context, data *Cloud) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Cloud, error)
FindOneByNamespaceNameServiceName(ctx context.Context, namespace sql.NullString, name sql.NullString, serviceName sql.NullString) (*Cloud, error)
Update(ctx context.Context, data *Cloud) error
Delete(ctx context.Context, id int64) error
}

defaultCloudModel struct {
sqlc.CachedConn
conn sqlx.SqlConn
table string
}

Cloud struct {
Id int64 `db:"id"` // id
TaskId int64 `db:"task_id"` // 任务id
ApiVersion string `db:"api_version"`
Name string `db:"name"` // 名称
Namespace string `db:"namespace"` // 命名空间
Kind string `db:"kind"` // 种类
Status string `db:"status"` // 状态
StartTime time.Time `db:"start_time"` // 开始时间
RunningTime int64 `db:"running_time"` // 运行时长
CreatedBy sql.NullInt64 `db:"created_by"` // 创建人
CreatedTime time.Time `db:"created_time"` // 创建时间
UpdatedBy sql.NullInt64 `db:"updated_by"` // 更新人
UpdatedTime time.Time `db:"updated_time"` // 更新时间
DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是)
Id int64 `db:"id"` // id
TaskId int64 `db:"task_id"` // 任务id
ApiVersion string `db:"api_version"`
Name string `db:"name"` // 名称
Namespace string `db:"namespace"` // 命名空间
Kind string `db:"kind"` // 种类
Status string `db:"status"` // 状态
StartTime time.Time `db:"start_time"` // 开始时间
RunningTime int64 `db:"running_time"` // 运行时长
CreatedBy int64 `db:"created_by"` // 创建人
CreatedTime time.Time `db:"created_time"` // 创建时间
UpdatedBy int64 `db:"updated_by"` // 更新人
UpdatedTime time.Time `db:"updated_time"` // 更新时间
DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是)
ServiceName string `db:"service_name"`
YamlString string `db:"yaml_string"`
Result string `db:"result"`
}
)

func newCloudModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultCloudModel {
func newCloudModel(conn sqlx.SqlConn) *defaultCloudModel {
return &defaultCloudModel{
CachedConn: sqlc.NewConn(conn, c),
table: "`cloud`",
conn: conn,
table: "`cloud`",
}
}

func (m *defaultCloudModel) Delete(ctx context.Context, id int64) error {
pcmCloudIdKey := fmt.Sprintf("%s%v", cachePcmCloudIdPrefix, id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
return conn.ExecCtx(ctx, query, id)
}, pcmCloudIdKey)
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
_, err := m.conn.ExecCtx(ctx, query, id)
return err
}

func (m *defaultCloudModel) FindOne(ctx context.Context, id int64) (*Cloud, error) {
pcmCloudIdKey := fmt.Sprintf("%s%v", cachePcmCloudIdPrefix, id)
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", cloudRows, m.table)
var resp Cloud
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}

func (m *defaultCloudModel) FindOneByNamespaceNameServiceName(ctx context.Context, namespace sql.NullString, name sql.NullString, serviceName sql.NullString) (*Cloud, error) {
var resp Cloud
err := m.QueryRowCtx(ctx, &resp, pcmCloudIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", cloudRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id)
})
query := fmt.Sprintf("select %s from %s where `namespace` = ? and `name` = ? and `service_name` = ? limit 1", cloudRows, m.table)
err := m.conn.QueryRowCtx(ctx, &resp, query, namespace, name, serviceName)
switch err {
case nil:
return &resp, nil
@@ -90,32 +99,17 @@ func (m *defaultCloudModel) FindOne(ctx context.Context, id int64) (*Cloud, erro
}

func (m *defaultCloudModel) Insert(ctx context.Context, data *Cloud) (sql.Result, error) {
pcmCloudIdKey := fmt.Sprintf("%s%v", cachePcmCloudIdPrefix, data.Id)
ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, cloudRowsExpectAutoSet)
return conn.ExecCtx(ctx, query, data.TaskId, data.ApiVersion, data.Name, data.Namespace, data.Kind, data.Status, data.StartTime, data.RunningTime, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag)
}, pcmCloudIdKey)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, cloudRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.TaskId, data.ApiVersion, data.Name, data.Namespace, data.Kind, data.Status, data.StartTime, data.RunningTime, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.ServiceName, data.YamlString, data.Result)
return ret, err
}

func (m *defaultCloudModel) Update(ctx context.Context, data *Cloud) error {
pcmCloudIdKey := fmt.Sprintf("%s%v", cachePcmCloudIdPrefix, data.Id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, cloudRowsWithPlaceHolder)
return conn.ExecCtx(ctx, query, data.TaskId, data.ApiVersion, data.Name, data.Namespace, data.Kind, data.Status, data.StartTime, data.RunningTime, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.Id)
}, pcmCloudIdKey)
func (m *defaultCloudModel) Update(ctx context.Context, newData *Cloud) error {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, cloudRowsWithPlaceHolder)
_, err := m.conn.ExecCtx(ctx, query, newData.TaskId, newData.ApiVersion, newData.Name, newData.Namespace, newData.Kind, newData.Status, newData.StartTime, newData.RunningTime, newData.CreatedBy, newData.CreatedTime, newData.UpdatedBy, newData.UpdatedTime, newData.DeletedFlag, newData.ServiceName, newData.YamlString, newData.Result, newData.Id)
return err
}

func (m *defaultCloudModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cachePcmCloudIdPrefix, primary)
}

func (m *defaultCloudModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", cloudRows, m.table)
return conn.QueryRowCtx(ctx, v, query, primary)
}

func (m *defaultCloudModel) tableName() string {
return m.table
}

+ 1
- 1
adaptor/PCM-CORE/model/hpcmodel.go View File

@@ -22,6 +22,6 @@ type (
// NewHpcModel returns a model for the database table.
func NewHpcModel(conn sqlx.SqlConn, c cache.CacheConf) HpcModel {
return &customHpcModel{
defaultHpcModel: newHpcModel(conn, c),
defaultHpcModel: newHpcModel(conn),
}
}

+ 35
- 39
adaptor/PCM-CORE/model/hpcmodel_gen.go View File

@@ -7,9 +7,9 @@ import (
"database/sql"
"fmt"
"strings"
"time"

"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
@@ -20,20 +20,19 @@ var (
hpcRows = strings.Join(hpcFieldNames, ",")
hpcRowsExpectAutoSet = strings.Join(stringx.Remove(hpcFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
hpcRowsWithPlaceHolder = strings.Join(stringx.Remove(hpcFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"

cachePcmHpcIdPrefix = "cache:pcm:hpc:id:"
)

type (
hpcModel interface {
Insert(ctx context.Context, data *Hpc) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Hpc, error)
FindOneByServiceNameName(ctx context.Context, serviceName sql.NullString, name sql.NullString) (*Hpc, error)
Update(ctx context.Context, data *Hpc) error
Delete(ctx context.Context, id int64) error
}

defaultHpcModel struct {
sqlc.CachedConn
conn sqlx.SqlConn
table string
}

@@ -48,36 +47,48 @@ type (
RunningTime sql.NullInt64 `db:"running_time"` // 运行时间
CardCount sql.NullInt64 `db:"card_count"` // 卡数
CreatedBy sql.NullInt64 `db:"created_by"` // 创建人
CreatedTime sql.NullTime `db:"created_time"` // 创建时间
CreatedTime time.Time `db:"created_time"` // 创建时间
UpdatedBy sql.NullInt64 `db:"updated_by"` // 更新人
UpdatedTime sql.NullTime `db:"updated_time"` // 更新时间
UpdatedTime time.Time `db:"updated_time"` // 更新时间
DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是)
WorkDir sql.NullString `db:"work_dir"`
WallTime sql.NullString `db:"wall_time"`
Result sql.NullString `db:"result"`
YamlString sql.NullString `db:"yaml_string"`
}
)

func newHpcModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultHpcModel {
func newHpcModel(conn sqlx.SqlConn) *defaultHpcModel {
return &defaultHpcModel{
CachedConn: sqlc.NewConn(conn, c),
table: "`hpc`",
conn: conn,
table: "`hpc`",
}
}

func (m *defaultHpcModel) Delete(ctx context.Context, id int64) error {
pcmHpcIdKey := fmt.Sprintf("%s%v", cachePcmHpcIdPrefix, id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
return conn.ExecCtx(ctx, query, id)
}, pcmHpcIdKey)
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
_, err := m.conn.ExecCtx(ctx, query, id)
return err
}

func (m *defaultHpcModel) FindOne(ctx context.Context, id int64) (*Hpc, error) {
pcmHpcIdKey := fmt.Sprintf("%s%v", cachePcmHpcIdPrefix, id)
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", hpcRows, m.table)
var resp Hpc
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}

func (m *defaultHpcModel) FindOneByServiceNameName(ctx context.Context, serviceName sql.NullString, name sql.NullString) (*Hpc, error) {
var resp Hpc
err := m.QueryRowCtx(ctx, &resp, pcmHpcIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", hpcRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id)
})
query := fmt.Sprintf("select %s from %s where `service_name` = ? and `name` = ? limit 1", hpcRows, m.table)
err := m.conn.QueryRowCtx(ctx, &resp, query, serviceName, name)
switch err {
case nil:
return &resp, nil
@@ -89,32 +100,17 @@ func (m *defaultHpcModel) FindOne(ctx context.Context, id int64) (*Hpc, error) {
}

func (m *defaultHpcModel) Insert(ctx context.Context, data *Hpc) (sql.Result, error) {
pcmHpcIdKey := fmt.Sprintf("%s%v", cachePcmHpcIdPrefix, data.Id)
ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, hpcRowsExpectAutoSet)
return conn.ExecCtx(ctx, query, data.TaskId, data.JobId, data.ServiceName, data.Name, data.Status, data.StartTime, data.RunningTime, data.CardCount, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag)
}, pcmHpcIdKey)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, hpcRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.TaskId, data.JobId, data.ServiceName, data.Name, data.Status, data.StartTime, data.RunningTime, data.CardCount, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.WorkDir, data.WallTime, data.Result, data.YamlString)
return ret, err
}

func (m *defaultHpcModel) Update(ctx context.Context, data *Hpc) error {
pcmHpcIdKey := fmt.Sprintf("%s%v", cachePcmHpcIdPrefix, data.Id)
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, hpcRowsWithPlaceHolder)
return conn.ExecCtx(ctx, query, data.TaskId, data.JobId, data.ServiceName, data.Name, data.Status, data.StartTime, data.RunningTime, data.CardCount, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.Id)
}, pcmHpcIdKey)
func (m *defaultHpcModel) Update(ctx context.Context, newData *Hpc) error {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, hpcRowsWithPlaceHolder)
_, err := m.conn.ExecCtx(ctx, query, newData.TaskId, newData.JobId, newData.ServiceName, newData.Name, newData.Status, newData.StartTime, newData.RunningTime, newData.CardCount, newData.CreatedBy, newData.CreatedTime, newData.UpdatedBy, newData.UpdatedTime, newData.DeletedFlag, newData.WorkDir, newData.WallTime, newData.Result, newData.YamlString, newData.Id)
return err
}

func (m *defaultHpcModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cachePcmHpcIdPrefix, primary)
}

func (m *defaultHpcModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", hpcRows, m.table)
return conn.QueryRowCtx(ctx, v, query, primary)
}

func (m *defaultHpcModel) tableName() string {
return m.table
}

+ 4
- 7
adaptor/PCM-CORE/model/taskmodel_gen.go View File

@@ -36,9 +36,7 @@ type (
}

Task struct {
Id int64 `db:"id"` // id
ServiceId int64 `db:"service_id"` // 服务id
JobId string `db:"job_id"`
Id int64 `db:"id"` // id
Name string `db:"name"` // 作业名称
ServiceName string `db:"service_name"` // 服务名称
Description string `db:"description"` // 作业描述
@@ -46,7 +44,6 @@ type (
Status string `db:"status"` // 作业状态
Strategy int64 `db:"strategy"` // 策略
SynergyStatus int64 `db:"synergy_status"` // 协同状态(0-未协同、1-已协同)
CardCount int64 `db:"card_count"` // 卡数
StartTime time.Time `db:"start_time"` // 开始运行时间
EndTime string `db:"end_time"` // 结束运行时间
RunningTime int64 `db:"running_time"` // 已运行时间(单位秒)
@@ -88,14 +85,14 @@ func (m *defaultTaskModel) FindOne(ctx context.Context, id int64) (*Task, error)
}

func (m *defaultTaskModel) Insert(ctx context.Context, data *Task) (sql.Result, error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, taskRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.ServiceId, data.JobId, data.Name, data.ServiceName, data.Description, data.Kind, data.Status, data.Strategy, data.SynergyStatus, data.CardCount, data.StartTime, data.EndTime, data.RunningTime, data.YamlString, data.Result, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, taskRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.Name, data.ServiceName, data.Description, data.Kind, data.Status, data.Strategy, data.SynergyStatus, data.StartTime, data.EndTime, data.RunningTime, data.YamlString, data.Result, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag)
return ret, err
}

func (m *defaultTaskModel) Update(ctx context.Context, data *Task) error {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, taskRowsWithPlaceHolder)
_, err := m.conn.ExecCtx(ctx, query, data.ServiceId, data.JobId, data.Name, data.ServiceName, data.Description, data.Kind, data.Status, data.Strategy, data.SynergyStatus, data.CardCount, data.StartTime, data.EndTime, data.RunningTime, data.YamlString, data.Result, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.Id)
_, err := m.conn.ExecCtx(ctx, query, data.Name, data.ServiceName, data.Description, data.Kind, data.Status, data.Strategy, data.SynergyStatus, data.StartTime, data.EndTime, data.RunningTime, data.YamlString, data.Result, data.CreatedBy, data.CreatedTime, data.UpdatedBy, data.UpdatedTime, data.DeletedFlag, data.Id)
return err
}



+ 39
- 33
adaptor/PCM-CORE/rpc/internal/logic/infolistlogic.go View File

@@ -1,9 +1,10 @@
package logic

import (
"PCM/adaptor/PCM-CORE/model"
"PCM/adaptor/PCM-CORE/rpc/internal/svc"
"PCM/adaptor/PCM-CORE/rpc/pcmCore"
result2 "PCM/common/result"
"PCM/common/tool"
"context"

"github.com/zeromicro/go-zero/core/logx"
@@ -27,45 +28,50 @@ func NewInfoListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoList
func (l *InfoListLogic) InfoList(in *pcmCore.InfoListReq) (*pcmCore.InfoListResp, error) {
result := pcmCore.InfoListResp{}
// 查询云智超中的数据列表
var sql string
switch in.Kind {
case "hpc":
sql = "select h.task_id,h.name,h.job_id as externalField,h.status from hpc h inner join task t on t.id = h.task_id where h.status not in ('Succeed', 'Completed')"
rows, err := l.svcCtx.Db.Query("select task_id,name,status,work_dir,wall_time from hpc where service_name = ? and status not in ('Succeed', 'Completed')", in.ServiceName)
if err != nil {
return nil, err
}
for rows.Next() {
var hpc model.Hpc
rows.Scan(&hpc.TaskId, &hpc.Name, &hpc.Status, &hpc.WorkDir, &hpc.WallTime)
hpcInfo := pcmCore.HpcInfo{
TaskId: hpc.TaskId.Int64,
Name: hpc.Name.String,
Status: hpc.Status.String,
WorkDir: hpc.WorkDir.String,
WallTime: hpc.WallTime.String,
}
result.HpcInfoList = append(result.HpcInfoList, &hpcInfo)
}

case "cloud":
sql = "select c.task_id,c.name,c.namespace as externalField,c.status from cloud c inner join task t on t.id = c.task_id where c.status not in ('Succeed', 'Completed')"
rows, err := l.svcCtx.Db.Query("select task_id,namespace,name,status from cloud where service_name = ? and status not in ('Succeed', 'Completed')", in.ServiceName)
if err != nil {

return nil, err
}
for rows.Next() {
var cloud model.Cloud
rows.Scan(&cloud.TaskId, &cloud.Namespace, &cloud.Name, &cloud.Status)
var cloudInfo pcmCore.CloudInfo
tool.Convert(cloud, &cloudInfo)
result.CloudInfoList = append(result.CloudInfoList, &cloudInfo)
}
case "ai":
sql = "select a.task_id,a.name,a.project_id as externalField,a.status from ai a inner join task t on t.id = a.task_id where a.status not in ('Succeed', 'Completed')"
}
rows, err := l.svcCtx.Db.Query(sql)
if err != nil {
logx.Error(err)
return nil, result2.NewDefaultError(err.Error())
}
for rows.Next() {
externalInfo := pcmCore.ExternalInfo{}
rows.Scan(&externalInfo.TaskId, &externalInfo.Name, &externalInfo.ExternalField, &externalInfo.Status)
result.ExternalInfoList = append(result.ExternalInfoList, &externalInfo)
}
// 查询待分发的任务列表
taskRows, err := l.svcCtx.Db.Query("select yaml_string from task where status = 'Saved' and kind = ? and service_name = ?", in.Kind, in.ServiceName)
var taskIds []int64
if err != nil {
return nil, err
}
for taskRows.Next() {
var taskId int64
var yamlString string
taskRows.Scan(&taskId, &yamlString)
result.YamlString = append(result.YamlString, yamlString)
taskIds = append(taskIds, taskId)
}
// 将任务状态修改为已提交
if taskRows.Next() {
execResult, err := l.svcCtx.Db.Exec("update task set status = 'Submitted' where id in (?)", taskIds)
rows, err := l.svcCtx.Db.Query("select task_id,name,status from ai where service_name = ? and status not in ('Succeed', 'Completed')", in.ServiceName)
if err != nil {
return nil, err
}
println(execResult)
for rows.Next() {
var ai model.Ai
rows.Scan(&ai.TaskId, &ai.Name, &ai.Status)
var aiInfo pcmCore.AiInfo
tool.Convert(ai, &aiInfo)
result.AiInfoList = append(result.AiInfoList, &aiInfo)
}
}
return &result, nil
}

+ 42
- 13
adaptor/PCM-CORE/rpc/internal/logic/syncinfologic.go View File

@@ -3,7 +3,6 @@ package logic
import (
"PCM/adaptor/PCM-CORE/rpc/internal/svc"
"PCM/adaptor/PCM-CORE/rpc/pcmCore"
"PCM/common/tool"
"context"
"fmt"
"time"
@@ -35,27 +34,57 @@ func NewSyncInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SyncInfo

// SyncInfo Synchronous data information
func (l *SyncInfoLogic) SyncInfo(in *pcmCore.SyncInfoReq) (*pcmCore.SyncInfoResp, error) {
var query string
conn, err := l.svcCtx.Db.Begin()
if err != nil {
return nil, err
}
switch in.Kind {
case "cloud":
query = "INSERT INTO cloud (service_name,task_id, namespace,name,status,running_time,start_time) VALUES "
for _, cloudInfo := range in.CloudInfoList {
_, err = conn.Exec("update cloud set status = ?,start_time = ?,running_time = ? where service_name = ? and task_id = ? and namespace = ? and name = ?",
cloudInfo.Status, cloudInfo.StartTime, cloudInfo.RunningTime, cloudInfo.ServiceName, cloudInfo.TaskId, cloudInfo.Namespace, cloudInfo.Name)
}
case "hpc":
query = "INSERT INTO hpc (service_name,task_id,job_id,name,status,running_time,start_time) VALUES "
for _, hpcInfo := range in.HpcInfoList {
_, err = conn.Exec("update hpc set status = ?,start_time = ?,running_time = ?,job_id = ? where service_name = ? and task_id = ? and name = ?",
hpcInfo.Status, hpcInfo.StartTime, hpcInfo.RunningTime, hpcInfo.JobId, in.ServiceName, hpcInfo.TaskId, hpcInfo.Name)
}
case "ai":
query = "INSERT INTO ai (service_name,task_id,project_id,name,status,running_time,start_time) VALUES "
}
for i, info := range in.LatestExternalInfoList {
if i > 0 {
query += ","
for _, aiInfo := range in.AiInfoList {
_, err = conn.Exec("update ai set status = ?,start_time = ?,running_time = ?,project_id = ? where service_name = ? and task_id = ? and name = ?",
aiInfo.Status, aiInfo.StartTime, aiInfo.RunningTime, aiInfo.ProjectId, aiInfo.ServiceName, aiInfo.TaskId, aiInfo.Name)
}

query += fmt.Sprintf("('%s',%d,'%s','%s','%s',%d,'%s')", info.ServiceName, info.TaskId, info.ExternalField, info.Name, info.Status, info.RunningTime, tool.TimeStringRemoveZone(info.StartTime))
}
query += " ON DUPLICATE KEY UPDATE status=VALUES(status),start_time=VALUES(start_time),running_time=VALUES(running_time)"

_, err := l.svcCtx.Db.Exec(query)
if err != nil {
return nil, err
}

defer func() {
if p := recover(); p != nil {
conn.Rollback()
panic(p)
} else if err != nil {
fmt.Println("rollback")
conn.Rollback()
} else {
err = conn.Commit()
fmt.Println("commit success")
}

}()
return &pcmCore.SyncInfoResp{}, nil
}

func SyncHpcInfo(query string, HpcInfoList []*pcmCore.HpcInfo) {
//query = "INSERT INTO cloud (service_name,task_id, job_id,name,status,running_time,start_time) VALUES "
//for i, info := range HpcInfoList {
// if i > 0 {
// query += ","
// }
//
// query += fmt.Sprintf("('%s',%d,'%s','%s','%s',%d,'%s')", info.ServiceName, info.TaskId, info.JobId, info.Name, info.Status, info.RunningTime, tool.TimeStringRemoveZone(info.StartTime))
//}
//query += " ON DUPLICATE KEY UPDATE status=VALUES(status),start_time=VALUES(start_time),running_time=VALUES(running_time),job_id=VALUES(job_id),"

}

+ 39
- 12
adaptor/PCM-CORE/rpc/pb/pcmCore.proto View File

@@ -4,18 +4,50 @@ package pcmCore;
option go_package = "/pcmCore";

message SyncInfoReq {
string kind =1;
repeated LatestExternalInfo latestExternalInfoList = 2;
string serviceName = 1;
string kind = 2;
repeated HpcInfo HpcInfoList = 3;
repeated CloudInfo CloudInfoList = 4;
repeated AiInfo AiInfoList = 5;
}

message LatestExternalInfo {
message AiInfo {
string serviceName = 1;
int64 taskId = 2;
string externalField = 3;
string project_id = 3;
string name = 4;
string status = 5;
string startTime = 6;
int64 runningTime = 7;
string result = 8;
}

message CloudInfo {
string serviceName = 1;
int64 taskId = 2;
string apiVersion = 3;
string kind = 4;
string namespace = 5;
string name = 6;
string status = 7;
string startTime = 8;
int64 runningTime = 9;
string result = 10;
string yamlString = 11;
}

message HpcInfo {
string serviceName = 1;
int64 taskId = 2;
string jobId = 3;

string name = 4;
string status = 5;
string startTime = 6;
int64 runningTime = 7;
string result = 8;
string workDir = 9;
string wallTime = 10;
}

message SyncInfoResp{
@@ -29,16 +61,11 @@ message InfoListReq{
}

message InfoListResp{
repeated string yamlString =1;
repeated ExternalInfo externalInfoList = 2;
repeated HpcInfo HpcInfoList = 1;
repeated CloudInfo CloudInfoList = 2;
repeated AiInfo AiInfoList = 3;
}

message ExternalInfo {
int64 taskId = 1;
string externalField = 2;
string name = 3;
string status = 4;
}


// pcm core services


+ 447
- 174
adaptor/PCM-CORE/rpc/pcmCore/pcmCore.pb.go View File

@@ -25,8 +25,11 @@ type SyncInfoReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"`
LatestExternalInfoList []*LatestExternalInfo `protobuf:"bytes,2,rep,name=latestExternalInfoList,proto3" json:"latestExternalInfoList,omitempty"`
ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"`
HpcInfoList []*HpcInfo `protobuf:"bytes,3,rep,name=HpcInfoList,proto3" json:"HpcInfoList,omitempty"`
CloudInfoList []*CloudInfo `protobuf:"bytes,4,rep,name=CloudInfoList,proto3" json:"CloudInfoList,omitempty"`
AiInfoList []*AiInfo `protobuf:"bytes,5,rep,name=AiInfoList,proto3" json:"AiInfoList,omitempty"`
}

func (x *SyncInfoReq) Reset() {
@@ -61,6 +64,13 @@ func (*SyncInfoReq) Descriptor() ([]byte, []int) {
return file_pcmCore_proto_rawDescGZIP(), []int{0}
}

func (x *SyncInfoReq) GetServiceName() string {
if x != nil {
return x.ServiceName
}
return ""
}

func (x *SyncInfoReq) GetKind() string {
if x != nil {
return x.Kind
@@ -68,29 +78,44 @@ func (x *SyncInfoReq) GetKind() string {
return ""
}

func (x *SyncInfoReq) GetLatestExternalInfoList() []*LatestExternalInfo {
func (x *SyncInfoReq) GetHpcInfoList() []*HpcInfo {
if x != nil {
return x.LatestExternalInfoList
return x.HpcInfoList
}
return nil
}

type LatestExternalInfo struct {
func (x *SyncInfoReq) GetCloudInfoList() []*CloudInfo {
if x != nil {
return x.CloudInfoList
}
return nil
}

func (x *SyncInfoReq) GetAiInfoList() []*AiInfo {
if x != nil {
return x.AiInfoList
}
return nil
}

type AiInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
TaskId int64 `protobuf:"varint,2,opt,name=taskId,proto3" json:"taskId,omitempty"`
ExternalField string `protobuf:"bytes,3,opt,name=externalField,proto3" json:"externalField,omitempty"`
Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
StartTime string `protobuf:"bytes,6,opt,name=startTime,proto3" json:"startTime,omitempty"`
RunningTime int64 `protobuf:"varint,7,opt,name=runningTime,proto3" json:"runningTime,omitempty"`
ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
TaskId int64 `protobuf:"varint,2,opt,name=taskId,proto3" json:"taskId,omitempty"`
ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
StartTime string `protobuf:"bytes,6,opt,name=startTime,proto3" json:"startTime,omitempty"`
RunningTime int64 `protobuf:"varint,7,opt,name=runningTime,proto3" json:"runningTime,omitempty"`
Result string `protobuf:"bytes,8,opt,name=result,proto3" json:"result,omitempty"`
}

func (x *LatestExternalInfo) Reset() {
*x = LatestExternalInfo{}
func (x *AiInfo) Reset() {
*x = AiInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_pcmCore_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -98,13 +123,13 @@ func (x *LatestExternalInfo) Reset() {
}
}

func (x *LatestExternalInfo) String() string {
func (x *AiInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}

func (*LatestExternalInfo) ProtoMessage() {}
func (*AiInfo) ProtoMessage() {}

func (x *LatestExternalInfo) ProtoReflect() protoreflect.Message {
func (x *AiInfo) ProtoReflect() protoreflect.Message {
mi := &file_pcmCore_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -116,71 +141,87 @@ func (x *LatestExternalInfo) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}

// Deprecated: Use LatestExternalInfo.ProtoReflect.Descriptor instead.
func (*LatestExternalInfo) Descriptor() ([]byte, []int) {
// Deprecated: Use AiInfo.ProtoReflect.Descriptor instead.
func (*AiInfo) Descriptor() ([]byte, []int) {
return file_pcmCore_proto_rawDescGZIP(), []int{1}
}

func (x *LatestExternalInfo) GetServiceName() string {
func (x *AiInfo) GetServiceName() string {
if x != nil {
return x.ServiceName
}
return ""
}

func (x *LatestExternalInfo) GetTaskId() int64 {
func (x *AiInfo) GetTaskId() int64 {
if x != nil {
return x.TaskId
}
return 0
}

func (x *LatestExternalInfo) GetExternalField() string {
func (x *AiInfo) GetProjectId() string {
if x != nil {
return x.ExternalField
return x.ProjectId
}
return ""
}

func (x *LatestExternalInfo) GetName() string {
func (x *AiInfo) GetName() string {
if x != nil {
return x.Name
}
return ""
}

func (x *LatestExternalInfo) GetStatus() string {
func (x *AiInfo) GetStatus() string {
if x != nil {
return x.Status
}
return ""
}

func (x *LatestExternalInfo) GetStartTime() string {
func (x *AiInfo) GetStartTime() string {
if x != nil {
return x.StartTime
}
return ""
}

func (x *LatestExternalInfo) GetRunningTime() int64 {
func (x *AiInfo) GetRunningTime() int64 {
if x != nil {
return x.RunningTime
}
return 0
}

type SyncInfoResp struct {
func (x *AiInfo) GetResult() string {
if x != nil {
return x.Result
}
return ""
}

type CloudInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
}

func (x *SyncInfoResp) Reset() {
*x = SyncInfoResp{}
ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
TaskId int64 `protobuf:"varint,2,opt,name=taskId,proto3" json:"taskId,omitempty"`
ApiVersion string `protobuf:"bytes,3,opt,name=apiVersion,proto3" json:"apiVersion,omitempty"`
Kind string `protobuf:"bytes,4,opt,name=kind,proto3" json:"kind,omitempty"`
Namespace string `protobuf:"bytes,5,opt,name=namespace,proto3" json:"namespace,omitempty"`
Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"`
StartTime string `protobuf:"bytes,8,opt,name=startTime,proto3" json:"startTime,omitempty"`
RunningTime int64 `protobuf:"varint,9,opt,name=runningTime,proto3" json:"runningTime,omitempty"`
Result string `protobuf:"bytes,10,opt,name=result,proto3" json:"result,omitempty"`
YamlString string `protobuf:"bytes,11,opt,name=yamlString,proto3" json:"yamlString,omitempty"`
}

func (x *CloudInfo) Reset() {
*x = CloudInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_pcmCore_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -188,13 +229,13 @@ func (x *SyncInfoResp) Reset() {
}
}

func (x *SyncInfoResp) String() string {
func (x *CloudInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}

func (*SyncInfoResp) ProtoMessage() {}
func (*CloudInfo) ProtoMessage() {}

func (x *SyncInfoResp) ProtoReflect() protoreflect.Message {
func (x *CloudInfo) ProtoReflect() protoreflect.Message {
mi := &file_pcmCore_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -206,36 +247,107 @@ func (x *SyncInfoResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}

// Deprecated: Use SyncInfoResp.ProtoReflect.Descriptor instead.
func (*SyncInfoResp) Descriptor() ([]byte, []int) {
// Deprecated: Use CloudInfo.ProtoReflect.Descriptor instead.
func (*CloudInfo) Descriptor() ([]byte, []int) {
return file_pcmCore_proto_rawDescGZIP(), []int{2}
}

func (x *SyncInfoResp) GetCode() int64 {
func (x *CloudInfo) GetServiceName() string {
if x != nil {
return x.Code
return x.ServiceName
}
return ""
}

func (x *CloudInfo) GetTaskId() int64 {
if x != nil {
return x.TaskId
}
return 0
}

func (x *SyncInfoResp) GetMsg() string {
func (x *CloudInfo) GetApiVersion() string {
if x != nil {
return x.Msg
return x.ApiVersion
}
return ""
}

type InfoListReq struct {
func (x *CloudInfo) GetKind() string {
if x != nil {
return x.Kind
}
return ""
}

func (x *CloudInfo) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}

func (x *CloudInfo) GetName() string {
if x != nil {
return x.Name
}
return ""
}

func (x *CloudInfo) GetStatus() string {
if x != nil {
return x.Status
}
return ""
}

func (x *CloudInfo) GetStartTime() string {
if x != nil {
return x.StartTime
}
return ""
}

func (x *CloudInfo) GetRunningTime() int64 {
if x != nil {
return x.RunningTime
}
return 0
}

func (x *CloudInfo) GetResult() string {
if x != nil {
return x.Result
}
return ""
}

func (x *CloudInfo) GetYamlString() string {
if x != nil {
return x.YamlString
}
return ""
}

type HpcInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"`
ServiceName string `protobuf:"bytes,2,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
TaskId int64 `protobuf:"varint,2,opt,name=taskId,proto3" json:"taskId,omitempty"`
JobId string `protobuf:"bytes,3,opt,name=jobId,proto3" json:"jobId,omitempty"`
Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
StartTime string `protobuf:"bytes,6,opt,name=startTime,proto3" json:"startTime,omitempty"`
RunningTime int64 `protobuf:"varint,7,opt,name=runningTime,proto3" json:"runningTime,omitempty"`
Result string `protobuf:"bytes,8,opt,name=result,proto3" json:"result,omitempty"`
WorkDir string `protobuf:"bytes,9,opt,name=workDir,proto3" json:"workDir,omitempty"`
WallTime string `protobuf:"bytes,10,opt,name=wallTime,proto3" json:"wallTime,omitempty"`
}

func (x *InfoListReq) Reset() {
*x = InfoListReq{}
func (x *HpcInfo) Reset() {
*x = HpcInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_pcmCore_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -243,13 +355,13 @@ func (x *InfoListReq) Reset() {
}
}

func (x *InfoListReq) String() string {
func (x *HpcInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}

func (*InfoListReq) ProtoMessage() {}
func (*HpcInfo) ProtoMessage() {}

func (x *InfoListReq) ProtoReflect() protoreflect.Message {
func (x *HpcInfo) ProtoReflect() protoreflect.Message {
mi := &file_pcmCore_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -261,36 +373,92 @@ func (x *InfoListReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}

// Deprecated: Use InfoListReq.ProtoReflect.Descriptor instead.
func (*InfoListReq) Descriptor() ([]byte, []int) {
// Deprecated: Use HpcInfo.ProtoReflect.Descriptor instead.
func (*HpcInfo) Descriptor() ([]byte, []int) {
return file_pcmCore_proto_rawDescGZIP(), []int{3}
}

func (x *InfoListReq) GetKind() string {
func (x *HpcInfo) GetServiceName() string {
if x != nil {
return x.Kind
return x.ServiceName
}
return ""
}

func (x *InfoListReq) GetServiceName() string {
func (x *HpcInfo) GetTaskId() int64 {
if x != nil {
return x.ServiceName
return x.TaskId
}
return 0
}

func (x *HpcInfo) GetJobId() string {
if x != nil {
return x.JobId
}
return ""
}

type InfoListResp struct {
func (x *HpcInfo) GetName() string {
if x != nil {
return x.Name
}
return ""
}

func (x *HpcInfo) GetStatus() string {
if x != nil {
return x.Status
}
return ""
}

func (x *HpcInfo) GetStartTime() string {
if x != nil {
return x.StartTime
}
return ""
}

func (x *HpcInfo) GetRunningTime() int64 {
if x != nil {
return x.RunningTime
}
return 0
}

func (x *HpcInfo) GetResult() string {
if x != nil {
return x.Result
}
return ""
}

func (x *HpcInfo) GetWorkDir() string {
if x != nil {
return x.WorkDir
}
return ""
}

func (x *HpcInfo) GetWallTime() string {
if x != nil {
return x.WallTime
}
return ""
}

type SyncInfoResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

YamlString []string `protobuf:"bytes,1,rep,name=yamlString,proto3" json:"yamlString,omitempty"`
ExternalInfoList []*ExternalInfo `protobuf:"bytes,2,rep,name=externalInfoList,proto3" json:"externalInfoList,omitempty"`
Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
}

func (x *InfoListResp) Reset() {
*x = InfoListResp{}
func (x *SyncInfoResp) Reset() {
*x = SyncInfoResp{}
if protoimpl.UnsafeEnabled {
mi := &file_pcmCore_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -298,13 +466,13 @@ func (x *InfoListResp) Reset() {
}
}

func (x *InfoListResp) String() string {
func (x *SyncInfoResp) String() string {
return protoimpl.X.MessageStringOf(x)
}

func (*InfoListResp) ProtoMessage() {}
func (*SyncInfoResp) ProtoMessage() {}

func (x *InfoListResp) ProtoReflect() protoreflect.Message {
func (x *SyncInfoResp) ProtoReflect() protoreflect.Message {
mi := &file_pcmCore_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -316,38 +484,36 @@ func (x *InfoListResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}

// Deprecated: Use InfoListResp.ProtoReflect.Descriptor instead.
func (*InfoListResp) Descriptor() ([]byte, []int) {
// Deprecated: Use SyncInfoResp.ProtoReflect.Descriptor instead.
func (*SyncInfoResp) Descriptor() ([]byte, []int) {
return file_pcmCore_proto_rawDescGZIP(), []int{4}
}

func (x *InfoListResp) GetYamlString() []string {
func (x *SyncInfoResp) GetCode() int64 {
if x != nil {
return x.YamlString
return x.Code
}
return nil
return 0
}

func (x *InfoListResp) GetExternalInfoList() []*ExternalInfo {
func (x *SyncInfoResp) GetMsg() string {
if x != nil {
return x.ExternalInfoList
return x.Msg
}
return nil
return ""
}

type ExternalInfo struct {
type InfoListReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

TaskId int64 `protobuf:"varint,1,opt,name=taskId,proto3" json:"taskId,omitempty"`
ExternalField string `protobuf:"bytes,2,opt,name=externalField,proto3" json:"externalField,omitempty"`
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"`
Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"`
ServiceName string `protobuf:"bytes,2,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
}

func (x *ExternalInfo) Reset() {
*x = ExternalInfo{}
func (x *InfoListReq) Reset() {
*x = InfoListReq{}
if protoimpl.UnsafeEnabled {
mi := &file_pcmCore_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -355,13 +521,13 @@ func (x *ExternalInfo) Reset() {
}
}

func (x *ExternalInfo) String() string {
func (x *InfoListReq) String() string {
return protoimpl.X.MessageStringOf(x)
}

func (*ExternalInfo) ProtoMessage() {}
func (*InfoListReq) ProtoMessage() {}

func (x *ExternalInfo) ProtoReflect() protoreflect.Message {
func (x *InfoListReq) ProtoReflect() protoreflect.Message {
mi := &file_pcmCore_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -373,97 +539,187 @@ func (x *ExternalInfo) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}

// Deprecated: Use ExternalInfo.ProtoReflect.Descriptor instead.
func (*ExternalInfo) Descriptor() ([]byte, []int) {
// Deprecated: Use InfoListReq.ProtoReflect.Descriptor instead.
func (*InfoListReq) Descriptor() ([]byte, []int) {
return file_pcmCore_proto_rawDescGZIP(), []int{5}
}

func (x *ExternalInfo) GetTaskId() int64 {
func (x *InfoListReq) GetKind() string {
if x != nil {
return x.TaskId
return x.Kind
}
return 0
return ""
}

func (x *ExternalInfo) GetExternalField() string {
func (x *InfoListReq) GetServiceName() string {
if x != nil {
return x.ExternalField
return x.ServiceName
}
return ""
}

func (x *ExternalInfo) GetName() string {
type InfoListResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields

HpcInfoList []*HpcInfo `protobuf:"bytes,1,rep,name=HpcInfoList,proto3" json:"HpcInfoList,omitempty"`
CloudInfoList []*CloudInfo `protobuf:"bytes,2,rep,name=CloudInfoList,proto3" json:"CloudInfoList,omitempty"`
AiInfoList []*AiInfo `protobuf:"bytes,3,rep,name=AiInfoList,proto3" json:"AiInfoList,omitempty"`
}

func (x *InfoListResp) Reset() {
*x = InfoListResp{}
if protoimpl.UnsafeEnabled {
mi := &file_pcmCore_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}

func (x *InfoListResp) String() string {
return protoimpl.X.MessageStringOf(x)
}

func (*InfoListResp) ProtoMessage() {}

func (x *InfoListResp) ProtoReflect() protoreflect.Message {
mi := &file_pcmCore_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}

// Deprecated: Use InfoListResp.ProtoReflect.Descriptor instead.
func (*InfoListResp) Descriptor() ([]byte, []int) {
return file_pcmCore_proto_rawDescGZIP(), []int{6}
}

func (x *InfoListResp) GetHpcInfoList() []*HpcInfo {
if x != nil {
return x.Name
return x.HpcInfoList
}
return ""
return nil
}

func (x *ExternalInfo) GetStatus() string {
func (x *InfoListResp) GetCloudInfoList() []*CloudInfo {
if x != nil {
return x.Status
return x.CloudInfoList
}
return ""
return nil
}

func (x *InfoListResp) GetAiInfoList() []*AiInfo {
if x != nil {
return x.AiInfoList
}
return nil
}

var File_pcmCore_proto protoreflect.FileDescriptor

var file_pcmCore_proto_rawDesc = []byte{
0x0a, 0x0d, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x07, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x22, 0x76, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x53, 0x0a, 0x16, 0x6c,
0x61, 0x74, 0x65, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66,
0x6f, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x63,
0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65,
0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x16, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74,
0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74,
0x22, 0xe0, 0x01, 0x0a, 0x12, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73,
0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49,
0x64, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65,
0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73,
0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65,
0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d,
0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65,
0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54,
0x69, 0x6d, 0x65, 0x22, 0x34, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52,
0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x43, 0x0a, 0x0b, 0x49, 0x6e, 0x66,
0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x71,
0x0a, 0x0c, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e,
0x0a, 0x0a, 0x79, 0x61, 0x6d, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x03,
0x28, 0x09, 0x52, 0x0a, 0x79, 0x61, 0x6d, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x41,
0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69,
0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f,
0x72, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52,
0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73,
0x74, 0x22, 0x78, 0x0a, 0x0c, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66,
0x6f, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x78, 0x74,
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12,
0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x32, 0x7b, 0x0a, 0x07, 0x70,
0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e,
0x66, 0x6f, 0x12, 0x14, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x79, 0x6e,
0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f,
0x72, 0x65, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12,
0x37, 0x0a, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x2e, 0x70, 0x63,
0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
0x71, 0x1a, 0x15, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f,
0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0a, 0x5a, 0x08, 0x2f, 0x70, 0x63, 0x6d,
0x43, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x07, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x22, 0xe2, 0x01, 0x0a, 0x0b, 0x53, 0x79, 0x6e,
0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69,
0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x32,
0x0a, 0x0b, 0x48, 0x70, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x48, 0x70,
0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x48, 0x70, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69,
0x73, 0x74, 0x12, 0x38, 0x0a, 0x0d, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x4c,
0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x63, 0x6d, 0x43,
0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x43,
0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0a,
0x41, 0x69, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x0f, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x69, 0x49, 0x6e, 0x66,
0x6f, 0x52, 0x0a, 0x41, 0x69, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xe5, 0x01,
0x0a, 0x06, 0x41, 0x69, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61,
0x73, 0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b,
0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49,
0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a,
0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72,
0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
0x52, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a,
0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xbb, 0x02, 0x0a, 0x09, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49,
0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61,
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a,
0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a,
0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e,
0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73,
0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x75, 0x6e,
0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x79, 0x61, 0x6d, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e,
0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x79, 0x61, 0x6d, 0x6c, 0x53, 0x74, 0x72,
0x69, 0x6e, 0x67, 0x22, 0x93, 0x02, 0x0a, 0x07, 0x48, 0x70, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d,
0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62,
0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12,
0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73,
0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x75, 0x6e,
0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x72, 0x18, 0x09,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x72, 0x12, 0x1a, 0x0a,
0x08, 0x77, 0x61, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x77, 0x61, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x34, 0x0a, 0x0c, 0x53, 0x79, 0x6e,
0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a,
0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22,
0x43, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x12,
0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69,
0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x4e, 0x61, 0x6d, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73,
0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x32, 0x0a, 0x0b, 0x48, 0x70, 0x63, 0x49, 0x6e, 0x66, 0x6f,
0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x63, 0x6d,
0x43, 0x6f, 0x72, 0x65, 0x2e, 0x48, 0x70, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x48, 0x70,
0x63, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0d, 0x43, 0x6c, 0x6f,
0x75, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x12, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x4c,
0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0a, 0x41, 0x69, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73,
0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72,
0x65, 0x2e, 0x41, 0x69, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x41, 0x69, 0x49, 0x6e, 0x66, 0x6f,
0x4c, 0x69, 0x73, 0x74, 0x32, 0x7b, 0x0a, 0x07, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x12,
0x37, 0x0a, 0x08, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x2e, 0x70, 0x63,
0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
0x71, 0x1a, 0x15, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x79, 0x6e, 0x63,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x08, 0x49, 0x6e, 0x66, 0x6f,
0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x2e, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x49,
0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x63, 0x6d,
0x43, 0x6f, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
0x70, 0x42, 0x0a, 0x5a, 0x08, 0x2f, 0x70, 0x63, 0x6d, 0x43, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
@@ -478,27 +734,32 @@ func file_pcmCore_proto_rawDescGZIP() []byte {
return file_pcmCore_proto_rawDescData
}

var file_pcmCore_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
var file_pcmCore_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_pcmCore_proto_goTypes = []interface{}{
(*SyncInfoReq)(nil), // 0: pcmCore.SyncInfoReq
(*LatestExternalInfo)(nil), // 1: pcmCore.LatestExternalInfo
(*SyncInfoResp)(nil), // 2: pcmCore.SyncInfoResp
(*InfoListReq)(nil), // 3: pcmCore.InfoListReq
(*InfoListResp)(nil), // 4: pcmCore.InfoListResp
(*ExternalInfo)(nil), // 5: pcmCore.ExternalInfo
(*SyncInfoReq)(nil), // 0: pcmCore.SyncInfoReq
(*AiInfo)(nil), // 1: pcmCore.AiInfo
(*CloudInfo)(nil), // 2: pcmCore.CloudInfo
(*HpcInfo)(nil), // 3: pcmCore.HpcInfo
(*SyncInfoResp)(nil), // 4: pcmCore.SyncInfoResp
(*InfoListReq)(nil), // 5: pcmCore.InfoListReq
(*InfoListResp)(nil), // 6: pcmCore.InfoListResp
}
var file_pcmCore_proto_depIdxs = []int32{
1, // 0: pcmCore.SyncInfoReq.latestExternalInfoList:type_name -> pcmCore.LatestExternalInfo
5, // 1: pcmCore.InfoListResp.externalInfoList:type_name -> pcmCore.ExternalInfo
0, // 2: pcmCore.pcmCore.SyncInfo:input_type -> pcmCore.SyncInfoReq
3, // 3: pcmCore.pcmCore.InfoList:input_type -> pcmCore.InfoListReq
2, // 4: pcmCore.pcmCore.SyncInfo:output_type -> pcmCore.SyncInfoResp
4, // 5: pcmCore.pcmCore.InfoList:output_type -> pcmCore.InfoListResp
4, // [4:6] is the sub-list for method output_type
2, // [2:4] is the sub-list for method input_type
2, // [2:2] is the sub-list for extension type_name
2, // [2:2] is the sub-list for extension extendee
0, // [0:2] is the sub-list for field type_name
3, // 0: pcmCore.SyncInfoReq.HpcInfoList:type_name -> pcmCore.HpcInfo
2, // 1: pcmCore.SyncInfoReq.CloudInfoList:type_name -> pcmCore.CloudInfo
1, // 2: pcmCore.SyncInfoReq.AiInfoList:type_name -> pcmCore.AiInfo
3, // 3: pcmCore.InfoListResp.HpcInfoList:type_name -> pcmCore.HpcInfo
2, // 4: pcmCore.InfoListResp.CloudInfoList:type_name -> pcmCore.CloudInfo
1, // 5: pcmCore.InfoListResp.AiInfoList:type_name -> pcmCore.AiInfo
0, // 6: pcmCore.pcmCore.SyncInfo:input_type -> pcmCore.SyncInfoReq
5, // 7: pcmCore.pcmCore.InfoList:input_type -> pcmCore.InfoListReq
4, // 8: pcmCore.pcmCore.SyncInfo:output_type -> pcmCore.SyncInfoResp
6, // 9: pcmCore.pcmCore.InfoList:output_type -> pcmCore.InfoListResp
8, // [8:10] is the sub-list for method output_type
6, // [6:8] is the sub-list for method input_type
6, // [6:6] is the sub-list for extension type_name
6, // [6:6] is the sub-list for extension extendee
0, // [0:6] is the sub-list for field type_name
}

func init() { file_pcmCore_proto_init() }
@@ -520,7 +781,7 @@ func file_pcmCore_proto_init() {
}
}
file_pcmCore_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LatestExternalInfo); i {
switch v := v.(*AiInfo); i {
case 0:
return &v.state
case 1:
@@ -532,7 +793,7 @@ func file_pcmCore_proto_init() {
}
}
file_pcmCore_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SyncInfoResp); i {
switch v := v.(*CloudInfo); i {
case 0:
return &v.state
case 1:
@@ -544,7 +805,7 @@ func file_pcmCore_proto_init() {
}
}
file_pcmCore_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*InfoListReq); i {
switch v := v.(*HpcInfo); i {
case 0:
return &v.state
case 1:
@@ -556,7 +817,7 @@ func file_pcmCore_proto_init() {
}
}
file_pcmCore_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*InfoListResp); i {
switch v := v.(*SyncInfoResp); i {
case 0:
return &v.state
case 1:
@@ -568,7 +829,19 @@ func file_pcmCore_proto_init() {
}
}
file_pcmCore_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ExternalInfo); i {
switch v := v.(*InfoListReq); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pcmCore_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*InfoListResp); i {
case 0:
return &v.state
case 1:
@@ -586,7 +859,7 @@ func file_pcmCore_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_pcmCore_proto_rawDesc,
NumEnums: 0,
NumMessages: 6,
NumMessages: 7,
NumExtensions: 0,
NumServices: 1,
},


+ 7
- 6
adaptor/PCM-CORE/rpc/pcmcoreclient/pcmcore.go View File

@@ -13,12 +13,13 @@ import (
)

type (
ExternalInfo = pcmCore.ExternalInfo
InfoListReq = pcmCore.InfoListReq
InfoListResp = pcmCore.InfoListResp
LatestExternalInfo = pcmCore.LatestExternalInfo
SyncInfoReq = pcmCore.SyncInfoReq
SyncInfoResp = pcmCore.SyncInfoResp
AiInfo = pcmCore.AiInfo
CloudInfo = pcmCore.CloudInfo
HpcInfo = pcmCore.HpcInfo
InfoListReq = pcmCore.InfoListReq
InfoListResp = pcmCore.InfoListResp
SyncInfoReq = pcmCore.SyncInfoReq
SyncInfoResp = pcmCore.SyncInfoResp

PcmCore interface {
// SyncInfo Synchronous data information


+ 68
- 37
adaptor/PCM-HPC/PCM-AC/rpc/hpcac.go View File

@@ -7,14 +7,11 @@ import (
"PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/logic"
"PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/server"
"PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/svc"
"PCM/common/param"
"PCM/common/tool"
"context"
"flag"
"github.com/zeromicro/go-zero/core/logx"
"k8s.io/apimachinery/pkg/util/json"

"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/core/service"
"github.com/zeromicro/go-zero/zrpc"
"google.golang.org/grpc"
@@ -47,57 +44,91 @@ func main() {
}

func initCron(svc *svc.ServiceContext) {
submitJobLogic := logic.NewSubmitJobLogic(context.Background(), svc)
listLogic := logic.NewListJobLogic(context.Background(), svc)
svc.Cron.AddFunc("*/5 * * * * ?", func() {
SyncInfoReq := pcmcoreclient.SyncInfoReq{
Kind: "hpc",
}
// 查询core端分发下来的任务列表
infoReq := pcmcoreclient.InfoListReq{
syncInfoReq := pcmcoreclient.SyncInfoReq{
Kind: "hpc",
ServiceName: "ac",
}
infoList, err := svc.PcmCoreRpc.InfoList(context.Background(), &infoReq)
// 查询core端分发下来的任务列表
infoList, err := queryCoreInfoList(svc)
if err != nil {
logx.Error(err)
return
}
// 提交任务
go func() {
submitJobLogic := logic.NewSubmitJobLogic(context.Background(), svc)
for _, yamlString := range infoList.YamlString {
bytes, err := json.Marshal(yamlString)
if err != nil {
return
}
var params param.HpcBase
tool.Convert(bytes, &params)
submitReq := hpcAC.SubmitJobReq{}
submitJobLogic.SubmitJob(&submitReq)
}
}()
// 查询运行中的任务列表
listLogic := logic.NewListJobLogic(context.Background(), svc)
submitJob(infoList, submitJobLogic)
// 查询运行中的任务列表同步信息
listReq := hpcAC.ListJobReq{}
listJob, err := listLogic.ListJob(&listReq)
if err != nil {
logx.Error(err)
return
}
for _, taskInfo := range infoList.ExternalInfoList {
for _, job := range listJob.Jobs {
if job.JobId == taskInfo.ExternalField {
external := pcmcoreclient.LatestExternalInfo{
ServiceName: "ac",
TaskId: taskInfo.TaskId,
ExternalField: taskInfo.ExternalField,
Name: taskInfo.Name,
StartTime: job.JobStartTime,
RunningTime: int64(tool.StringToInt(job.JobRunTime)),
for index1, _ := range infoList.HpcInfoList {
for index2, _ := range listJob.Jobs {
if listJob.Jobs[index2].JobName == infoList.HpcInfoList[index1].Name {
infoList.HpcInfoList[index1].StartTime = listJob.Jobs[index2].JobStartTime
infoList.HpcInfoList[index1].RunningTime = int64(tool.RunTimeToSeconds(listJob.Jobs[index2].JobRunTime))
if listJob.Jobs[index2].JobStatus == "statR" {
infoList.HpcInfoList[index1].Status = "Running"
}
if listJob.Jobs[index2].JobStatus == "statC" {
infoList.HpcInfoList[index1].Status = "Completed"
}
SyncInfoReq.LatestExternalInfoList = append(SyncInfoReq.LatestExternalInfoList, &external)
}
}
}
// 同步信息到core端
svc.PcmCoreRpc.SyncInfo(context.Background(), &SyncInfoReq)
if len(infoList.HpcInfoList) != 0 {
syncInfoReq.HpcInfoList = infoList.HpcInfoList
svc.PcmCoreRpc.SyncInfo(context.Background(), &syncInfoReq)
}
})
}

func submitJob(infoList *pcmcoreclient.InfoListResp, submitJobLogic *logic.SubmitJobLogic) {
for index, _ := range infoList.HpcInfoList {
if infoList.HpcInfoList[index].Status == "Saved" {
submitReq := hpcAC.SubmitJobReq{
Appname: "BASE",
Apptype: "BASIC",
StrJobManagerID: 1638523853,
MapAppJobInfo: &hpcAC.MapAppJobInfo{
GAP_CMD_FILE: "sleep 10",
GAP_NNODE: "1",
GAP_SUBMIT_TYPE: "cmd",
GAP_JOB_NAME: infoList.HpcInfoList[index].Name,
GAP_WORK_DIR: infoList.HpcInfoList[index].WorkDir,
GAP_QUEUE: "debug2",
GAP_NPROC: "1",
GAP_APPNAME: "BASE",
GAP_WALL_TIME: infoList.HpcInfoList[index].WallTime,
GAP_STD_OUT_FILE: "/public/home/zhijiang/test/testjob1/std.out.%j",
GAP_STD_ERR_FILE: " /public/home/zhijiang/test/testjob1/std.err.%j",
},
}
jobResult, _ := submitJobLogic.SubmitJob(&submitReq)
if jobResult.Code == "0" {
infoList.HpcInfoList[index].Status = "Pending"
infoList.HpcInfoList[index].JobId = jobResult.Data
} else {
infoList.HpcInfoList[index].Result = "Failed"
infoList.HpcInfoList[index].Result = jobResult.Msg
}
}
}
}

func queryCoreInfoList(svc *svc.ServiceContext) (*pcmcoreclient.InfoListResp, error) {
infoReq := pcmcoreclient.InfoListReq{
Kind: "hpc",
ServiceName: "ac",
}
infoList, err := svc.PcmCoreRpc.InfoList(context.Background(), &infoReq)
if err != nil {
return nil, err
}
return infoList, nil
}

+ 0
- 1
adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/submitjoblogic.go View File

@@ -55,7 +55,6 @@ func (l *SubmitJobLogic) SubmitJob(in *hpcAC.SubmitJobReq) (*hpcAC.SubmitJobResp
//c := &http.Client{Timeout: 5 * time.Second}

respUrl, err := c.Do(req_url)
defer respUrl.Body.Close()

if err != nil {
return resp, err


+ 8
- 16
adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/pcmkubenative.go View File

@@ -66,9 +66,9 @@ func initCron(svc *svc.ServiceContext) {
// 提交任务
go func() {
applyYamlLogic := logic.NewApplyYamlLogic(context.Background(), svc)
for _, yamlString := range infoList.YamlString {
for _, cloudInfo := range infoList.CloudInfoList {
applyReq := kubenativeclient.ApplyReq{
YamlString: yamlString,
YamlString: cloudInfo.YamlString,
}
applyYamlLogic.ApplyYaml(&applyReq)
}
@@ -86,28 +86,20 @@ func initCron(svc *svc.ServiceContext) {
}

// 遍历core端任务列表信息
for _, taskInfo := range infoList.ExternalInfoList {
for _, cloudInfo := range infoList.CloudInfoList {
for _, deployment := range deploymentList.Items {
if deployment.Namespace == taskInfo.ExternalField && deployment.Name == taskInfo.Name {
external := pcmcoreclient.LatestExternalInfo{
ServiceName: "kubeNative",
TaskId: taskInfo.TaskId,
ExternalField: taskInfo.ExternalField,
Name: taskInfo.Name,
StartTime: deployment.Status.Conditions[0].LastTransitionTime.Time.String(),
RunningTime: time.Now().Sub(deployment.Status.Conditions[0].LastTransitionTime.Time).Milliseconds() / 1000,
}
if deployment.Namespace == cloudInfo.Namespace && deployment.Name == cloudInfo.Name {
cloudInfo.StartTime = deployment.Status.Conditions[0].LastTransitionTime.Time.String()
cloudInfo.RunningTime = time.Now().Sub(deployment.Status.Conditions[0].LastTransitionTime.Time).Milliseconds() / 1000
// 判断状态
if deployment.Status.ReadyReplicas == deployment.Status.Replicas {
external.Status = "running"
cloudInfo.Status = "running"
} else {
external.Status = "pending"
cloudInfo.Status = "pending"
}
SyncInfoReq.LatestExternalInfoList = append(SyncInfoReq.LatestExternalInfoList, &external)
}
}
}

// 同步信息到core端
svc.PcmCoreRpc.SyncInfo(context.Background(), &SyncInfoReq)
})


+ 12
- 3
common/param/hpcBase.go View File

@@ -1,7 +1,16 @@
package param

type HpcBase struct {
JobId string `json:"jobId"`
Name string `json:"name"`
WorkDir string `json:"workDir"`
TaskId int64 `json:"taskId" db:"task_id"`
ServiceName string `json:"serviceName" db:"service_name"`
JobId string `json:"jobId" db:"job_id"`
Name string `json:"name" db:"name"`
WorkDir string `json:"workDir" db:"work_dir"`
WallTime string `json:"wallTime" db:"wall_time"`
Status string `json:"status" db:"status"`
Result string `json:"result" db:"result"`
YamlString string `json:"yamlString" db:"yaml_string"`
}

type AiBase struct {
}

Loading…
Cancel
Save