/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.jmeter.visualizers; import java.io.Serializable; import java.text.Format; import java.util.Date; /** * Class to hold data for the TableVisualiser. */ public class TableSample implements Serializable, Comparable<TableSample> { private static final long serialVersionUID = 240L; private final long totalSamples; private final int sampleCount; // number of samples in this entry private final long startTime; private final String threadName; private final String label; private final long elapsed; private final boolean success; private final long bytes; private final long sentBytes; private final long latency; private final long connect; /** * @deprecated for unit test code only */ @Deprecated public TableSample() { this(0, 1, 0, "", "", 0, true, 0, 0, 0, 0); } public TableSample(long totalSamples, int sampleCount, long startTime, String threadName, String label, long elapsed, boolean success, long bytes, long sentBytes, long latency, long connect) { this.totalSamples = totalSamples; this.sampleCount = sampleCount; this.startTime = startTime; this.threadName = threadName; this.label = label; // SampleCount can be equal to 0, see SubscriberSampler#sample this.elapsed = (sampleCount > 0) ? elapsed/sampleCount : 0; this.bytes = (sampleCount > 0) ? bytes/sampleCount : 0; this.sentBytes = (sampleCount > 0) ? sentBytes/sampleCount : 0; this.success = success; this.latency = latency; this.connect = connect; } // The following getters may appear not to be used - however they are invoked via the Functor class public long getBytes() { return bytes; } public String getSampleNumberString(){ StringBuilder sb = new StringBuilder(); if (sampleCount > 1) { sb.append(totalSamples-sampleCount+1); sb.append('-'); } sb.append(totalSamples); return sb.toString(); } public long getElapsed() { return elapsed; } public boolean isSuccess() { return success; } public long getStartTime() { return startTime; } /** * @param format the format to be used on the time * @return the start time using the specified format * Intended for use from Functors */ public String getStartTimeFormatted(Format format) { return format.format(new Date(getStartTime())); } public String getThreadName() { return threadName; } public String getLabel() { return label; } @Override public int compareTo(TableSample o) { TableSample oo = o; return (totalSamples - oo.totalSamples) < 0 ? -1 : (totalSamples == oo.totalSamples ? 0 : 1); } // TODO should equals and hashCode depend on field other than count? @Override public boolean equals(Object o){ return (o instanceof TableSample) && (this.compareTo((TableSample) o) == 0); } @Override public int hashCode(){ return (int)(totalSamples ^ (totalSamples >>> 32)); } /** * @return the latency */ public long getLatency() { return latency; } /** * @return the conneect time */ public long getConnectTime() { return connect; } /** * @return the sentBytes */ public long getSentBytes() { return sentBytes; } }