/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.network.http;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpConnectionMetrics;
import android.util.Log;
/**
*
* @author sihai
*
*/
public class HttpTransactionMetrics {
private long mBaseReceivedBytes;
private long mBaseRequestCount;
private long mBaseSentBytes;
private HttpConnectionMetrics mConnectionMetrics;
private final Map<String, HttpTransactionMetricsHolder> mMap = new HashMap<String, HttpTransactionMetricsHolder>();
private long mProcessingStartMillis;
private HttpTransactionMetricsHolder mTransaction;
private long mTransactionStartMillis;
public HttpTransactionMetrics() {
}
public final void accumulateFrom(HttpTransactionMetrics httpTransactionMetrics) {
if (this.mTransaction == null)
onBeginTransaction(httpTransactionMetrics.getName());
this.mTransaction.duration += httpTransactionMetrics.getDuration();
this.mTransaction.processingDuration += httpTransactionMetrics.getProcessingDuration();
this.mTransaction.requestCount += httpTransactionMetrics.getRequestCount();
this.mTransaction.receivedBytes += httpTransactionMetrics.getReceivedBytes();
this.mTransaction.sentBytes += httpTransactionMetrics.getSentBytes();
}
public final void onStartResultProcessing() {
mProcessingStartMillis = System.currentTimeMillis();
}
public final void onEndResultProcessing() {
if (this.mProcessingStartMillis != 0L) {
this.mTransaction.processingDuration += (System.currentTimeMillis() - this.mProcessingStartMillis);
this.mProcessingStartMillis = 0L;
}
}
public final void onBeginTransaction(String s) {
mTransaction = (HttpTransactionMetricsHolder)mMap.get(s);
if(mTransaction == null) {
mTransaction = new HttpTransactionMetricsHolder();
mTransaction.name = s;
mMap.put(s, mTransaction);
}
mTransactionStartMillis = System.currentTimeMillis();
mProcessingStartMillis = 0L;
}
public final void onEndTransaction() {
onEndResultProcessing();
this.mTransaction.duration += (System.currentTimeMillis() - this.mTransactionStartMillis);
if (this.mConnectionMetrics != null) {
this.mTransaction.requestCount += this.mConnectionMetrics.getRequestCount();
this.mTransaction.receivedBytes += this.mConnectionMetrics.getReceivedBytesCount();
this.mTransaction.sentBytes += this.mConnectionMetrics.getSentBytesCount();
}
this.mConnectionMetrics = null;
}
public final void onEndTransaction(long paramLong1, long paramLong2) {
this.mTransaction.duration = paramLong1;
this.mTransaction.processingDuration = paramLong2;
if (this.mConnectionMetrics != null) {
this.mTransaction.requestCount += this.mConnectionMetrics.getRequestCount();
this.mTransaction.receivedBytes += this.mConnectionMetrics.getReceivedBytesCount();
this.mTransaction.sentBytes += this.mConnectionMetrics.getSentBytesCount();
}
this.mConnectionMetrics = null;
}
public final void setConnectionMetrics(HttpConnectionMetrics httpconnectionmetrics) {
mConnectionMetrics = httpconnectionmetrics;
mBaseRequestCount = 0L;
mBaseReceivedBytes = 0L;
mBaseSentBytes = 0L;
}
public final String getName() {
String s;
if (!mMap.isEmpty())
s = mMap.keySet().iterator().next();
else
s = "Unknown";
return s;
}
public final long getDuration() {
List<String> arraylist = new ArrayList<String>(mMap.keySet());
long l = 0L;
Iterator<String> iterator = arraylist.iterator();
while (iterator.hasNext()) {
String str = (String) iterator.next();
l += ((HttpTransactionMetricsHolder) this.mMap.get(str)).duration;
}
return l;
}
public final long getProcessingDuration() {
List<String> arraylist = new ArrayList<String>(mMap.keySet());
long l = 0L;
Iterator<String> iterator = arraylist.iterator();
while (iterator.hasNext()) {
String str = (String) iterator.next();
l += ((HttpTransactionMetricsHolder) this.mMap.get(str)).processingDuration;
}
return l;
}
public final long getReceivedBytes() {
List<String> arraylist = new ArrayList<String>(mMap.keySet());
long l = 0L;
Iterator<String> iterator = arraylist.iterator();
while (iterator.hasNext()) {
String str = (String) iterator.next();
l += ((HttpTransactionMetricsHolder) this.mMap.get(str)).receivedBytes;
}
return l;
}
public final long getRequestCount() {
List<String> arraylist = new ArrayList<String>(mMap.keySet());
long l = 0L;
Iterator<String> iterator = arraylist.iterator();
while (iterator.hasNext()) {
String str = (String) iterator.next();
l += ((HttpTransactionMetricsHolder) this.mMap.get(str)).requestCount;
}
return l;
}
public final long getSentBytes() {
List<String> arraylist = new ArrayList<String>(mMap.keySet());
long l = 0L;
Iterator<String> iterator = arraylist.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
l += ((HttpTransactionMetricsHolder) this.mMap.get(str)).sentBytes;
}
return l;
}
public final void log(String s, String s1) {
List<String> arraylist = new ArrayList<String>(mMap.keySet());
Collections.sort(arraylist);
String s2;
for(Iterator<String> iterator = arraylist.iterator(); iterator.hasNext(); Log.i(s, (new StringBuilder()).append(s1).append(mMap.get(s2)).toString()))
s2 = (String)iterator.next();
}
private static final class HttpTransactionMetricsHolder {
public long duration;
public String name;
public long processingDuration;
public long receivedBytes;
public long requestCount;
public long sentBytes;
public final String toString() {
return (new StringBuilder("[")).append(name).append("], duration: ").append(duration).append("ms, network: ").append(duration - processingDuration).append("ms, processing: ").append(processingDuration).append("ms, requests: ").append(requestCount).append(", sent: ").append(sentBytes).append(", received: ").append(receivedBytes).toString();
}
private HttpTransactionMetricsHolder() {
}
}
}