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  }