func GetQuotaAndUsageRequirementsFromOPConfig()

in src/go/configgenerator/filtergen/service_control.go [355:404]


func GetQuotaAndUsageRequirementsFromOPConfig(serviceConfig *confpb.Service, opts options.ConfigGeneratorOptions) ([]*scpb.Requirement, error) {
	var requirements []*scpb.Requirement

	metricCostsBySelector := GetQuotaMetricCostsFromOPConfig(serviceConfig, opts)
	usageRulesBySelector := GetUsageRulesBySelectorFromOPConfig(serviceConfig, opts)
	apiKeySystemParamsBySelector := GetAPIKeySystemParametersBySelectorFromOPConfig(serviceConfig, opts)

	for _, api := range serviceConfig.GetApis() {
		for _, method := range api.GetMethods() {
			selector := MethodToSelector(api, method)
			if util.ShouldSkipOPDiscoveryAPI(selector, opts.AllowDiscoveryAPIs) {
				glog.Warningf("Skip method %q because discovery API is not supported.", selector)
				continue
			}

			requirement := &scpb.Requirement{
				ServiceName:   serviceConfig.GetName(),
				OperationName: selector,
				ApiName:       api.GetName(),
				ApiVersion:    api.GetVersion(),
			}

			metricCosts, ok := metricCostsBySelector[selector]
			if ok {
				requirement.MetricCosts = metricCosts
			}

			if usageRule, ok := usageRulesBySelector[selector]; ok {
				requirement.SkipServiceControl = usageRule.GetSkipServiceControl()

				if usageRule.GetAllowUnregisteredCalls() {
					requirement.ApiKey = &scpb.ApiKeyRequirement{
						AllowWithoutApiKey: true,
					}
				}
			}

			if apiKeySystemParams, ok := apiKeySystemParamsBySelector[selector]; ok {
				if requirement.ApiKey == nil {
					requirement.ApiKey = &scpb.ApiKeyRequirement{}
				}
				requirement.ApiKey.Locations = ExtractAPIKeyLocations(apiKeySystemParams)
			}

			requirements = append(requirements, requirement)
		}
	}

	return requirements, nil
}