in pkg/aws/throttle/config.go [55:98]
func (c *ServiceOperationsThrottleConfig) Set(val string) error {
valueOverride := make(map[string][]throttleConfig)
configPairs := strings.Split(val, ",")
for _, pair := range configPairs {
kv := strings.Split(pair, "=")
if len(kv) != 2 {
return errors.Errorf("%s must be formatted as serviceID:operationRegex=rate:burst", pair)
}
serviceIDOperationRegexPair := strings.Split(kv[0], ":")
if len(serviceIDOperationRegexPair) != 2 {
return errors.Errorf("%s must be formatted as serviceID:operationRegex", kv[0])
}
rateBurstPair := strings.Split(kv[1], ":")
if len(rateBurstPair) != 2 {
return errors.Errorf("%s must be formatted as rate:burst", kv[1])
}
serviceID := serviceIDOperationRegexPair[0]
operationPtn, err := regexp.Compile(serviceIDOperationRegexPair[1])
if err != nil {
return errors.Errorf("%s must be valid regex expression for operation", serviceIDOperationRegexPair[1])
}
r, err := strconv.ParseFloat(rateBurstPair[0], 64)
if err != nil {
return errors.Errorf("%s must be valid float number as rate for operations per second", rateBurstPair[0])
}
burst, err := strconv.Atoi(rateBurstPair[1])
if err != nil {
return errors.Errorf("%s must be valid integer as burst for operations", rateBurstPair[1])
}
valueOverride[serviceID] = append(valueOverride[serviceID], throttleConfig{
operationPtn: operationPtn,
r: rate.Limit(r),
burst: burst,
})
}
if c.value == nil {
c.value = make(map[string][]throttleConfig)
}
for k, v := range valueOverride {
c.value[k] = v
}
return nil
}