package won.matcher.solr.actor;
import com.github.jsonldjava.core.JsonLdError;
import org.apache.jena.query.Dataset;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.params.SolrParams;
import org.javasimon.SimonManager;
import org.javasimon.Split;
import org.javasimon.Stopwatch;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import won.matcher.service.common.event.BulkHintEvent;
import won.matcher.service.common.event.NeedEvent;
import won.matcher.solr.query.SolrMatcherQueryExecutor;
import won.protocol.util.NeedModelWrapper;
import java.io.IOException;
/**
* Created by hfriedrich on 23.10.2015.
*
* Extends SirenMatcherActor to provide a monitored version of it
*/
@Component
@Scope("prototype")
public class SolrMonitoringMatcherActor extends AbstractSolrMatcherActor
{
@Override
protected void processNeedEvent(NeedEvent needEvent)
throws IOException, SolrServerException, JsonLdError {
Stopwatch stopwatch = SimonManager.getStopwatch("processNeedEvent");
Split split = stopwatch.start();
super.processNeedEvent(needEvent);
split.stop();
}
@Override
protected Dataset deserializeNeed(NeedEvent needEvent) throws IOException {
Stopwatch stopwatch = SimonManager.getStopwatch("deserializeNeed");
Split split = stopwatch.start();
Dataset dataset = super.deserializeNeed(needEvent);
split.stop();
return dataset;
}
@Override
protected SolrDocumentList executeQuery(SolrMatcherQueryExecutor queryExecutor, String queryString, SolrParams params,
String... filterQueries) throws IOException, SolrServerException {
Stopwatch stopwatch = SimonManager.getStopwatch("executeQuery");
Split split = stopwatch.start();
SolrDocumentList docs = super.executeQuery(queryExecutor, queryString, params, filterQueries);
split.stop();
return docs;
}
@Override
protected BulkHintEvent produceHints(SolrDocumentList docs, NeedEvent needEvent, NeedModelWrapper needModelWrapper) {
Stopwatch stopwatch = SimonManager.getStopwatch("produceHints");
Split split = stopwatch.start();
BulkHintEvent hints = super.produceHints(docs, needEvent, needModelWrapper);
split.stop();
return hints;
}
@Override
protected void publishHints(BulkHintEvent bulkHintEvent, NeedEvent needEvent) {
Stopwatch stopwatch = SimonManager.getStopwatch("publishHints");
Split split = stopwatch.start();
super.publishHints(bulkHintEvent, needEvent);
split.stop();
}
@Override
protected void indexNeedEvent(NeedEvent needEvent, Dataset dataset) throws IOException, JsonLdError {
Stopwatch stopwatch = SimonManager.getStopwatch("indexNeedEvent");
Split split = stopwatch.start();
super.indexNeedEvent(needEvent, dataset);
split.stop();
}
}