syntax = "v1"

info(
    title: "gateway"
    desc: "gateway端微服务"
    author: "zhouqj"
    email: "450705171@qq.com"
)

type (
    getRegionResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        Data RegionNum `json:"data"`
    }
    RegionNum {
        RegionSum int64 `json:"regionSum"`
        SoftStackSum int64 `json:"softStackSum"`
    }
)
type (
    centerResourcesResp {
        CentersIndex []CenterIndex `json:"centersIndex"`
    }
    CenterIndex {
        Id int64 `json:"id"`
        Name string `json:"name"`
        Cpu string `json:"cpu"`
        Memory string `json:"memory"`
        Storage string `json:"storage"`
        CenterType string `json:"centerType"`
    }
)

type (
    HomeOverviewReq {

    }
    HomeOverviewResp {
        Code int `json:"code"`
        Message string `json:"message"`
        Data HomeOverviewData `json:"data"`
    }
    HomeOverviewData {
        AdaptSum int64 `json:"adaptSum"`
        ClusterSum int64 `json:"clusterSum"`
        StorageSum float32 `json:"storageSum"`
        TaskSum int64 `json:"taskSum"`
    }
)

type (
    PublicImageReq {

    }
    PublicImageResp {
        Code int `json:"code"`
        Message string `json:"message"`
        ImageDict []ImageDict `json:"imageRDict"`
    }
    ImageDict {
        Id int `json:"id"`
        PublicImageName string `json:"public_image_name"`
    }
)

type (
    PublicFlavorReq {

    }
    PublicFlavorResp {
        Code int `json:"code"`
        Message string `json:"message"`
        FlavorDict []FlavorDict `json:"flavorDict"`
    }
    FlavorDict {
        Id int `json:"id"`
        PublicFlavorName string `json:"public_flavor_name"`
    }
)

type (
    PublicNetworkReq {

    }
    PublicNetworkResp {
        Code int `json:"code"`
        Message string `json:"message"`
        NetworkDict []NetworkDict `json:"networkDict"`
    }
    NetworkDict {
        Id int `json:"id"`
        PublicNetworkName string `json:"public_netWork_name"`
    }
)

type remoteResp {
    Code int `json:"code"`
    Message string `json:"message"`
    Data interface{} `json:"data"`
}

type (
    clustersLoadReq {

    }
    clustersLoadResp {
        Data interface{} `json:"data"`
    }
)

type (
    syncClusterLoadReq {
        clusterLoadRecords []ClusterLoadRecord `json:"clusterLoadRecords"`
    }
    ClusterLoadRecord {
        AdapterId int64 `json:"adapterId,optional"`
        ClusterName string `json:"clusterName,optional"`
        CpuAvail float64 `json:"cpuAvail,optional"`
        CpuTotal float64 `json:"cpuTotal,optional"`
        CpuUtilisation float64 `json:"cpuUtilisation,optional"`
        MemoryAvail float64 `json:"memoryAvail,optional"`
        MemoryUtilisation float64 `json:"memoryUtilisation,optional"`
        MemoryTotal float64 `json:"memoryTotal,optional"`
        DiskAvail float64 `json:"diskAvail,optional"`
        DiskTotal float64 `json:"diskTotal,optional"`
        DiskUtilisation float64 `json:"diskUtilisation,optional"`
        PodsUtilisation float64 `json:"podsUtilisation,optional"`
        PodsCount int64 `json:"podsCount,optional"`
        PodsTotal int64 `json:"podsTotal,optional"`
        NodeCount float64 `json:"nodeCount,optional"`
    }
)

type (
    getClusterListReq {
        AdapterId int64 `form:"adapterId"`
    }
    getClusterListResp {
        Clusters []ClusterInfo `json:"clusters"`
    }
)

type (
    listRegionResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        Data []Region `json:"data"`
    }
    Region {
        RegionName string `json:"RegionName"`                  // 域名
        SoftStack string `json:"SoftStack"`                    // 软件栈
        SlurmNum int64 `json:"SlurmNum"`                       // 超算域适配slurm数量
        AdaptorInterfaceSum int64 `json:"AdaptorInterfaceSum"` // 适配接口数量
        RunningJobs int64 `json:"runningJobs"`
    }
)

type (
    GeneralTaskReq {
        Token string `json:"token,optional"`
        UserId int64 `json:"userId,optional"`
        Name string `json:"name"`
        AdapterIds []string `json:"adapterIds"`
        ClusterIds []string `json:"clusterIds"`
        Strategy string `json:"strategy"`
        StaticWeightMap map[string]int32 `json:"staticWeightMap,optional"`
        ReqBody []string `json:"reqBody"`
        Replicas int64 `json:"replicas,string"`
        UserIp string `json:"userIp,optional"`
    }

    PodLogsReq {
        TaskId string `json:"taskId"`
        TaskName string `json:"taskName"`
        ClusterId string `json:"clusterId"`
        ClusterName string `json:"clusterName"`
        AdapterId string `json:"adapterId"`
        AdapterName string `json:"adapterName"`
        PodName string `json:"podName"`
        stream bool `json:"stream"`
    }
)

type deleteTaskReq {
    Id int64 `path:"id"`
}

type commitTaskReq {
    Name string `json:"name"`
    NsID string `json:"nsID"`
    Replicas int64 `json:"replicas,optional"`
    MatchLabels map[string]string `json:"matchLabels,optional"`
    YamlList []string `json:"yamlList"`
    ClusterName string `json:"clusterName"`
}

type (
    scheduleTaskByYamlReq {
        Name string `yaml:"name"`
        Description string `yaml:"description"`
        TenantId int64 `yaml:"tenantId"`
        NsID string `yaml:"nsID"`
        Tasks []TaskYaml `yaml:"tasks"`
    }
    TaskYaml {
        Replicas int64 `yaml:"replicas"`
        TaskId int64 `yaml:"taskId"`
        NsID string `yaml:"nsID"`
        TaskType string `yaml:"taskType"`
        ParticipantId int64 `yaml:"participantId"`
        MatchLabels map[string]string `yaml:"matchLabels"`
        Metadata interface{} `yaml:"metadata"`
    }
)


