package org.jactr.extensions.search.performance;
/*
* default logging
*/
import java.util.Comparator;
import java.util.SortedSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
import org.apache.commons.math.stat.descriptive.StatisticalSummary;
import org.apache.commons.math.stat.descriptive.SummaryStatistics;
import org.jactr.core.chunk.IChunk;
import org.jactr.core.module.declarative.search.filter.IChunkFilter;
import org.jactr.core.module.declarative.search.local.DefaultSearchSystem;
import org.jactr.core.module.declarative.search.local.ISearchDelegate;
import org.jactr.core.production.request.ChunkTypeRequest;
public class ProfiledSearchDelegate implements ISearchDelegate
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(ProfiledSearchDelegate.class);
private final ISearchDelegate _delegate;
private SummaryStatistics _summaryStatistcs = new SummaryStatistics();
private DescriptiveStatistics _descriptiveStatistics = new DescriptiveStatistics(
1000);
public ProfiledSearchDelegate(ISearchDelegate delegate)
{
_delegate = delegate;
}
@Override
public SortedSet<IChunk> find(ChunkTypeRequest pattern,
Comparator<IChunk> sortRule, IChunkFilter filter,
DefaultSearchSystem searchSystem)
{
long start = System.nanoTime();
SortedSet<IChunk> rtn = _delegate.find(pattern, sortRule, filter,
searchSystem);
long delta = System.nanoTime() - start;
double millis = delta / 1000000.0;
_summaryStatistcs.addValue(millis);
_descriptiveStatistics.addValue(millis);
return rtn;
}
public StatisticalSummary getSummary()
{
return _summaryStatistcs;
}
public StatisticalSummary getSlidingSummary()
{
return _descriptiveStatistics;
}
}