Search in sources :

Example 41 with TimeValue

use of io.cdap.cdap.api.dataset.lib.cube.TimeValue in project cdap by cdapio.

the class MetricsQueryHelper method decorate.

private MetricQueryResult.TimeValue[] decorate(List<TimeValue> points) {
    MetricQueryResult.TimeValue[] timeValues = new MetricQueryResult.TimeValue[points.size()];
    int k = 0;
    for (TimeValue timeValue : points) {
        timeValues[k++] = new MetricQueryResult.TimeValue(timeValue.getTimestamp(), timeValue.getValue());
    }
    return timeValues;
}
Also used : MetricQueryResult(io.cdap.cdap.proto.MetricQueryResult) TimeValue(io.cdap.cdap.api.dataset.lib.cube.TimeValue)

Example 42 with TimeValue

use of io.cdap.cdap.api.dataset.lib.cube.TimeValue in project cdap by cdapio.

the class RemoteMetricsSystemClient method query.

@Override
public Collection<MetricTimeSeries> query(int start, int end, int resolution, Map<String, String> tags, Collection<String> metrics, Collection<String> groupByTags) throws IOException {
    String metricsParam = Joiner.on("&metric=").join(metrics);
    if (!metricsParam.isEmpty()) {
        metricsParam = "&metric=" + metricsParam;
    }
    String tagsParam = Joiner.on("&tag=").withKeyValueSeparator(":").join(tags);
    if (!tagsParam.isEmpty()) {
        tagsParam = "&tag=" + tagsParam;
    }
    String groupByParam = Joiner.on("&groupBy=").join(groupByTags);
    if (!groupByParam.isEmpty()) {
        groupByParam = "&groupBy=" + groupByParam;
    }
    // Only query for aggregate metrics. Currently that's the only use case.
    String queryString = "aggregate=true&start=" + start + "&end=" + end + "&resolution=" + resolution + "s" + metricsParam + tagsParam + groupByParam;
    URL url = getBaseURI().resolve("query?" + queryString).toURL();
    HttpResponse response = HttpRequests.execute(HttpRequest.post(url).build(), REQUEST_CONFIG);
    if (response.getResponseCode() != HttpURLConnection.HTTP_OK) {
        throw new IOException("Failed to query for metrics " + metrics + ", with tags " + tags + ". Error code " + response.getResponseCode() + ", message " + response.getResponseBodyAsString());
    }
    MetricQueryResult queryResult = GSON.fromJson(response.getResponseBodyAsString(), MetricQueryResult.class);
    List<MetricTimeSeries> result = new ArrayList<>();
    for (MetricQueryResult.TimeSeries timeSeries : queryResult.getSeries()) {
        List<TimeValue> timeValues = Arrays.stream(timeSeries.getData()).map(tv -> new TimeValue(tv.getTime(), tv.getValue())).collect(Collectors.toList());
        result.add(new MetricTimeSeries(timeSeries.getMetricName(), timeSeries.getGrouping(), timeValues));
    }
    return result;
}
Also used : HttpURLConnection(java.net.HttpURLConnection) Retries(io.cdap.cdap.common.service.Retries) RetryStrategy(io.cdap.cdap.common.service.RetryStrategy) Arrays(java.util.Arrays) TypeToken(com.google.gson.reflect.TypeToken) RandomEndpointStrategy(io.cdap.cdap.common.discovery.RandomEndpointStrategy) NamespaceId(io.cdap.cdap.proto.id.NamespaceId) URL(java.net.URL) Inject(com.google.inject.Inject) HttpResponse(io.cdap.common.http.HttpResponse) EndpointStrategy(io.cdap.cdap.common.discovery.EndpointStrategy) RetryStrategies(io.cdap.cdap.common.service.RetryStrategies) DefaultHttpRequestConfig(io.cdap.cdap.common.http.DefaultHttpRequestConfig) ArrayList(java.util.ArrayList) Discoverable(org.apache.twill.discovery.Discoverable) DiscoveryServiceClient(org.apache.twill.discovery.DiscoveryServiceClient) Gson(com.google.gson.Gson) Map(java.util.Map) MetricDeleteQuery(io.cdap.cdap.api.metrics.MetricDeleteQuery) HttpRequests(io.cdap.common.http.HttpRequests) URI(java.net.URI) URIScheme(io.cdap.cdap.common.discovery.URIScheme) Collection(java.util.Collection) MessagingService(io.cdap.cdap.messaging.MessagingService) IOException(java.io.IOException) MetricTimeSeries(io.cdap.cdap.api.metrics.MetricTimeSeries) Collectors(java.util.stream.Collectors) TopicNotFoundException(io.cdap.cdap.api.messaging.TopicNotFoundException) TimeUnit(java.util.concurrent.TimeUnit) List(java.util.List) CConfiguration(io.cdap.cdap.common.conf.CConfiguration) MultiThreadMessagingContext(io.cdap.cdap.messaging.context.MultiThreadMessagingContext) TimeValue(io.cdap.cdap.api.dataset.lib.cube.TimeValue) MetricsSystemClient(io.cdap.cdap.api.metrics.MetricsSystemClient) Constants(io.cdap.cdap.common.conf.Constants) MessagingContext(io.cdap.cdap.api.messaging.MessagingContext) MetricQueryResult(io.cdap.cdap.proto.MetricQueryResult) Joiner(com.google.common.base.Joiner) HttpRequest(io.cdap.common.http.HttpRequest) ArrayList(java.util.ArrayList) HttpResponse(io.cdap.common.http.HttpResponse) MetricQueryResult(io.cdap.cdap.proto.MetricQueryResult) MetricTimeSeries(io.cdap.cdap.api.metrics.MetricTimeSeries) IOException(java.io.IOException) URL(java.net.URL) TimeValue(io.cdap.cdap.api.dataset.lib.cube.TimeValue)

