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
}