feat: migrate all remaining modules from rainyun-go-sdk

- domain(24), product(8), rbm(10), rca(21), rgs(38), ros(19),
  ssl(5), user(10), workorder(11), public remaining 5
- split nested response structs into reusable named types
- rgs reuses rcs request/response types
- fix source bugs: malformed paths, resp vs &resp, missing bodies
- register all 11 services in sdk.New
This commit is contained in:
2026-08-05 23:09:53 +08:00
parent b8490ef422
commit 51b7e2f319
56 changed files with 4267 additions and 2 deletions
+254
View File
@@ -0,0 +1,254 @@
package rca
import (
"fmt"
"github.com/XingfenD/rainyun_api_go_sdk/apis/common"
"github.com/XingfenD/rainyun_api_go_sdk/constant"
)
// 云应用区域信息
type PriceInfo struct {
Cpu float64 `json:"cpu"`
Memory float64 `json:"memory"`
Ipv4 float64 `json:"ipv4"`
Traffic float64 `json:"traffic"`
Disk float64 `json:"disk"`
}
type RcaRegion struct {
ID int `json:"id"`
Name string `json:"name"`
ChineseName string `json:"chinese_name"`
WebsiteServiceDomain string `json:"website_service_domain"`
SftpServiceDomain string `json:"sftp_service_domain"`
PublicServiceDomain string `json:"public_service_domain"`
PriceInfo PriceInfo `json:"price_info"`
}
type GetRcaRegionInfoResponse struct {
Code int `json:"code"`
Data []RcaRegion `json:"data"`
}
// 开通云应用产品请求
type ActivateRcaRequest struct {
RegionID int `json:"region_id"`
}
// 创建云应用项目请求
type CreateRcaProjectRequest struct {
ChargeType string `json:"charge_type"` // 计费类型: 动态计费: elastic
CPULimit int `json:"cpu_limit"` // (仅限package模式)CPU限制(毫核),1核心=1000,0.1核=100
DiskSize int `json:"disk_size"` // 磁盘大小(GiB)
Ipv4Count int `json:"ipv4_count"` // 要添加的IPv4地址数量
Ipv6Count int `json:"ipv6_count"` // 要添加的IPv6地址数量
MemoryLimit int `json:"memory_limit"` // (仅限package模式)内存限制(MiB)
Name string `json:"name"` // 名称
RegionID int `json:"region_id"` // 部署区域
}
// 云应用节点信息
type RcaNode struct {
UUID string `json:"UUID"`
AuthKey string `json:"AuthKey"`
Region string `json:"Region"`
IPRegion string `json:"IpRegion"`
Machine string `json:"Machine"`
Product string `json:"Product"`
Subtype string `json:"Subtype"`
ChineseName string `json:"ChineseName"`
PhysicalNode string `json:"PhysicalNode"`
Config string `json:"Config"`
Stock any `json:"Stock"`
StatusData string `json:"StatusData"`
ShowMonitorData string `json:"ShowMonitorData"`
UpdateTime string `json:"UpdateTime"`
GitRepositoryName string `json:"GitRepositoryName"`
CertifyRequired bool `json:"CertifyRequired"`
IsDisableBackup bool `json:"IsDisableBackup"`
IsHidden bool `json:"IsHidden"`
NodeName string `json:"NodeName"`
}
type RcaResourceLimits struct {
MaxCPU int `json:"max_cpu"`
MaxMemory int `json:"max_memory"`
}
// 云应用项目资源使用情况
type RcaProjectUsageData struct {
CPU int `json:"cpu"`
Memory int `json:"memory"`
NetOut int `json:"net_out"`
NetIn int `json:"net_in"`
DiskUsage int `json:"disk_usage"`
TrafficToday int `json:"traffic_today"`
Status string `json:"status"`
StatusReason string `json:"status_reason"`
AllocatedCPU int `json:"allocated_cpu"`
AllocatedMemory int `json:"allocated_memory"`
AppCount int `json:"app_count"`
WebsiteCount int `json:"website_count"`
DatabaseCount int `json:"database_count"`
Ipv4Count int `json:"ipv4_count"`
HealthyPods int `json:"healthy_pods"`
UnhealthyPods int `json:"unhealthy_pods"`
}
// 备份目标
type RcaBackupTarget struct {
Type string `json:"type"` // 目标类型,支持项目本地备份或者远程S3存储(local/s3)
S3Endpoint string `json:"s3_endpoint"` // S3的端点(仅支持Virtual Host,不支持Path-Style模式)
S3Bucket string `json:"s3_bucket"` // S3存储桶名
S3AccessKey string `json:"s3_access_key"` // S3的AK
S3SecretKey string `json:"s3_secret_key"` // S3的SK
S3BackupDirectory string `json:"s3_backup_directory"` // s3备份存储的目录
}
// 云应用项目
type RcaProject struct {
ID int `json:"ID"`
UID int `json:"UID"`
PlanID int `json:"PlanID"`
CreateDate int `json:"CreateDate"` // 创建时间
NodeUUID string `json:"NodeUUID"`
Node RcaNode `json:"Node"`
Status string `json:"Status"`
StopReason string `json:"StopReason"`
RewardPointsToBeCollect int `json:"RewardPointsToBeCollect"`
Tag string `json:"Tag"`
ExpDate int `json:"ExpDate"`
ExpireNotice int `json:"ExpireNotice"`
AutoRenew bool `json:"AutoRenew"`
UnsubscribeAble bool `json:"UnsubscribeAble"`
Try bool `json:"Try"`
Name string `json:"name"`
RegionID int `json:"region_id"`
Region *RcaRegion `json:"region"`
Namespace string `json:"namespace"`
APIToken string `json:"APIToken"`
ResourceLimits RcaResourceLimits `json:"resource_limits"`
UsageData RcaProjectUsageData `json:"usage_data"`
VolumeSize int `json:"volume_size"`
ChargeType string `json:"charge_type"` // 计费类型: elastic
HourlyPrice float64 `json:"hourly_price"` // 小时价格
NextChargeTime int `json:"next_charge_time"`
BackupTarget RcaBackupTarget `json:"backup_target"` // 备份目标
SftpSetting any `json:"sftp_setting"`
IdleAlarmFlag bool `json:"idle_alarm_flag"`
PaymentDueEnd int `json:"payment_due_end"`
}
type CreateRcaProjectResponse struct {
Code int `json:"code"`
Data RcaProject `json:"data"`
}
type RcaProjectListData struct {
TotalRecords int `json:"TotalRecords"`
Records []RcaProject `json:"Records"`
}
type GetRcaProjectListResponse struct {
Code int `json:"code"`
Data RcaProjectListData `json:"data"`
}
// 云应用项目的指标信息,示例如下:
type RcaProjectMetricsData struct {
Columns []string `json:"Columns"`
Values [][]float64 `json:"Values"`
}
type GetRcaProjectMetricsResponse struct {
Code int `json:"code"`
Data RcaProjectMetricsData `json:"data"`
}
type RcaProjectDetailData struct {
Data RcaProject `json:"Data"`
}
type GetRcaProjectDetailResponse struct {
Code int `json:"code"`
Data RcaProjectDetailData `json:"data"`
}
// 云应用获取区域信息
func (s *RcaService) GetRcaRegionInfo() (*GetRcaRegionInfoResponse, error) {
path := "/product/rca/region"
var resp GetRcaRegionInfoResponse
err := s.client.Do(constant.HTTPMethod_GET, path, nil, nil, &resp)
return &resp, err
}
// 开通云应用产品
//
// regionID: 地域ID
func (s *RcaService) ActivateRca(regionID int) (*common.BasicOperationResponse, error) {
path := "/product/rca/activate"
var resp common.BasicOperationResponse
err := s.client.Do(constant.HTTPMethod_POST, path, nil, ActivateRcaRequest{RegionID: regionID}, &resp)
return &resp, err
}
// 创建云应用项目
func (s *RcaService) CreateRcaProject(req *CreateRcaProjectRequest) (*CreateRcaProjectResponse, error) {
path := "/product/rca/project/"
var resp CreateRcaProjectResponse
err := s.client.Do(constant.HTTPMethod_POST, path, nil, req, &resp)
return &resp, err
}
// 云应用列出项目
//
// options: 查询参数 可以用 EncodingStandardQueryParameters 获取.
func (s *RcaService) ListRcaProjects(options string) (*GetRcaProjectListResponse, error) {
path := "/product/rca/project/"
querys := map[string]string{"no_metrics": "false", "options": options} // no_metrics 含义不明
var resp GetRcaProjectListResponse
err := s.client.Do(constant.HTTPMethod_GET, path, querys, nil, &resp)
return &resp, err
}
// 销毁云应用项目
//
// id: RCA项目ID
func (s *RcaService) DestroyRcaProject(id int) (*common.BasicOperationResponse, error) {
path := fmt.Sprintf("/product/rca/project/%d/", id)
var resp common.BasicOperationResponse
err := s.client.Do(constant.HTTPMethod_DELETE, path, nil, nil, &resp)
return &resp, err
}
// 获取Rca项目的指标信息
//
// id: RCA项目ID
//
// starttime: 开始时间(timestamp)
//
// endtime: 结束时间(timestamp)
func (s *RcaService) GetRcaProjectMetrics(id int, startTime int, endTime int) (*GetRcaProjectMetricsResponse, error) {
path := fmt.Sprintf("/product/rca/project/%d/metrics?start_time=%d&end_time=%d", id, startTime, endTime)
var resp GetRcaProjectMetricsResponse
err := s.client.Do(constant.HTTPMethod_GET, path, nil, nil, &resp)
return &resp, err
}
// 获取云应用项目详情
//
// id: RCA项目ID
func (s *RcaService) GetRcaProjectDetail(id int) (*GetRcaProjectDetailResponse, error) {
path := fmt.Sprintf("/product/rca/project/%d/", id)
var resp GetRcaProjectDetailResponse
err := s.client.Do(constant.HTTPMethod_GET, path, nil, nil, &resp)
return &resp, err
}