package com.hwlcn.ldap.ldap.sdk;
import java.io.Serializable;
import java.text.DecimalFormat;
import java.util.concurrent.atomic.AtomicLong;
import com.hwlcn.core.annotation.Mutable;
import com.hwlcn.core.annotation.ThreadSafety;
import com.hwlcn.ldap.util.ThreadSafetyLevel;
@Mutable()
@ThreadSafety(level=ThreadSafetyLevel.MOSTLY_THREADSAFE)
public final class LDAPConnectionStatistics
implements Serializable
{
private static final long serialVersionUID = -1096417617572481790L;
private final AtomicLong numAbandonRequests;
private final AtomicLong numAddRequests;
private final AtomicLong numAddResponses;
private final AtomicLong numBindRequests;
private final AtomicLong numBindResponses;
private final AtomicLong numCompareRequests;
private final AtomicLong numCompareResponses;
private final AtomicLong numConnects;
private final AtomicLong numDeleteRequests;
private final AtomicLong numDeleteResponses;
private final AtomicLong numDisconnects;
private final AtomicLong numExtendedRequests;
private final AtomicLong numExtendedResponses;
private final AtomicLong numModifyRequests;
private final AtomicLong numModifyResponses;
private final AtomicLong numModifyDNRequests;
private final AtomicLong numModifyDNResponses;
private final AtomicLong numSearchRequests;
private final AtomicLong numSearchEntryResponses;
private final AtomicLong numSearchReferenceResponses;
private final AtomicLong numSearchDoneResponses;
private final AtomicLong numUnbindRequests;
private final AtomicLong totalAddResponseTime;
private final AtomicLong totalBindResponseTime;
private final AtomicLong totalCompareResponseTime;
private final AtomicLong totalDeleteResponseTime;
private final AtomicLong totalExtendedResponseTime;
private final AtomicLong totalModifyResponseTime;
private final AtomicLong totalModifyDNResponseTime;
private final AtomicLong totalSearchResponseTime;
public LDAPConnectionStatistics()
{
numAbandonRequests = new AtomicLong(0L);
numAddRequests = new AtomicLong(0L);
numAddResponses = new AtomicLong(0L);
numBindRequests = new AtomicLong(0L);
numBindResponses = new AtomicLong(0L);
numCompareRequests = new AtomicLong(0L);
numCompareResponses = new AtomicLong(0L);
numConnects = new AtomicLong(0L);
numDeleteRequests = new AtomicLong(0L);
numDeleteResponses = new AtomicLong(0L);
numDisconnects = new AtomicLong(0L);
numExtendedRequests = new AtomicLong(0L);
numExtendedResponses = new AtomicLong(0L);
numModifyRequests = new AtomicLong(0L);
numModifyResponses = new AtomicLong(0L);
numModifyDNRequests = new AtomicLong(0L);
numModifyDNResponses = new AtomicLong(0L);
numSearchRequests = new AtomicLong(0L);
numSearchEntryResponses = new AtomicLong(0L);
numSearchReferenceResponses = new AtomicLong(0L);
numSearchDoneResponses = new AtomicLong(0L);
numUnbindRequests = new AtomicLong(0L);
totalAddResponseTime = new AtomicLong(0L);
totalBindResponseTime = new AtomicLong(0L);
totalCompareResponseTime = new AtomicLong(0L);
totalDeleteResponseTime = new AtomicLong(0L);
totalExtendedResponseTime = new AtomicLong(0L);
totalModifyResponseTime = new AtomicLong(0L);
totalModifyDNResponseTime = new AtomicLong(0L);
totalSearchResponseTime = new AtomicLong(0L);
}
public void reset()
{
numAbandonRequests.set(0L);
numAddRequests.set(0L);
numAddResponses.set(0L);
numBindRequests.set(0L);
numBindResponses.set(0L);
numCompareRequests.set(0L);
numCompareResponses.set(0L);
numConnects.set(0L);
numDeleteRequests.set(0L);
numDeleteResponses.set(0L);
numDisconnects.set(0L);
numExtendedRequests.set(0L);
numExtendedResponses.set(0L);
numModifyRequests.set(0L);
numModifyResponses.set(0L);
numModifyDNRequests.set(0L);
numModifyDNResponses.set(0L);
numSearchRequests.set(0L);
numSearchEntryResponses.set(0L);
numSearchReferenceResponses.set(0L);
numSearchDoneResponses.set(0L);
numUnbindRequests.set(0L);
totalAddResponseTime.set(0L);
totalBindResponseTime.set(0L);
totalCompareResponseTime.set(0L);
totalDeleteResponseTime.set(0L);
totalExtendedResponseTime.set(0L);
totalModifyResponseTime.set(0L);
totalModifyDNResponseTime.set(0L);
totalSearchResponseTime.set(0L);
}
public long getNumConnects()
{
return numConnects.get();
}
void incrementNumConnects()
{
numConnects.incrementAndGet();
}
public long getNumDisconnects()
{
return numDisconnects.get();
}
void incrementNumDisconnects()
{
numDisconnects.incrementAndGet();
}
public long getNumAbandonRequests()
{
return numAbandonRequests.get();
}
void incrementNumAbandonRequests()
{
numAbandonRequests.incrementAndGet();
}
public long getNumAddRequests()
{
return numAddRequests.get();
}
void incrementNumAddRequests()
{
numAddRequests.incrementAndGet();
}
public long getNumAddResponses()
{
return numAddResponses.get();
}
void incrementNumAddResponses(final long responseTime)
{
numAddResponses.incrementAndGet();
if (responseTime > 0)
{
totalAddResponseTime.addAndGet(responseTime);
}
}
public long getTotalAddResponseTimeNanos()
{
return totalAddResponseTime.get();
}
public long getTotalAddResponseTimeMillis()
{
return Math.round(totalAddResponseTime.get() / 1000000.0d);
}
public double getAverageAddResponseTimeNanos()
{
final long totalTime = totalAddResponseTime.get();
final long totalCount = numAddResponses.get();
if (totalTime > 0)
{
return (1.0d * totalTime / totalCount);
}
else
{
return Double.NaN;
}
}
public double getAverageAddResponseTimeMillis()
{
final long totalTime = totalAddResponseTime.get();
final long totalCount = numAddResponses.get();
if (totalTime > 0)
{
return (totalTime / 1000000.0d / totalCount);
}
else
{
return Double.NaN;
}
}
public long getNumBindRequests()
{
return numBindRequests.get();
}
void incrementNumBindRequests()
{
numBindRequests.incrementAndGet();
}
public long getNumBindResponses()
{
return numBindResponses.get();
}
void incrementNumBindResponses(final long responseTime)
{
numBindResponses.incrementAndGet();
if (responseTime > 0)
{
totalBindResponseTime.addAndGet(responseTime);
}
}
public long getTotalBindResponseTimeNanos()
{
return totalBindResponseTime.get();
}
public long getTotalBindResponseTimeMillis()
{
return Math.round(totalBindResponseTime.get() / 1000000.0d);
}
public double getAverageBindResponseTimeNanos()
{
final long totalTime = totalBindResponseTime.get();
final long totalCount = numBindResponses.get();
if (totalTime > 0)
{
return (1.0d * totalTime / totalCount);
}
else
{
return Double.NaN;
}
}
public double getAverageBindResponseTimeMillis()
{
final long totalTime = totalBindResponseTime.get();
final long totalCount = numBindResponses.get();
if (totalTime > 0)
{
return (totalTime / 1000000.0d / totalCount);
}
else
{
return Double.NaN;
}
}
public long getNumCompareRequests()
{
return numCompareRequests.get();
}
void incrementNumCompareRequests()
{
numCompareRequests.incrementAndGet();
}
public long getNumCompareResponses()
{
return numCompareResponses.get();
}
void incrementNumCompareResponses(final long responseTime)
{
numCompareResponses.incrementAndGet();
if (responseTime > 0)
{
totalCompareResponseTime.addAndGet(responseTime);
}
}
public long getTotalCompareResponseTimeNanos()
{
return totalCompareResponseTime.get();
}
public long getTotalCompareResponseTimeMillis()
{
return Math.round(totalCompareResponseTime.get() / 1000000.0d);
}
public double getAverageCompareResponseTimeNanos()
{
final long totalTime = totalCompareResponseTime.get();
final long totalCount = numCompareResponses.get();
if (totalTime > 0)
{
return (1.0d * totalTime / totalCount);
}
else
{
return Double.NaN;
}
}
public double getAverageCompareResponseTimeMillis()
{
final long totalTime = totalCompareResponseTime.get();
final long totalCount = numCompareResponses.get();
if (totalTime > 0)
{
return (totalTime / 1000000.0d / totalCount);
}
else
{
return Double.NaN;
}
}
public long getNumDeleteRequests()
{
return numDeleteRequests.get();
}
void incrementNumDeleteRequests()
{
numDeleteRequests.incrementAndGet();
}
public long getNumDeleteResponses()
{
return numDeleteResponses.get();
}
void incrementNumDeleteResponses(final long responseTime)
{
numDeleteResponses.incrementAndGet();
if (responseTime > 0)
{
totalDeleteResponseTime.addAndGet(responseTime);
}
}
public long getTotalDeleteResponseTimeNanos()
{
return totalDeleteResponseTime.get();
}
public long getTotalDeleteResponseTimeMillis()
{
return Math.round(totalDeleteResponseTime.get() / 1000000.0d);
}
public double getAverageDeleteResponseTimeNanos()
{
final long totalTime = totalDeleteResponseTime.get();
final long totalCount = numDeleteResponses.get();
if (totalTime > 0)
{
return (1.0d * totalTime / totalCount);
}
else
{
return Double.NaN;
}
}
public double getAverageDeleteResponseTimeMillis()
{
final long totalTime = totalDeleteResponseTime.get();
final long totalCount = numDeleteResponses.get();
if (totalTime > 0)
{
return (totalTime / 1000000.0d / totalCount);
}
else
{
return Double.NaN;
}
}
public long getNumExtendedRequests()
{
return numExtendedRequests.get();
}
void incrementNumExtendedRequests()
{
numExtendedRequests.incrementAndGet();
}
public long getNumExtendedResponses()
{
return numExtendedResponses.get();
}
void incrementNumExtendedResponses(final long responseTime)
{
numExtendedResponses.incrementAndGet();
if (responseTime > 0)
{
totalExtendedResponseTime.addAndGet(responseTime);
}
}
public long getTotalExtendedResponseTimeNanos()
{
return totalExtendedResponseTime.get();
}
public long getTotalExtendedResponseTimeMillis()
{
return Math.round(totalExtendedResponseTime.get() / 1000000.0d);
}
public double getAverageExtendedResponseTimeNanos()
{
final long totalTime = totalExtendedResponseTime.get();
final long totalCount = numExtendedResponses.get();
if (totalTime > 0)
{
return (1.0d * totalTime / totalCount);
}
else
{
return Double.NaN;
}
}
public double getAverageExtendedResponseTimeMillis()
{
final long totalTime = totalExtendedResponseTime.get();
final long totalCount = numExtendedResponses.get();
if (totalTime > 0)
{
return (totalTime / 1000000.0d / totalCount);
}
else
{
return Double.NaN;
}
}
public long getNumModifyRequests()
{
return numModifyRequests.get();
}
void incrementNumModifyRequests()
{
numModifyRequests.incrementAndGet();
}
public long getNumModifyResponses()
{
return numModifyResponses.get();
}
void incrementNumModifyResponses(final long responseTime)
{
numModifyResponses.incrementAndGet();
if (responseTime > 0)
{
totalModifyResponseTime.addAndGet(responseTime);
}
}
public long getTotalModifyResponseTimeNanos()
{
return totalModifyResponseTime.get();
}
public long getTotalModifyResponseTimeMillis()
{
return Math.round(totalModifyResponseTime.get() / 1000000.0d);
}
public double getAverageModifyResponseTimeNanos()
{
final long totalTime = totalModifyResponseTime.get();
final long totalCount = numModifyResponses.get();
if (totalTime > 0)
{
return (1.0d * totalTime / totalCount);
}
else
{
return Double.NaN;
}
}
public double getAverageModifyResponseTimeMillis()
{
final long totalTime = totalModifyResponseTime.get();
final long totalCount = numModifyResponses.get();
if (totalTime > 0)
{
return (totalTime / 1000000.0d / totalCount);
}
else
{
return Double.NaN;
}
}
public long getNumModifyDNRequests()
{
return numModifyDNRequests.get();
}
void incrementNumModifyDNRequests()
{
numModifyDNRequests.incrementAndGet();
}
public long getNumModifyDNResponses()
{
return numModifyDNResponses.get();
}
void incrementNumModifyDNResponses(final long responseTime)
{
numModifyDNResponses.incrementAndGet();
if (responseTime > 0)
{
totalModifyDNResponseTime.addAndGet(responseTime);
}
}
public long getTotalModifyDNResponseTimeNanos()
{
return totalModifyDNResponseTime.get();
}
public long getTotalModifyDNResponseTimeMillis()
{
return Math.round(totalModifyDNResponseTime.get() / 1000000.0d);
}
public double getAverageModifyDNResponseTimeNanos()
{
final long totalTime = totalModifyDNResponseTime.get();
final long totalCount = numModifyDNResponses.get();
if (totalTime > 0)
{
return (1.0d * totalTime / totalCount);
}
else
{
return Double.NaN;
}
}
public double getAverageModifyDNResponseTimeMillis()
{
final long totalTime = totalModifyDNResponseTime.get();
final long totalCount = numModifyDNResponses.get();
if (totalTime > 0)
{
return (totalTime / 1000000.0d / totalCount);
}
else
{
return Double.NaN;
}
}
public long getNumSearchRequests()
{
return numSearchRequests.get();
}
void incrementNumSearchRequests()
{
numSearchRequests.incrementAndGet();
}
public long getNumSearchEntryResponses()
{
return numSearchEntryResponses.get();
}
public long getNumSearchReferenceResponses()
{
return numSearchReferenceResponses.get();
}
public long getNumSearchDoneResponses()
{
return numSearchDoneResponses.get();
}
void incrementNumSearchResponses(final int numEntries,
final int numReferences,
final long responseTime)
{
numSearchEntryResponses.addAndGet(numEntries);
numSearchReferenceResponses.addAndGet(numReferences);
numSearchDoneResponses.incrementAndGet();
if (responseTime > 0)
{
totalSearchResponseTime.addAndGet(responseTime);
}
}
public long getTotalSearchResponseTimeNanos()
{
return totalSearchResponseTime.get();
}
public long getTotalSearchResponseTimeMillis()
{
return Math.round(totalSearchResponseTime.get() / 1000000.0d);
}
public double getAverageSearchResponseTimeNanos()
{
final long totalTime = totalSearchResponseTime.get();
final long totalCount = numSearchDoneResponses.get();
if (totalTime > 0)
{
return (1.0d * totalTime / totalCount);
}
else
{
return Double.NaN;
}
}
public double getAverageSearchResponseTimeMillis()
{
final long totalTime = totalSearchResponseTime.get();
final long totalCount = numSearchDoneResponses.get();
if (totalTime > 0)
{
return (totalTime / 1000000.0d / totalCount);
}
else
{
return Double.NaN;
}
}
public long getNumUnbindRequests()
{
return numUnbindRequests.get();
}
void incrementNumUnbindRequests()
{
numUnbindRequests.incrementAndGet();
}
@Override()
public String toString()
{
final StringBuilder buffer = new StringBuilder();
toString(buffer);
return buffer.toString();
}
public void toString(final StringBuilder buffer)
{
final long connects = numConnects.get();
final long disconnects = numDisconnects.get();
final long abandonRequests = numAbandonRequests.get();
final long addRequests = numAddRequests.get();
final long addResponses = numAddResponses.get();
final long addTimes = totalAddResponseTime.get();
final long bindRequests = numBindRequests.get();
final long bindResponses = numBindResponses.get();
final long bindTimes = totalBindResponseTime.get();
final long compareRequests = numCompareRequests.get();
final long compareResponses = numCompareResponses.get();
final long compareTimes = totalCompareResponseTime.get();
final long deleteRequests = numDeleteRequests.get();
final long deleteResponses = numDeleteResponses.get();
final long deleteTimes = totalDeleteResponseTime.get();
final long extendedRequests = numExtendedRequests.get();
final long extendedResponses = numExtendedResponses.get();
final long extendedTimes = totalExtendedResponseTime.get();
final long modifyRequests = numModifyRequests.get();
final long modifyResponses = numModifyResponses.get();
final long modifyTimes = totalModifyResponseTime.get();
final long modifyDNRequests = numModifyDNRequests.get();
final long modifyDNResponses = numModifyDNResponses.get();
final long modifyDNTimes = totalModifyDNResponseTime.get();
final long searchRequests = numSearchRequests.get();
final long searchEntries = numSearchEntryResponses.get();
final long searchReferences = numSearchReferenceResponses.get();
final long searchDone = numSearchDoneResponses.get();
final long searchTimes = totalSearchResponseTime.get();
final long unbindRequests = numUnbindRequests.get();
final DecimalFormat f = new DecimalFormat("0.000");
buffer.append("LDAPConnectionStatistics(numConnects=");
buffer.append(connects);
buffer.append(", numDisconnects=");
buffer.append(disconnects);
buffer.append(", numAbandonRequests=");
buffer.append(abandonRequests);
buffer.append(", numAddRequests=");
buffer.append(addRequests);
buffer.append(", numAddResponses=");
buffer.append(addResponses);
buffer.append(", totalAddResponseTimeNanos=");
buffer.append(addTimes);
if (addTimes > 0L)
{
buffer.append(", averageAddResponseTimeNanos=");
buffer.append(f.format(1.0d * addResponses / addTimes));
}
buffer.append(", numBindRequests=");
buffer.append(bindRequests);
buffer.append(", numBindResponses=");
buffer.append(bindResponses);
buffer.append(", totalBindResponseTimeNanos=");
buffer.append(bindTimes);
if (bindTimes > 0L)
{
buffer.append(", averageBindResponseTimeNanos=");
buffer.append(f.format(1.0d * bindResponses / bindTimes));
}
buffer.append(", numCompareRequests=");
buffer.append(compareRequests);
buffer.append(", numCompareResponses=");
buffer.append(compareResponses);
buffer.append(", totalCompareResponseTimeNanos=");
buffer.append(compareTimes);
if (compareTimes > 0L)
{
buffer.append(", averageCompareResponseTimeNanos=");
buffer.append(f.format(1.0d * compareResponses / compareTimes));
}
buffer.append(", numDeleteRequests=");
buffer.append(deleteRequests);
buffer.append(", numDeleteResponses=");
buffer.append(deleteResponses);
buffer.append(", totalDeleteResponseTimeNanos=");
buffer.append(deleteTimes);
if (deleteTimes > 0L)
{
buffer.append(", averageDeleteResponseTimeNanos=");
buffer.append(f.format(1.0d * deleteResponses / deleteTimes));
}
buffer.append(", numExtendedRequests=");
buffer.append(extendedRequests);
buffer.append(", numExtendedResponses=");
buffer.append(extendedResponses);
buffer.append(", totalExtendedResponseTimeNanos=");
buffer.append(extendedTimes);
if (extendedTimes > 0L)
{
buffer.append(", averageExtendedResponseTimeNanos=");
buffer.append(f.format(1.0d * extendedResponses / extendedTimes));
}
buffer.append(", numModifyRequests=");
buffer.append(modifyRequests);
buffer.append(", numModifyResponses=");
buffer.append(modifyResponses);
buffer.append(", totalModifyResponseTimeNanos=");
buffer.append(modifyTimes);
if (modifyTimes > 0L)
{
buffer.append(", averageModifyResponseTimeNanos=");
buffer.append(f.format(1.0d * modifyResponses / modifyTimes));
}
buffer.append(", numModifyDNRequests=");
buffer.append(modifyDNRequests);
buffer.append(", numModifyDNResponses=");
buffer.append(modifyDNResponses);
buffer.append(", totalModifyDNResponseTimeNanos=");
buffer.append(modifyDNTimes);
if (modifyDNTimes > 0L)
{
buffer.append(", averageModifyDNResponseTimeNanos=");
buffer.append(f.format(1.0d * modifyDNResponses / modifyDNTimes));
}
buffer.append(", numSearchRequests=");
buffer.append(searchRequests);
buffer.append(", numSearchEntries=");
buffer.append(searchEntries);
buffer.append(", numSearchReferences=");
buffer.append(searchReferences);
buffer.append(", numSearchDone=");
buffer.append(searchDone);
buffer.append(", totalSearchResponseTimeNanos=");
buffer.append(searchTimes);
if (searchTimes > 0L)
{
buffer.append(", averageSearchResponseTimeNanos=");
buffer.append(f.format(1.0d * searchDone / searchTimes));
}
buffer.append(", numUnbindRequests=");
buffer.append(unbindRequests);
buffer.append(')');
}
}