github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/icd/icdv4/auto_scaling.go (about) 1 package icdv4 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 "github.com/IBM-Cloud/bluemix-go/client" 8 "github.com/IBM-Cloud/bluemix-go/utils" 9 ) 10 11 // AutoscalingSetGroup ... 12 type AutoscalingSetGroup struct { 13 Autoscaling AutoscalingGroup `json:"autoscaling,omitempty"` 14 } 15 16 // AutoscalingGroup ... 17 type AutoscalingGroup struct { 18 Memory *ASGBody `json:"memory,omitempty"` 19 CPU *ASGBody `json:"cpu,omitempty"` 20 Disk *ASGBody `json:"disk,omitempty"` 21 } 22 23 // ASGBody ... 24 type ASGBody struct { 25 Scalers ScalersBody `json:"scalers,omitempty"` 26 Rate RateBody `json:"rate,omitempty"` 27 } 28 29 // RateBody ... 30 type RateBody struct { 31 IncreasePercent int `json:"increase_percent,omitempty"` 32 PeriodSeconds int `json:"period_seconds,omitempty"` 33 LimitCountPerMember int `json:"limit_count_per_member,omitempty"` 34 LimitMBPerMember int `json:"limit_mb_per_member,omitempty"` 35 Units string `json:"units,omitempty"` 36 } 37 38 // ScalersBody ... 39 type ScalersBody struct { 40 Capacity *CapacityBody `json:"capacity,omitempty"` 41 IO *IOBody `json:"io_utilization,omitempty"` 42 } 43 44 // CapacityBody ... 45 type CapacityBody struct { 46 Enabled bool `json:"enabled"` 47 FreeSpaceRemainingPercent int `json:"free_space_remaining_percent,omitempty"` 48 FreeSpaceLessThanPercent int `json:"free_space_less_than_percent,omitempty"` 49 } 50 51 // IOBody ... 52 type IOBody struct { 53 Enabled bool `json:"enabled"` 54 AbovePercent int `json:"above_percent,omitempty"` 55 OverPeriod string `json:"over_period,omitempty"` 56 } 57 58 // AutoscalingGetGroup ... 59 type AutoscalingGetGroup struct { 60 Autoscaling AutoscalingGet `json:"autoscaling,omitempty"` 61 } 62 63 // AutoscalingGet ... 64 type AutoscalingGet struct { 65 Memory ASGGet `json:"memory,omitempty"` 66 CPU ASGGet `json:"cpu,omitempty"` 67 Disk ASGGet `json:"disk,omitempty"` 68 } 69 70 // ASGGet ... 71 type ASGGet struct { 72 Scalers ScalersBody `json:"scalers,omitempty"` 73 Rate Rate `json:"rate,omitempty"` 74 } 75 76 // Rate ... 77 type Rate struct { 78 IncreasePercent json.Number `json:"increase_percent,omitempty"` 79 PeriodSeconds int `json:"period_seconds,omitempty"` 80 LimitCountPerMember int `json:"limit_count_per_member,omitempty"` 81 LimitMBPerMember json.Number `json:"limit_mb_per_member,omitempty"` 82 Units string `json:"units,omitempty"` 83 } 84 85 type autoScaling struct { 86 client *client.Client 87 } 88 89 // AutoScaling ... 90 type AutoScaling interface { 91 GetAutoScaling(icdID string, groupID string) (AutoscalingGetGroup, error) 92 SetAutoScaling(icdID string, groupID string, AutoScaleReq AutoscalingSetGroup) (Task, error) 93 } 94 95 func newAutoScalingAPI(c *client.Client) AutoScaling { 96 return &autoScaling{ 97 client: c, 98 } 99 } 100 func (r *autoScaling) GetAutoScaling(icdID string, groupID string) (AutoscalingGetGroup, error) { 101 autoscalingGroupResult := AutoscalingGetGroup{} 102 rawURL := fmt.Sprintf("/v4/ibm/deployments/%s/groups/%s/autoscaling", utils.EscapeUrlParm(icdID), groupID) 103 _, err := r.client.Get(rawURL, &autoscalingGroupResult) 104 if err != nil { 105 return autoscalingGroupResult, err 106 } 107 return autoscalingGroupResult, nil 108 } 109 func (r *autoScaling) SetAutoScaling(icdID string, groupID string, AutoScaleReq AutoscalingSetGroup) (Task, error) { 110 taskResult := TaskResult{} 111 rawURL := fmt.Sprintf("/v4/ibm/deployments/%s/groups/%s/autoscaling", utils.EscapeUrlParm(icdID), groupID) 112 _, err := r.client.Patch(rawURL, &AutoScaleReq, &taskResult) 113 if err != nil { 114 return taskResult.Task, err 115 } 116 return taskResult.Task, nil 117 }