[pypy-svn] r40809 - pypy/dist/pypy/doc

fijal at codespeak.net fijal at codespeak.net
Tue Mar 20 10:26:01 CET 2007


Author: fijal
Date: Tue Mar 20 10:25:59 2007
New Revision: 40809

Added:
   pypy/dist/pypy/doc/parse_logs.py   (contents, props changed)
Log:
Hmm. I've been keeping this script for a while in my wc, not sure if it's not commited somewhere else


Added: pypy/dist/pypy/doc/parse_logs.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/doc/parse_logs.py	Tue Mar 20 10:25:59 2007
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+import log_reader
+
+def daily_date_hasher(date):
+    return ((date.year, date.month, date.day))
+
+def read_log(filename, path_guesser, date_hasher=daily_date_hasher,
+             max_reads=None):
+    assert callable(path_guesser)
+    lr = log_reader.ApacheReader(filename)
+    ret = {}
+    keys = []
+    for num, i in enumerate(lr):
+        if max_reads and num > max_reads:
+            return keys, ret
+        if 'path' in i:
+            if path_guesser(i['path']):
+                hash = date_hasher(i['time'])
+                if hash in ret:
+                    ret[hash] += 1
+                else:
+                    ret[hash] = 1
+                    keys.append(hash)
+    return keys, ret
+
+def test_daily_date_hasher():
+    from datetime import datetime
+    one = datetime(2007, 2, 25, 3, 10, 50)
+    two = datetime(2007, 2, 25, 7, 1, 5)
+    three = datetime(2007, 3, 25, 3, 10, 50)
+    assert daily_date_hasher(one) == daily_date_hasher(two)
+    assert daily_date_hasher(one) != daily_date_hasher(three)
+
+def test_read_log():
+    def path_guesser(path):
+        return path.startswith("/viewvc")
+    keys, ret = read_log("code.log", path_guesser)
+    assert sum(ret.values()) == 51
+    assert sorted(keys) == keys
+    assert ret[(2007, 2, 25)] == 51
+
+if __name__ == "__main__":
+    import sys
+    import re
+    if len(sys.argv) == 3:
+        max_reads = int(sys.argv[2])
+    elif len(sys.argv) != 2:
+        print "Usage ./parse_logs.py <logfile> [max reads]"
+        sys.exit(1)
+    else:
+        max_reads = None
+
+    def path_guesser(path):
+        return "pypy" in path
+    
+    keys, ret = read_log(sys.argv[1], path_guesser, max_reads=max_reads)
+    for key in keys:
+        year, month, day = key
+        print "%d-%d-%d, %d" % (year, month, day, ret[key])



More information about the Pypy-commit mailing list