syntax = "v1"

info(
    title: "type title here"
    desc: "type desc here"
    author: "type author here"
    email: "type email here"
    version: "type version here"
)

type (
    commitHpcTaskReq {
        Name string `json:"name"`
        Backend string `json:"backend"`
        ClusterId string `json:"clusterId"`
        App string `json:"app"`
        Description string `json:"description,optional"`
        OperateType string `json:"operateType,optional"`
        Parameters map[string]string `json:"parameters"`
        CustomParams map[string]string `json:"customParams"`
        ScriptContent string `json:"scriptContent,optional"`
    }
)


type (
    commitHpcTaskResp {
        Code    int    `json:"code"`
        Data    Data   `json:"data"`
        Msg     string `json:"msg"`
        TraceId string `json:"trace_id"`
    }
    Data {
        Backend string  `json:"backend"`
        JobInfo map[string]string `json:"jobInfo"`
    }

)


type (
    hpcOverViewReq {
    }
    hpcOverViewResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        Data HPCOverView `json:"data"`
    }
    HPCOverView {
        AdapterCount int32 `json:"adapterCount"`
        StackCount int32 `json:"stackCount"`
        ClusterCount int32 `json:"clusterCount"`
        TaskCount int32 `json:"taskCount"`
    }
)

type (
    hpcAdapterSummaryReq {
    }
    hpcAdapterSummaryResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        Data []HPCAdapterSummary `json:"data"`
    }
    HPCAdapterSummary {
        AdapterName string `json:"adapterName"`
        StackCount int32 `json:"stackCount"`
        ClusterCount int32 `json:"clusterCount"`
        TaskCount int32 `json:"taskCount"`
    }
)

type (
    hpcJobReq {
    }
    hpcJobResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        Data []Job `json:"data"`
    }
    Job {
        JobName string `json:"jobName"`
        JobDesc string `json:"jobDesc"`
        SubmitTime string `json:"submitTime"`
        JobStatus string `json:"jobStatus"`
        AdapterName string `json:"adapterName"`
        ClusterName string `json:"clusterName"`
        ClusterType string `json:"clusterType"`
    }
)

type (
    hpcResourceReq {
    }
    hpcResourceResp {
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        Data HPCResource `json:"data"`
    }
    HPCResource {
        GPUCardsTotal float64 `json:"gpuCoresTotal"`
        CPUCoresTotal float64 `json:"cpuCoresTotal"`
        RAMTotal float64 `json:"ramTotal"`
        GPUCardsUsed float64 `json:"gpuCoresUsed"`
        CPUCoresUsed float64 `json:"cpuCoresUsed"`
        RAMUsed float64 `json:"ramUsed"`
        GPURate float64 `json:"gpuRate"`
        CPURate float64 `json:"cpuRate"`
        RAMRate float64 `json:"ramRate"`
    }
)

type cancelJobReq {
    ClusterId int64 `form:"clusterId,optional"`
    JobId string `form:"jobId,optional"`
    taskId string `form:"taskId"`
}

type jobInfoReq {
    ClusterId int64 `form:"clusterId"`
    JobId string `form:"jobId"`
}

type jobInfoResp {
    JobId string `form:"jobId"`
    JobState string `json:"jobState"`
    CurrentWorkingDirectory string `json:"currentWorkingDirectory"`
}

type QueueAssetsResp {
    QueueAssets []QueueAsset `json:"queueAsset"`
}
type QueueAsset {
    TenantName string `json:"tenantName"`                   //租户名称
    ParticipantId int64 `json:"participantId"`
    AclHosts string `json:"aclHosts"`                       // 可用节点，多个节点用逗号隔开
    QueNodes string `json:"queNodes"`                       //队列节点总数
    QueMinNodect string `json:"queMinNodect,omitempty"`     //队列最小节点数
    QueMaxNgpus string `json:"queMaxNgpus,omitempty"`       //队列最大GPU卡数
    QueMaxPPN string `json:"queMaxPPN,omitempty"`           //使用该队列作业最大CPU核心数
    QueChargeRate string `json:"queChargeRate,omitempty"`   //费率
    QueMaxNcpus string `json:"queMaxNcpus,omitempty"`       //用户最大可用核心数
    QueMaxNdcus string `json:"queMaxNdcus,omitempty"`       //队列总DCU卡数
    QueueName string `json:"queueName,omitempty"`           //队列名称
    QueMinNcpus string `json:"queMinNcpus,omitempty"`       //队列最小CPU核数
    QueFreeNodes string `json:"queFreeNodes,omitempty"`     //队列空闲节点数
    QueMaxNodect string `json:"queMaxNodect,omitempty"`     //队列作业最大节点数
    QueMaxGpuPN string `json:"queMaxGpuPN,omitempty"`       //队列单作业最大GPU卡数
    QueMaxWalltime string `json:"queMaxWalltime,omitempty"` //队列最大运行时间
    QueMaxDcuPN string `json:"queMaxDcuPN,omitempty"`       //队列单作业最大DCU卡数
    QueFreeNcpus string `json:"queFreeNcpus"`               //队列空闲cpu数
    QueNcpus string `json:"queNcpus"`                       //队列cpu数
}

type (
/******************instance center*************************/
    HpcInstanceCenterReq {
        PageInfo
        InstanceType int32 `form:"instanceType,optional"`
        InstanceClass string `form:"instanceClass,optional"`
        InstanceName string `form:"instanceName,optional"`
    }
    HpcInstanceCenterResp {
        InstanceCenterList []HpcInstanceCenterList `json:"instanceCenterList" copier:"InstanceCenterList"`
        TotalCount int `json:"totalCount"`
    }
    HpcInstanceCenterList {
        LogoPath string `json:"logo_path"`
        InstanceName string `json:"instance_name"`
        InstanceType int32 `json:"instance_type"`
        InstanceClass string `json:"instance_class"`
        InstanceClassChinese string `json:"instance_class_chinese"`
        Description string `json:"description"`
        Version string `json:"version"`
    }

/******************instance center*************************/
)

type(
    HpcTaskLogResp{
        Code int32 `json:"code"`
        Msg string `json:"msg"`
        Data interface{} `json:"data"`
    }
)

type(
    HpcTaskLogReq{
        TaskId string `path:"taskId"`
    }
)

type (

    HpcAppTemplateInfo {
        Id int64 `json:"id"`
        Name string `json:"name"`
        App string `json:"app"`
        AppType string `json:"app_type"`
        ClusterId int64 `json:"cluster_id"`
        Content string `json:"content"`
        Description string `json:"description"`
        Status int32 `json:"status"`
        CreateTime string `json:"create_time"`
        UpdateTime string `json:"update_time"`
    }

    SubmitHpcTaskReq {
        App string `json:"app"`
        ClusterId string `json:"clusterId"`
        JobName string `json:"jobName"`
        ScriptContent string `json:"scriptContent"`
        Parameters map[string]string `json:"parameters"`
        Backend   string `json:"backend"`
    }
)

type HpcAppClusterReq {
    App string `form:"app"`
}