github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/cloudwrapper/capacity.go (about) 1 package cloudwrapper 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "net/http" 8 "net/url" 9 ) 10 11 type ( 12 // Capacities is a Cloud Wrapper API interface. 13 Capacities interface { 14 // ListCapacities fetches capacities available for a given contractId. 15 // If no contract id is provided, lists all available capacity locations 16 // 17 // See: https://techdocs.akamai.com/cloud-wrapper/reference/get-capacity-inventory 18 ListCapacities(context.Context, ListCapacitiesRequest) (*ListCapacitiesResponse, error) 19 } 20 21 // ListCapacitiesRequest is a request struct 22 ListCapacitiesRequest struct { 23 ContractIDs []string 24 } 25 26 // ListCapacitiesResponse contains response list of location capacities 27 ListCapacitiesResponse struct { 28 Capacities []LocationCapacity `json:"capacities"` 29 } 30 31 // LocationCapacity contains location capacity information 32 LocationCapacity struct { 33 LocationID int `json:"locationId"` 34 LocationName string `json:"locationName"` 35 ContractID string `json:"contractId"` 36 Type CapacityType `json:"type"` 37 ApprovedCapacity Capacity `json:"approvedCapacity"` 38 AssignedCapacity Capacity `json:"assignedCapacity"` 39 UnassignedCapacity Capacity `json:"unassignedCapacity"` 40 } 41 42 // CapacityType is a type of the properties, this capacity is related to 43 CapacityType string 44 45 // Capacity struct holds capacity information 46 Capacity struct { 47 Value int64 `json:"value"` 48 Unit Unit `json:"unit"` 49 } 50 51 // Unit type of capacity value. Can be either GB or TB 52 Unit string 53 ) 54 55 const ( 56 // UnitGB is a const value for capacity unit 57 UnitGB Unit = "GB" 58 // UnitTB is a const value for capacity unit 59 UnitTB Unit = "TB" 60 ) 61 62 const ( 63 // CapacityTypeMedia type 64 CapacityTypeMedia CapacityType = "MEDIA" 65 // CapacityTypeWebStandardTLS type 66 CapacityTypeWebStandardTLS CapacityType = "WEB_STANDARD_TLS" 67 // CapacityTypeWebEnhancedTLS type 68 CapacityTypeWebEnhancedTLS CapacityType = "WEB_ENHANCED_TLS" 69 ) 70 71 var ( 72 // ErrListCapacities is returned in case an error occurs on ListCapacities operation 73 ErrListCapacities = errors.New("list capacities") 74 ) 75 76 func (c *cloudwrapper) ListCapacities(ctx context.Context, params ListCapacitiesRequest) (*ListCapacitiesResponse, error) { 77 logger := c.Log(ctx) 78 logger.Debug("ListCapacities") 79 80 uri, err := url.Parse("/cloud-wrapper/v1/capacity") 81 if err != nil { 82 return nil, fmt.Errorf("%w: failed to parse url: %s", ErrListCapacities, err) 83 } 84 85 q := uri.Query() 86 for _, contractID := range params.ContractIDs { 87 q.Add("contractIds", contractID) 88 } 89 uri.RawQuery = q.Encode() 90 91 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri.String(), nil) 92 if err != nil { 93 return nil, fmt.Errorf("%w: failed to create request: %s", ErrListCapacities, err) 94 } 95 96 var result ListCapacitiesResponse 97 resp, err := c.Exec(req, &result) 98 if err != nil { 99 return nil, fmt.Errorf("%w: request failed: %s", ErrListCapacities, err) 100 } 101 102 if resp.StatusCode != http.StatusOK { 103 return nil, fmt.Errorf("%s: %w", ErrListCapacities, c.Error(resp)) 104 } 105 106 return &result, nil 107 }