@Override public String buildQuery(String metricsAccountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) throws IOException { PrometheusCanaryMetricSetQueryConfig queryConfig = (PrometheusCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); PrometheusCanaryScope prometheusCanaryScope = (PrometheusCanaryScope)canaryScope; String resourceType = StringUtils.hasText(queryConfig.getResourceType()) ? queryConfig.getResourceType() : prometheusCanaryScope.getResourceType(); String customFilter = QueryConfigUtils.expandCustomFilter( canaryConfig, queryConfig, prometheusCanaryScope, new String[]{"project", "resourceType", "scope", "location"}); if (!StringUtils.isEmpty(customFilter) && customFilter.startsWith("PromQL:")) { String promQlExpr = customFilter.substring(7); log.debug("Detected complete PromQL expression: {}", promQlExpr); return promQlExpr; } else { StringBuilder queryBuilder = new StringBuilder(queryConfig.getMetricName()); queryBuilder = addScopeFilter(queryBuilder, prometheusCanaryScope, resourceType, queryConfig, customFilter); queryBuilder = addAvgQuery(queryBuilder); queryBuilder = addGroupByQuery(queryBuilder, queryConfig); log.debug("query={}", queryBuilder); return queryBuilder.toString(); } }
canaryConfig = QueryConfigUtils.escapeTemplates(canaryConfig);
templateToExpand = unescapeTemplate(customInlineTemplate); } else { Map<String, String> templates = canaryConfig.getTemplates(); throw new IllegalArgumentException("Custom filter template '" + customFilterTemplate + "' was not found."); templateToExpand = unescapeTemplate(templates.get(customFilterTemplate)); populateTemplateBindings(canaryScope, baseScopeAttributes, templateBindings, false); populateTemplateBindings(metricSetQuery, baseScopeAttributes, templateBindings, true);
: stackdriverCanaryScope.getResourceType(); String customFilter = QueryConfigUtils.expandCustomFilter( canaryConfig, queryConfig,
templateToExpand = unescapeTemplate(customInlineTemplate); } else { Map<String, String> templates = canaryConfig.getTemplates(); throw new IllegalArgumentException("Custom filter template '" + customFilterTemplate + "' was not found."); templateToExpand = unescapeTemplate(templates.get(customFilterTemplate)); populateTemplateBindings(canaryScope, baseScopeAttributes, templateBindings, false); populateTemplateBindings(metricSetQuery, baseScopeAttributes, templateBindings, true);
canaryConfig = QueryConfigUtils.escapeTemplates(canaryConfig);
@Override public String buildQuery(String metricsAccountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) throws IOException { PrometheusCanaryMetricSetQueryConfig queryConfig = (PrometheusCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); PrometheusCanaryScope prometheusCanaryScope = (PrometheusCanaryScope)canaryScope; String resourceType = StringUtils.hasText(queryConfig.getResourceType()) ? queryConfig.getResourceType() : prometheusCanaryScope.getResourceType(); String customFilter = QueryConfigUtils.expandCustomFilter( canaryConfig, queryConfig, prometheusCanaryScope, new String[]{"project", "resourceType", "scope", "location"}); if (!StringUtils.isEmpty(customFilter) && customFilter.startsWith("PromQL:")) { String promQlExpr = customFilter.substring(7); log.debug("Detected complete PromQL expression: {}", promQlExpr); return promQlExpr; } else { StringBuilder queryBuilder = new StringBuilder(queryConfig.getMetricName()); queryBuilder = addScopeFilter(queryBuilder, prometheusCanaryScope, resourceType, queryConfig, customFilter); queryBuilder = addAvgQuery(queryBuilder); queryBuilder = addGroupByQuery(queryBuilder, queryConfig); log.debug("query={}", queryBuilder); return queryBuilder.toString(); } }
canaryConfig = QueryConfigUtils.escapeTemplates(canaryConfig);
: stackdriverCanaryScope.getResourceType(); String customFilter = QueryConfigUtils.expandCustomFilter( canaryConfig, queryConfig,
canaryConfig = QueryConfigUtils.escapeTemplates(canaryConfig);