http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/Log4JSource.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/Log4JSource.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/Log4JSource.java
deleted file mode 100644
index 84a9d98..0000000
--- a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/Log4JSource.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-import java.io.File;
-import java.io.InputStreamReader;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.util.ArrayList;
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.text.ParseException;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-
-import java.io.EOFException;
-import java.io.Closeable;
-import java.io.FileNotFoundException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class Log4JSource implements LogSource {
-    private static final Logger LOG = 
LoggerFactory.getLogger(Log4JSource.class);
-    
-    private static final int skipN = 10000;
-    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss,SSS";
-
-    private LogSkipList skiplist = null;
-
-    private String file = null;
-    private long starttime = 0;
-    private long endtime = 0;
-    private int serverid = 0;
-    private long size = 0;
-
-    private Pattern timep;
-
-    public boolean overlapsRange(long starttime, long endtime) {
-       return (starttime <= this.endtime && endtime >= this.starttime);
-    }
-    
-    public long size() { return size; }
-    public long getStartTime() { return starttime; }
-    public long getEndTime() { return endtime; }
-    public LogSkipList getSkipList() { return skiplist; }
-    
-    private class Log4JSourceIterator implements LogIterator {
-       private RandomAccessFileReader in;
-       private LogEntry next = null;
-       private long starttime = 0;
-       private long endtime = 0;
-       private String buf = "";        
-       private Log4JSource src = null;
-       private long skippedAtStart = 0;
-       private SimpleDateFormat dateformat = null;
-       private FilterOp filter = null;
-
-       public Log4JSourceIterator(Log4JSource src, long starttime, long 
endtime) throws IllegalArgumentException, FilterException {
-           this(src, starttime, endtime, null);
-       }
-
-       public Log4JSourceIterator(Log4JSource src, long starttime, long 
endtime, FilterOp filter) throws IllegalArgumentException, FilterException {
-
-           this.dateformat = new SimpleDateFormat(DATE_FORMAT);
-           this.src = src;
-           this.starttime = starttime;
-           this.endtime = endtime;
-
-           File f = new File(src.file);
-           try {
-               in = new RandomAccessFileReader(f);
-           } catch (FileNotFoundException e) {
-               throw new IllegalArgumentException("Bad file passed in (" + 
src.file +") cannot open:" + e);
-           }
-
-           // skip to the offset of latest skip point before starttime
-           LogSkipList.Mark start = 
src.getSkipList().findMarkBefore(starttime);
-           try {
-               in.seek(start.getBytes());
-               skippedAtStart = start.getEntriesSkipped();
-           } catch (IOException ioe) {
-               // if we can't skip, we should just read from the start
-           }
-
-           LogEntry e;
-           while ((e = readNextEntry()) != null && e.getTimestamp() < endtime) 
{
-               if (e.getTimestamp() >= starttime && (filter == null || 
filter.matches(e))) {
-                   next = e;
-                   return;
-               }
-               skippedAtStart++;
-           }
-           this.filter = filter;
-       }
-       
-       synchronized public long size() throws IOException {
-           if (LOG.isTraceEnabled()) {
-               LOG.trace("size() called");
-           }
-
-           if (this.endtime >= src.getEndTime()) {
-               return src.size() - skippedAtStart;
-           }
-           
-           long pos = in.getPosition();
-           
-           if (LOG.isTraceEnabled()) {
-               LOG.trace("saved pos () = " + pos);
-           }
-           
-           LogEntry e;
-         
-           LogSkipList.Mark lastseg = 
src.getSkipList().findMarkBefore(this.endtime);
-           in.seek(lastseg.getBytes());
-           buf = "";  // clear the buf so we don't get something we read 
before we sought
-           // number of entries skipped to get to the end of the iterator, 
less the number skipped to get to the start
-           long count = lastseg.getEntriesSkipped() - skippedAtStart; 
-
-           while ((e = readNextEntry()) != null) {
-               if (LOG.isTraceEnabled()) {
-                   //LOG.trace(e);
-               }
-               if (e.getTimestamp() > this.endtime) {
-                   break;
-               }
-               count++;
-           }
-           in.seek(pos);
-           buf = "";
-
-           if (LOG.isTraceEnabled()) {
-               LOG.trace("size() = " + count);
-           }
-           
-           return count;
-       }
-
-       synchronized private LogEntry readNextEntry() {
-           try {
-               try {
-                   while (true) {
-                       String line = in.readLine();
-                       if (line == null) {
-                           break;
-                       }
-
-                       Matcher m = src.timep.matcher(line);
-                       if (m.lookingAt()) {
-                           if (buf.length() > 0) {
-                               LogEntry e = new 
Log4JEntry(src.timestampFromText(dateformat, buf), src.getServerId(), buf);
-                               buf = line;
-                               return e;
-                           }
-                           buf = line;
-                       } else if (buf.length() > 0) {
-                           buf += line + "\n";
-                       }
-                   }
-               } catch (EOFException eof) {
-                   // ignore, we've simply come to the end of the file
-               }
-               if (buf.length() > 0) {
-                   LogEntry e = new 
Log4JEntry(src.timestampFromText(dateformat, buf), src.getServerId(), buf);
-                   buf = "";
-                   return e;
-               }
-           } catch (Exception e) {
-               LOG.error("Error reading next entry in file (" + src.file + "): 
" + e);
-               return null;
-           }
-           return null;
-       }
-
-       public boolean hasNext() {
-           return next != null;
-       }
-       
-       public LogEntry next() throws NoSuchElementException {
-           LogEntry ret = next;
-           LogEntry e = readNextEntry();
-
-           if (filter != null) {
-               try {
-                   while (e != null && !filter.matches(e)) {
-                       e = readNextEntry();
-                   }
-               } catch (FilterException fe) {
-                   throw new NoSuchElementException(e.toString());
-               }
-           }
-
-           if (e != null && e.getTimestamp() < endtime) {
-               next = e;
-           } else {
-               next = null;
-           }
-           return ret;
-       }
-
-       public void remove() throws UnsupportedOperationException {
-           throw new UnsupportedOperationException("remove not supported for 
L4J logs");
-       }
-       
-       public void close() throws IOException {
-           in.close();
-       }
-       
-       public String toString() {
-           String size;
-           try {
-               size = new Long(size()).toString();
-           } catch (IOException ioe) {
-               size = "Unable to read";
-           }
-           return "Log4JSourceIterator(start=" + starttime + ", end=" + 
endtime + ", size=" + size + ")";
-       }
-    }
-
-    public LogIterator iterator(long starttime, long endtime) throws 
IllegalArgumentException {
-       try {
-           return iterator(starttime, endtime, null);
-       } catch (FilterException fe) {
-           assert(false); //"This should never happen, you can't have a filter 
exception without a filter");
-           return null;
-       }
-    }
-
-    public LogIterator iterator(long starttime, long endtime, FilterOp filter) 
throws IllegalArgumentException, FilterException{
-       // sanitise start and end times
-       if (endtime < starttime) {
-           throw new IllegalArgumentException("End time (" +  endtime + ") 
must be greater or equal to starttime (" + starttime + ")");
-       }
-
-       return new Log4JSourceIterator(this, starttime, endtime, filter);
-    }
-
-    public LogIterator iterator() throws IllegalArgumentException {
-       return iterator(starttime, endtime+1);
-    }
-    
-    public Log4JSource(String file) throws IOException {
-       this.file=file;
-       
-       timep = Pattern.compile("^(\\d{4}-\\d{2}-\\d{2} 
\\d{2}:\\d{2}:\\d{2},\\d{3})");
-       skiplist = new LogSkipList();
-       init();
-    }
-    
-    private static long timestampFromText(SimpleDateFormat format, String s) {
-       Date d = null;
-       try {
-           d = format.parse(s);
-       } catch (ParseException e) {
-           return 0;
-       }
-       Calendar c = new GregorianCalendar();
-       c.setTime(d);
-       return c.getTimeInMillis();
-    }
-
-    private void init() throws IOException {
-       File f = new File(file);
-       RandomAccessFileReader in = new RandomAccessFileReader(f);
-       SimpleDateFormat dateformat = new SimpleDateFormat(DATE_FORMAT);
-       Pattern idp = Pattern.compile("\\[myid:(\\d+)\\]");
-
-       long lastFp = in.getPosition();
-       String line = in.readLine();
-       Matcher m = null;
-
-       // if we have read data from the file, and it matchs the timep pattern
-       if ((line != null) && (m = timep.matcher(line)).lookingAt()) {
-           starttime = timestampFromText(dateformat, m.group(1));
-       } else {
-           throw new IOException("Invalid log4j format. First line doesn't 
start with time");
-       }
-
-       /*
-         Count number of log entries. Any line starting with a timestamp 
counts as an entry
-       */
-       String lastentry = line;
-       try {
-           while (line != null) {
-               m = timep.matcher(line);
-               if (m.lookingAt()) {
-                   if (size % skipN == 0) {
-                       long time = timestampFromText(dateformat, m.group(1));
-                       skiplist.addMark(time, lastFp, size);
-                   }
-                   size++;
-                   lastentry = line;
-               } 
-               if (serverid == 0 && (m = idp.matcher(line)).find()) {
-                   serverid = Integer.valueOf(m.group(1));
-               }
-
-               lastFp = in.getPosition();
-               line = in.readLine();
-           }
-       } catch (EOFException eof) {
-           // ignore, simply end of file, though really (line!=null) should 
have caught this
-       } finally {
-           in.close();
-       }
-
-       m = timep.matcher(lastentry);
-       if (m.lookingAt()) {
-           endtime = timestampFromText(dateformat, m.group(1));
-       } else {
-           throw new IOException("Invalid log4j format. Last line doesn't 
start with time");
-       }
-    }
-    
-    public String toString() {
-       return "Log4JSource(file=" + file + ", size=" + size + ", start=" + 
starttime + ", end=" + endtime +", id=" + serverid +")";
-    }
-
-    public static void main(String[] args) throws IOException {
-       final Log4JSource s = new Log4JSource(args[0]);
-       System.out.println(s);
-
-       LogIterator iter;
-
-       if (args.length == 3) {
-           final long starttime = Long.valueOf(args[1]);
-           final long endtime = Long.valueOf(args[2]);
-           iter = s.iterator(starttime, endtime);
-           
-           Thread t1 = new Thread() { public void run () { 
-               
-               LogIterator iter = s.iterator(starttime, endtime);
-               System.out.println(iter);
-               try {
-                 iter.close();
-               } catch (IOException ioe) {
-                 System.out.println(ioe.getMessage());
-               }
-           }; };
-           Thread t2 = new Thread() { public void run () { 
-               
-               LogIterator iter = s.iterator(starttime, endtime);
-               System.out.println(iter);
-               try {
-                 iter.close();
-               } catch (IOException ioe) {
-                 System.out.println(ioe.getMessage());
-               }
-           }; };
-           Thread t3 = new Thread() { public void run () { 
-               
-               LogIterator iter = s.iterator(starttime, endtime);
-               System.out.println(iter);
-           }; };
-           t1.start();
-           t2.start();
-           //      t3.start();
-       } else {
-           iter = s.iterator();
-       }
-
-       /*while (iter.hasNext()) {
-           System.out.println(iter.next());
-           }*/
-       iter.close();
-    }
-
-    public int getServerId() {
-       return serverid;
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogEntry.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogEntry.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogEntry.java
deleted file mode 100644
index a8252eb..0000000
--- a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogEntry.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-import java.io.Serializable;
-import java.util.HashMap;
-
-public abstract class LogEntry implements Serializable {
-    private HashMap attributes;
-
-    public enum Type { UNKNOWN, LOG4J, TXN };
-        
-    public LogEntry(long timestamp) {
-       attributes = new HashMap();
-       setAttribute("timestamp", new Long(timestamp));
-    }
-    
-    public long getTimestamp() {
-       return (Long)getAttribute("timestamp");
-    }    
-    
-    public abstract Type getType();
-    
-    public void setAttribute(String key, Object v) {
-       attributes.put(key, v);
-    }
-
-    public Object getAttribute(String key) {
-       return attributes.get(key);
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogIterator.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogIterator.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogIterator.java
deleted file mode 100644
index 9af440b..0000000
--- a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogIterator.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-import java.io.Closeable;
-import java.util.Iterator;
-import java.io.IOException;
-
-public interface LogIterator extends Iterator<LogEntry>, Closeable {
-    long size() throws IOException;;
-};

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogServer.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogServer.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogServer.java
deleted file mode 100644
index 5cffcdd..0000000
--- a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogServer.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.ServletException;
- 
-import java.io.IOException;
- 
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.AbstractHandler;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-
-import org.apache.zookeeper.graph.servlets.*;
-
-public class LogServer extends ServletContextHandler {    
-    public LogServer(MergedLogSource src) throws Exception {
-       super(ServletContextHandler.SESSIONS);
-       setContextPath("/");
-
-       addServlet(new ServletHolder(new StaticContent()),"/graph/*");
-
-       addServlet(new ServletHolder(new Fs()),"/fs");
-       addServlet(new ServletHolder(new GraphData(src)), "/data");
-       addServlet(new ServletHolder(new FileLoader(src)), "/loadfile");
-       addServlet(new ServletHolder(new NumEvents(src)), "/info");
-       addServlet(new ServletHolder(new Throughput(src)), "/throughput");
-    }
-
-    public static void main(String[] args) {  
-       try {  
-           MergedLogSource src = new MergedLogSource(args);
-           System.out.println(src);
-
-           Server server = new Server(8182);
-           server.setHandler(new LogServer(src));
-           
-           server.start();
-           server.join();
-
-       } catch (Exception e) {  
-           // Something is wrong.  
-           e.printStackTrace();  
-       }  
-    } 
-} 

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSkipList.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSkipList.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSkipList.java
deleted file mode 100644
index e744442..0000000
--- a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSkipList.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-import java.util.List;
-import java.util.LinkedList;
-import java.util.NoSuchElementException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
-Generic skip list for holding a rough index of a log file. When the log file 
is loaded, this 
-index is built by adding a mark every n entries. Then when a specific time 
position is requested
-from the file, a point at most n-1 entries before the time position can be 
jumped to.
-
-*/
-public class LogSkipList {
-    private static final Logger LOG = 
LoggerFactory.getLogger(LogSkipList.class);
-    
-    private LinkedList<Mark> marks;
-
-    public class Mark {
-       private long time;
-       private long bytes;
-       private long skipped;
-
-       public Mark(long time, long bytes, long skipped) {
-           this.time = time;
-           this.bytes = bytes;
-           this.skipped = skipped;
-       }
-
-       public long getTime() { return this.time; }
-       public long getBytes() { return this.bytes; }
-       public long getEntriesSkipped() { return this.skipped; }
-
-       public String toString() {
-           return "Mark(time=" + time + ", bytes=" + bytes + ", skipped=" + 
skipped + ")";
-       }
-    };
-
-    public LogSkipList() {
-       if (LOG.isTraceEnabled()) {
-           LOG.trace("New skip list");
-       }
-       marks = new LinkedList<Mark>();
-    }
-
-    public void addMark(long time, long bytes, long skipped) {
-       if (LOG.isTraceEnabled()) {
-           LOG.trace("addMark (time:" + time + ", bytes: " + bytes + ", 
skipped: " + skipped + ")");
-       }
-       marks.add(new Mark(time, bytes, skipped));
-    }
-
-    /** 
-       Find the last mark in the skip list before time.
-     */
-    public Mark findMarkBefore(long time) throws NoSuchElementException {
-       if (LOG.isTraceEnabled()) {
-           LOG.trace("findMarkBefore(" + time + ")");
-       }
-                   
-       Mark last = marks.getFirst();
-       for (Mark m: marks) {
-           if (m.getTime() > time) {
-               break;
-           } 
-           last = m;
-       }
-       
-       if (LOG.isTraceEnabled()) {
-           LOG.trace("return " + last );
-       }
-       
-       return last;
-    }
-
-};

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSource.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSource.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSource.java
deleted file mode 100644
index 9845c7f..0000000
--- a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSource.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-import java.util.Iterator;
-
-public interface LogSource extends Iterable<LogEntry> {
-    public LogIterator iterator(long starttime, long endtime, FilterOp filter) 
throws IllegalArgumentException, FilterException;
-
-    public LogIterator iterator(long starttime, long endtime) throws 
IllegalArgumentException;
-
-    public LogIterator iterator() throws IllegalArgumentException;
-
-    public boolean overlapsRange(long starttime, long endtime);
-
-    public long size();
-    public long getStartTime();
-    public long getEndTime();
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MeasureThroughput.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MeasureThroughput.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MeasureThroughput.java
deleted file mode 100644
index 1c83da7..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MeasureThroughput.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-import java.io.IOException;
-import java.io.BufferedOutputStream;
-import java.io.FileOutputStream;
-import java.io.DataOutputStream;
-import java.io.PrintStream;
-
-import java.util.HashSet;
-
-public class MeasureThroughput {
-    private static final int MS_PER_SEC = 1000;
-    private static final int MS_PER_MIN = MS_PER_SEC*60;
-    private static final int MS_PER_HOUR = MS_PER_MIN*60;
-    
-    public static void main(String[] args) throws IOException {        
-       MergedLogSource source = new MergedLogSource(args);
-
-       PrintStream ps_ms = new PrintStream(new BufferedOutputStream(new 
FileOutputStream("throughput-ms.out")));
-       PrintStream ps_sec = new PrintStream(new BufferedOutputStream(new 
FileOutputStream("throughput-sec.out")));
-       PrintStream ps_min = new PrintStream(new BufferedOutputStream(new 
FileOutputStream("throughput-min.out")));
-       PrintStream ps_hour = new PrintStream(new BufferedOutputStream(new 
FileOutputStream("throughput-hour.out")));
-       LogIterator iter;
-       
-       System.out.println(source);
-       iter = source.iterator();
-       long currentms = 0;
-       long currentsec = 0;
-       long currentmin = 0;
-       long currenthour = 0;
-       HashSet<Long> zxids_ms = new HashSet<Long>();
-       long zxid_sec = 0;
-       long zxid_min = 0;
-       long zxid_hour = 0;
-
-       while (iter.hasNext()) {
-           LogEntry e = iter.next();
-           TransactionEntry cxn = (TransactionEntry)e;
-           
-           long ms = cxn.getTimestamp();
-           long sec = ms/MS_PER_SEC;
-           long min = ms/MS_PER_MIN;
-           long hour = ms/MS_PER_HOUR;
-
-           if (currentms != ms && currentms != 0) {
-               ps_ms.println("" + currentms + " " + zxids_ms.size());
-
-               zxid_sec += zxids_ms.size();
-               zxid_min += zxids_ms.size();
-               zxid_hour += zxids_ms.size();
-               zxids_ms.clear();
-           }
-
-           if (currentsec != sec && currentsec != 0) {
-               ps_sec.println("" + currentsec*MS_PER_SEC + " " + zxid_sec);
-
-               zxid_sec = 0;
-           }
-
-           if (currentmin != min && currentmin != 0) {
-               ps_min.println("" + currentmin*MS_PER_MIN + " " + zxid_min);
-               
-               zxid_min = 0;
-           }
-
-           if (currenthour != hour && currenthour != 0) {
-               ps_hour.println("" + currenthour*MS_PER_HOUR + " " + zxid_hour);
-               
-               zxid_hour = 0;
-           }
-
-           currentms = ms;
-           currentsec = sec;
-           currentmin = min;
-           currenthour = hour;
-
-           zxids_ms.add(cxn.getZxid());
-       }
-
-       iter.close();
-       ps_ms.close();
-       ps_sec.close();
-       ps_min.close();
-       ps_hour.close();
-    }
-};

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MergedLogSource.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MergedLogSource.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MergedLogSource.java
deleted file mode 100644
index bb789d3..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MergedLogSource.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-import java.io.ByteArrayInputStream;
-import java.io.EOFException;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.zip.Adler32;
-import java.util.zip.Checksum;
-import java.util.HashMap;
-
-import org.apache.jute.BinaryInputArchive;
-import org.apache.jute.InputArchive;
-import org.apache.jute.Record;
-import org.apache.zookeeper.server.TraceFormatter;
-import org.apache.zookeeper.server.persistence.FileHeader;
-import org.apache.zookeeper.server.persistence.FileTxnLog;
-import org.apache.zookeeper.server.util.SerializeUtils;
-import org.apache.zookeeper.txn.TxnHeader;
-
-import org.apache.zookeeper.ZooDefs.OpCode;
-
-import org.apache.zookeeper.txn.CreateSessionTxn;
-import org.apache.zookeeper.txn.CreateTxn;
-import org.apache.zookeeper.txn.DeleteTxn;
-import org.apache.zookeeper.txn.ErrorTxn;
-import org.apache.zookeeper.txn.SetACLTxn;
-import org.apache.zookeeper.txn.SetDataTxn;
-import org.apache.zookeeper.txn.TxnHeader;
-
-import java.io.Closeable;
-import java.io.FileNotFoundException;
-import java.util.Vector;
-import java.util.Iterator;
-import java.util.Collections;
-import java.util.NoSuchElementException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class MergedLogSource implements LogSource {
-    private static final Logger LOG = 
LoggerFactory.getLogger(MergedLogSource.class);
-    private Vector<LogSource> sources = null;
-    private long starttime = 0;
-    private long endtime = 0;
-    private long size = 0;
-
-    public boolean overlapsRange(long starttime, long endtime) {
-       return (starttime <= this.endtime && endtime >= this.starttime);
-    }
-    
-    public long size() { return size; }
-    public long getStartTime() { return starttime; }
-    public long getEndTime() { return endtime; }
-
-    private class MergedLogSourceIterator implements LogIterator {
-       private LogEntry next = null;
-       private long start = 0;
-       private long end = 0;
-       private MergedLogSource src = null;
-       private LogIterator[] sources = null;
-       private LogEntry[] nexts = null;
-       private FilterOp filter = null;
-       
-       public MergedLogSourceIterator(MergedLogSource src, long starttime, 
long endtime, FilterOp filter) throws IllegalArgumentException, FilterException 
{
-           Vector<LogIterator> iters = new Vector<LogIterator>();
-           for (LogSource s : src.sources) {
-               if (s.overlapsRange(starttime, endtime)) {
-                   iters.add(s.iterator(starttime, endtime, filter));
-               }
-           }
-           
-           sources = new LogIterator[iters.size()];
-           sources = iters.toArray(sources);
-           nexts = new LogEntry[iters.size()];
-           for (int i = 0; i < sources.length; i++) {
-               if (sources[i].hasNext()) 
-                   nexts[i] = sources[i].next();
-           }
-           this.filter = filter;
-       }
-                   
-       public MergedLogSourceIterator(MergedLogSource src, long starttime, 
long endtime) throws IllegalArgumentException, FilterException {
-           this(src, starttime, endtime, null);
-       }
-       
-       public long size() throws IOException {
-           long size = 0;
-           for (LogIterator i : sources) {
-               size += i.size();
-           }
-           return size;
-       }
-
-       public boolean hasNext() {
-           for (LogEntry n : nexts) {
-               if (n != null) return true;
-           }
-           return false;
-       }
-       
-       public LogEntry next() {
-           int min = -1;
-           for (int i = 0; i < nexts.length; i++) {
-               if (nexts[i] != null) {
-                   if (min == -1) {
-                       min = i;
-                   } else if (nexts[i].getTimestamp() < 
nexts[min].getTimestamp()) {
-                       min = i;
-                   }
-               }
-           }
-           if (min == -1) {
-               return null;
-           } else {
-               LogEntry e =  nexts[min];
-               nexts[min] = sources[min].next();
-               return e;
-           }
-       }
-
-       public void remove() throws UnsupportedOperationException {
-           throw new UnsupportedOperationException("remove not supported for 
Merged logs");
-       }
-       
-       public void close() throws IOException {
-           for (LogIterator i : sources) {
-               i.close();
-           }
-       }
-    }
-
-    public LogIterator iterator(long starttime, long endtime) throws 
IllegalArgumentException {
-       try {
-           return iterator(starttime, endtime, null);
-       } catch (FilterException fe) {
-           assert(false); // shouldn't happen without filter
-           return null;
-       }
-    }
-
-    public LogIterator iterator(long starttime, long endtime, FilterOp filter) 
throws IllegalArgumentException, FilterException {
-       // sanitise start and end times
-       if (endtime < starttime) {
-           throw new IllegalArgumentException("End time (" +  endtime + ") 
must be greater or equal to starttime (" + starttime + ")");
-       }
-
-       return new MergedLogSourceIterator(this, starttime, endtime, filter);
-    }
-
-    public LogIterator iterator() throws IllegalArgumentException {
-       return iterator(starttime, endtime+1);
-    }
-    
-    public MergedLogSource(String[] files) throws IOException {
-       sources = new Vector<LogSource>();
-       for (String f : files) {
-           addSource(f);
-       }
-    }
-    
-    public void addSource(String f) throws IOException {
-       LogSource s = null;
-       if (TxnLogSource.isTransactionFile(f)) {
-           s = new TxnLogSource(f);
-       } else {
-           s = new Log4JSource(f);
-       }
-
-       size += s.size();
-       endtime = s.getEndTime() > endtime ? s.getEndTime() : endtime;
-       starttime = s.getStartTime() < starttime || starttime == 0 ? 
s.getStartTime() : starttime;
-       sources.add(s);
-    }
-
-    public String toString() {
-       String s = "MergedLogSource(size=" + size + ", start=" + starttime + ", 
end=" + endtime +")";
-       for (LogSource src : sources) {
-           s += "\n\t- " +src;
-       }
-       return s;
-    }
-
-    public static void main(String[] args) throws IOException {
-       System.out.println("Time: " + System.currentTimeMillis());
-       MergedLogSource s = new MergedLogSource(args);
-       System.out.println(s);
-
-       LogIterator iter;
-
-       iter = s.iterator();
-       System.out.println("Time: " + System.currentTimeMillis());
-       System.out.println("Iterator Size: " + iter.size());
-       System.out.println("Time: " + System.currentTimeMillis());
-       /*      while (iter.hasNext()) {
-           System.out.println(iter.next());
-           }*/
-       iter.close();
-       System.out.println("Time: " + System.currentTimeMillis());
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/RandomAccessFileReader.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/RandomAccessFileReader.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/RandomAccessFileReader.java
deleted file mode 100644
index 13a41a5..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/RandomAccessFileReader.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-import java.io.File;
-import java.io.Reader;
-import java.io.IOException;
-import java.io.EOFException;
-import java.io.RandomAccessFile;
-import java.io.FileNotFoundException;
-
-import java.io.DataInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.DataInput;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RandomAccessFileReader extends Reader implements DataInput {
-    private static final Logger LOG = 
LoggerFactory.getLogger(RandomAccessFileReader.class);
-    private RandomAccessFile file;
-    private byte[] buffer;
-    private int buffersize;
-    private int bufferoffset;
-    private long fileoffset;
-    private long fp;
-
-    private static final int DEFAULT_BUFFER_SIZE = 512*1024; // 512k
-    private int point = 0;
-
-    public RandomAccessFileReader(File f) throws FileNotFoundException {
-       file = new RandomAccessFile(f, "r");
-       if (LOG.isDebugEnabled()) {
-           try {
-               LOG.debug("Opened file(" + f + ") with FD (" + file.getFD() + 
")");
-           } catch (IOException ioe) { 
-               LOG.debug("Opened file(" + f + ") coulds get FD");
-           }
-       }
-
-       buffer = new byte[DEFAULT_BUFFER_SIZE];
-       buffersize = 0;
-       bufferoffset = 0;
-       fileoffset = 0;
-       fp = 0;
-    }
-
-    /**
-       fill the buffer from the file.
-       fp keeps track of the file pointer.
-       fileoffset is the offset into the file to where the buffer came from.
-    */
-    private int fill() throws IOException {
-       fileoffset = fp;
-       int read = file.read(buffer, 0, buffer.length);
-
-       if (LOG.isDebugEnabled()) {
-           String buf = new String(buffer, 0, 40, "UTF-8");
-           LOG.debug("fill(buffer=" + buf + ")");
-       }
-
-       if (read == -1) { // eof reached
-           buffersize = 0;
-       } else {
-           buffersize = read;
-       }
-       fp += buffersize;
-       bufferoffset = 0;
-
-       return buffersize;
-    }
-
-    /**
-     * Reader interface 
-     */
-    public boolean markSupported() { return false; }
-
-    /**
-       copy what we can from buffer. if it's not enough, fill buffer again and 
copy again
-    */
-    synchronized public int read(char[] cbuf, int off, int len) throws 
IOException {
-       // This could be faster, but probably wont be used
-       byte[] b = new byte[2];
-       int bytesread = 0;
-       while (len > 0) {
-           int read = read(b, 0, 2);
-           bytesread += read;
-           if (read < 2) {
-               return bytesread;
-           }
-           cbuf[off] = (char)((b[0] << 8) | (b[1] & 0xff));
-           off += read;
-           len -= read;
-       }
-
-       return bytesread;
-    }
-
-    synchronized public int read(byte[] buf, int off, int len) throws 
IOException {
-       if (LOG.isTraceEnabled()) {
-           LOG.trace("read(buf, off=" + off + ", len=" + len);
-       }
-
-       int read = 0;
-       while (len > 0) {
-           if (buffersize == 0) {
-               fill();
-               if (buffersize == 0) {
-                   break;
-               }
-           }
-
-           int tocopy = Math.min(len, buffersize);
-           if (LOG.isTraceEnabled()) {
-               LOG.trace("tocopy=" + tocopy);
-           }
-
-           System.arraycopy(buffer, bufferoffset, buf, off, tocopy);
-           buffersize -= tocopy;
-           bufferoffset += tocopy;
-
-           len -= tocopy;
-           read += tocopy;
-           off += tocopy;
-       }
-       if (LOG.isTraceEnabled()) {
-           LOG.trace("read=" + read);
-       }
-
-       return read;
-    }
-
-    public void close() throws IOException {
-       file.close();
-    }
-
-    /**
-     * Seek interface 
-     */
-    public long getPosition() {
-       return bufferoffset + fileoffset;
-    }
-    
-    synchronized public void seek(long pos) throws IOException {
-       if (LOG.isDebugEnabled()) {
-           LOG.debug("seek(" + pos + ")");
-       }
-       file.seek(pos);
-       fp = pos;
-       buffersize = 0; // force a buffer fill on next read
-    }
-
-    /**
-       works like the usual readLine but disregards \r to make things easier
-    */
-    synchronized public String readLine() throws IOException {
-       StringBuffer s = null;
-       
-       // go through buffer until i find a \n, if i reach end of buffer first, 
put whats in buffer into string buffer,
-       // repeat
-       buffering:
-       for (;;) {
-           if (buffersize == 0) {
-               fill();
-               if (buffersize == 0) {
-                   break;
-               }
-           }
-
-           for (int i = 0; i < buffersize; i++) {
-               if (buffer[bufferoffset + i] == '\n') { 
-                   if (i > 0) { // if \n is first char in buffer, leave the 
string buffer empty
-                       if (s == null) { s = new StringBuffer(); }
-                       s.append(new String(buffer, bufferoffset, i, "UTF-8"));
-                   }
-                   bufferoffset += i+1;
-                   buffersize -= i+1; 
-                   break buffering;
-               }
-           }
-
-           // We didn't find \n, read the whole buffer into string buffer
-           if (s == null) { s = new StringBuffer(); }
-           s.append(new String(buffer, bufferoffset, buffersize, "UTF-8"));
-           buffersize = 0; 
-       }
-
-       if (s == null) {
-           return null;
-       } else {
-           return s.toString();
-       }           
-    }
-
-    /**
-       DataInput interface
-    */
-    public void readFully(byte[] b) throws IOException {
-       readFully(b, 0, b.length);
-    }
-
-    public void readFully(byte[] b, int off, int len) throws IOException
-    {
-       while (len > 0) {
-           int read = read(b, off, len);
-           len -= read;
-           off += read;
-
-           if (read == 0) {
-               throw new EOFException("End of file reached");
-           }       
-       }
-    }
-
-    public int skipBytes(int n) throws IOException {
-       seek(getPosition() + n);
-       return n;
-    }
-
-    public boolean readBoolean() throws IOException {
-       return (readByte() != 0);           
-    }
-
-    public byte readByte() throws IOException {
-       byte[] b = new byte[1];
-       readFully(b, 0, 1);
-       return b[0];
-    }
-
-    public int readUnsignedByte() throws IOException {
-       return (int)readByte();
-    }
-
-    public short readShort() throws IOException {
-       byte[] b = new byte[2];
-       readFully(b, 0, 2);
-       return (short)((b[0] << 8) | (b[1] & 0xff));
-    }
-    
-    public int readUnsignedShort() throws IOException {
-       byte[] b = new byte[2];
-       readFully(b, 0, 2);
-       return (((b[0] & 0xff) << 8) | (b[1] & 0xff));
-    }
-
-    public char readChar() throws IOException {
-       return (char)readShort();
-    }
-
-    public int readInt() throws IOException {
-       byte[] b = new byte[4];
-       readFully(b, 0, 4);
-       return (((b[0] & 0xff) << 24) | ((b[1] & 0xff) << 16) |  ((b[2] & 0xff) 
<< 8) | (b[3] & 0xff));
-    }
-
-    public long readLong() throws IOException {
-       byte[] b = new byte[8];
-       readFully(b, 0, 8);
-       
-       return (((long)(b[0] & 0xff) << 56) |  ((long)(b[1] & 0xff) << 48) |
-               ((long)(b[2] & 0xff) << 40) |  ((long)(b[3] & 0xff) << 32) |
-               ((long)(b[4] & 0xff) << 24) |  ((long)(b[5] & 0xff) << 16) |
-               ((long)(b[6] & 0xff) <<  8) |  ((long)(b[7] & 0xff)));
-    }
-
-    public float readFloat() throws IOException {
-       return Float.intBitsToFloat(readInt());
-    }
-
-    public double readDouble() throws IOException {
-       return Double.longBitsToDouble(readLong());
-    }
-
-    public String readUTF() throws IOException {
-       int len = readUnsignedShort();
-       byte[] bytes = new byte[len+2];
-       bytes[0] = (byte)((len >> 8) & 0xFF);
-       bytes[1] = (byte)(len & 0xFF);
-       readFully(bytes, 2, len);
-       DataInputStream dis = new DataInputStream(new 
ByteArrayInputStream(bytes));
-       return dis.readUTF();
-    }
-
-    public static void main(String[] args) throws IOException {
-       RandomAccessFileReader f = new RandomAccessFileReader(new 
File(args[0]));
-       
-       long pos0 = f.getPosition();
-       for (int i = 0; i < 5; i++) {
-           System.out.println(f.readLine());
-       }
-       System.out.println("=============");
-       long pos1 = f.getPosition();
-       System.out.println("pos: " + pos1);
-       for (int i = 0; i < 5; i++) {
-           System.out.println(f.readLine());
-       }
-       System.out.println("=============");
-       f.seek(pos1);
-       for (int i = 0; i < 5; i++) {
-           System.out.println(f.readLine());
-       }
-       System.out.println("=============");
-       f.seek(pos0);
-       for (int i = 0; i < 5; i++) {
-           System.out.println(f.readLine());
-       }
-       long pos2 = f.getPosition();
-       System.out.println("=============");
-       System.out.println(f.readLine());
-       f.seek(pos2);
-       System.out.println(f.readLine());
-       f.close();
-    }
-};

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TransactionEntry.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TransactionEntry.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TransactionEntry.java
deleted file mode 100644
index 33c7189..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TransactionEntry.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-public class TransactionEntry extends LogEntry {
-    public TransactionEntry(long timestamp, long clientId, long Cxid, long 
Zxid, String op) {
-       this(timestamp, clientId, Cxid, Zxid, op, "");
-    }
-
-    public TransactionEntry(long timestamp, long clientId, long Cxid, long 
Zxid, String op, String extra) {
-       super(timestamp);
-       setAttribute("client-id", new Long(clientId));
-       setAttribute("cxid", new Long(Cxid));
-       setAttribute("zxid", new Long(Zxid));
-       setAttribute("operation", op);
-       setAttribute("extra", extra);
-    }
-
-    public long getClientId() {
-       return (Long)getAttribute("client-id");
-    }
-
-    public long getCxid() {
-       return (Long)getAttribute("cxid");
-    }
-
-    public long getZxid() {
-       return (Long)getAttribute("zxid");
-    }
-
-    public String getOp() {
-       return (String)getAttribute("operation");
-    }
-
-    public String getExtra() {
-       return (String)getAttribute("extra");
-    }
-
-    public String toString() {
-       return getTimestamp() + ":::session(0x" + 
Long.toHexString(getClientId()) + ") cxid(0x" + Long.toHexString(getCxid()) + 
") zxid(0x" + Long.toHexString(getZxid()) + ") op(" + getOp() + ") extra(" + 
getExtra() +")";
-    }
-
-    public Type getType() { return LogEntry.Type.TXN; }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TxnLogSource.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TxnLogSource.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TxnLogSource.java
deleted file mode 100644
index 809c455..0000000
--- a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TxnLogSource.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph;
-
-import java.io.ByteArrayInputStream;
-import java.io.EOFException;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.zip.Adler32;
-import java.util.zip.Checksum;
-import java.util.HashMap;
-
-import org.apache.jute.BinaryInputArchive;
-import org.apache.jute.InputArchive;
-import org.apache.jute.Record;
-import org.apache.zookeeper.server.TraceFormatter;
-import org.apache.zookeeper.server.persistence.FileHeader;
-import org.apache.zookeeper.server.persistence.FileTxnLog;
-import org.apache.zookeeper.server.util.SerializeUtils;
-import org.apache.zookeeper.txn.TxnHeader;
-
-import org.apache.zookeeper.ZooDefs.OpCode;
-
-import org.apache.zookeeper.txn.CreateSessionTxn;
-import org.apache.zookeeper.txn.CreateTxn;
-import org.apache.zookeeper.txn.DeleteTxn;
-import org.apache.zookeeper.txn.ErrorTxn;
-import org.apache.zookeeper.txn.SetACLTxn;
-import org.apache.zookeeper.txn.SetDataTxn;
-import org.apache.zookeeper.txn.TxnHeader;
-
-import java.io.File;
-import java.io.Closeable;
-import java.io.FileNotFoundException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class TxnLogSource implements LogSource {
-    private static final Logger LOG = 
LoggerFactory.getLogger(TxnLogSource.class);
-
-    private LogSkipList skiplist = null;
-    private static final int skipN = 10000;
-
-    private String file = null;
-    private long starttime = 0;
-    private long endtime = 0;
-    private long size = 0;
-
-    public boolean overlapsRange(long starttime, long endtime) {
-       return (starttime <= this.endtime && endtime >= this.starttime);
-    }
-
-    public long size() { return size; }
-    public long getStartTime() { return starttime; }
-    public long getEndTime() { return endtime; }
-    public LogSkipList getSkipList() { return skiplist; }
-
-    public static boolean isTransactionFile(String file) throws IOException {
-        RandomAccessFileReader reader = new RandomAccessFileReader(new 
File(file));
-        BinaryInputArchive logStream = new BinaryInputArchive(reader);
-        FileHeader fhdr = new FileHeader();
-        fhdr.deserialize(logStream, "fileheader");
-       reader.close();
-
-        return fhdr.getMagic() == FileTxnLog.TXNLOG_MAGIC;
-    }
-
-    private class TxnLogSourceIterator implements LogIterator {
-       private LogEntry next = null;
-       private long starttime = 0;
-       private long endtime = 0;
-       private TxnLogSource src = null;
-       private RandomAccessFileReader reader = null;
-       private BinaryInputArchive logStream = null;
-       private long skippedAtStart = 0;
-       private FilterOp filter = null;
-
-       public TxnLogSourceIterator(TxnLogSource src, long starttime, long 
endtime) throws IllegalArgumentException, FilterException {
-           this(src,starttime,endtime,null);
-       }
-       
-       public TxnLogSourceIterator(TxnLogSource src, long starttime, long 
endtime, FilterOp filter) throws IllegalArgumentException, FilterException {
-           try {
-               this.src = src;
-               this.starttime = starttime;
-               this.endtime = endtime;
-               reader = new RandomAccessFileReader(new File(src.file));
-               logStream = new BinaryInputArchive(reader);
-               FileHeader fhdr = new FileHeader();
-               fhdr.deserialize(logStream, "fileheader");
-           } catch (Exception e) {
-               throw new IllegalArgumentException("Cannot open transaction log 
("+src.file+") :" + e);
-           }
-           
-           LogSkipList.Mark start = 
src.getSkipList().findMarkBefore(starttime);
-           try {
-               reader.seek(start.getBytes());
-               skippedAtStart = start.getEntriesSkipped();
-           } catch (IOException ioe) {
-               // if we can't skip, we should just read from the start
-           }
-
-           this.filter = filter;
-
-           LogEntry e;
-           while ((e = readNextEntry()) != null && e.getTimestamp() < endtime) 
{
-               if (e.getTimestamp() >= starttime && (filter == null || 
filter.matches(e))  ) {
-                   next = e;
-                   return;
-               }
-               skippedAtStart++;
-           }
-
-
-       }
-       
-       public long size() throws IOException {
-           if (this.endtime >= src.getEndTime()) {
-               return src.size() - skippedAtStart;
-           }
-           
-           long pos = reader.getPosition();
-           LogEntry e;
-
-           LogSkipList.Mark lastseg = 
src.getSkipList().findMarkBefore(this.endtime);
-           reader.seek(lastseg.getBytes());
-           // number of entries skipped to get to the end of the iterator, 
less the number skipped to get to the start
-           long count = lastseg.getEntriesSkipped() - skippedAtStart; 
-
-           while ((e = readNextEntry()) != null) {
-               if (e.getTimestamp() > this.endtime) {
-                   break;
-               }
-               count++;
-           }
-           reader.seek(pos);;
-
-           return count;
-       }
-       
-       private LogEntry readNextEntry() {
-           LogEntry e = null;
-           try {
-               long crcValue;
-               byte[] bytes;
-               try {
-                   crcValue = logStream.readLong("crcvalue");
-                   
-                   bytes = logStream.readBuffer("txnEntry");
-               } catch (EOFException ex) {
-                   return null;
-               }
-               
-               if (bytes.length == 0) {
-                   return null;
-               }
-               Checksum crc = new Adler32();
-               crc.update(bytes, 0, bytes.length);
-               if (crcValue != crc.getValue()) {
-                   throw new IOException("CRC doesn't match " + crcValue +
-                                         " vs " + crc.getValue());
-               }
-               TxnHeader hdr = new TxnHeader();
-               Record r = SerializeUtils.deserializeTxn(bytes, hdr);
-
-               switch (hdr.getType()) {
-               case OpCode.createSession: {
-                   e = new TransactionEntry(hdr.getTime(), hdr.getClientId(), 
hdr.getCxid(), hdr.getZxid(), "createSession");
-               }
-                   break;
-               case OpCode.closeSession: {
-                   e = new TransactionEntry(hdr.getTime(), hdr.getClientId(), 
hdr.getCxid(), hdr.getZxid(), "closeSession");
-               }
-                   break;
-               case OpCode.create:
-                   if (r != null) {
-                       CreateTxn create = (CreateTxn)r;
-                       String path = create.getPath();
-                       e = new TransactionEntry(hdr.getTime(), 
hdr.getClientId(), hdr.getCxid(), hdr.getZxid(), "create", path);
-                   }
-                   break;
-               case OpCode.setData:
-                   if (r != null) {
-                       SetDataTxn set = (SetDataTxn)r;
-                       String path = set.getPath();
-                       e = new TransactionEntry(hdr.getTime(), 
hdr.getClientId(), hdr.getCxid(), hdr.getZxid(), "setData", path);
-                   }
-                   break;
-               case OpCode.setACL:
-                   if (r != null) {
-                       SetACLTxn setacl = (SetACLTxn)r;
-                       String path = setacl.getPath();
-                   e = new TransactionEntry(hdr.getTime(), hdr.getClientId(), 
hdr.getCxid(), hdr.getZxid(), "setACL", path);
-                   }
-                   break;
-               case OpCode.error:
-                   if (r != null)  {
-                       ErrorTxn error = (ErrorTxn)r;
-                       
-                       e = new TransactionEntry(hdr.getTime(), 
hdr.getClientId(), hdr.getCxid(), hdr.getZxid(), "error", "Error: " + 
error.getErr());
-                   }
-                   break;
-               default:
-                   LOG.info("Unknown op: " + hdr.getType());
-                   break;
-               }
-               
-               if (logStream.readByte("EOR") != 'B') {
-                   throw new EOFException("Last transaction was partial.");
-               }
-           } catch (Exception ex) {
-               LOG.error("Error reading transaction from (" + src.file + ") :" 
+ e);
-               return null;
-           }
-           return e;
-       }
-
-       public boolean hasNext() {
-           return next != null;
-       }
-       
-       public LogEntry next() throws NoSuchElementException {
-           LogEntry ret = next;
-           LogEntry e = readNextEntry();
-
-           if (filter != null) {
-               try {
-                   while (e != null && !filter.matches(e)) {
-                       e = readNextEntry();
-                   }
-               } catch (FilterException fe) {
-                   throw new NoSuchElementException(fe.toString());
-               }
-           }
-           if (e != null && e.getTimestamp() < endtime) {
-               next = e;
-           } else {
-               next = null;
-           }
-           return ret;
-       }
-
-       public void remove() throws UnsupportedOperationException {
-           throw new UnsupportedOperationException("remove not supported for 
Txn logs");
-       }
-       
-       public void close() throws IOException {
-           reader.close();
-       }
-    }
-
-    public LogIterator iterator(long starttime, long endtime) throws 
IllegalArgumentException {
-       try {
-           return iterator(starttime, endtime, null);
-       } catch (FilterException fe) {
-           assert(false); // should never ever happen
-           return null;
-       }
-    }
-
-    public LogIterator iterator(long starttime, long endtime, FilterOp filter) 
throws IllegalArgumentException, FilterException {
-       // sanitise start and end times
-       if (endtime < starttime) {
-           throw new IllegalArgumentException("End time (" +  endtime + ") 
must be greater or equal to starttime (" + starttime + ")");
-       }
-
-       return new TxnLogSourceIterator(this, starttime, endtime, filter);
-    }
-
-    public LogIterator iterator() throws IllegalArgumentException {
-       return iterator(starttime, endtime+1);
-    }
-    
-    public TxnLogSource(String file) throws IOException {
-       this.file = file;
-
-       skiplist = new LogSkipList();
-
-       RandomAccessFileReader reader = new RandomAccessFileReader(new 
File(file));
-       try {
-           BinaryInputArchive logStream = new BinaryInputArchive(reader);
-           FileHeader fhdr = new FileHeader();
-           fhdr.deserialize(logStream, "fileheader");
-           
-           byte[] bytes = null;
-           while (true) {
-               long lastFp = reader.getPosition();
-
-               long crcValue;
-
-               try {
-                   crcValue = logStream.readLong("crcvalue");
-                   bytes = logStream.readBuffer("txnEntry");
-               } catch (EOFException e) {
-                   break;
-               }
-               
-               if (bytes.length == 0) {
-                   break;
-               }
-               Checksum crc = new Adler32();
-               crc.update(bytes, 0, bytes.length);
-               if (crcValue != crc.getValue()) {
-                   throw new IOException("CRC doesn't match " + crcValue +
-                                         " vs " + crc.getValue());
-               }
-               if (logStream.readByte("EOR") != 'B') {
-                   throw new EOFException("Last transaction was partial.");
-               }
-               TxnHeader hdr = new TxnHeader();
-               Record r = SerializeUtils.deserializeTxn(bytes, hdr);
-               
-               if (starttime == 0) {
-                   starttime = hdr.getTime();
-               }
-               endtime = hdr.getTime();
-
-               if (size % skipN == 0) {
-                   skiplist.addMark(hdr.getTime(), lastFp, size);
-               }
-               size++;
-           }
-           if (bytes == null) {
-               throw new IOException("Nothing read from ("+file+")");
-           }
-       } finally {
-           reader.close();
-       }
-    }
-
-    public String toString() {
-       return "TxnLogSource(file=" + file + ", size=" + size + ", start=" + 
starttime + ", end=" + endtime +")";
-    }
-
-    public static void main(String[] args) throws IOException, FilterException 
{
-       TxnLogSource s = new TxnLogSource(args[0]);
-       System.out.println(s);
-
-       LogIterator iter;
-
-       if (args.length == 3) {
-           long starttime = Long.valueOf(args[1]);
-           long endtime = Long.valueOf(args[2]);
-           FilterOp fo = new FilterParser("(or (and (> zxid 0x2f0bd6f5e0) (< 
zxid 0x2f0bd6f5e9)) (= operation \"error\"))").parse();
-           System.out.println("fo: " + fo);
-           iter = s.iterator(starttime, endtime, fo);
-       } else {
-           iter = s.iterator();
-       }
-       System.out.println(iter);
-       while (iter.hasNext()) {
-                   System.out.println(iter.next());
-       }
-       iter.close();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/AndOp.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/AndOp.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/AndOp.java
deleted file mode 100644
index 581bdaa..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/AndOp.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.LogEntry;
-import org.apache.zookeeper.graph.FilterOp;
-import org.apache.zookeeper.graph.FilterException;
-
-public class AndOp extends FilterOp {
-    public boolean matches(LogEntry entry) throws FilterException {
-       for (FilterOp f : subOps) {
-           if (!f.matches(entry)) {
-               return false;
-           }
-       }
-       return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/Arg.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/Arg.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/Arg.java
deleted file mode 100644
index 4fda3cf..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/Arg.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.FilterOp.*;
-
-public class Arg<T> {
-    private ArgType type;
-    protected T value;
-    
-    protected Arg(ArgType type) {
-       this.type = type;
-    }
-    
-    public ArgType getType() { return type; }
-    public T getValue() { return value; }
-
-    public String toString() {
-       return "[" + type + ":" + value + "]";
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/EqualsOp.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/EqualsOp.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/EqualsOp.java
deleted file mode 100644
index 409815a..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/EqualsOp.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.LogEntry;
-import org.apache.zookeeper.graph.FilterOp;
-import org.apache.zookeeper.graph.FilterException;
-
-public class EqualsOp extends FilterOp {
-    public boolean matches(LogEntry entry) throws FilterException {
-
-       Object last = null;
-       for (Arg a : args) {
-           Object v = a.getValue();
-           if (a.getType() == FilterOp.ArgType.SYMBOL) {
-               String key = (String)a.getValue();
-               v = entry.getAttribute(key);
-           }
-
-           if (last != null
-               && !last.equals(v)) {
-               return false;
-           }
-           last = v;
-       }
-
-       return true;
-    }
-}    

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/GreaterThanOp.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/GreaterThanOp.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/GreaterThanOp.java
deleted file mode 100644
index 244dd3d..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/GreaterThanOp.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.LogEntry;
-import org.apache.zookeeper.graph.FilterOp;
-import org.apache.zookeeper.graph.FilterException;
-
-public class GreaterThanOp extends FilterOp {
-    public boolean matches(LogEntry entry) throws FilterException {
-       Arg first = args.get(0);
-       
-       if (first != null) {
-           FilterOp.ArgType type = first.getType();
-           if (type == FilterOp.ArgType.SYMBOL) {
-               String key = (String)first.getValue();
-               Object v = entry.getAttribute(key);
-               if (v instanceof String) {
-                   type = FilterOp.ArgType.STRING;
-               } else if (v instanceof Double || v instanceof Long || v 
instanceof Integer || v instanceof Short) {
-                   type = FilterOp.ArgType.NUMBER;
-               } else {
-                   throw new FilterException("LessThanOp: Invalid argument, 
first argument resolves to neither a String nor a Number");
-               }
-           }
-           
-           Object last = null;
-           for (Arg a : args) {
-               Object v = a.getValue();
-               if (a.getType() == FilterOp.ArgType.SYMBOL) {
-                   String key = (String)a.getValue();
-                   v = entry.getAttribute(key);
-               }
-
-               if (last != null) {
-                   if (type == FilterOp.ArgType.STRING) {
-                       if (((String)last).compareTo((String)v) <= 0) {
-                           return false;
-                       }
-                   } else if (type == FilterOp.ArgType.NUMBER) {
-                       //                      System.out.println("last[" + 
((Number)last).longValue() + "] v["+ ((Number)v).longValue() + "]");
-                       if (((Number)last).longValue() <= 
((Number)v).longValue()) {
-                           return false;
-                       }
-                   }
-               }
-               last = v;
-           }
-           return true;
-       } else { 
-           return true; 
-       }
-    }
-       
-}    

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/LessThanOp.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/LessThanOp.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/LessThanOp.java
deleted file mode 100644
index b7d9e09..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/LessThanOp.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.LogEntry;
-import org.apache.zookeeper.graph.FilterOp;
-import org.apache.zookeeper.graph.FilterException;
-
-public class LessThanOp extends FilterOp {
-    public boolean matches(LogEntry entry) throws FilterException {
-       Arg first = args.get(0);
-       
-       if (first != null) {
-           FilterOp.ArgType type = first.getType();
-           if (type == FilterOp.ArgType.SYMBOL) {
-               String key = (String)first.getValue();
-               Object v = entry.getAttribute(key);
-               if (v instanceof String) {
-                   type = FilterOp.ArgType.STRING;
-               } else if (v instanceof Double || v instanceof Long || v 
instanceof Integer || v instanceof Short) {
-                   type = FilterOp.ArgType.NUMBER;
-               } else {
-                   throw new FilterException("LessThanOp: Invalid argument, 
first argument resolves to neither a String nor a Number");
-               }
-           }
-           
-           Object last = null;
-           for (Arg a : args) {
-               Object v = a.getValue();
-               if (a.getType() == FilterOp.ArgType.SYMBOL) {
-                   String key = (String)a.getValue();
-                   v = entry.getAttribute(key);
-               }
-
-               if (last != null) {
-                   if (type == FilterOp.ArgType.STRING) {
-                       if (((String)last).compareTo((String)v) >= 0) {
-                           return false;
-                       }
-                   } else if (type == FilterOp.ArgType.NUMBER) {
-                       if (((Number)last).doubleValue() >= 
((Number)v).doubleValue()) {
-                           return false;
-                       }
-                   }
-               }
-               last = v;
-           }
-           return true;
-       } else { 
-           return true; 
-       }
-    }
-       
-}    

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NotOp.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NotOp.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NotOp.java
deleted file mode 100644
index d8ed757..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NotOp.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.LogEntry;
-import org.apache.zookeeper.graph.FilterOp;
-import org.apache.zookeeper.graph.FilterException;
-
-public class NotOp extends FilterOp {
-    public boolean matches(LogEntry entry) throws FilterException {
-       if (subOps.size() != 1) {
-           throw new FilterException("Not operation can only take one 
argument");
-       }
-       return !subOps.get(0).matches(entry);
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NumberArg.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NumberArg.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NumberArg.java
deleted file mode 100644
index d6b584d..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NumberArg.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.FilterOp.*;
-
-public class NumberArg extends Arg<Long> {
-    public NumberArg(Long value) {
-       super(ArgType.NUMBER);
-       this.value = value;
-    }
-};
-

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/OrOp.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/OrOp.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/OrOp.java
deleted file mode 100644
index d681589..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/OrOp.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.LogEntry;
-import org.apache.zookeeper.graph.FilterOp;
-import org.apache.zookeeper.graph.FilterException;
-
-public class OrOp extends FilterOp {
-    public boolean matches(LogEntry entry) throws FilterException {
-       for (FilterOp f : subOps) {
-           if (f.matches(entry)) {
-               return true;
-           }
-       }
-       return false;
-    }
-}    

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/StringArg.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/StringArg.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/StringArg.java
deleted file mode 100644
index 7345d3c..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/StringArg.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.FilterOp.*;
-
-public class StringArg extends Arg<String> {
-    public StringArg(String value) {
-       super(ArgType.STRING);
-           this.value = value;
-    }
-};
-

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/SymbolArg.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/SymbolArg.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/SymbolArg.java
deleted file mode 100644
index 077553b..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/SymbolArg.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.FilterOp.*;
-
-public class SymbolArg extends Arg<String> {
-    public SymbolArg(String value) {
-       super(ArgType.SYMBOL);
-       this.value = value;
-    }
-};

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/XorOp.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/XorOp.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/XorOp.java
deleted file mode 100644
index 9e778b1..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/XorOp.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.filterops;
-
-import org.apache.zookeeper.graph.LogEntry;
-import org.apache.zookeeper.graph.FilterOp;
-import org.apache.zookeeper.graph.FilterException;
-
-public class XorOp extends FilterOp {
-    public boolean matches(LogEntry entry) throws FilterException {
-       int count = 0;
-       for (FilterOp f : subOps) {
-           if (f.matches(entry)) {
-               count++;
-               if (count > 1) {
-                   return false;
-               }
-           }
-       }
-       if (count == 1) {
-           return true;
-       }
-       return false;
-    }
-}    

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/FileLoader.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/FileLoader.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/FileLoader.java
deleted file mode 100644
index 67e8945..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/FileLoader.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.servlets;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.JSONValue;
-
-import org.apache.zookeeper.graph.*;
-
-public class FileLoader extends JsonServlet
-{
-    private MergedLogSource source = null;
-    
-    public FileLoader(MergedLogSource src) throws Exception {
-       source = src;
-    }
-
-    String handleRequest(JsonRequest request) throws Exception
-    {
-       String output = "";
-               
-       String file = request.getString("path", "/");
-       JSONObject o = new JSONObject();
-       try {
-           this.source.addSource(file);
-           o.put("status", "OK");
-       
-       } catch (Exception e) {
-           o.put("status", "ERR");
-           o.put("error",  e.toString());
-       }
-       
-       return JSONValue.toJSONString(o);
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/eab8c1eb/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Fs.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Fs.java 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Fs.java
deleted file mode 100644
index e5b1a01..0000000
--- a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Fs.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.zookeeper.graph.servlets;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.JSONValue;
-import java.util.Arrays;
-import java.util.Comparator;
-
-public class Fs extends JsonServlet
-{
-    String handleRequest(JsonRequest request) throws Exception
-    {
-       String output = "";
-       JSONArray filelist = new JSONArray();
-
-       File base = new File(request.getString("path", "/"));
-       if (!base.exists() || !base.isDirectory()) {
-           throw new FileNotFoundException("Couldn't find [" + request + "]");
-       }
-       File[] files = base.listFiles();
-       Arrays.sort(files, new Comparator<File>() { 
-               public int compare(File o1, File o2) {
-                   if (o1.isDirectory() != o2.isDirectory()) {
-                       if (o1.isDirectory()) {
-                           return -1;
-                       } else {
-                           return 1;
-                       }
-                   }
-                   return o1.getName().compareToIgnoreCase(o2.getName());
-               } 
-           });
-       
-       for (File f : files) {
-           JSONObject o = new JSONObject();
-           o.put("file", f.getName());
-           o.put("type", f.isDirectory() ? "D" : "F");
-           o.put("path", f.getCanonicalPath());
-           filelist.add(o);
-       }
-       return JSONValue.toJSONString(filelist);
-    }
-}

Reply via email to