in codegen/module_system.go [574:621]
func PopulateQPSLevels(EndpointsBaseDir string, isEnabled bool) (map[string]int, error) {
qpsLevels := make(map[string]int)
if !isEnabled {
return qpsLevels, nil
}
filesList := []string{}
endpointFiles, err := GetListOfAllFilesInEndpointDir(EndpointsBaseDir, filesList)
if err != nil {
return nil, errors.Wrapf(
err,
"error in getting endpoint files",
)
}
for _, endpointFile := range endpointFiles {
config, err := UnmarshalEndpointFile(endpointFile)
if err != nil {
return nil, errors.Wrapf(
err,
"error in unmarshalling endpoint file %q",
endpointFile,
)
}
clientMethod, methodOK := config["clientMethod"]
clientID, clientOK := config["clientId"]
qpsLevel, qpsOK := config["qpsLevel"]
// these fields exist in the config files
hasFields := methodOK && clientOK && qpsOK
if hasFields {
// when yaml files have no values for these keys(fields)
clientless := clientID == nil || clientID == ""
methodless := clientMethod == nil || clientMethod == ""
if !clientless && !methodless {
// unique key because of potential clients having same method names (staging)
key := clientID.(string) + "-" + clientMethod.(string)
// store highest qps level for circuit breaker in qpsLevels map
thisQPSLevel := int(qpsLevel.(float64))
if currentQPSLevel, ok := qpsLevels[key]; ok {
if thisQPSLevel > currentQPSLevel {
qpsLevels[key] = thisQPSLevel
}
} else {
qpsLevels[key] = thisQPSLevel
}
}
}
}
return qpsLevels, nil
}