/** * Copyright Plugtree LLC * * Licensed 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 com.plugtree.solrmeter.model.statistic; import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import com.google.inject.Inject; import com.plugtree.stressTestScope.StressTestScope; import com.plugtree.solrmeter.model.OptimizeStatistic; import com.plugtree.solrmeter.model.QueryStatistic; import com.plugtree.solrmeter.model.SolrMeterConfiguration; import com.plugtree.solrmeter.model.UpdateStatistic; import com.plugtree.solrmeter.model.exception.CommitException; import com.plugtree.solrmeter.model.exception.OperationException; import com.plugtree.solrmeter.model.exception.OptimizeException; import com.plugtree.solrmeter.model.exception.QueryException; import com.plugtree.solrmeter.model.exception.UpdateException; /** * Keeps statistics of the last ocurred errors and their timestamps * @author tflobbe * */ @StressTestScope public class ErrorLogStatistic implements QueryStatistic, UpdateStatistic, OptimizeStatistic { private static int maxStored; private LinkedList<QueryException> queryExceptions; private LinkedList<UpdateException> updateExceptions; private LinkedList<CommitException> commitExceptions; private LinkedList<OptimizeException> optimizeExceptions; @Inject public ErrorLogStatistic() { queryExceptions = new LinkedList<QueryException>(); updateExceptions = new LinkedList<UpdateException>(); commitExceptions = new LinkedList<CommitException>(); optimizeExceptions = new LinkedList<OptimizeException>(); maxStored = Integer.parseInt(SolrMeterConfiguration.getProperty("solr.errorLogStatistic.maxStored", "400")); } @Override public void onQueryError(QueryException exception) { addToList(queryExceptions, exception); } @Override public void onOptimizeError(OptimizeException exception) { addToList(optimizeExceptions, exception); } @Override public void onAddError(UpdateException exception) { addToList(updateExceptions, exception); } @Override public void onCommitError(CommitException exception) { addToList(commitExceptions, exception); } @Override public void onExecutedQuery(QueryResponse response, long clientTime) {} @Override public void onFinishedTest() {} @Override public void onAddedDocument(UpdateResponse response) {} @Override public void onCommit(UpdateResponse response) {} @Override public void onOptimizeFinished(long delay) {} @Override public void onOptimizeStared(long initTime) {} @SuppressWarnings({ "unchecked"}) private void addToList(LinkedList list, Object objectToAdd) { list.add(objectToAdd); if(list.size() > maxStored) { list.removeFirst(); } } public List<OperationException> getLastErrors(boolean includeCommit, boolean includeOptimize, boolean includeQuery, boolean includeUpdate) { List<OperationException> list = new LinkedList<OperationException>(); if(includeQuery) { list.addAll(queryExceptions); } if(includeUpdate) { list.addAll(updateExceptions); } if(includeCommit) { list.addAll(commitExceptions); } if(includeOptimize) { list.addAll(optimizeExceptions); } Collections.sort(list, new Comparator<OperationException>() { @Override public int compare(OperationException o1, OperationException o2) { return -1 * o1.getDate().compareTo(o2.getDate()); } }); return list; } }