/**
* Copyright 2011 Intuit Inc. All Rights Reserved
*/
package com.intuit.tank.vm.common.util;
/*
* #%L
* Intuit Tank Api
* %%
* 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.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
import com.intuit.tank.vm.settings.TankConfig;
/**
* ReportUtil
*
* @author dangleton
*
*/
public class ReportUtil {
private static final String[] SUMMARY_HEADERS = {"Page ID", "Page Name", "Page Index",
"Sample Size", "Mean",
"Median", "Min", "Max",
"Std Dev",
"Kurtosis", "Skewness", "Varience" };
public static final String[] BUCKET_HEADERS = {"Job ID", "Page ID", "Page Name",
"Page Index", "Sample Size",
"Average", "Min", "Max",
"Period", "Start Time" };
public static final String JOB_ID_KEY = "JobId";
public static final String DATE_FORMAT = "yyyy.MM.dd-HH:mm:ss.S z"; // for timestamps
public static final String LOGGING_KEY = "LoggingKey";
private static final Object[][] PERCENTILES = {
{ "10th Percentile", 10 },
{ "20th Percentile", 20 },
{ "30th Percentile", 30 },
{ "40th Percentile", 40 },
{ "50th Percentile", 50 },
{ "60th Percentile", 60 },
{ "70th Percentile", 70 },
{ "80th Percentile", 80 },
{ "90th Percentile", 90 },
{ "95th Percentile", 95 },
{ "99th Percentile", 99 }
};
public static final NumberFormat INT_NF = NumberFormat.getIntegerInstance();
public static final NumberFormat DOUBLE_NF = NumberFormat.getInstance();
public static final String PAGE_NAME_SEPERATOR = ":||:";
static {
DOUBLE_NF.setMinimumFractionDigits(2);
DOUBLE_NF.setMaximumFractionDigits(2);
DOUBLE_NF.setGroupingUsed(false);
INT_NF.setGroupingUsed(false);
}
public static final String[] getSummaryHeaders() {
List<String> l = new ArrayList<String>(SUMMARY_HEADERS.length + PERCENTILES.length);
l.addAll(Arrays.asList(SUMMARY_HEADERS));
for (int n = 0; n < PERCENTILES.length; n++) {
l.add((String) PERCENTILES[n][0]);
}
return l.toArray(new String[l.size()]);
}
public static final String[] getSummaryData(String key, DescriptiveStatistics stats) {
String[] ret = new String[ReportUtil.SUMMARY_HEADERS.length + PERCENTILES.length];
int i = 0;
ret[i++] = key;// Page ID
ret[i++] = INT_NF.format(stats.getN());// Sample Size
ret[i++] = DOUBLE_NF.format(stats.getMean());// Mean
ret[i++] = INT_NF.format(stats.getPercentile(50));// Meadian
ret[i++] = INT_NF.format(stats.getMin());// Min
ret[i++] = INT_NF.format(stats.getMax());// Max
ret[i++] = DOUBLE_NF.format(stats.getStandardDeviation());// Std Dev
ret[i++] = DOUBLE_NF.format(stats.getKurtosis());// Kurtosis
ret[i++] = DOUBLE_NF.format(stats.getSkewness());// Skewness
ret[i++] = DOUBLE_NF.format(stats.getVariance());// Varience
for (int n = 0; n < PERCENTILES.length; n++) {
ret[i++] = INT_NF.format(stats.getPercentile((Integer) PERCENTILES[n][1]));// Percentiles
}
return ret;
}
/**
*
* @param jobId the id
* @return tablename
*/
public static final String getSummaryTableName(String jobId) {
return "timing_summary_" + new TankConfig().getInstanceName();
}
/**
*
* @param jobId
* @return
*/
public static final String getBucketedTableName(String jobId) {
return "timing_bucket_" + new TankConfig().getInstanceName();
}
public static String getTimestamp(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
return sdf.format(date);
}
public static Date parseTimestamp(String dateString) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
return sdf.parse(dateString);
}
}