[Checkins] SVN: Sandbox/J1m/replaylog.py Copied a one-off script to a place where others can use it. :)

Jim Fulton jim at zope.com
Fri May 4 15:00:02 EDT 2007


Log message for revision 75460:
  Copied a one-off script to a place where others can use it. :)
  

Changed:
  A   Sandbox/J1m/replaylog.py

-=-
Added: Sandbox/J1m/replaylog.py
===================================================================
--- Sandbox/J1m/replaylog.py	2007-05-04 17:04:05 UTC (rev 75459)
+++ Sandbox/J1m/replaylog.py	2007-05-04 19:00:01 UTC (rev 75460)
@@ -0,0 +1,111 @@
+# Replay a log file to load a test server
+
+import logging, re, sys, time, threading, httplib, pdb
+
+logger = logging.getLogger()
+logger.addHandler(logging.StreamHandler())
+
+log_parse = re.compile(
+    r"\d+[.]\d+[.]\d+[.]\d+" # ip
+    r"\s+"
+    r"\S+" # remote login
+    r"\s+"
+    r"\S+" # auth user
+    r"\s+"
+    r"\["
+    r"(\d\d)/([A-Z][a-z][a-z])/(\d\d\d\d):(\d\d):(\d\d):(\d\d)"
+    r"(?: [^ \t\]]+)?"
+    r"\]" # date
+    r"\s+"
+    r'"([^"]+)"' # request
+    r"\s"
+    ).match
+
+months = dict(
+    Jan=1, Feb=2, Mar=3, Apr=4, May=5, Jun=6,
+    Jul=7, Aug=8, Sep=9, Oct=10, Nov=11, Dec=12,
+    )
+
+queue = []
+
+def read(args=None):
+    if args is None:
+        args = sys.argv[1:]
+
+    good = bad = get = 0
+    for fname in args:
+        for line in open(fname):
+            m = log_parse(line)
+            if m is None:
+                bad += 1
+                continue
+
+            good += 1
+
+#            print m.groups()
+
+            day, month, year, hour, minute, second, request = m.groups()
+
+            month = months[month]
+            t = time.mktime(
+                (int(year), month, int(day),
+                 int(hour), int(minute), int(second),
+                 0, 0, 0))
+
+            url = request.split()
+            url.pop()
+            method = url.pop(0)
+            url = '%20'.join(url)
+            if method == 'GET':
+                get += 1
+            queue.append((t, url))
+                
+    print good, bad, get
+
+def process_queue(server):
+    results = {}
+    while 1:
+        try:
+            t, url = queue.pop()
+        except IndexError:
+            break
+
+##         t -= time.time()
+##         if t > 0:
+##             time.sleep(t)
+
+        conn = httplib.HTTPConnection(server)
+        conn.request("GET", url)
+        r = conn.getresponse()
+        results[r.status] = results.get(r.status, 0) + 1
+        r.read()
+        conn.close()
+##         sys.stdout.write('.')
+##         sys.stdout.flush()
+
+    print results
+            
+
+        
+
+def main():
+    global queue
+    queue = []
+
+    args = sys.argv[1:]
+    server = args.pop(0)
+
+    read(args)
+    queue.reverse()
+    threads = []
+##    process_queue()
+    for i in range(50):
+        thread = threading.Thread(target=process_queue, args=(server,))
+        thread.start()
+        threads.append(thread)
+
+    for thread in threads:
+        thread.join()
+            
+if __name__ == '__main__':
+    main()


Property changes on: Sandbox/J1m/replaylog.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native



More information about the Checkins mailing list