github.com/qiniu/go-sdk/v7@v7.27.0/sandbox/types.go (about) 1 package sandbox 2 3 import ( 4 "time" 5 6 "github.com/qiniu/go-sdk/v7/sandbox/internal/apis" 7 ) 8 9 // --------------------------------------------------------------------------- 10 // SDK 自有类型 — 沙箱相关 11 // --------------------------------------------------------------------------- 12 13 // Metadata 沙箱自定义元数据(key-value)。 14 type Metadata map[string]string 15 16 // NetworkConfig 沙箱网络配置。 17 type NetworkConfig struct { 18 // AllowOut 允许的出站流量 CIDR 列表。 19 AllowOut *[]string 20 21 // AllowPublicTraffic 是否允许公共流量访问沙箱 URL。 22 AllowPublicTraffic *bool 23 24 // DenyOut 拒绝的出站流量 CIDR 列表。 25 DenyOut *[]string 26 27 // MaskRequestHost 用于沙箱请求的 host 掩码。 28 MaskRequestHost *string 29 } 30 31 // SandboxState 沙箱状态。 32 type SandboxState string 33 34 // 沙箱状态常量。 35 const ( 36 StateRunning SandboxState = "running" 37 StatePaused SandboxState = "paused" 38 ) 39 40 // CreateParams 创建沙箱的请求参数。 41 type CreateParams struct { 42 // TemplateID 模板 ID(必填)。 43 TemplateID string 44 45 // Timeout 沙箱超时时间(秒),可选。 46 Timeout *int32 47 48 // AutoPause 超时后自动暂停,可选。 49 AutoPause *bool 50 51 // AllowInternetAccess 允许沙箱访问互联网,可选。 52 AllowInternetAccess *bool 53 54 // Secure 安全通信模式,可选。 55 Secure *bool 56 57 // EnvVars 环境变量,可选。 58 EnvVars *map[string]string 59 60 // Metadata 自定义元数据,可选。 61 Metadata *Metadata 62 63 // Network 网络配置,可选。 64 Network *NetworkConfig 65 66 // Injections 针对出站 HTTPS 请求的注入规则列表,可选。 67 // 每项可引用已保存的注入规则 ID,或直接指定注入配置。 68 Injections *[]SandboxInjectionSpec 69 70 // Resources 沙箱启动前需挂载的资源列表,可选。 71 // 平台会在沙箱启动前完成资源物化(如 GitHub 仓库克隆)。 72 Resources *[]SandboxResourceSpec 73 74 // IdempotencyKey 幂等键,可选。默认自动生成。 75 // 同一团队内重试不确定的请求时使用相同的 Key 和请求体, 76 // 可保证不会重复创建沙箱。 77 IdempotencyKey string 78 } 79 80 func (p CreateParams) hasKodoResource() bool { 81 if p.Resources == nil { 82 return false 83 } 84 for _, resource := range *p.Resources { 85 if resource.Kodo != nil { 86 return true 87 } 88 } 89 return false 90 } 91 92 // ConnectParams 连接沙箱的请求参数。 93 type ConnectParams struct { 94 // Timeout 超时时间(秒)。 95 Timeout int32 96 } 97 98 // RefreshParams 延长沙箱存活时间的请求参数。 99 type RefreshParams struct { 100 // Duration 延长的秒数,可选。 101 Duration *int 102 } 103 104 // ListParams 列出沙箱的查询参数,支持分页和状态过滤。 105 type ListParams struct { 106 // Metadata 用于过滤沙箱的元数据查询(如 "user=abc&app=prod")。 107 Metadata *string 108 109 // Template 按一个或多个模板 ID 或名称过滤沙箱,最多 20 个值。 110 Template *[]string 111 112 // State 按一个或多个状态过滤沙箱。 113 State *[]SandboxState 114 115 // NextToken 分页游标。 116 NextToken *string 117 118 // Limit 每页最大返回数。 119 Limit *int32 120 } 121 122 // GetMetricsParams 获取沙箱指标的查询参数。 123 type GetMetricsParams struct { 124 // Start 起始时间的 Unix 时间戳(秒)。 125 Start *int64 126 127 // End 结束时间的 Unix 时间戳(秒)。 128 End *int64 129 } 130 131 func (p *GetMetricsParams) toAPI() *apis.GetSandboxMetricsParams { 132 if p == nil { 133 return nil 134 } 135 return &apis.GetSandboxMetricsParams{ 136 Start: p.Start, 137 End: p.End, 138 } 139 } 140 141 // GetLogsParams 获取沙箱日志的查询参数。 142 type GetLogsParams struct { 143 // Start 日志起始时间的毫秒级时间戳。 144 Start *int64 145 146 // Limit 返回的最大日志条数。 147 Limit *int32 148 } 149 150 func (p *GetLogsParams) toAPI() *apis.GetSandboxLogsParams { 151 if p == nil { 152 return nil 153 } 154 return &apis.GetSandboxLogsParams{ 155 Start: p.Start, 156 Limit: p.Limit, 157 } 158 } 159 160 // GetSandboxesMetricsParams 批量获取沙箱指标的查询参数。 161 type GetSandboxesMetricsParams struct { 162 // SandboxIds 要获取指标的沙箱 ID 列表。 163 SandboxIds []string 164 } 165 166 func (p *GetSandboxesMetricsParams) toAPI() *apis.GetSandboxesMetricsParams { 167 if p == nil { 168 return nil 169 } 170 return &apis.GetSandboxesMetricsParams{ 171 SandboxIds: p.SandboxIds, 172 } 173 } 174 175 // SandboxInfo 沙箱详细信息。 176 type SandboxInfo struct { 177 SandboxID string 178 TemplateID string 179 ClientID string 180 Alias *string 181 Domain *string 182 State SandboxState 183 CPUCount int32 184 MemoryMB int32 185 DiskSizeMB int32 186 EnvdVersion string 187 StartedAt time.Time 188 EndAt time.Time 189 Metadata *Metadata 190 } 191 192 // ListedSandbox 沙箱列表中的条目。 193 type ListedSandbox struct { 194 SandboxID string 195 TemplateID string 196 ClientID string 197 Alias *string 198 State SandboxState 199 CPUCount int32 200 MemoryMB int32 201 DiskSizeMB int32 202 EnvdVersion string 203 StartedAt time.Time 204 EndAt time.Time 205 Metadata *Metadata 206 } 207 208 // SandboxMetric 沙箱资源指标。 209 type SandboxMetric struct { 210 CPUCount int32 211 CPUUsedPct float32 212 MemTotal int64 213 MemUsed int64 214 DiskTotal int64 215 DiskUsed int64 216 Timestamp time.Time 217 TimestampUnix int64 218 } 219 220 // SandboxLogs 沙箱日志。 221 type SandboxLogs struct { 222 Logs []SandboxLog 223 LogEntries []SandboxLogEntry 224 } 225 226 // SandboxLog 沙箱日志条目。 227 type SandboxLog struct { 228 Line string 229 Timestamp time.Time 230 } 231 232 // SandboxLogEntry 结构化沙箱日志条目。 233 type SandboxLogEntry struct { 234 Level LogLevel 235 Message string 236 Fields map[string]string 237 Timestamp time.Time 238 } 239 240 // SandboxesWithMetrics 批量沙箱指标数据。 241 type SandboxesWithMetrics struct { 242 Sandboxes map[string]SandboxMetric 243 } 244 245 // --------------------------------------------------------------------------- 246 // 转换函数 — apis → SDK 247 // --------------------------------------------------------------------------- 248 249 func sandboxInfoFromAPI(d *apis.SandboxDetail) *SandboxInfo { 250 if d == nil { 251 return nil 252 } 253 info := &SandboxInfo{ 254 SandboxID: d.SandboxID, 255 TemplateID: d.TemplateID, 256 ClientID: d.ClientID, 257 Alias: d.Alias, 258 Domain: d.Domain, 259 State: SandboxState(d.State), 260 CPUCount: d.CPUCount, 261 MemoryMB: d.MemoryMB, 262 DiskSizeMB: d.DiskSizeMB, 263 EnvdVersion: d.EnvdVersion, 264 StartedAt: d.StartedAt, 265 EndAt: d.EndAt, 266 } 267 if d.Metadata != nil { 268 m := Metadata(*d.Metadata) 269 info.Metadata = &m 270 } 271 return info 272 } 273 274 func listedSandboxFromAPI(a apis.ListedSandbox) ListedSandbox { 275 ls := ListedSandbox{ 276 SandboxID: a.SandboxID, 277 TemplateID: a.TemplateID, 278 ClientID: a.ClientID, 279 Alias: a.Alias, 280 State: SandboxState(a.State), 281 CPUCount: a.CPUCount, 282 MemoryMB: a.MemoryMB, 283 DiskSizeMB: a.DiskSizeMB, 284 EnvdVersion: a.EnvdVersion, 285 StartedAt: a.StartedAt, 286 EndAt: a.EndAt, 287 } 288 if a.Metadata != nil { 289 m := Metadata(*a.Metadata) 290 ls.Metadata = &m 291 } 292 return ls 293 } 294 295 func listedSandboxesFromAPI(a []apis.ListedSandbox) []ListedSandbox { 296 if a == nil { 297 return nil 298 } 299 result := make([]ListedSandbox, len(a)) 300 for i, s := range a { 301 result[i] = listedSandboxFromAPI(s) 302 } 303 return result 304 } 305 306 func sandboxMetricFromAPI(a apis.SandboxMetric) SandboxMetric { 307 return SandboxMetric{ 308 CPUCount: a.CPUCount, 309 CPUUsedPct: a.CPUUsedPct, 310 MemTotal: a.MemTotal, 311 MemUsed: a.MemUsed, 312 DiskTotal: a.DiskTotal, 313 DiskUsed: a.DiskUsed, 314 Timestamp: a.Timestamp, 315 TimestampUnix: a.TimestampUnix, 316 } 317 } 318 319 func sandboxMetricsFromAPI(a []apis.SandboxMetric) []SandboxMetric { 320 if a == nil { 321 return nil 322 } 323 result := make([]SandboxMetric, len(a)) 324 for i, m := range a { 325 result[i] = sandboxMetricFromAPI(m) 326 } 327 return result 328 } 329 330 func sandboxLogsFromAPI(a *apis.SandboxLogs) *SandboxLogs { 331 if a == nil { 332 return nil 333 } 334 result := &SandboxLogs{ 335 Logs: make([]SandboxLog, 0, len(a.Logs)), 336 LogEntries: make([]SandboxLogEntry, 0, len(a.LogEntries)), 337 } 338 for _, l := range a.Logs { 339 result.Logs = append(result.Logs, SandboxLog{Line: l.Line, Timestamp: l.Timestamp}) 340 } 341 for _, e := range a.LogEntries { 342 result.LogEntries = append(result.LogEntries, SandboxLogEntry{ 343 Level: LogLevel(e.Level), 344 Message: e.Message, 345 Fields: e.Fields, 346 Timestamp: e.Timestamp, 347 }) 348 } 349 return result 350 } 351 352 func sandboxesWithMetricsFromAPI(a *apis.SandboxesWithMetrics) *SandboxesWithMetrics { 353 if a == nil { 354 return nil 355 } 356 result := &SandboxesWithMetrics{Sandboxes: make(map[string]SandboxMetric, len(a.Sandboxes))} 357 for k, v := range a.Sandboxes { 358 result.Sandboxes[k] = sandboxMetricFromAPI(v) 359 } 360 return result 361 } 362 363 // --------------------------------------------------------------------------- 364 // 转换函数 — SDK → apis 365 // --------------------------------------------------------------------------- 366 367 func (p *CreateParams) toAPI() (apis.CreateSandboxJSONRequestBody, error) { 368 body := apis.CreateSandboxJSONRequestBody{ 369 TemplateID: p.TemplateID, 370 Timeout: p.Timeout, 371 AutoPause: p.AutoPause, 372 AllowInternetAccess: p.AllowInternetAccess, 373 Secure: p.Secure, 374 } 375 if p.EnvVars != nil { 376 ev := apis.EnvVars(*p.EnvVars) 377 body.EnvVars = &ev 378 } 379 if p.Metadata != nil { 380 m := apis.SandboxMetadata(*p.Metadata) 381 body.Metadata = &m 382 } 383 if p.Network != nil { 384 body.Network = &apis.SandboxNetworkConfig{ 385 AllowOut: p.Network.AllowOut, 386 AllowPublicTraffic: p.Network.AllowPublicTraffic, 387 DenyOut: p.Network.DenyOut, 388 MaskRequestHost: p.Network.MaskRequestHost, 389 } 390 } 391 if p.Injections != nil { 392 siList := make([]apis.SandboxInjection, len(*p.Injections)) 393 for i, spec := range *p.Injections { 394 si, err := sandboxInjectionSpecToAPI(spec) 395 if err != nil { 396 return body, err 397 } 398 siList[i] = si 399 } 400 body.Injections = &siList 401 } 402 if p.Resources != nil { 403 list := make([]apis.SandboxResource, len(*p.Resources)) 404 for i, spec := range *p.Resources { 405 r, err := sandboxResourceSpecToAPI(spec) 406 if err != nil { 407 return body, err 408 } 409 list[i] = r 410 } 411 body.Resources = &list 412 } 413 return body, nil 414 } 415 416 func (p *ConnectParams) toAPI() apis.ConnectSandboxJSONRequestBody { 417 return apis.ConnectSandboxJSONRequestBody{ 418 Timeout: p.Timeout, 419 } 420 } 421 422 func (p *RefreshParams) toAPI() apis.RefreshSandboxJSONRequestBody { 423 return apis.RefreshSandboxJSONRequestBody{ 424 Duration: p.Duration, 425 } 426 } 427 428 func (p *ListParams) toAPI() *apis.ListSandboxesV2Params { 429 if p == nil { 430 return nil 431 } 432 params := &apis.ListSandboxesV2Params{ 433 Metadata: p.Metadata, 434 NextToken: p.NextToken, 435 Limit: p.Limit, 436 Template: p.Template, 437 } 438 if p.State != nil { 439 states := make([]apis.SandboxState, len(*p.State)) 440 for i, s := range *p.State { 441 states[i] = apis.SandboxState(s) 442 } 443 params.State = &states 444 } 445 return params 446 }