123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- package model
- import (
- "context"
- "strconv"
- "time"
- "go-common/library/ecode"
- )
- // Env Env.
- type Env struct {
- ClusterID int64 `json:"cluster_id"`
- NetworkID int64 `json:"network_id"`
- }
- // Node Node.
- type Node struct {
- BusinessUnit string `json:"business_unit"`
- Project string `json:"project"`
- App string `json:"app"`
- TreeID int64 `json:"tree_id"`
- }
- // GenMachinesRequest Gen Machines Request.
- type GenMachinesRequest struct {
- Env
- PaasMachine
- PaasMachineSystem
- Nodes []*Node `json:"nodes"`
- Comment string `json:"comment"`
- Amount int `json:"amount"`
- }
- // Verify verify GenMachinesRequest.
- func (g *GenMachinesRequest) Verify() error {
- if g.Amount < 1 {
- return ecode.MerlinInvalidMachineAmountErr
- }
- l := len(g.Nodes)
- if l < 1 || l > 10 {
- return ecode.MerlinInvalidNodeAmountErr
- }
- return nil
- }
- // Mutator Mutator.
- func (g *GenMachinesRequest) Mutator(m *Machine) {
- m.BusinessUnit = g.Nodes[0].BusinessUnit
- m.Project = g.Nodes[0].Project
- m.App = g.Nodes[0].App
- m.ClusterID = g.ClusterID
- m.NetworkID = g.NetworkID
- m.Comment = g.Comment
- }
- // ToMachineNode to machine node.
- func (g *GenMachinesRequest) ToMachineNode(mID int64) (treeNodes []*MachineNode) {
- for _, node := range g.Nodes {
- treeNodes = append(treeNodes, &MachineNode{
- MachineID: mID,
- BusinessUnit: node.BusinessUnit,
- Project: node.Project,
- App: node.App,
- TreeID: node.TreeID,
- })
- }
- return
- }
- // PaasMachineSystem Paas Machine System.
- type PaasMachineSystem struct {
- Command string `json:"command"`
- Envs []*EnvVariable `json:"envs"`
- HostAlias []*Host `json:"host_alias"`
- }
- // Host Host.
- type Host struct {
- IP string `json:"ip"`
- Hostnames []string `json:"hostnames"`
- }
- // EnvVariable EnvVariable.
- type EnvVariable struct {
- Name string `json:"name"`
- Value string `json:"value"`
- }
- // GenMachine GenMachine.
- type GenMachine struct {
- Machine
- IP string `json:"ip"`
- ClusterName string `json:"cluster_name"`
- NetworkName string `json:"network_name"`
- }
- // MachineDetail Machine Detail.
- type MachineDetail struct {
- Machine
- PaasMachineDetail
- Nodes []*MachineNode `json:"nodes"`
- NetworkName string `json:"network_name"`
- Name string `json:"name"`
- IsSnapShot bool `json:"is_support_snapshot"`
- }
- // PaginateMachine Paginate Machine.
- type PaginateMachine struct {
- Total int64 `json:"total"`
- PageNum int `json:"page_num"`
- PageSize int `json:"page_size"`
- Machines []GenMachine `json:"machines"`
- }
- // PaginateMachineLog Paginate Machine Log.
- type PaginateMachineLog struct {
- Total int64 `json:"total"`
- PageNum int `json:"page_num"`
- PageSize int `json:"page_size"`
- MachineLogs []*AboundMachineLog `json:"machine_logs"`
- }
- // PaginateMobileMachineLog Paginate Mobile Machine Log.
- type PaginateMobileMachineLog struct {
- Total int64 `json:"total"`
- PageNum int `json:"page_num"`
- PageSize int `json:"page_size"`
- MachineLogs []*AboundMobileMachineLog `json:"machine_logs"`
- }
- // PaginateMobileMachineLendOutLog Paginate Mobile Machine Lend Out Log.
- type PaginateMobileMachineLendOutLog struct {
- Total int64 `json:"total"`
- PageNum int `json:"page_num"`
- PageSize int `json:"page_size"`
- MachineLendOutRecords []*MachineLendOutRecord `json:"machine_lendout_records"`
- }
- // MachineLendOutRecord Machine Lend Out Record.
- type MachineLendOutRecord struct {
- MachineID int64 `json:"machine_id"`
- Lender string `json:"lender"`
- Status int `json:"status"`
- LendTime time.Time `json:"lend_time"`
- EnableReturn bool `json:"enable_return"`
- }
- // PaginateMobileMachineErrorLog Paginate Mobile Machine Error Log.
- type PaginateMobileMachineErrorLog struct {
- Total int64 `json:"total"`
- PageNum int `json:"page_num"`
- PageSize int `json:"page_size"`
- MachineLogs []*MobileMachineErrorLog `json:"machine_logs"`
- }
- // PaginateApplicationRecord Paginate Application Record.
- type PaginateApplicationRecord struct {
- Total int64 `json:"total"`
- PageNum int `json:"page_num"`
- PageSize int `json:"page_size"`
- ApplicationRecords []*ApplicationRecord `json:"application_records"`
- }
- // ToPaasGenMachineRequest to Paas GenMachine Request.
- func (g GenMachinesRequest) ToPaasGenMachineRequest(machineLimitRatio float32) *PaasGenMachineRequest {
- var (
- pms = make([]PaasMachine, g.Amount)
- treeIDs []int64
- fn = g.Nodes[0]
- )
- g.CPULimit = g.CPURequest * CPURatio
- g.MemoryLimit = g.MemoryRequest * MemoryRatio
- g.CPURequest = g.CPURequest * CPURatio / machineLimitRatio
- g.MemoryRequest = g.MemoryRequest * MemoryRatio / machineLimitRatio
- for i := 0; i < g.Amount; i++ {
- pms[i] = g.PaasMachine
- pms[i].Name = g.Name + "-" + strconv.Itoa(i+1)
- pms[i].PaasMachineSystem = g.PaasMachineSystem
- }
- for _, node := range g.Nodes {
- treeIDs = append(treeIDs, node.TreeID)
- }
- return &PaasGenMachineRequest{
- BusinessUnit: fn.BusinessUnit,
- Project: fn.Project,
- App: fn.App,
- TreeIDs: treeIDs,
- Env: g.Env,
- Machines: pms,
- }
- }
- // Pagination Pagination.
- type Pagination struct {
- PageSize int `form:"page_size" json:"page_size"`
- PageNum int `form:"page_num" json:"page_num"`
- }
- // Verify verify the value of pageNum and pageSize.
- func (p *Pagination) Verify() error {
- if p.PageNum < 0 {
- return ecode.MerlinIllegalPageNumErr
- } else if p.PageNum == 0 {
- p.PageNum = DefaultPageNum
- }
- if p.PageSize < 0 {
- return ecode.MerlinIllegalPageSizeErr
- } else if p.PageSize == 0 {
- p.PageSize = DefaultPageSize
- }
- return nil
- }
- // QueryMachineRequest Query Machine Request.
- type QueryMachineRequest struct {
- Pagination
- TreeNode
- MachineName string `form:"machine_name"`
- Username string `form:"username"`
- Requester string
- }
- // QueryMachineLogRequest Query Machine Log Request.
- type QueryMachineLogRequest struct {
- Pagination
- MachineID int64 `form:"machine_id"`
- MachineName string `form:"machine_name"`
- OperateUser string `form:"operate_user"`
- OperateType string `form:"operate_type"`
- }
- // QueryMobileMachineLogRequest Query Mobile Machine Log Request.
- type QueryMobileMachineLogRequest struct {
- Pagination
- MachineID int64 `form:"machine_id"`
- Serial string `form:"serial"`
- OperateUser string `form:"operate_user"`
- OperateType string `form:"operate_type"`
- }
- // QueryMobileMachineErrorLogRequest Query Mobile Machine Error Log Request.
- type QueryMobileMachineErrorLogRequest struct {
- Pagination
- MachineID int64 `form:"machine_id"`
- }
- // AboundMachineLog Abound Machine Log.
- type AboundMachineLog struct {
- MachineLog
- Name string `json:"machine_name"`
- }
- // AboundMobileMachineLog Abound mobile Machine Log.
- type AboundMobileMachineLog struct {
- MobileMachineLog
- Serial string `json:"serial"`
- }
- // ApplyEndTimeRequest Apply End Time Request.
- type ApplyEndTimeRequest struct {
- MachineID int64 `json:"machine_id"`
- ApplyEndTime string `json:"apply_end_time"`
- Auditor string `json:"auditor"`
- }
- // AuditEndTimeRequest Audit End Time Request.
- type AuditEndTimeRequest struct {
- AuditID int64 `json:"audit_id"`
- AuditResult bool `json:"audit_result"`
- Comment string `json:"comment"`
- }
- // BeforeDelMachineFunc Before DelMachine Func.
- type BeforeDelMachineFunc func(c context.Context, id int64, username string) error
- // MachineStatusResponse Machine Status Response.
- type MachineStatusResponse struct {
- Initialized string `json:"initialized"`
- PodScheduled string `json:"pod_scheduled"`
- Ready string `json:"ready"`
- SynTree string `json:"syn_tree"`
- RetryCount int `json:"retry_count"`
- Log string `json:"log"`
- MachineEvent []string `json:"events"`
- }
- // CreatingMachineStatus Creating Machine Status.
- func (msr *MachineStatusResponse) CreatingMachineStatus() int {
- if msr.Initialized == False {
- return CreatingMachineInMerlin
- }
- if msr.PodScheduled == False {
- return InitializeMachineInMerlin
- }
- if msr.Ready == False {
- return ReadyMachineInMerlin
- }
- if msr.SynTree == False {
- return SynTreeMachineInMerlin
- }
- return BootMachineInMerlin
- }
- // FailedMachineStatus Failed Machine Status.
- func (msr *MachineStatusResponse) FailedMachineStatus() int {
- if msr.Initialized == False {
- return InitializedFailedMachineInMerlin
- }
- if msr.PodScheduled == False {
- return PodScheduledFailedMachineInMerlin
- }
- if msr.Ready == False {
- return ReadyFailedMachineInMerlin
- }
- if msr.SynTree == False {
- return SynTreeFailedMachineInMerlin
- }
- return 0
- }
- // InstanceMachineStatusResponse Instance Machine Status Response.
- func InstanceMachineStatusResponse(machineStatus int) *MachineStatusResponse {
- switch machineStatus {
- case ImmediatelyFailedMachineInMerlin:
- return &MachineStatusResponse{}
- case InitializedFailedMachineInMerlin:
- return &MachineStatusResponse{Initialized: False, PodScheduled: False, Ready: False, SynTree: False, RetryCount: 0}
- case PodScheduledFailedMachineInMerlin:
- return &MachineStatusResponse{Initialized: True, PodScheduled: False, Ready: False, SynTree: False, RetryCount: 0}
- case ReadyFailedMachineInMerlin:
- return &MachineStatusResponse{Initialized: True, PodScheduled: True, Ready: False, SynTree: False, RetryCount: 0}
- case SynTreeFailedMachineInMerlin:
- return &MachineStatusResponse{Initialized: True, PodScheduled: True, Ready: True, SynTree: False, RetryCount: 0}
- case BootMachineInMerlin:
- return &MachineStatusResponse{Initialized: True, PodScheduled: True, Ready: True, SynTree: True, RetryCount: 0}
- case ShutdownMachineInMerlin:
- return &MachineStatusResponse{Initialized: True, PodScheduled: True, Ready: True, SynTree: True, RetryCount: 0}
- }
- return nil
- }
- // TreeNode tree node struct for merlin.
- type TreeNode struct {
- BusinessUnit string `form:"business_unit"`
- Project string `form:"project"`
- App string `form:"app"`
- }
- // VerifyFieldValue verify that all fields is not empty.
- func (t TreeNode) VerifyFieldValue() (err error) {
- if t.BusinessUnit == "" || t.Project == "" || t.App == "" {
- err = ecode.MerlinShouldTreeFullPath
- }
- return
- }
- // TreePath join all fields.
- func (t *TreeNode) TreePath() string {
- return t.BusinessUnit + "." + t.Project + "." + t.App
- }
- // TreePathWithoutEmptyField join all fields except empty.
- func (t *TreeNode) TreePathWithoutEmptyField() (treePath string) {
- if t.BusinessUnit == "" {
- return
- }
- treePath = "bilibili." + t.BusinessUnit
- if t.Project == "" {
- return
- }
- treePath = treePath + "." + t.Project
- if t.App == "" {
- return
- }
- treePath = treePath + "." + t.App
- return
- }
- // UpdateMachineNodeRequest request struct for updating machine node.
- type UpdateMachineNodeRequest struct {
- MachineID int64 `json:"machine_id"`
- Nodes []*MachineNode `json:"nodes"`
- }
- // VerifyNodes verify the Nodes field of UpdateMachineNodeRequest
- func (u *UpdateMachineNodeRequest) VerifyNodes() error {
- l := len(u.Nodes)
- if l < 1 || l > 10 {
- return ecode.MerlinInvalidNodeAmountErr
- }
- return nil
- }
- // ToMachineNodes convert to machine nodes with injecting machine id.
- func (u UpdateMachineNodeRequest) ToMachineNodes() []*MachineNode {
- for _, n := range u.Nodes {
- n.MachineID = u.MachineID
- }
- return u.Nodes
- }
- // QueryMobileDeviceRequest Query Device Farm Request.
- type QueryMobileDeviceRequest struct {
- Pagination
- MobileID int64 `json:"mobile_id"`
- Serial string `json:"serial"`
- Name string `json:"name"`
- Username string `json:"username"`
- OwnerName string `json:"owner_name"`
- CPU string `json:"cpu"`
- Version string `json:"version"`
- Mode string `json:"mode"`
- Type int `json:"type"`
- State string `json:"state"`
- Usage int `json:"usage"`
- Online bool `json:"online"`
- }
- // PaginateMobileMachines Paginate Device.
- type PaginateMobileMachines struct {
- Total int64 `json:"total"`
- PageNum int `json:"page_num"`
- PageSize int `json:"page_size"`
- MobileMachines []*MobileMachineResponse `json:"mobile_devices"`
- }
- // QueryMachine2ImageLogRequest Query Machine to Image Log Request.
- type QueryMachine2ImageLogRequest struct {
- Pagination
- MachineID int64 `form:"machine_id"`
- }
- // PaginateHubImageLog Paginate Hub Image Log.
- type PaginateHubImageLog struct {
- Total int64 `json:"total"`
- PageNum int `json:"page_num"`
- PageSize int `json:"page_size"`
- HubImageLogs []*HubImageLog `json:"hub_image_logs"`
- }
- // ImageConfiguration Image Configuration.
- type ImageConfiguration struct {
- ImageFullName string `json:"image_full_name"`
- PaasMachineSystem
- }
|