com.intuit.tank.client.v1.report.ReportServiceClientV1.java Source code

Java tutorial

Introduction

Here is the source code for com.intuit.tank.client.v1.report.ReportServiceClientV1.java

Source

/**
 * Copyright 2011 Intuit Inc. All Rights Reserved
 */
package com.intuit.tank.client.v1.report;

/*
 * #%L
 * Reporting Rest Client
 * %%
 * Copyright (C) 2011 - 2015 Intuit Inc.
 * %%
 * 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
 * #L%
 */

import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;

import org.apache.commons.lang.time.FastDateFormat;

import com.intuit.tank.api.service.v1.report.ReportService;
import com.intuit.tank.reporting.api.TPSInfoContainer;
import com.intuit.tank.reporting.api.TPSReportingPackage;
import com.intuit.tank.rest.BaseRestClient;
import com.intuit.tank.rest.RestServiceException;
import com.intuit.tank.rest.util.ServiceConsants;
import com.intuit.tank.results.TankResult;
import com.intuit.tank.results.TankResultPackage;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;

/**
 * ProjectClientV1
 * 
 * @author dangleton
 * 
 */
public class ReportServiceClientV1 extends BaseRestClient {

    private static final FastDateFormat FMT = FastDateFormat.getInstance(ReportService.DATE_FORMAT);
    private static final String SERVICE_BASE_URL = ServiceConsants.REST_SERVICE_CONTEXT
            + ReportService.SERVICE_RELATIVE_PATH;

    /**
     * 
     * @param serviceUrl
     */
    public ReportServiceClientV1(String serviceUrl) {
        super(serviceUrl, null, null);
    }

    /**
     * 
     * @param serviceUrl
     */
    public ReportServiceClientV1(String serviceUrl, final String proxyServer, final Integer proxyPort) {
        super(serviceUrl, proxyServer, proxyPort);
    }

    /**
     * 
     * @return
     */
    protected String getServiceBaseUrl() {
        return SERVICE_BASE_URL;
    }

    /**
     * 
     * @param jobId
     * @param instanceId
     * @param container
     * @throws RestServiceException
     * @throws UniformInterfaceException
     */
    public void postTpsResults(String jobId, String instanceId, TPSInfoContainer container)
            throws RestServiceException, UniformInterfaceException {
        TPSReportingPackage tpsPackage = new TPSReportingPackage(jobId, instanceId, container);
        WebResource webResource = client.resource(urlBuilder.buildUrl(ReportService.METHOD_TPS_INFO));
        ClientResponse response = webResource.entity(tpsPackage, MediaType.APPLICATION_XML_TYPE)
                .post(ClientResponse.class);
        exceptionHandler.checkStatusCode(response);
    }

    /**
     * 
     * @param jobId
     * @param instanceId
     * @param results
     * @throws RestServiceException
     * @throws UniformInterfaceException
     */
    public void postTimingResults(String jobId, String instanceId, List<TankResult> results)
            throws RestServiceException, UniformInterfaceException {
        TankResultPackage tankResultPackage = new TankResultPackage(jobId, instanceId, results);
        WebResource webResource = client.resource(urlBuilder.buildUrl(ReportService.METHOD_TIMING_RESULTS));
        ClientResponse response = webResource.entity(tankResultPackage, MediaType.APPLICATION_XML_TYPE)
                .post(ClientResponse.class);
        exceptionHandler.checkStatusCode(response);
    }

