package com.bigdata.counters.httpd; import java.io.BufferedReader; import java.io.IOException; import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.UUID; import com.bigdata.counters.AbstractStatisticsCollector; import com.bigdata.service.Event; import com.bigdata.service.EventReceiver; import com.bigdata.service.IEventReportingService; import com.bigdata.service.IService; /** * A dummy implementation of the {@link IEventReportingService} interface, used * for testing the HTTP telemtry service. * * @author <a href="mailto:mrpersonick@users.sourceforge.net">Mike Personick</a> * @version $Id$ */ public class DummyEventReportingService extends EventReceiver implements IService { /** * Construct with an empty set of events */ public DummyEventReportingService() { super(Long.MAX_VALUE/* eventHistoryMillis */, EventBTree .createTransient()); } /** * Parse a CSV file into a LinkedHashMap of events. The CSV file is assumed * to be tab-delimited, have one event per row, and follow the schema * implied by {@link Event#getHeader()}. * * @param reader a reader for the CSV file */ public void readCSV(final BufferedReader reader) throws IOException { String header = reader.readLine(); if (header == null) { // no data return; } // System.err.println(header); // System.err.println(Event.getHeader()); // if (!(header+"\n").equals(Event.getHeader())) { if (!header.startsWith(Event.getHeader())) { throw new IOException("Invalid schema"); } // create a temporary list in case the CSV rows are not ordered // correctly final List<Event> events = new LinkedList<Event>(); String row; int lineno = 0; while ((row = reader.readLine()) != null) { lineno++; try { Event e = Event.fromString(row); // System.err.println(e.toString()); events.add(e); } catch (Exception ex) { ex.printStackTrace(); System.err.println("skipping bad row: " + row); throw new IOException("bad row("+lineno+") : " + row); } } // sort into time order Collections.sort(events, new Comparator<Event>() { public int compare(Event e1, Event e2) { if (e1.getStartTime() < e2.getStartTime()) { return -1; } if (e1.getStartTime() > e2.getStartTime()) { return 1; } return 0; } }); for (Event e : events) { notifyEvent(e); } } public String getHostname() throws IOException { return AbstractStatisticsCollector.fullyQualifiedHostName; } public Class getServiceIface() throws IOException { return getClass(); } public String getServiceName() throws IOException { return getClass().getName()+"#"+hashCode(); } public UUID getServiceUUID() throws IOException { return serviceUUID; } final UUID serviceUUID = UUID.randomUUID(); public void destroy() { // NOP (eventBTree is transient for this mock object). } }