Example 43 with TimeValue

use of io.cdap.cdap.api.dataset.lib.cube.TimeValue in project cdap by cdapio.

the class SupportBundleRuntimeInfoTask method queryMetrics.

public JsonObject queryMetrics(String runId, String configuration, long startTs, long stopTs) {
    // startTs from run time but metrics already starts before that time
    int startQueryTime = (int) (startTs - 5000);
    JsonObject metrics = new JsonObject();
    try {
        // This program type tag can be null
        String typeTag = getMetricsTag(programType);
        Map<String, String> queryTags = new HashMap<>();
        queryTags.put("namespace", namespaceId.getNamespace());
        queryTags.put("app", appId.getApplication());
        queryTags.put("run", runId);
        if (typeTag != null) {
            queryTags.put(typeTag, programName.getProgram());
        }
        Collection<String> metricsNameList = remoteMetricsSystemClient.search(queryTags);
        List<MetricTimeSeries> metricTimeSeriesList = new ArrayList<>(remoteMetricsSystemClient.query(startQueryTime, (int) (stopTs), queryTags, metricsNameList));
        for (MetricTimeSeries timeSeries : metricTimeSeriesList) {
            if (!metrics.has(timeSeries.getMetricName())) {
                metrics.add(timeSeries.getMetricName(), new JsonArray());
            }
            for (TimeValue timeValue : timeSeries.getTimeValues()) {
                JsonObject time = new JsonObject();
                time.addProperty("time", timeValue.getTimestamp());
                time.addProperty("value", timeValue.getValue());
                metrics.getAsJsonArray(timeSeries.getMetricName()).add(time);
            }
        }
    } catch (IOException e) {
        LOG.warn("Failed to find metrics with run {} ", runId, e);
        return null;
    }
    return metrics;
}
Also used : JsonArray(com.google.gson.JsonArray) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) JsonObject(com.google.gson.JsonObject) MetricTimeSeries(io.cdap.cdap.api.metrics.MetricTimeSeries) IOException(java.io.IOException) TimeValue(io.cdap.cdap.api.dataset.lib.cube.TimeValue)

Example 44 with TimeValue

use of io.cdap.cdap.api.dataset.lib.cube.TimeValue in project cdap by cdapio.

the class MetricsProcessorServiceTest method assertMetricsResult.

private void assertMetricsResult(MetricStore metricStore, Map<String, String> metricsContext, Map<String, Long> expected) {
    for (Map.Entry<String, Long> metric : expected.entrySet()) {
        Collection<MetricTimeSeries> queryResult = metricStore.query(new MetricDataQuery(0, Integer.MAX_VALUE, Integer.MAX_VALUE, metric.getKey(), AggregationFunction.SUM, metricsContext, ImmutableList.<String>of()));
        MetricTimeSeries timeSeries = Iterables.getOnlyElement(queryResult);
        List<TimeValue> timeValues = timeSeries.getTimeValues();
        TimeValue timeValue = Iterables.getOnlyElement(timeValues);
        Assert.assertEquals(String.format("Actual value of metric: %s does not match expected", metric.getKey()), metric.getValue().longValue(), timeValue.getValue());
    }
}
Also used : MetricTimeSeries(io.cdap.cdap.api.metrics.MetricTimeSeries) MetricDataQuery(io.cdap.cdap.api.metrics.MetricDataQuery) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) TimeValue(io.cdap.cdap.api.dataset.lib.cube.TimeValue)

Aggregations

TimeValue (io.cdap.cdap.api.dataset.lib.cube.TimeValue)44 MetricTimeSeries (io.cdap.cdap.api.metrics.MetricTimeSeries)26 MetricDataQuery (io.cdap.cdap.api.metrics.MetricDataQuery)18 ArrayList (java.util.ArrayList)18 Map (java.util.Map)12 Test (org.junit.Test)12 DimensionValue (io.cdap.cdap.api.dataset.lib.cube.DimensionValue)8 TimeSeries (io.cdap.cdap.api.dataset.lib.cube.TimeSeries)8 HashMap (java.util.HashMap)8 LinkedHashMap (java.util.LinkedHashMap)8 List (java.util.List)8 ImmutableList (com.google.common.collect.ImmutableList)6 CubeQuery (io.cdap.cdap.api.dataset.lib.cube.CubeQuery)6 ImmutableMap (com.google.common.collect.ImmutableMap)4 AggregationFunction (io.cdap.cdap.api.dataset.lib.cube.AggregationFunction)4 AggregationOption (io.cdap.cdap.api.dataset.lib.cube.AggregationOption)4 Cube (io.cdap.cdap.api.dataset.lib.cube.Cube)4 CubeFact (io.cdap.cdap.api.dataset.lib.cube.CubeFact)4 InMemoryMetricsTable (io.cdap.cdap.data2.dataset2.lib.table.inmemory.InMemoryMetricsTable)4 MetricQueryResult (io.cdap.cdap.proto.MetricQueryResult)4