mirror of
https://github.com/fumiama/tienyik.git
synced 2026-06-04 23:10:26 +08:00
324 lines
12 KiB
Go
324 lines
12 KiB
Go
package desktop
|
|
|
|
import (
|
|
"bytes"
|
|
"net/url"
|
|
"strconv"
|
|
|
|
"github.com/fumiama/tienyik"
|
|
"github.com/fumiama/tienyik/hcli"
|
|
"github.com/fumiama/tienyik/internal/horm"
|
|
"github.com/fumiama/tienyik/internal/hson"
|
|
"github.com/fumiama/tienyik/internal/textio"
|
|
)
|
|
|
|
const (
|
|
DefaultRequestPageDesktopSortType = "createTimeV1"
|
|
)
|
|
|
|
type RequestPageDesktop struct {
|
|
GetCnt int `json:"getCnt"`
|
|
DesktopTypes []string `json:"desktopTypes"`
|
|
SortType string `json:"sortType"`
|
|
}
|
|
|
|
type ResponsePageDesktop struct {
|
|
Timestamp int64 `json:"timestamp"`
|
|
SortList []struct {
|
|
ObjID string `json:"objId"`
|
|
ObjType int `json:"objType"`
|
|
ObjValue string `json:"objValue"`
|
|
DesktopTypes []string `json:"desktopTypes"`
|
|
} `json:"sortList"`
|
|
DesktopPoolList []any `json:"desktopPoolList"`
|
|
DesktopList []struct {
|
|
ObjType int `json:"objType"`
|
|
TenantID int `json:"tenantId"`
|
|
ObjID string `json:"objId"`
|
|
ConnectURL []string `json:"connectUrl"`
|
|
ObjName string `json:"objName"`
|
|
Backupurl []string `json:"backupurl"`
|
|
OsType string `json:"osType"`
|
|
OsName string `json:"osName"`
|
|
ConnectMaster int `json:"connectMaster"`
|
|
NeedLineUp bool `json:"needLineUp"`
|
|
UserDesktopGroupID any `json:"userDesktopGroupId"`
|
|
Strategy struct {
|
|
ReconnectMsg any `json:"reconnectMsg"`
|
|
RebootMsg any `json:"rebootMsg"`
|
|
ShutoffMsg any `json:"shutoffMsg"`
|
|
ShutdownStrategy any `json:"shutdownStrategy"`
|
|
RebootStrategy any `json:"rebootStrategy"`
|
|
ModifyComputerAllas string `json:"modifyComputerAllas"`
|
|
CheckBeforeConnect any `json:"checkBeforeConnect"`
|
|
} `json:"strategy"`
|
|
CloudMobileType any `json:"cloudMobileType"`
|
|
DesktopID string `json:"desktopId"`
|
|
DesktopName string `json:"desktopName"`
|
|
FlavorName any `json:"flavorName"`
|
|
ImageName string `json:"imageName"`
|
|
OsBit string `json:"osBit"`
|
|
CPUCore any `json:"cpuCore"`
|
|
MemoryGB any `json:"memoryGB"`
|
|
RootDiskGB any `json:"rootDiskGB"`
|
|
DataDiskGB any `json:"dataDiskGB"`
|
|
Status string `json:"status"`
|
|
Summary any `json:"summary"`
|
|
TanentCode string `json:"tanentCode"`
|
|
TanentName string `json:"tanentName"`
|
|
UseStatus string `json:"useStatus"`
|
|
DesktopCode string `json:"desktopCode"`
|
|
ForeignDesktopID string `json:"foreignDesktopId"`
|
|
ForbiddenConnect bool `json:"forbiddenConnect"`
|
|
GpuType bool `json:"gpuType"`
|
|
GpuVirtualMethod any `json:"gpuVirtualMethod"`
|
|
UserMode int `json:"userMode"`
|
|
DefaultDesktop bool `json:"defaultDesktop"`
|
|
ExpireDate any `json:"expireDate"`
|
|
CreateDate int64 `json:"createDate"`
|
|
NowDate any `json:"nowDate"`
|
|
NoticeInterval int `json:"noticeInterval"`
|
|
BandExpireDate any `json:"bandExpireDate"`
|
|
BandNoticeInterval int `json:"bandNoticeInterval"`
|
|
UpperResolution any `json:"upperResolution"`
|
|
ProdType string `json:"prodType"`
|
|
ProdGroupType int `json:"prodGroupType"`
|
|
ProdInstID string `json:"prodInstId"`
|
|
ProdGroupName string `json:"prodGroupName"`
|
|
DesktopMirrorTagSet []any `json:"desktopMirrorTagSet"`
|
|
LicenseExpireDate int64 `json:"licenseExpireDate"`
|
|
LicenseNoticeInterval int `json:"licenseNoticeInterval"`
|
|
AllowConnStartTime any `json:"allowConnStartTime"`
|
|
AllowConnEndTime any `json:"allowConnEndTime"`
|
|
OperationAuditSupported bool `json:"operationAuditSupported"`
|
|
ProjectionScreenState any `json:"projectionScreenState"`
|
|
NickName string `json:"nickName"`
|
|
VMType int `json:"vmType"`
|
|
PayType string `json:"payType"`
|
|
ProdSubType any `json:"prodSubType"`
|
|
InstStatus int `json:"instStatus"`
|
|
UseTimeVO any `json:"useTimeVO"`
|
|
UseStatusShowActions any `json:"useStatusShowActions"`
|
|
UseStatusText string `json:"useStatusText"`
|
|
UseStatusColor string `json:"useStatusColor"`
|
|
ModifyComputerAllas any `json:"modifyComputerAllas"`
|
|
UsePrivateImageFile bool `json:"usePrivateImageFile"`
|
|
ImageID int `json:"imageId"`
|
|
ImageCategoryID int `json:"imageCategoryId"`
|
|
HaProdType int `json:"haProdType"`
|
|
CtrlTypes []any `json:"ctrlTypes"`
|
|
OrderProductData struct {
|
|
TimeLimitTotal any `json:"timeLimitTotal"`
|
|
TimeLimitUsed any `json:"timeLimitUsed"`
|
|
NextAcctTime any `json:"nextAcctTime"`
|
|
BusiChannelType any `json:"busiChannelType"`
|
|
ManageData any `json:"manageData"`
|
|
ActiveDate any `json:"activeDate"`
|
|
KeepTime any `json:"keepTime"`
|
|
} `json:"orderProductData"`
|
|
LicenseID int `json:"licenseId"`
|
|
RegionID int `json:"regionId"`
|
|
TenantCode string `json:"tenantCode"`
|
|
ConnectAPIURL struct {
|
|
ConnectPath string `json:"connectPath"`
|
|
StatusPath string `json:"statusPath"`
|
|
StatePath string `json:"statePath"`
|
|
AppendData any `json:"appendData"`
|
|
} `json:"connectApiUrl"`
|
|
} `json:"desktopList"`
|
|
PreemptionDesktopList []any `json:"preemptionDesktopList"`
|
|
}
|
|
|
|
func PageDesktop(tya *tienyik.AES, cli *hcli.Client, r *RequestPageDesktop) (*ResponsePageDesktop, error) {
|
|
resp, err := cli.Post(
|
|
textio.API(), textio.ContenTypeJSON,
|
|
bytes.NewReader(hson.Marshal(tya, r)),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
return hson.Unmarshal[*ResponsePageDesktop](tya, resp.Body)
|
|
}
|
|
|
|
type ResponseFeature struct {
|
|
CPUCore int `json:"cpuCore"`
|
|
MemoryGB int `json:"memoryGB"`
|
|
SystemDiskGB int `json:"systemDiskGB"`
|
|
DataDiskGB any `json:"dataDiskGB"`
|
|
TotalDiskGB int `json:"totalDiskGB"`
|
|
SysDisk struct {
|
|
Size int `json:"size"`
|
|
Path string `json:"path"`
|
|
Code string `json:"code"`
|
|
} `json:"sysDisk"`
|
|
DataDiskList []any `json:"dataDiskList"`
|
|
MirrorVersion string `json:"mirrorVersion"`
|
|
MirrorCategoryName string `json:"mirrorCategoryName"`
|
|
DesktopName string `json:"desktopName"`
|
|
GpuSliceRAM any `json:"gpuSliceRam"`
|
|
GpuSliceRAMDesc any `json:"gpuSliceRamDesc"`
|
|
ExpireDate any `json:"expireDate"`
|
|
CreateDate int64 `json:"createDate"`
|
|
NowDate int64 `json:"nowDate"`
|
|
LinkInfo any `json:"linkInfo"`
|
|
OrderProduct struct {
|
|
TimeLimitTotal any `json:"timeLimitTotal"`
|
|
TimeLimitUsed any `json:"timeLimitUsed"`
|
|
NextAcctTime any `json:"nextAcctTime"`
|
|
BusiChannelType string `json:"busiChannelType"`
|
|
ManageData any `json:"manageData"`
|
|
ActiveDate any `json:"activeDate"`
|
|
KeepTime any `json:"keepTime"`
|
|
} `json:"orderProduct"`
|
|
MirrorID int `json:"mirrorId"`
|
|
MirrorCategoryID int `json:"mirrorCategoryId"`
|
|
ProductName string `json:"productName"`
|
|
PayType string `json:"payType"`
|
|
ProdType string `json:"prodType"`
|
|
ProdSubType any `json:"prodSubType"`
|
|
TimePkgVOS []any `json:"timePkgVOS"`
|
|
Os string `json:"os"`
|
|
MirrorType string `json:"mirrorType"`
|
|
}
|
|
|
|
func Feature(tya *tienyik.AES, cli *hcli.Client, desktopId string, objType int, objId string) (*ResponseFeature, error) {
|
|
u, err := url.Parse(textio.API())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
q := u.Query()
|
|
q.Set("desktopId", desktopId)
|
|
q.Set("objType", strconv.Itoa(objType))
|
|
q.Set("objId", objId)
|
|
u.RawQuery = tya.EUrlParams(q)
|
|
|
|
resp, err := cli.Get(u.String())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
return hson.Unmarshal[*ResponseFeature](tya, resp.Body)
|
|
}
|
|
|
|
type ResponseGetDesktopExtraInfo struct {
|
|
Strategy struct {
|
|
ReconnectMsg any `json:"reconnectMsg"`
|
|
RebootMsg any `json:"rebootMsg"`
|
|
ShutoffMsg any `json:"shutoffMsg"`
|
|
ShutdownStrategy string `json:"shutdownStrategy"`
|
|
RebootStrategy string `json:"rebootStrategy"`
|
|
ModifyComputerAllas any `json:"modifyComputerAllas"`
|
|
CheckBeforeConnect any `json:"checkBeforeConnect"`
|
|
} `json:"strategy"`
|
|
UpperResolution string `json:"upperResolution"`
|
|
TimeLimitProductData any `json:"timeLimitProductData"`
|
|
HaProdType int `json:"haProdType"`
|
|
}
|
|
|
|
func GetDesktopExtraInfo(tya *tienyik.AES, cli *hcli.Client, objId string, objType int) (*ResponseGetDesktopExtraInfo, error) {
|
|
u, err := url.Parse(textio.API())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
q := u.Query()
|
|
q.Set("objId", objId)
|
|
q.Set("objType", strconv.Itoa(objType))
|
|
u.RawQuery = tya.EUrlParams(q)
|
|
|
|
resp, err := cli.Get(u.String())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
return hson.Unmarshal[*ResponseGetDesktopExtraInfo](tya, resp.Body)
|
|
}
|
|
|
|
type RequestConnect struct {
|
|
ObjID string `form:"objId"`
|
|
ObjType int `form:"objType"`
|
|
OsType string `form:"osType"`
|
|
DeviceID int `form:"deviceId"`
|
|
DeviceCode string `form:"deviceCode"`
|
|
DeviceName string `form:"deviceName"`
|
|
SysVersion string `form:"sysVersion"`
|
|
AppVersion string `form:"appVersion"`
|
|
HostName string `form:"hostName"`
|
|
VdCommand string `form:"vdCommand"`
|
|
IPAddress string `form:"ipAddress"`
|
|
MacAddress string `form:"macAddress"`
|
|
HardwareFeatureCode string `form:"hardwareFeatureCode"`
|
|
SpecifiedCertCategory int `form:"specifiedCertCategory"`
|
|
}
|
|
|
|
type ResponseConnect struct {
|
|
GoingRetry bool `json:"goingRetry"`
|
|
DesktopInfo any `json:"desktopInfo"`
|
|
ShadowDesktopInfo struct {
|
|
InHaMode int `json:"inHaMode"`
|
|
HaDesktopID any `json:"haDesktopId"`
|
|
HaConnectingTips any `json:"haConnectingTips"`
|
|
HaConnectSucTips any `json:"haConnectSucTips"`
|
|
} `json:"shadowDesktopInfo"`
|
|
DesktopAnywhereInfo struct {
|
|
AnywhereStatus int `json:"anywhereStatus"`
|
|
MigrateStatus any `json:"migrateStatus"`
|
|
AnywhereDesktopID any `json:"anywhereDesktopId"`
|
|
SrcResPoolName any `json:"srcResPoolName"`
|
|
TargetResPoolName any `json:"targetResPoolName"`
|
|
EstimatedTime int `json:"estimatedTime"`
|
|
ReminderDays any `json:"reminderDays"`
|
|
RoamingDays any `json:"roamingDays"`
|
|
NeedReserveRemind int `json:"needReserveRemind"`
|
|
ShadowInfoDTO any `json:"shadowInfoDTO"`
|
|
AnywhereOpen bool `json:"anywhereOpen"`
|
|
ConnectTargetDesktop bool `json:"connectTargetDesktop"`
|
|
} `json:"desktopAnywhereInfo"`
|
|
DesktopID string `json:"desktopId"`
|
|
PollingKey string `json:"pollingKey"`
|
|
AuthInfo any `json:"authInfo"`
|
|
}
|
|
|
|
func Connect(tya *tienyik.AES, cli *hcli.Client, r *RequestConnect) (*ResponseConnect, error) {
|
|
resp, err := cli.Post(
|
|
textio.API(), textio.ContenTypeForm,
|
|
bytes.NewReader(horm.Marshal(tya, r)),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
return hson.Unmarshal[*ResponseConnect](tya, resp.Body)
|
|
}
|
|
|
|
type RequestState struct {
|
|
ObjID string `json:"objId"`
|
|
ObjType int `json:"objType"`
|
|
}
|
|
|
|
type ResponseState struct {
|
|
ObjType int `json:"objType"`
|
|
ObjID string `json:"objId"`
|
|
DesktopID int `json:"desktopId"`
|
|
DesktopState string `json:"desktopState"`
|
|
RunningTask int `json:"runningTask"`
|
|
RunningTaskName string `json:"runningTaskName"`
|
|
TaskStartTime int64 `json:"taskStartTime"`
|
|
MirrorReady any `json:"mirrorReady"`
|
|
UseStatus string `json:"useStatus"`
|
|
UseStatusText string `json:"useStatusText"`
|
|
UseStatusColor string `json:"useStatusColor"`
|
|
}
|
|
|
|
func State(tya *tienyik.AES, cli *hcli.Client, r []RequestState) ([]ResponseState, error) {
|
|
resp, err := cli.Post(
|
|
textio.API(), textio.ContenTypeJSON,
|
|
bytes.NewReader(hson.Marshal(tya, &r)),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
return hson.Unmarshal[[]ResponseState](tya, resp.Body)
|
|
}
|