@Override public String buildQuery(String metricsAccountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) { DatadogCanaryMetricSetQueryConfig queryConfig = (DatadogCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); return queryConfig.getMetricName() + "{" + canaryScope.getScope() + "}"; }
@Override public String buildQuery(String metricsAccountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) throws IOException { GraphiteCanaryMetricSetQueryConfig queryConfig = (GraphiteCanaryMetricSetQueryConfig) canaryMetricConfig.getQuery(); String query = queryConfig.getMetricName(); if (!Strings.isNullOrEmpty(canaryScope.getScope())) { query = query.replace(SCOPE_VARIABLE, canaryScope.getScope()); } if (!Strings.isNullOrEmpty(canaryScope.getLocation())) { query = query.replace(LOCATION_VARIABLE, canaryScope.getLocation()); } log.debug("Query sent to graphite: {}.", query); return query; }
@Override public List<MetricSet> queryMetrics(String accountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) { InfluxDbNamedAccountCredentials accountCredentials = (InfluxDbNamedAccountCredentials)accountCredentialsRepository .getOne(accountName) .orElseThrow(() -> new IllegalArgumentException("Unable to resolve account " + accountName + ".")); InfluxDbRemoteService remoteService = accountCredentials.getInfluxDbRemoteService(); InfluxdbCanaryMetricSetQueryConfig queryConfig = (InfluxdbCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); String query = queryBuilder.build(queryConfig, canaryScope); log.debug("query={}", query); String metricSetName = canaryMetricConfig.getName(); List<InfluxDbResult> influxDbResults = queryInfluxdb(remoteService, metricSetName, query); return buildMetricSets(metricSetName, influxDbResults); }
@Override public String buildQuery(String metricsAccountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) { SignalFxScopeConfiguration scopeConfiguration = signalFxScopeConfigurationMap.get(metricsAccountName); SignalFxCanaryScope signalFxCanaryScope = (SignalFxCanaryScope) canaryScope; SignalFxCanaryMetricSetQueryConfig queryConfig = (SignalFxCanaryMetricSetQueryConfig) canaryMetricConfig.getQuery(); String aggregationMethod = Optional.ofNullable(queryConfig.getAggregationMethod()).orElse("mean"); List<QueryPair> queryPairs = Optional.ofNullable(queryConfig.getQueryPairs()).orElse(new LinkedList<>()); return SimpleSignalFlowProgramBuilder .create(queryConfig.getMetricName(), aggregationMethod, scopeConfiguration) .withQueryPairs(queryPairs) .withScope(signalFxCanaryScope) .build(); }
.mapToObj(index -> { CanaryMetricConfig metric = canaryConfig.getMetrics().get(index); String serviceType = metric.getQuery().getServiceType(); CanaryScopeFactory canaryScopeFactory = getScopeFactoryForServiceType(serviceType); if (metric.getScopeName() == null) {
(NewRelicCanaryMetricSetQueryConfig) canaryMetricConfig.getQuery();
CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) throws IOException { StackdriverCanaryMetricSetQueryConfig queryConfig = (StackdriverCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); StackdriverCanaryScope stackdriverCanaryScope = (StackdriverCanaryScope)canaryScope; String projectId = determineProjectId(metricsAccountName, stackdriverCanaryScope);
@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(); } }
SignalFxCanaryMetricSetQueryConfig queryConfig = (SignalFxCanaryMetricSetQueryConfig) canaryMetricConfig.getQuery(); List<QueryPair> queryPairs = Optional.ofNullable(queryConfig.getQueryPairs()).orElse(new LinkedList<>());
.orElseThrow(() -> new IllegalArgumentException("Unable to resolve account " + metricsAccountName + ".")); Monitoring monitoring = stackdriverCredentials.getMonitoring(); StackdriverCanaryMetricSetQueryConfig stackdriverMetricSetQuery = (StackdriverCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); String projectId = determineProjectId(metricsAccountName, stackdriverCanaryScope); String location = stackdriverCanaryScope.getLocation();
private CanaryMetricConfigWithResults queryMetric(CanaryMetricConfig metric, GraphiteCanaryScope scope) { Long step = 10L; Long start = scope.getStart().getEpochSecond() / step * step; Long end = scope.getEnd().getEpochSecond() / step * step; Long count = (end - start) / step; GraphiteCanaryMetricSetQueryConfig graphiteMetricSetQuery = (GraphiteCanaryMetricSetQueryConfig) metric.getQuery(); List<List<Double>> dataPoints = new LinkedList<>(); LongStream.range(0, count).forEach(i -> { Long time = (start + i * step); dataPoints.add(Lists.newArrayList((double) i, time.doubleValue())); }); GraphiteResults graphiteResults = GraphiteResults.builder() .target(graphiteMetricSetQuery.getMetricName() + "." + scope.getScope()) .datapoints(dataPoints).build(); return CanaryMetricConfigWithResults.builder() .canaryMetricConfig(metric) .graphiteResults(Collections.singletonList(graphiteResults)) .build(); }
remoteService, okHttpClient); AtlasCanaryMetricSetQueryConfig atlasMetricSetQuery = (AtlasCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); String decoratedQuery = atlasMetricSetQuery.getQ() + "," + atlasCanaryScope.cq(); String isoStep = Duration.of(atlasCanaryScope.getStep(), SECONDS) + "";
private CanaryMetricConfigWithResults queryMetric(CanaryMetricConfig metric, AtlasCanaryScope scope) { long step = Duration.ofSeconds(scope.getStep()).toMillis(); long start = scope.getStart().toEpochMilli() / step * step; long end = scope.getEnd().toEpochMilli() / step * step; long count = (end - start) / step; AtlasCanaryMetricSetQueryConfig atlasMetricSetQuery = (AtlasCanaryMetricSetQueryConfig)metric.getQuery(); AtlasResults results = AtlasResults.builder() .id("dummyId") .start(start) .end(end) .label("dummyLabel") .query(atlasMetricSetQuery.getQ() + "," + scope.cq()) .step(step) .type("timeseries") .data(TimeseriesData.dummy("array", count)) .build(); return CanaryMetricConfigWithResults.builder() .canaryMetricConfig(metric) .atlasResults(Collections.singletonList(results)) .build(); }
@Override public String buildQuery(String metricsAccountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) { DatadogCanaryMetricSetQueryConfig queryConfig = (DatadogCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); return queryConfig.getMetricName() + "{" + canaryScope.getScope() + "}"; }
@Override public String buildQuery(String metricsAccountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) throws IOException { GraphiteCanaryMetricSetQueryConfig queryConfig = (GraphiteCanaryMetricSetQueryConfig) canaryMetricConfig.getQuery(); String query = queryConfig.getMetricName(); if (!Strings.isNullOrEmpty(canaryScope.getScope())) { query = query.replace(SCOPE_VARIABLE, canaryScope.getScope()); } if (!Strings.isNullOrEmpty(canaryScope.getLocation())) { query = query.replace(LOCATION_VARIABLE, canaryScope.getLocation()); } log.debug("Query sent to graphite: {}.", query); return query; }
.mapToObj(index -> { CanaryMetricConfig metric = canaryConfig.getMetrics().get(index); String serviceType = metric.getQuery().getServiceType(); CanaryScopeFactory canaryScopeFactory = getScopeFactoryForServiceType(serviceType); if (metric.getScopeName() == null) {
@Override public String buildQuery(String metricsAccountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) { SignalFxScopeConfiguration scopeConfiguration = signalFxScopeConfigurationMap.get(metricsAccountName); SignalFxCanaryScope signalFxCanaryScope = (SignalFxCanaryScope) canaryScope; SignalFxCanaryMetricSetQueryConfig queryConfig = (SignalFxCanaryMetricSetQueryConfig) canaryMetricConfig.getQuery(); String aggregationMethod = Optional.ofNullable(queryConfig.getAggregationMethod()).orElse("mean"); List<QueryPair> queryPairs = Optional.ofNullable(queryConfig.getQueryPairs()).orElse(new LinkedList<>()); return SimpleSignalFlowProgramBuilder .create(queryConfig.getMetricName(), aggregationMethod, scopeConfiguration) .withQueryPairs(queryPairs) .withScope(signalFxCanaryScope) .build(); }
@Override public List<MetricSet> queryMetrics(String accountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) { InfluxDbNamedAccountCredentials accountCredentials = (InfluxDbNamedAccountCredentials)accountCredentialsRepository .getOne(accountName) .orElseThrow(() -> new IllegalArgumentException("Unable to resolve account " + accountName + ".")); InfluxDbRemoteService remoteService = accountCredentials.getInfluxDbRemoteService(); InfluxdbCanaryMetricSetQueryConfig queryConfig = (InfluxdbCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); String query = queryBuilder.build(queryConfig, canaryScope); log.debug("query={}", query); String metricSetName = canaryMetricConfig.getName(); List<InfluxDbResult> influxDbResults = queryInfluxdb(remoteService, metricSetName, query); return buildMetricSets(metricSetName, influxDbResults); }
@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(); } }
@Override public String buildQuery(String metricsAccountName, CanaryConfig canaryConfig, CanaryMetricConfig canaryMetricConfig, CanaryScope canaryScope) { WavefrontCanaryMetricSetQueryConfig queryConfig = (WavefrontCanaryMetricSetQueryConfig)canaryMetricConfig.getQuery(); String query = queryConfig.getMetricName(); if (canaryScope.getScope() != null && !canaryScope.getScope().equals("")) { query = query + ", " + canaryScope.getScope(); } query = "ts(" + query + ")"; if (queryConfig.getAggregate() != null && !queryConfig.getAggregate().equals("")) { query = queryConfig.getAggregate() + "(" + query + ")"; } return query; }