type (
    commitVmTaskReq {
        Name string `json:"name"`
        AdapterIds []string `json:"adapterIds,optional"`
        ClusterIds []string `json:"clusterIds"`
        Strategy string `json:"strategy"`
        StaticWeightMap map[string]int32 `json:"staticWeightMap,optional"`
        MinCount int64 `json:"min_count,optional"`
        ImageRef int64 `json:"imageRef,optional"`
        FlavorRef int64 `json:"flavorRef,optional"`
        Uuid int64 `json:"uuid,optional"`
        Replicas int64 `json:"replicas,optional"`
        VmName string `json:"vm_name,optional"`
    }
    TaskVm {
        Image string `json:"image"`
        Flavor string `json:"flavor"`
        Uuid string `json:"uuid"`
        Platform string `json:"platform"`
    }
    VmOption {
        AdapterId string `json:"adapterId"`
        VmClusterIds []string `json:"vmClusterIds"`
        Replicas int64 `json:"replicas,optional"`
        Name string `json:"name"`
        //ResourceType          string   `json:"resourceType"`
        //TaskType              string   `json:"taskType"`
        Strategy string `json:"strategy"`
        ClusterToStaticWeight map[string]int32 `json:"clusterToStaticWeight"`
        MatchLabels map[string]string `json:"matchLabels,optional"`
        StaticWeightMap map[string]int32 `json:"staticWeightMap,optional"`
        CreateMulServer []CreateMulDomainServer `json:"createMulServer,optional"`
    }

    CreateMulDomainServer {
        Platform string `json:"platform,optional"`
        name string `json:"name,optional"`
        min_count int64 `json:"min_count,optional"`
        imageRef string `json:"imageRef,optional"`
        flavorRef string `json:"flavorRef,optional"`
        uuid string `json:"uuid,optional"`
        ClusterId string `json:"clusterId,optional"`
    }
    commitVmTaskResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
    }
    ScheduleVmResult {
        ClusterId string `json:"clusterId"`
        TaskId string `json:"taskId"`
        Strategy string `json:"strategy"`
        Replica int32 `json:"replica"`
        Msg string `json:"msg"`
    }
    VmTask {
        Id string `json:"id" copier:"Id"`
        Links []VmLinks `json:"links" copier:"Links"`
        OSDCFDiskConfig string `json:"OS_DCF_diskConfig" copier:"OSDCFDiskConfig"`
        SecurityGroups []VmSecurity_groups_server `json:"security_groups" copier:"SecurityGroups"`
        AdminPass string `json:"adminPass" copier:"AdminPass"`
    }
    VmLinks {
        Href string `json:"href " copier:"Href"`
        Rel string `json:"rel" copier:"Rel"`
    }
        //	commitVmTaskReq {
        //		Name        string            `json:"name"`
        //		NsID        string            `json:"nsID"`
        //		Replicas    int64             `json:"replicas,optional"`
        //		MatchLabels map[string]string `json:"matchLabels,optional"`
        //		AdapterId   string            `json:"adapterId,optional"`
        //		ClusterType string            `json:"clusterType,optional"`
        //		//Virtual Machine Section
        //		CreateMulServer []CreateMulDomainServer `json:"createMulServer,optional"`
        //	}
        //	CreateMulDomainServer {
        //		Platform  string `json:"platform,optional"`
        //		Name      string `json:"name,optional"`
        //		Min_count int64  `json:"min_count,optional"`
        //		ImageRef  string `json:"imageRef,optional"`
        //		FlavorRef string `json:"flavorRef,optional"`
        //		Uuid      string `json:"uuid,optional"`
        //	}
        //	commitVmTaskResp {
        //		// VmTask []VmTask `json:"vmTask" copier:"VmTask"`
        //		TaskId int64  `json:"taskId"`
        //		Code   int32  `json:"code"`
        //		Msg    string `json:"msg"`
        //	}
        //	VmTask {
        //		Id              string                     `json:"id" copier:"Id"`
        //		Links           []VmLinks                  `json:"links" copier:"Links"`
        //		OSDCFDiskConfig string                     `json:"OS_DCF_diskConfig" copier:"OSDCFDiskConfig"`
        //		SecurityGroups  []VmSecurity_groups_server `json:"security_groups" copier:"SecurityGroups"`
        //		AdminPass       string                     `json:"adminPass" copier:"AdminPass"`
        //	}
        //	VmLinks {
        //		Href string `json:"href " copier:"Href"`
        //		Rel  string `json:"rel" copier:"Rel"`
        //	}

    VmSecurity_groups_server {
        Name string `json:"name" copier:"Name"`
    }
)

type (
    asynCommitAiTaskReq {
        Name string `json:"name,optional"`
        AdapterIds []string `json:"adapterIds,optional"`
        ClusterIds []string `json:"clusterIds,optional"`
        Strategy string `json:"strategy,optional"`
        StaticWeightMap map[string]int32 `json:"staticWeightMap,optional"`
        Replicas int64 `json:"replicas,optional"`
        ImageId string `json:"imageId,optional"`
        Command string `json:"command,optional"`
        FlavorId string `json:"flavorId,optional"`
        Status string `json:"status,optional"`
        ClusterId int64 `json:"clusterId,optional"`
        AdapterId string `json:"adapterId,optional"`
    }

    asynCommitAiTaskResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        TaskId int64 `json:"taskId"`
    }
)

type (
    scheduleTaskByYamlResp {
        TaskId int64 `json:"taskId"`
    }
)
type (
    scheduleTaskReq {
        Name string `json:"name"`
        Synergy string `json:"synergy"`
        Description string `json:"description"`
        Strategy string `json:"strategy"`
        Tasks []TaskInfo `json:"tasks"`
    }
    TaskInfo {
        TaskId int64 `json:"taskId,optional"`
        TaskType string `json:"taskType,optional"`
        MatchLabels map[string]string `json:"matchLabels"`
        ParticipantId int64 `json:"participantId"`
        Metadata interface{} `json:"metadata"`
    }
)

type (
    jobTotalResp {
        AllCardRunTime float64 `json:"allCardRunTime"`
        AllJobCount float64 `json:"allJobCount"`
        AllJobRunTime float64 `json:"allJobRunTime"`
        TrainJobs []TrainJob `json:"trainJobs"`
    }
    TrainJob {
        Name string `json:"name"`
        Status string `json:"status"`
        ParticipantName string `json:"participantName"`
        SynergyStatus string `json:"synergyStatus"`
        Strategy int `json:"strategy"`
    }
)

