func PopulateQPSLevels()

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
}