    /**
     * Gets the csv data stream.
     * 
     * @param jobId
     *            the jobId of the timing data to get
     * @param period
     *            the requested period for timing data. can be 15, 30, 45, or 60. If null period is system set default
     *            15
     * @param minDate
     *            the minimumDate inclusive. if null no minimum is set
     * @param maxDate
     *            the maximum date exclusive. if null no max is set
     * @return stream of csv data in format of "Job ID", "Page ID", "Sample Size", "Average", "Min", "Max", "Period",
     *         "Start Time" first row is header row. If empty stream no results are returned.
     */
    public InputStream getBucketTimingData(@Nonnull String jobId, @Nullable Integer period, @Nullable Date minDate,
            Date maxDate) {
        UriBuilder uriBuilder = UriBuilder
                .fromUri(urlBuilder.buildUrl(ReportService.METHOD_TIMING_PERIODIC_CSV, jobId));
        if (minDate != null) {
            uriBuilder.queryParam("minTime", FMT.format(minDate));
        }
        if (maxDate != null) {
            uriBuilder.queryParam("maxTime", FMT.format(maxDate));
        }
        if (period != null && period != 15) {
            uriBuilder.queryParam("period", period.toString());
        }
        WebResource webResource = client.resource(uriBuilder.build());
        ClientResponse response = webResource.accept(MediaType.APPLICATION_OCTET_STREAM).get(ClientResponse.class);
        exceptionHandler.checkStatusCode(response);
        return response.getEntityInputStream();
    }

    /**
     * Gets the contents of a file as a Stream starting at the specified start point
     * 
     * @param filePath
     *            the filePath to fetch as a child of the logs dir.
     * @param start
     *            the number of bytes to skip. Pass null or 0L to get entire file.
     * @return the stream of the file
     */
    public InputStream getFile(String filePath, Long start) {
        UriBuilder uriBuilder = UriBuilder.fromUri(urlBuilder.buildUrl(filePath));
        if (start != null) {
            uriBuilder.queryParam("from", start.toString());
        }
        WebResource webResource = client.resource(uriBuilder.build());
        ClientResponse response = webResource.accept(MediaType.APPLICATION_OCTET_STREAM).get(ClientResponse.class);
        exceptionHandler.checkStatusCode(response);
        return response.getEntityInputStream();
    }

    /**
     * Triggers processing the summary data for a job
     * 
     * @param jobId
     */
    public void processSummary(String jobId) {
        UriBuilder uriBuilder = UriBuilder.fromUri(urlBuilder.buildUrl(ReportService.METHOD_PROCESS_TIMING, jobId));

        WebResource webResource = client.resource(uriBuilder.build());
        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
        exceptionHandler.checkStatusCode(response);
    }

    /**
     * Gets the timing data as csv file.
     * 
     * @param jobId
     *            the job to get the data for
     * @return InputStream or throw exception if no data found.
     */
    public InputStream getTimingCsv(String jobId) {
        UriBuilder uriBuilder = UriBuilder.fromUri(urlBuilder.buildUrl(ReportService.METHOD_TIMING_CSV, jobId));
        WebResource webResource = client.resource(uriBuilder.build());
        ClientResponse response = webResource.accept(MediaType.APPLICATION_OCTET_STREAM).get(ClientResponse.class);
        exceptionHandler.checkStatusCode(response);
        return response.getEntityInputStream();
    }

    /**
     * Gets the summary data as a csv file.
     * 
     * @param jobId
     * @return InputStream or throw exception if no data found.
     */
    public InputStream getSummaryTimingCsv(String jobId) {
        UriBuilder uriBuilder = UriBuilder
                .fromUri(urlBuilder.buildUrl(ReportService.METHOD_TIMING_SUMMARY_CSV, jobId));
        WebResource webResource = client.resource(uriBuilder.build());
        ClientResponse response = webResource.accept(MediaType.APPLICATION_OCTET_STREAM).get(ClientResponse.class);
        exceptionHandler.checkStatusCode(response);
        return response.getEntityInputStream();
    }

    /**
     * Deletes the raw timing data from storage.
     * 
     * @param jobId
     *            the job to delete data for
     */
    public void deleteTiming(String jobId) {
        UriBuilder uriBuilder = UriBuilder.fromUri(urlBuilder.buildUrl(ReportService.METHOD_TIMING, jobId));
        WebResource webResource = client.resource(uriBuilder.build());
        ClientResponse response = webResource.delete(ClientResponse.class);
        exceptionHandler.checkStatusCode(response);
    }

}