// 任务列表参数
type (
    taskListReq {
        PageNum int `form:"pageNum"`
        PageSize int `form:"pageSize"`
    }
    taskListResp {
        TotalCount int64 `json:"totalCount"`   // 任务总数
        NormalCount int64 `json:"normalCount"` // 正常任务数
        AlarmCount int64 `json:"alarmCount"`   // 任务告警数
        Tasks []Task `json:"tasks"`
    }
    Task {
        Id int64 `json:"id"`
        Name string `json:"name"`
        Status string `json:"status"`
        TaskType string `json:"taskType"`
        StartTime string `json:"startTime"`
        EndTime string `json:"endTime"`
        ParticipantStatus string `json:"participantStatus"`
        ParticipantId int64 `json:"participantId"`
        ParticipantName string `json:"participantName"`
    }

    pageTaskReq {
        UserId int64 `form:"userId,optional"`
        Name string `form:"name,optional"`
        Type string `form:"type,optional"`
        UserName string `form:"userName,optional"`
        PageInfo
    }

    TaskModel {
        Id int64 `json:"id,omitempty,string" db:"id"`                                                   // id
        Name string `json:"name,omitempty" db:"name"`                                                   // 作业名称
        Description string `json:"description,omitempty" db:"description"`                              // 作业描述
        Status string `json:"status,omitempty" db:"status"`                                             // 作业状态
        Strategy int64 `json:"strategy" db:"strategy"`                                                  // 策略
        SynergyStatus int64 `json:"synergyStatus" db:"synergy_status"`                                  // 协同状态（0-未协同、1-已协同）
        CommitTime string `json:"commitTime,omitempty" db:"commit_time"`                                // 提交时间
        StartTime string `json:"startTime,omitempty" db:"start_time"`                                   // 开始时间
        EndTime string `json:"endTime,omitempty" db:"end_time"`                                         // 结束运行时间
        RunningTime int64 `json:"runningTime" db:"running_time"`                                        // 已运行时间（单位秒）
        YamlString string `json:"yamlString,omitempty" db:"yaml_string"`
        Result string `json:"result,omitempty" db:"result"`                                             // 作业结果
        DeletedAt string `json:"deletedAt,omitempty" gorm:"index" db:"deleted_at"`
        NsID string `json:"nsId,omitempty" db:"ns_id"`
        TenantId string `json:"tenantId,omitempty" db:"tenant_id"`
        CreatedTime string `json:"createdTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
        UpdatedTime string `json:"updatedTime,omitempty" db:"updated_time"`
        AdapterTypeDict string `json:"adapterTypeDict" db:"adapter_type_dict" gorm:"adapter_type_dict"` //适配器类型（对应字典表的值
        TaskTypeDict string `json:"taskTypeDict" db:"task_type_dict" gorm:"task_type_dict"`             //任务类型（对应字典表的值
        UserId int64 `json:"userId,omitempty" db:"user_id"`
    }
)

// 任务列表参数
type (
    taskDetailReq {
        TaskId int64 `path:"taskId"`
    }
    taskDetailResp {
        CpuCores float64 `json:"cpuCores"`
        CpuRate float64 `json:"cpuRate"`
        CpuLimit float64 `json:"cpuLimit"`
        GpuCores float64 `json:"gpuCores"`
        GpuRate float64 `json:"gpuRate"`
        GpuLimit float64 `json:"gpuLimit"`
        MemoryTotal float64 `json:"memoryTotal"`
        MemoryRate float64 `json:"memoryRate"`
        MemoryLimit float64 `json:"memoryLimit"`
    }
)
type (
    listCenterResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        Data CenterData `json:"data"`
    }
    CenterData {
        TotalCount int `json:"totalCount"`
        Centers []Center `json:"centers"`
    }
    Center {
        Id int64 `json:"id"`
        CenterSource string `json:"centerSource"`
        SourceId string `json:"sourceId"`
        Name string `json:"name"`
        Description string `json:"description"`
        Type string `json:"type"`
        Area string `json:"area"`
        City string `json:"city"`
        Longitude float64 `json:"longitude"`
        Latitude float64 `json:"latitude"`
        Status string `json:"status"`
        UserNum int64 `json:"userNum"`
        DeletedFlag int64 `json:"deletedFlag"`
        CloudClusterNum int64 `json:"cloudClusterNum"`
        CloudNodeNum int64 `json:"cloudNodeNum"`
        CloudCpuNum int64 `json:"cloudCpuNum"`
        CloudGpuNum int64 `json:"cloudGpuNum"`
        CloudMngFlops int64 `json:"cloudMngFlops"`
        CloudUmngFlops int64 `json:"cloudUmngFlops"`
        CloudMngStorage int64 `json:"cloudMngStorage"`
        CloudUmngStorage int64 `json:"cloudUmngStorage"`
        AiClusterNum int64 `json:"aiClusterNum"`
        AiNodeNum int64 `json:"aiNodeNum"`
        AiCpuNum int64 `json:"aiCpuNum"`
        AiGpuNum int64 `json:"aiGpuNum"`
        AiMngFlops int64 `json:"aiMngFlops"`
        AiUmngFlops int64 `json:"aiUmngFlops"`
        AiMngStorage int64 `json:"aiMngStorage"`
        AiUmngStorage int64 `json:"aiUmngStorage"`
        HpcClusterNum int64 `json:"hpcClusterNum"`
        HpcNodeNum int64 `json:"hpcNodeNum"`
        HpcCpuNum int64 `json:"hpcCpuNum"`
        HpcGpuNum int64 `json:"hpcGpuNum"`
        HpcMngFlops int64 `json:"hpcMngFlops"`
        HpcUmngFlops int64 `json:"hpcUmngFlops"`
        HpcMngStorage int64 `json:"hpcMngStorage"`
        HpcUmngStorage int64 `json:"hpcUmngStorage"`
        Edwc bool `json:"edwc"`
        Ydyl bool `json:"ydyl"`
        HubCode int64 `json:"hubCode"`
    }
)

type (
    listClusterReq {
        CenterId int32 `path:"centerId"`
    }
    listClusterResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        Data ClusterData `json:"data"`
    }
    ClusterData {
        TotalCount int `json:"totalCount"`
        Clusters []ComputeCluster `json:"clusters"`
    }
    ComputeCluster {
        Id int64 `json:"id"`
        Name string `json:"name"`
        Type string `json:"type"`
        JcceDomainId int64 `json:"jcceDomainId"`
        JcceDomainName string `json:"jcceDomainName"`
        Longitude float64 `json:"longitude"`
        Latitude float64 `json:"latitude"`
        Description string `json:"description"`
    }
)


type ScreenChartResp {
    ComputingPower []int `json:"computingPower"`
    CpuAvg []int `json:"cpuAvg"`
    CpuLoad []int `json:"cpuLoad"`
    MemoryLoad []int `json:"memoryLoad"`
    MemoryAvg []int `json:"memoryAvg"`
    CenterName string `json:"centerName"`
}

type getClusterByIdReq {
    ClusterId int32 `path:"clusterId"`
}

type getClusterByIdResp {
    ClusterInfo ClusterInfo `json:"clusterInfo"`
}



type ScreenInfoResp {
    StorageUsed float32 `json:"storageUsed"`
    StorageUsing float32 `json:"storageUsing"`
    UsageRate float32 `json:"usageRate"`
    UsingRate float32 `json:"usingRate"`
    ApiDelay string `json:"apiDelay"`
    SchedulerTimes int `json:"schedulerTimes"`
    SchedulerErr int `json:"schedulerErr"`
    ApiTimes string `json:"apiTimes"`
    CenterCount int `json:"centerCount"`
    ComputingPower float64 `json:"computingPower"`
    ClusterCount int `json:"clusterCount"`
    RunningCount int `json:"runningCount"`
    CardCount int `json:"cardCount"`
    RunningTime int `json:"runningTime"`
}


type (
    cpResp {
        POpsAtFp16 float32 `json:"pOpsAtFp16"`
    }

    GiResp {
        CpuNum int32 `json:"cpuNum,optional"`
        MemoryInGib int32 `json:"memoryInGib,optional"`
        StorageInGib int32 `json:"storageInGib,optional"`
    }
)

type (
    DomainResourceResp {
        TotalCount int `json:"totalCount"`
        DomainResourceList []DomainResource `json:"domainResourceList"`
    }
    DomainResource {
        Id int64 `json:"id"`                      // id
        DomainId string `json:"domainId"`         // 资源域id
        DomainName string `json:"domainName"`     // 资源域名称
        JobCount int64 `json:"jobCount"`          // 资源域任务数量
        DomainSource int64 `json:"domainSource"`  // 资源域数据来源：0-nudt，1-鹏城
        Stack string `json:"stack"`               // 技术栈
        ResourceType string `json:"resourceType"` // 资源类型
        Cpu float64 `json:"cpu"`                  // cpu使用率
        Memory float64 `json:"memory"`            // 内存使用率
        Disk float64 `json:"disk"`                // 存储使用率
        NodeCount float64 `json:"nodeCount"`      //节点使用率
                                                  //        DeleteFlag int64 `json:"delete_flag"`      // 是否删除 0:未删除，1:已经删除
        Description string `json:"description"`   //集群描述
        ClusterName string `json:"clusterName"`   //集群名称
        CpuTotal float64 `json:"cpuTotal"`        //cpu总核数
        MemoryTotal float64 `json:"memoryTotal"`  //内存总量Gi
        DiskTotal float64 `json:"diskTotal"`      //存储总量GB
        NodeTotal float64 `json:"nodeTotal"`      //容器节点数
        CpuUsage float64 `json:"cpuUsage"`        //cpu已使用核数
        MemoryUsage float64 `json:"memoryUsage"`  //内存已使用Gi
        DiskUsage float64 `json:"diskUsage"`      //存储已使用GB
        NodeUsage float64 `json:"nodeUsage"`      //容器节点已使用
    }
)

type (
    ResourcePanelConfigReq {
        Id int64 `json:"id"`                            //id
        Title string `json:"title"`                     //标题
        TitleColor string `json:"titleColor"`           //标题色
        MainColor string `json:"mainColor"`             //主色调
        MainColor2 string `json:"mainColor2"`           //次主色调
        TextColor string `json:"textColor"`             //文字颜色
        BackgroundColor string `json:"backgroundColor"` //背景底色
        Center string `json:"center"`                   //中心点
        CenterPosition string `json:"centerPosition"`   //comment 中心点坐标
        ProvinceBgColor string `json:"provinceBgColor"` //三级地图底色
        StatusIng string `json:"statusIng"`             //接入中图标
        StatusUn string `json:"statusUn"`               //未接入图标
        StatusEnd string `json:"statusEnd"`             //已接入图标
        TitleIcon string `json:"titleIcon"`             //标题底图
        SubTitleIcon string `json:"subTitleIcon"`       //小标题底图
        NumberBg string `json:"numberBg"`               //数字底图
        TaskBg string `json:"taskBg"`                   //任务底图
    }

    ResourcePanelConfigResp {
        Id int64 `json:"id"`                            //id
        Title string `json:"title"`                     //标题,
        TitleColor string `json:"titleColor"`           //标题色,
        MainColor string `json:"mainColor"`             //主色调,
        MainColor2 string `json:"mainColor2"`           //次主色调,
        TextColor string `json:"textColor"`             //文字颜色,
        BackgroundColor string `json:"backgroundColor"` //背景底色,
        Center string `json:"center"`                   //中心点,
        CenterPosition string `json:"centerPosition"`   //comment 中心点坐标,
        ProvinceBgColor string `json:"provinceBgColor"` //三级地图底色,
        StatusIng string `json:"statusIng"`             //接入中图标,
        StatusUn string `json:"statusUn"`               //未接入图标,
        StatusEnd string `json:"statusEnd"`             //已接入图标,
        TitleIcon string `json:"titleIcon"`             //标题底图,
        SubTitleIcon string `json:"subTitleIcon"`       //小标题底图,
        NumberBg string `json:"numberBg"`               //数字底图,
        TaskBg string `json:"taskBg"`                   //任务底图,
        CreateTime string `json:"createTime"`           //创建时间,
        UpdateTime string `json:"updateTime"`           //更新时间
    }
)

type (
    ComputilityStatisticsResp {
        Code int32 `json:"code,omitempty"`
        Msg string `json:"msg,omitempty"`
        ErrorMsg string `json:"ErrorMsg,omitempty"`
        ComputilityStatistics ComputilityStatistics `json:"data"` //容器节点已使用
    }
    ComputilityStatistics {
        DomainSum int64 `json:"domainSum"`                 //域总数
        TotalComputility float64 `json:"totalComputility"` //算力总和
        ClusterNum int64 `json:"clusterNum"`               //集群总数
    }
)

//jccSchedule容器集群资源监控 > start

type NodeAssetsResp {
    NodeAssets []NodeAsset `json:"nodeAssets"`
}

type NodeAsset {
    Name string `json:"Name"`                  //租户名称
    NodeName string `json:"NodeName"`          // 节点名称
    CpuTotal int64 `json:"CpuTotal"`           // cpu核数
    CpuUsable float64 `json:"CpuUsable"`       // cpu可用率
    DiskTotal int64 `json:"DiskTotal"`         // 磁盘空间
    DiskAvail int64 `json:"DiskAvail"`         // 磁盘可用空间
    MemTotal int64 `json:"MemTotal"`           // 内存总数
    MemAvail int64 `json:"MemAvail"`           // 内存可用数
    GpuTotal int64 `json:"GpuTotal"`           // gpu总数
    GpuAvail int64 `json:"GpuAvail"`           // gpu可用数
    ParticipantId int64 `json:"ParticipantId"` // 集群动态信息id
}

type participantListResp {
    Participants []Participant `json:"participants"`
}
type Participant {
    Id int64 `json:"id"`
    Name string `json:"name"`
    Address string `json:"address"`
    MetricsUrl string `json:"metricsUrl"`
    TenantName string `json:"tenantName"`
    TypeName string `json:"typeName"`
}

// apps列表参数
type (
    AppListReq {
        NsID string `form:"nsID"`
    }
    AppListResp {
        Apps []App `json:"apps"` //应用列表
    }
    Replica {
        ClusterName string `json:"clusterName"`
        Replica int32 `json:"replica"`
    }
    App {
        Id int64 `json:"id,optional" db:"id"`
        Name string `json:"name,optional"`
        Status string `json:"status,optional"`
        CreateTime string `json:"createTime,optional"`
        MinReplicas string `json:"minReplicas,optional"`
        MaxReplicas string `json:"maxReplicas,optional"`
        AppLocations []AppLocation `json:"appLocations,optional"`
    }
    AppLocation {
        ParticipantId string `json:"participantId,optional" db:"participant_id"`
        ParticipantName string `json:"participantName,optional" db:"participant_name"`
        Kind string `json:"kind,optional" db:"kind"`
    }
)

//apps 详情参数
type (
    AppDetailReq {
        Name string `path:"appName"`
        NsID string `form:"nsID"`
    }
    AppDetailResp {
        CpuCores float64 `json:"cpuCores"`
        CpuRate float64 `json:"cpuRate"`
        CpuLimit float64 `json:"cpuLimit"`
        GpuCores float64 `json:"gpuCores"`
        GpuRate float64 `json:"gpuRate"`
        GpuLimit float64 `json:"gpuLimit"`
        MemoryTotal float64 `json:"memoryTotal"`
        MemoryRate float64 `json:"memoryRate"`
        MemoryLimit float64 `json:"memoryLimit"`
    }

    AppTaskResp {
        Data interface{} `json:"data"`
    }
)

type (
    DeleteAppReq {
        Name string `form:"name"`
        NsID string `form:"nsID"`
    }

    DeleteAppResp {
        Code int `json:"code,omitempty"`
        Msg string `json:"msg,omitempty"`
        Data interface{} `json:"data,omitempty"`
    }

    AppResp {
        Code int `json:"code,omitempty"`
        Msg string `json:"msg,omitempty"`
        Data interface{} `json:"data,omitempty"`
    }
)

type (
    AdapterQueryReq {
        Id string `form:"id,optional" db:"id"`
        Name string `form:"name,optional"`
        Type string `form:"type,optional"`
        ResourceType string `form:"resourceType,optional"`
        Nickname string `form:"nickname,optional"`
        Version string `form:"version,optional"`
        Server string `form:"server,optional"`
        PageInfo
    }
    AdapterRelationQueryReq {
        Id string `form:"id,optional" db:"id"`
        Name string `form:"name,optional"`
        Type string `form:"type,optional"`
        ResourceType string `form:"resourceType,optional"`
        Nickname string `form:"nickname,optional"`
        Version string `form:"version,optional"`
        Server string `form:"server,optional"`
    }
    AdapterReq {
        Id string `json:"id,optional" db:"id"`
        Name string `json:"name,optional"`
        Type string `json:"type,optional"`
        ResourceType string `json:"resourceType,optional"`
        Nickname string `json:"nickname,optional"`
        Version string `json:"version,optional"`
        Server string `json:"server,optional"`
    }
    AdapterCreateReq {
        Id string `json:"id,optional" db:"id"`
        Name string `json:"name"`
        Type string `json:"type"`
        ResourceType string `json:"resourceType"`
        Nickname string `json:"nickname"`
        Version string `json:"version"`
        Server string `json:"server"`
    }
    AdapterDelReq {
        Id string `form:"id,optional" db:"id"`
    }
    AdapterInfo {
        Id string `json:"id,omitempty" db:"id"`
        Name string `json:"name,omitempty" db:"name"`
        Type string `json:"type,omitempty" db:"type"`
        ResourceType string `json:"resourceType,omitempty" db:"resource_type"`
        Nickname string `json:"nickname,omitempty" db:"nickname"`
        Version string `json:"version,omitempty" db:"version"`
        Server string `json:"server,omitempty" db:"server"`
        CreateTime string `json:"createTime,omitempty" db:"create_time" gorm:"autoCreateTime"`
    }
    AdapterResp {
        Id string `json:"id,omitempty" db:"id"`
        Name string `json:"name,omitempty" db:"name"`
        Type string `json:"type,omitempty" db:"type"`
        ResourceType string `json:"resourceType,omitempty" db:"resource_type"`
        Nickname string `json:"nickname,omitempty" db:"nickname"`
        Version string `json:"version,omitempty" db:"version"`
        Server string `json:"server,omitempty" db:"server"`
        CreateTime string `json:"createTime,omitempty" db:"create_time" gorm:"autoCreateTime"`
        InfoName string `json:"info_name,omitempty"`
    }
    AdapterListResp {
        List []AdapterInfo `json:"list,omitempty"`
    }
    AdapterRelationResp {
        List []*ClusterRelationInfo `json:"list,omitempty"`
    }
    AdapterRelation {
        Id string `json:"id,omitempty" db:"id"`
        Name string `json:"name,omitempty" db:"name"`
        Type string `json:"type,omitempty" db:"type"`
        ResourceType string `json:"resourceType" db:"resource_type"`
        Nickname string `json:"nickname,omitempty" db:"nickname"`
        Version string `json:"version,omitempty" db:"version"`
        Server string `json:"server,omitempty" db:"server"`
        CreateTime string `json:"createTime,omitempty" db:"create_time" gorm:"autoCreateTime"`
        Clusters []*ClusterInfo `json:"clusters,omitempty"`
    }
)

type (
    ClusterReq {
        Id string `form:"id,optional"`
        AdapterId string `form:"adapterId,optional"`
        Name string `form:"name,optional"`
        Nickname string `form:"nickname,optional"`
        Description string `form:"description,optional"`
        Server string `form:"server,optional"`
        MonitorServer string `form:"monitorServer,optional"`
        Username string `form:"username,optional"`
        Password string `form:"password,optional"`
        Token string `form:"token,optional"`
        Ak string `form:"ak,optional"`
        Sk string `form:"sk,optional"`
        Region string `form:"region,optional"`
        ProjectId string `form:"projectId,optional"`
        Version string `form:"version,optional"`
        Label string `form:"label,optional"`
        OwnerId string `form:"ownerId,omitempty,optional"`
        AuthType string `form:"authType,optional"`
        Type string `form:"type,optional"`
        ProducerDict string `form:"producerDict,optional"`
        RegionDict string `form:"regionDict,optional"`
        ResourceType string `form:"resourceType,optional"`
        StorageSchedule string `form:"storageSchedule,optional"`
        PageInfo
    }

    ClusterCreateReq {
        Id string `json:"id,optional"`
        AdapterId string `json:"adapterId,optional"`
        Name string `json:"name,optional"`
        Nickname string `json:"nickname,optional"`
        Description string `json:"description,optional"`
        Server string `json:"server,optional"`
        MonitorServer string `json:"monitorServer,optional"`
        Username string `json:"username,optional"`
        Password string `json:"password,optional"`
        Token string `json:"token,optional"`
        Ak string `json:"ak,optional"`
        Sk string `json:"sk,optional"`
        Region []string `json:"region,optional"`
        ProjectId string `json:"projectId,optional"`
        Version string `json:"version,optional"`
        Label string `json:"label,optional"`
        OwnerId string `json:"ownerId,omitempty,optional"`
        AuthType string `json:"authType,optional"`
        ProducerDict string `json:"producerDict,optional"`
        RegionDict string `json:"regionDict,optional"`
        RegionName string `json:"regionName,optional"`
        Environment map[string]string `json:"environment,optional"`
        CostType string `json:"costType,optional"`
        Price int `json:"price,optional"`
    }
    ClusterInfo {
        Id string `json:"id,omitempty" db:"id"`
        AdapterId int64 `json:"adapterId,omitempty,string" db:"adapter_id"`
        Name string `json:"name,omitempty" db:"name"`
        Nickname string `json:"nickname,omitempty" db:"nickname"`
        Description string `json:"description,omitempty" db:"description"`
        Server string `json:"server,omitempty" db:"server"`
        MonitorServer string `json:"monitorServer,omitempty" db:"monitor_server"`
        Username string `json:"username,omitempty" db:"username"`
        Password string `json:"password,omitempty" db:"password"`
        Token string `json:"token,omitempty" db:"token"`
        Ak string `json:"ak,omitempty" db:"ak"`
        Sk string `json:"sk,omitempty" db:"sk"`
        Region string `json:"region,omitempty" db:"region"`
        ProjectId string `json:"projectId,omitempty" db:"project_id"`
        Version string `json:"version,omitempty" db:"version"`
        Label string `json:"label,omitempty" db:"label"`
        OwnerId string `json:"ownerId,omitempty" db:"owner_id"`
        AuthType string `json:"authType,omitempty" db:"auth_type"`
        ProducerDict string `json:"producerDict,omitempty" db:"producer_dict"`
        RegionDict string `json:"regionDict,omitempty" db:"region_dict"`
        Location string `json:"location,omitempty" db:"location"`
        CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
        EnvPath string `json:"envPath,omitempty" db:"env_path"`
        EnvLdPath string `json:"envLdPath,omitempty" db:"env_ld_path"`
        WorkDir string `json:"workDir,omitempty" db:"work_dir"`
        Address string `json:"address,omitempty" db:"address"`
        ProxyAddress string `json:"proxyAddress,omitempty" db:"proxy_address"`
        ProxyEnable string `json:"proxyEnable,omitempty" db:"proxy_enable"`
        Driver string `json:"driver,omitempty" db:"driver"`
    }
)

type ClusterDelReq {
    Id string `form:"id,optional"`
}

type ClusterResp {
    List ClusterInfo `json:"list,omitempty"`
}

type ClusterListResp {
    List []ClusterInfo `json:"list,omitempty"`
}

type clusterSumReq {
}

type clusterSumReqResp {
    PodSum int `json:"podSum,omitempty"`
    VmSum int `json:"vmSum,omitempty"`
    AdapterSum int `json:"AdapterSum,omitempty"`
    TaskSum int `json:"TaskSum,omitempty"`
}

type ClusterRelationInfo {
    Id string `json:"id,omitempty" db:"id"`
    Name string `json:"name,omitempty" db:"name"`
    Type string `json:"type,omitempty" db:"type"`
    Nickname string `json:"nickname,omitempty" db:"nickname"`
    Version string `json:"version,omitempty" db:"version"`
    Server string `json:"server,omitempty" db:"server"`
    CreateTime string `json:"createTime,omitempty" db:"create_time" gorm:"autoCreateTime"`
    CId string `json:"cId,omitempty" db:"id"`
    CAdapterId string `json:"cAdapterId,omitempty" db:"adapter_id"`
    CName string `json:"cName,omitempty" db:"name"`
    CNickname string `json:"cNickname,omitempty" db:"nickname"`
    CDescription string `json:"cDescription,omitempty" db:"description"`
    CServer string `json:"cServer,omitempty" db:"server"`
    CMonitorServer string `json:"cMonitorServer,omitempty" db:"monitor_server"`
    CUsername string `json:"cUsername,omitempty" db:"username"`
    CPassword string `json:"cPassword,omitempty" db:"password"`
    CToken string `json:"cToken,omitempty" db:"token"`
    CAk string `json:"cAk,omitempty" db:"ak"`
    CSk string `json:"cSk,omitempty" db:"sk"`
    CRegion string `json:"cRegion,omitempty" db:"region"`
    CProjectId string `json:"cProjectId,omitempty" db:"project_id"`
    CVersion string `json:"cVersion,omitempty" db:"version"`
    CLabel string `json:"cLabel,omitempty" db:"label"`
    COwnerId string `json:"cOwnerId,omitempty" db:"owner_id"`
    CAuthType string `json:"cAuthType,omitempty" db:"auth_type"`
    CRegionDict string `json:"cRegionDict,omitempty" db:"-"`
    CProducerDict string `json:"cProducerDict,omitempty" db:"-"`
    CCreateTime string `json:"cCreateTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
}

type adapterInfoNameReq {
    AdapterId string `form:"adapterId,optional"`
}

type adapterInfoNameReqResp {
    Code int32 `json:"code,omitempty"`
    Msg string `json:"msg,omitempty"`
    ErrorMsg string `json:"errorMsg,omitempty"`
    InfoList InfoList `json:"infoList,omitempty"`
}

type InfoList {
    Type string `json:"type,omitempty"`
    ResourceType string `json:"resource_type,omitempty"`
    TName string `json:"name,omitempty"`
    InfoName string `json:"info_name,omitempty"`
}

type (
    DictInfo {
        Id string `json:"id,omitempty"`
        DictName string `json:"dictName,omitempty"`
        DictCode string `json:"dictCode,omitempty"`
        Description string `json:"description,omitempty"`
        Type string `json:"type,omitempty" db:"type"`
        Status string `json:"status,omitempty" db:"status"`
        CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
    }

    DictReq {
        Id string `form:"id,optional"`
        DictName string `form:"dictName,optional"`
        DictCode string `form:"dictCode,optional"`
        Description string `form:"description,optional"`
        Type string `form:"type,optional"`
        Status string `form:"status,optional"`
        PageInfo
    }

    DictEditReq {
        Id string `json:"id,optional"`
        DictName string `json:"dictName,optional"`
        DictCode string `json:"dictCode,optional"`
        Description string `json:"description,optional"`
        Type string `json:"type,optional"`
        Status string `json:"status,optional"`
    }

    DictResp {
        Id string `json:"id,omitempty"`
        DictName string `json:"dictName,omitempty"`
        DictCode string `json:"dictCode,omitempty"`
        Description string `json:"description,omitempty"`
        Type string `json:"type,omitempty"`
        Status string `json:"status,omitempty"`
        CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
        DictItemInfo []*DictItemInfo `json:"dictItemInfo,omitempty"`
    }

    Dicts {
        List []DictInfo `json:"list,omitempty"`
    }

    DictItemInfo {
        Id string `json:"id,omitempty"`
        DictId string `json:"dictId,omitempty"`
        ItemText string `json:"itemText,omitempty"`
        ItemValue string `json:"itemValue,omitempty"`
        Description string `json:"description,omitempty"`
        SortOrder string `json:"sortOrder,omitempty"`
        ParentId string `json:"parentId,omitempty"`
        Status string `json:"status,omitempty" db:"status"`
        CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
        Children []DictItemInfo `json:"children,omitempty" gorm:"-"`
    }

    DictItemReq {
        Id string `form:"id,optional"`
        DictId string `form:"dictId,optional"`
        ItemText string `form:"itemText,optional"`
        ItemValue string `form:"itemValue,optional"`
        Description string `form:"description,optional"`
        SortOrder string `form:"sortOrder,optional"`
        Type string `form:"type,optional"`
        ParentId string `form:"parentId,optional"`
        Status string `form:"status,optional"`
    }

    DictItemEditReq {
        Id string `json:"id,optional"`
        DictId string `json:"dictId,optional"`
        ItemText string `json:"itemText,optional"`
        ItemValue string `json:"itemValue,optional"`
        Description string `json:"description,optional"`
        SortOrder string `json:"sortOrder,optional"`
        ParentId string `json:"parentId,optional"`
        Status string `json:"status,optional"`
    }

    DictItemResp {
        Id string `json:"id,omitempty"`
        DictId string `json:"dictId,omitempty"`
        ItemText string `json:"itemText,omitempty"`
        ItemValue string `json:"itemValue,omitempty"`
        Description string `json:"description,omitempty"`
        SortOrder string `json:"sortOrder,omitempty"`
        ParentId string `json:"parentId,omitempty"`
        Status string `json:"status,omitempty"`
        CreateTime string `json:"createTime,omitempty" db:"created_time" gorm:"autoCreateTime"`
        DictInfo *DictInfo `json:"dictInfo,omitempty"`
    }

    DictItems {
        List []DictItemInfo `json:"list,omitempty"`
    }

    DictCodeReq {
        DictCode string `path:"dictCode"`
    }
)

type (
    CId {
        Id string `path:"id":"id,omitempty" validate:"required"`
    }

    CIds {
        Ids []string `json:"ids,omitempty" validate:"required"`
    }

    FId {
        Id string `form:"id":"id,omitempty" validate:"required"`
    }
)

type (
    PageInfo {
        PageNum int `form:"pageNum"`
        PageSize int `form:"pageSize"`
    }

    PageResult {
        List interface{} `json:"list,omitempty"`
        Total int64 `json:"total,omitempty"`
        PageNum int `json:"pageNum,omitempty"`
        PageSize int `json:"pageSize,omitempty"`
    }
    ListResult {
        List interface{} `json:"list,omitempty"`
    }
)

type (
    HpcInfo {
        Id int64 `json:"id"`                     // id
        TaskId int64 `json:"task_id"`            // 任务id
        JobId string `json:"job_id"`             // 作业id(在第三方系统中的作业id)
        AdapterId int64 `json:"adapter_id"`      // 执行任务的适配器id
        ClusterId int64 `json:"cluster_id"`      // 执行任务的集群id
        ClusterType string `json:"cluster_type"` // 执行任务的集群类型
        Name string `json:"name"`                // 名称
        Status string `json:"status"`            // 状态
        CmdScript string `json:"cmd_script"`
        StartTime string `json:"start_time"`     // 开始时间
        RunningTime int64 `json:"running_time"`  // 运行时间
        DerivedEs string `json:"derived_es"`
        Cluster string `json:"cluster"`
        BlockId int64 `json:"block_id"`
        AllocNodes int64 `json:"alloc_nodes"`
        AllocCpu int64 `json:"alloc_cpu"`
        CardCount int64 `json:"card_count"`      // 卡数
        Version string `json:"version"`
        Account string `json:"account"`
        WorkDir string `json:"work_dir"`         // 工作路径
        AssocId int64 `json:"assoc_id"`
        ExitCode int64 `json:"exit_code"`
        WallTime string `json:"wall_time"`       // 最大运行时间
        Result string `json:"result"`            // 运行结果
        DeletedAt string `json:"deleted_at"`     // 删除时间
        YamlString string `json:"yaml_string"`
        AppType string `json:"app_type"`         // 	应用类型
        AppName string `json:"app_name"`         // 	应用名称
        Queue string `json:"queue"`              // 队列名称
        SubmitType string `json:"submit_type"`   // cmd（命令行模式）
        NNode string `json:"n_node"`             // 节点个数（当指定该参数时，GAP_NODE_STRING必须为""）
        StdOutFile string `json:"std_out_file"`  // 工作路径/std.err.%j
        StdErrFile string `json:"std_err_file"`  // 工作路径/std.err.%j
        StdInput string `json:"std_input"`
        Environment string `json:"environment"`
        DeletedFlag int64 `json:"deleted_flag"`  // 是否删除（0-否，1-是）
        CreatedBy int64 `json:"created_by"`      // 创建人
        CreateTime string `json:"created_time"`  // 创建时间
        UpdatedBy int64 `json:"updated_by"`      // 更新人
        UpdateTime string `json:"updated_time"`  // 更新时间
    }

    CloudInfo {
        Participant int64 `json:"participant,omitempty"`
        Id int64 `json:"id,omitempty"`
        TaskId int64 `json:"taskId,omitempty"`
        ApiVersion string `json:"apiVersion,omitempty"`
        Kind string `json:"kind,omitempty"`
        Namespace string `json:"namespace,omitempty"`
        Name string `json:"name,omitempty"`
        Status string `json:"status,omitempty"`
        StartTime string `json:"startTime,omitempty"`
        RunningTime int64 `json:"runningTime,omitempty"`
        Result string `json:"result,omitempty"`
        YamlString string `json:"yamlString,omitempty"`
    }

    AiInfo {
        ParticipantId int64 `json:"participantId,omitempty"`
        TaskId int64 `json:"taskId,omitempty"`
        ProjectId string `json:"project_id,omitempty"`
        Name string `json:"name,omitempty"`
        Status string `json:"status,omitempty"`
        StartTime string `json:"startTime,omitempty"`
        RunningTime int64 `json:"runningTime,omitempty"`
        Result string `json:"result,omitempty"`
        JobId string `json:"jobId,omitempty"`
        CreateTime string `json:"createTime,omitempty"`
        ImageUrl string `json:"imageUrl,omitempty"`
        Command string `json:"command,omitempty"`
        FlavorId string `json:"flavorId,omitempty"`
        SubscriptionId string `json:"subscriptionId,omitempty"`
        ItemVersionId string `json:"itemVersionId,omitempty"`
    }

    VmInfo {
        ParticipantId int64 `json:"participantId,omitempty"`
        TaskId int64 `json:"taskId,omitempty"`
        Name string `json:"name,omitempty"`
        FlavorRef string `json:"flavor_ref,omitempty"`
        ImageRef string `json:"image_ref,omitempty"`
        NetworkUuid string `json:"network_uuid,omitempty"`
        BlockUuid string `json:"block_uuid,omitempty"`
        SourceType string `json:"source_type,omitempty"`
        DeleteOnTermination bool `json:"delete_on_termination,omitempty"`
        Status string `json:"status,omitempty"`
        MinCount string `json:"min_count,omitempty"`
        Platform string `json:"platform,omitempty"`
        Uuid string `json:"uuid,omitempty"`
    }
)

type (
    PullTaskInfoReq {
        AdapterId int64 `form:"adapterId"`
    }

    PullTaskInfoResp {
        HpcInfoList []*HpcInfo `json:"HpcInfoList,omitempty"`
        CloudInfoList []*CloudInfo `json:"CloudInfoList,omitempty"`
        AiInfoList []*AiInfo `json:"AiInfoList,omitempty"`
        VmInfoList []*VmInfo `json:"VmInfoList,omitempty"`
    }
)

type (
    PushTaskInfoReq {
        AdapterId int64 `json:"adapterId"`
        HpcInfoList []*HpcInfo `json:"hpcInfoList"`
        CloudInfoList []*CloudInfo `json:"cloudInfoList"`
        AiInfoList []*AiInfo `json:"aiInfoList"`
        VmInfoList []*VmInfo `json:"vmInfoList"`
    }

    PushTaskInfoResp {
        Code int64 `json:"code"`
        Msg string `json:"msg"`
    }
)

type (
    PushResourceInfoReq {
        AdapterId int64 `json:"adapterId"`
        ResourceStats []ResourceStats `json:"resourceStats"`
    }

    PushResourceInfoResp {
        Code int64 `json:"code"`
        Msg string `json:"msg"`
    }
)

type (
    NoticeInfo {
        AdapterId int64 `json:"adapterId"`
        AdapterName string `json:"adapterName"`
        ClusterId int64 `json:"clusterId"`
        ClusterName string `json:"clusterName"`
        NoticeType string `json:"noticeType"`
        TaskName string `json:"taskName"`
        Incident string `json:"incident"`
    }
    ListNoticeReq {
    }

    ListNoticeResp {
        Code int64 `json:"code"`
        Msg string `json:"msg"`
        Data []NoticeInfo `json:"data"`
    }

    PushNoticeReq {
        NoticeInfo NoticeInfo `json:"noticeInfo"`
    }

    PushNoticeResp {
        Code int64 `json:"code"`
        Msg string `json:"msg"`
    }
)

type ResourceStats {
    ClusterId int64 `json:"clusterId"`
    Name string `json:"name"`
    CpuCoreAvail int64 `json:"cpuCoreAvail"`
    CpuCoreTotal int64 `json:"cpuCoreTotal"`
    MemAvail float64 `json:"memAvail"`
    MemTotal float64 `json:"memTotal"`
    DiskAvail float64 `json:"diskAvail"`
    DiskTotal float64 `json:"diskTotal"`
    GpuAvail int64 `json:"gpuAvail"`
    CardsAvail []*Card `json:"cardsAvail"`
    CpuCoreHours float64 `json:"cpuCoreHours"`
    Balance float64 `json:"balance"`
}

type Card {
    Platform string `json:"platform"`
    Type string `json:"type"`
    Name string `json:"name"`
    TOpsAtFp16 float64 `json:"TOpsAtFp16"`
    CardHours float64 `json:"cardHours"`
    CardNum int32 `json:"cardNum"`
}

type TaskStatusResp {
    Succeeded int `json:"Succeeded"`
    Failed int `json:"Failed"`
    Running int `json:"Running"`
    Saved int `json:"Saved"`
}

type (
    TaskDetailsResp {
        Name string `json:"name"`
        description string `json:"description"`
        StartTime string `json:"startTime"`
        EndTime string `json:"endTime"`
        Strategy int64 `json:"strategy"`
        SynergyStatus int64 `json:"synergyStatus"`
        ClusterInfos []*ClusterInfo `json:"clusterInfos"`
        SubTaskInfos []*SubTaskInfo `json:"subTaskInfos"`
        TaskTypeDict string `json:"taskTypeDict"`
        AdapterTypeDict string `json:"adapterTypeDict"`
    }

    SubTaskInfo {
        Id string `json:"id" db:"id"`
        Name string `json:"name" db:"name"`
        ClusterId string `json:"clusterId" db:"cluster_id"`
        ClusterName string `json:"clusterName" db:"cluster_name"`
        Status string `json:"status" db:"status"`
        Remark string `json:"remark" db:"remark"`
        InferUrl string `json:"inferUrl"`
        WorkDir string `json:"workDir"`
        AppName string `json:"appName"`
    }
)

type (
    CommonResp {
        Code int `json:"code,omitempty"`
        Msg string `json:"msg,omitempty"`
        Data interface{} `json:"data,omitempty"`
        TraceId string `json:"traceId,omitempty"`
    }
)

type ResourceCost {
    ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
    ResourceID int64 `json:"resourceId" gorm:"column:resource_id"`
    Price int `json:"price" gorm:"column:price"`
    CostType string `json:"costType" gorm:"column:cost_type"`
    ResourceType string `json:"resourceType" gorm:"column:resource_type"`
}

type ResourceCostRecord {
    ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
    ResourcePriceID int64 `json:"resourcePriceId" gorm:"column:resource_price_id"`
    UserId int64 `json:"userId" gorm:"column:user_id"`
    Amount int `json:"amount" gorm:"column:amount"`
    StartTime string `json:"startTime" gorm:"column:start_time"`
    EndTime string `json:"endTime" gorm:"column:end_time"`
    Status int `json:"status" gorm:"column:status"`
    UsageHours string `json:"usageHours" gorm:"column:usage_hours"`
}

type ResourceSpecReq {
    ClusterId string `form:"clusterId,optional"`
    Type string `form:"type,optional"`
    Name string `form:"name,optional"`
    Status string `form:"status,optional"`
    changeType string `form:"changeType,optional"`
    Tag string `form:"tag,optional"` // 标签（Train: 训练，Inference：推理）
    PageInfo
}

type FetchResourceSpecReq {
    ClusterId string `form:"clusterId,optional"`
    Tag string `form:"tag,optional"`
}

type IdReq {
    Id string `form:"id,optional" json:"id,optional"`
}

type DeletePathId {
    Id string `path:"id"`
}

type ResourceSpecResp {
    Data []ResourceSpec `json:"resourceSpec"`
    PageInfo
}

type ResourceSpec {
    Id int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
    Type string `json:"type" gorm:"column:type"`
    Name string `json:"name" gorm:"column:name"`
    TotalCount int64 `json:"totalCount" gorm:"column:total_count"`
    AvailableCount int64 `json:"availableCount" gorm:"column:available_count"`
    ChangeType int32 `json:"changeType" gorm:"column:change_type"`
    Status int32 `json:"status" gorm:"column:status"`
    Region string `json:"region" gorm:"column:region"`
    ClusterId string `json:"clusterId" gorm:"column:cluster_id"`
    CostPerUnit float64 `json:"costPerUnit" gorm:"column:cost_per_unit"`
    CostType string `json:"costType" gorm:"column:cost_type"` //计费类型（hourly, daily, monthly,perUse）
    Tag		string   `json:"tag" gorm:"tag"`             // 标签（0: 训练，1：推理，-1：通用）
    UserId string `json:"userId" gorm:"column:user_id"`
    CreateTime string `json:"createTime" gorm:"column:create_time"`
    UpdateTime string `json:"updateTime" gorm:"column:update_time"`

    BaseResourceSpecs []BaseResourceSpec `json:"baseResourceSpec" gorm:"foreignKey:ResourceSpecId"`
}

type BaseResourceSpec {
    Id int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
    ResourceSpecId int64 `json:"resourceSpecId" gorm:"column:resource_spec_id"`
    Type string `json:"type" gorm:"column:type"`
    Name string `json:"name" gorm:"column:name"`
    TotalValue float64 `json:"totalValue" gorm:"column:total_value"`
    TotalUnit string `json:"totalUnit" gorm:"column:total_unit"`
    AvailableValue float64 `json:"availableValue" gorm:"column:available_value"`
    AvailableUnit string `json:"availableUnit" gorm:"column:available_unit"`
    UserId string `json:"userId" gorm:"column:user_id"`
    CreateTime string `json:"createTime" gorm:"column:create_time"`
    UpdateTime string `json:"updateTime" gorm:"column:update_time"`
}

type EditResourceReq {
    Id int64 `json:"id,string" gorm:"column:id;primaryKey;autoIncrement"`
    status string `json:"status" gorm:"column:status"`
    CostPerUnit string `json:"costPerUnit" gorm:"column:cost_per_unit"`
    CostType string `json:"costType" gorm:"column:cost_type"` //计费类型（hourly, daily, monthly,perUse）
    Type string `json:"type,optional" gorm:"column:type"`

                                                              // 基础资源规格
    StorageValue string `json:"storageValue,optional"`
    StorageUnit string `json:"storageUnit,optional"`
    CpuValue string `json:"cpuValue,optional"`
    CpuUnit string `json:"cpuUnit,optional"`
    MemoryValue string `json:"memoryValue,optional"`
    MemoryUnit string `json:"memoryUnit,optional"`
}

type SyncResourceReq {
    Id string `json:"id"`
}