/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.tsdr.dataquery.rest.query; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.opendaylight.controller.config.yang.config.TSDR_dataquery.impl.TSDRDataqueryModule; import org.opendaylight.tsdr.dataquery.rest.nbi.TSDRNBIRestAPI; import org.opendaylight.yang.gen.v1.opendaylight.tsdr.metric.data.rev160325.*; import org.opendaylight.yang.gen.v1.opendaylight.tsdr.metric.data.rev160325.gettsdraggregatedmetrics.output.AggregatedMetrics; import org.opendaylight.yang.gen.v1.opendaylight.tsdr.metric.data.rev160325.gettsdrmetrics.output.Metrics; import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; /** * @author Sharon Aicler(saichler@gmail.com) **/ @Path("/metrics") public class TSDRMetricsQueryAPI { private static final Logger logger = LoggerFactory.getLogger(TSDRNBIRestAPI.class); @GET @Path("/{query}") @Produces("application/json") public Response get(@PathParam("query") String query, @QueryParam("tsdrkey") String tsdrkey, @QueryParam("from") String from, @QueryParam("until") String until, @QueryParam("maxDataPoints") String maxDataPoints, @QueryParam("aggregation") String aggregation) throws ExecutionException, InterruptedException { TSDRQueryRequest request = new TSDRQueryRequest(); request.setTsdrkey(tsdrkey); request.setFrom(from); request.setUntil(until); request.setMaxDataPoints(maxDataPoints); request.setAggregation(aggregation); return post(null,request); } @POST @Produces("application/json") public Response post(@Context UriInfo info, TSDRQueryRequest request) throws ExecutionException, InterruptedException { if (request.getMaxDataPoints() != null && request.getAggregation() != null) { final long from = TSDRNBIRestAPI.getTimeFromString(request.getFrom()); final long until = TSDRNBIRestAPI.getTimeFromString(request.getUntil()); final long maxDataPoints = request.getMaxDataPoints() != null ? Long.parseLong(request.getMaxDataPoints()) : 0; final GetTSDRAggregatedMetricsInputBuilder input = new GetTSDRAggregatedMetricsInputBuilder(); input.setTSDRDataCategory(request.getTsdrkey()); input.setStartTime(TSDRNBIRestAPI.getTimeFromString(request.getFrom())); input.setEndTime(TSDRNBIRestAPI.getTimeFromString(request.getUntil())); input.setInterval(Math.floorDiv(until - from, maxDataPoints) + 1); input.setAggregation(AggregationType.valueOf(request.getAggregation())); Future<RpcResult<GetTSDRAggregatedMetricsOutput>> metric = TSDRDataqueryModule.metricDataService.getTSDRAggregatedMetrics(input.build()); if(!metric.get().isSuccessful()){ Response.status(503).entity("{}").build(); } List<AggregatedMetrics> metrics = metric.get().getResult().getAggregatedMetrics(); TSDRMetricsQueryReply reply = new TSDRMetricsQueryReply(request.getTsdrkey(), metrics); return Response.status(201).entity(toJson(reply)).build(); } else { GetTSDRMetricsInputBuilder input = new GetTSDRMetricsInputBuilder(); input.setTSDRDataCategory(request.getTsdrkey()); input.setStartTime(TSDRNBIRestAPI.getTimeFromString(request.getFrom())); input.setEndTime(TSDRNBIRestAPI.getTimeFromString(request.getUntil())); Future<RpcResult<GetTSDRMetricsOutput>> metric = TSDRDataqueryModule.metricDataService.getTSDRMetrics(input.build()); if(!metric.get().isSuccessful()){ Response.status(503).entity("{}").build(); } List<Metrics> metrics = metric.get().getResult().getMetrics(); TSDRMetricsQueryReply reply = new TSDRMetricsQueryReply(metrics); return Response.status(201).entity(toJson(reply)).build(); } } public static final String toJson(Object obj){ Gson gson = new GsonBuilder().setPrettyPrinting().create(); return gson.toJson(obj); } }