http://git-wip-us.apache.org/repos/asf/zookeeper/blob/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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/63aaf0a1/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);
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/63aaf0a1/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/GraphData.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/GraphData.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/GraphData.java
deleted file mode 100644
index fc10eb1..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/GraphData.java
+++ /dev/null
@@ -1,85 +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 java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.JSONValue;
-
-import org.apache.zookeeper.graph.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class GraphData extends JsonServlet
-{
-    private static final Logger LOG = LoggerFactory.getLogger(GraphData.class);
-    private static final int DEFAULT_PERIOD = 1000;
-
-    private LogSource source = null;
-
-    public GraphData(LogSource src) throws Exception {
-       this.source = src; 
-    }
-
-    String handleRequest(JsonRequest request) throws Exception {
-       
-
-       long starttime = 0;
-       long endtime = 0;
-       long period = 0;
-       FilterOp fo = null;
-
-       starttime = request.getNumber("start", 0);
-       endtime = request.getNumber("end", 0);
-       period = request.getNumber("period", 0);
-       String filterstr = request.getString("filter", "");
-
-       if (filterstr.length() > 0) {
-           fo = new FilterParser(filterstr).parse();
-       }
-       
-       if (starttime == 0) { starttime = source.getStartTime(); }
-       if (endtime == 0) { 
-           if (period > 0) {
-               endtime = starttime + period;
-           } else {
-               endtime = starttime + DEFAULT_PERIOD; 
-           }
-       }
-
-       if (LOG.isDebugEnabled()) {
-           LOG.debug("handle(start= " + starttime + ", end=" + endtime + ", 
period=" + period + ")");
-       }
-       
-       LogIterator iterator = (fo != null) ? 
-           source.iterator(starttime, endtime, fo) : 
source.iterator(starttime, endtime);
-       return new JsonGenerator(iterator).toString();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/63aaf0a1/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/JsonServlet.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/JsonServlet.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/JsonServlet.java
deleted file mode 100644
index 910d44f..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/JsonServlet.java
+++ /dev/null
@@ -1,85 +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.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.json.simple.JSONObject;
-import org.json.simple.JSONValue;
-
-import java.util.Map;
-
-abstract public class JsonServlet extends HttpServlet {
-    abstract String handleRequest(JsonRequest request) throws Exception;
-
-    protected class JsonRequest {
-       private Map map;
-
-       public JsonRequest(ServletRequest request) {
-           map = request.getParameterMap();
-       }
-       
-       public long getNumber(String name, long defaultnum) {
-           String[] vals = (String[])map.get(name);
-           if (vals == null || vals.length == 0) {
-               return defaultnum;
-           }
-
-           try {
-               return Long.valueOf(vals[0]);
-           } catch (NumberFormatException e) {
-               return defaultnum;
-           }
-       }
-       
-       public String getString(String name, String defaultstr) {
-           String[] vals = (String[])map.get(name);
-           if (vals == null || vals.length == 0) {
-               return defaultstr;
-           } else {
-               return vals[0];
-           }
-       }
-    }
-
-    protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException
-    {
-        response.setContentType("text/plain;charset=utf-8");
-        response.setStatus(HttpServletResponse.SC_OK);
-       
-       try {
-           String req = 
request.getRequestURI().substring(request.getServletPath().length());
-
-           response.getWriter().println(handleRequest(new 
JsonRequest(request)));
-       } catch (Exception e) {
-           JSONObject o = new JSONObject();
-           o.put("error", e.toString());
-           response.getWriter().println(JSONValue.toJSONString(o));
-       } catch (java.lang.OutOfMemoryError oom) {
-           JSONObject o = new JSONObject();
-           o.put("error", "Out of memory. Perhaps you've requested too many 
logs. Try narrowing you're filter criteria.");
-           response.getWriter().println(JSONValue.toJSONString(o));
-       }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/63aaf0a1/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/NumEvents.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/NumEvents.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/NumEvents.java
deleted file mode 100644
index 5961a12..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/NumEvents.java
+++ /dev/null
@@ -1,88 +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.regex.Pattern;
-import java.util.regex.Matcher;
-
-import org.apache.zookeeper.graph.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public class NumEvents extends JsonServlet
-{
-    private static final Logger LOG = LoggerFactory.getLogger(NumEvents.class);
-    private static final int DEFAULT_PERIOD = 1000;
-
-    private LogSource source = null;
-
-    public NumEvents(LogSource src) throws Exception {
-       this.source = src;
-    }
-
-    String handleRequest(JsonRequest request) throws Exception {
-       String output = "";
-
-       long starttime = 0;
-       long endtime = 0;
-       long period = 0;
-
-       starttime = request.getNumber("start", 0);
-       endtime = request.getNumber("end", 0);
-       period = request.getNumber("period", 0);
-
-       if (starttime == 0) { starttime = source.getStartTime(); }
-       if (endtime == 0) { 
-           if (period > 0) {
-               endtime = starttime + period;
-           } else {
-               endtime = source.getEndTime(); 
-           }
-       }
-       
-       LogIterator iter = source.iterator(starttime, endtime);
-       JSONObject data = new JSONObject();
-       data.put("startTime", starttime);
-       data.put("endTime", endtime);
-       long size = 0;
-       
-       size = iter.size();
-       
-       data.put("numEntries",  size);
-       if (LOG.isDebugEnabled()) {
-           LOG.debug("handle(start= " + starttime + ", end=" + endtime + ", 
numEntries=" + size +")");
-       }
-       iter.close();
-       return JSONValue.toJSONString(data);
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/63aaf0a1/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/StaticContent.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/StaticContent.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/StaticContent.java
deleted file mode 100644
index d91acb6..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/StaticContent.java
+++ /dev/null
@@ -1,53 +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.InputStream;
-import java.io.InputStreamReader;
-import java.io.BufferedReader;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class StaticContent extends HttpServlet {
-    protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException
-    {
-       String path = 
request.getRequestURI().substring(request.getServletPath().length());
-
-       InputStream resource = 
ClassLoader.getSystemResourceAsStream("org/apache/zookeeper/graph/resources" + 
path);      
-       if (resource == null) {
-           response.getWriter().println(path + " not found!");
-           response.setStatus(HttpServletResponse.SC_NOT_FOUND);
-           return;
-       }
-       try {
-         while (resource.available() > 0) {
-           response.getWriter().write(resource.read());
-         }
-       } finally {
-         resource.close();
-       }
-       //        response.setContentType("text/plain;charset=utf-8");
-        response.setStatus(HttpServletResponse.SC_OK);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/63aaf0a1/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Throughput.java
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Throughput.java
 
b/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Throughput.java
deleted file mode 100644
index 341bf9e..0000000
--- 
a/src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Throughput.java
+++ /dev/null
@@ -1,125 +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.IOException;
-import java.io.BufferedOutputStream;
-import java.io.FileOutputStream;
-import java.io.DataOutputStream;
-import java.io.PrintStream;
-
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-
-import org.apache.zookeeper.graph.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.JSONValue;
-
-
-public class Throughput extends JsonServlet
-{
-    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;
-
-    private LogSource source = null;
-
-    public Throughput(LogSource src) throws Exception {
-       this.source = src; 
-    }
-
-    public String handleRequest(JsonRequest request) throws Exception {
-       long starttime = 0;
-       long endtime = 0;
-       long period = 0;
-       long scale = 0;
-       
-       starttime = request.getNumber("start", 0);
-       endtime = request.getNumber("end", 0);
-       period = request.getNumber("period", 0);
-       
-
-       if (starttime == 0) { starttime = source.getStartTime(); }
-       if (endtime == 0) { 
-           if (period > 0) {
-               endtime = starttime + period;
-           } else {
-               endtime = source.getEndTime(); 
-           }
-       }
-       
-       String scalestr = request.getString("scale", "minutes");
-       if (scalestr.equals("seconds")) {
-           scale = MS_PER_SEC;
-       } else if (scalestr.equals("hours")) {
-           scale = MS_PER_HOUR;
-       } else {
-           scale = MS_PER_MIN;
-       }       
-       
-       LogIterator iter = source.iterator(starttime, endtime);
-       
-       long current = 0;
-       long currentms = 0;
-       HashSet<Long> zxids_ms = new HashSet<Long>();
-       long zxidcount = 0;
-
-       JSONArray events = new JSONArray();
-       while (iter.hasNext()) {
-           LogEntry e = iter.next();
-           if (e.getType() != LogEntry.Type.TXN) {
-               continue;
-           }
-
-           TransactionEntry cxn = (TransactionEntry)e;
-           
-           long ms = cxn.getTimestamp();
-           long inscale = ms/scale;
-
-           if (currentms != ms && currentms != 0) {
-               zxidcount += zxids_ms.size();
-               zxids_ms.clear();
-           }
-
-           if (inscale != current && current != 0) {
-               JSONObject o = new JSONObject();
-               o.put("time", current*scale);
-               o.put("count", zxidcount);
-               events.add(o);
-               zxidcount = 0;
-           }
-           current = inscale;
-           currentms = ms;
-
-           zxids_ms.add(cxn.getZxid());
-       }
-       JSONObject o = new JSONObject();
-       o.put("time", current*scale);
-       o.put("count", zxidcount);
-       events.add(o);
-
-       iter.close();
-       
-       return JSONValue.toJSONString(events);
-    }
-
-};

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/63aaf0a1/src/contrib/loggraph/web/org/apache/zookeeper/graph/log4j.properties
----------------------------------------------------------------------
diff --git 
a/src/contrib/loggraph/web/org/apache/zookeeper/graph/log4j.properties 
b/src/contrib/loggraph/web/org/apache/zookeeper/graph/log4j.properties
deleted file mode 100644
index ab8960b..0000000
--- a/src/contrib/loggraph/web/org/apache/zookeeper/graph/log4j.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-log4j.rootLogger=TRACE, CONSOLE
-
-# Print the date in ISO 8601 format
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.Threshold=TRACE
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} - %-5p 
[%t:%C{1}@%L] - %m%n
-
-log4j.logger.org.apache.zookeeper.graph.LogSkipList=off
-log4j.logger.org.apache.zookeeper.graph.RandomAccessFileReader=off
-#log4j.logger.org.apache.zookeeper.graph.Log4JSource=off
\ No newline at end of file

Reply via email to