[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