root/livinglogic.python.tipimaid/liaalh_mergelogs.py @ 74:f6254ce2f9db

Revision 74:f6254ce2f9db, 1.2 KB (checked in by Nikolas Tautenhahn <nik@…>, 10 years ago)

cosmetic changes

Line 
1import heapq, re, sys, datetime, time
2
3re_find_date = re.compile(" \[(.*?)\] ")
4
5
6def apachedate2utc(line):
7    d = re_find_date.findall(line)[0]
8    temp = d.split()
9    utcdate = datetime.datetime(*(time.strptime(temp[0], "%d/%b/%Y:%H:%M:%S")[0:6])) # support ancient distributions with python < 2.5
10    minsoff = int("%s%s" % (temp[1][0], temp[1][-2:]))
11    hrsoff = int("%s%s" % (temp[1][0], temp[1][1:3]))
12    utcdate -= datetime.timedelta(hours=hrsoff, minutes=minsoff)
13    return utcdate
14
15
16def reallines(iter, key):
17    for item in iter:
18        try:
19            keyitem = key(item)
20        except Exception:
21            sys.stderr.write("Skipping malformed line %s" % item)
22            sys.stderr.flush()
23        else:
24            yield item
25
26
27def mergesort(filelist, key):
28    heap = []
29    for (i, itr) in enumerate(iter(pl) for pl in filelist):
30        try:
31            item = itr.next()
32            heap.append((key(item), i, item, itr))
33        except StopIteration:
34            pass
35    heapq.heapify(heap)
36
37    while heap:
38        (_, idx, item, itr) = heap[0]
39        yield item
40        try:
41            item = itr.next()
42            heapq.heapreplace(heap, (key(item), idx, item, itr) )
43        except StopIteration:
44            heapq.heappop(heap)
45
46
47openedfiles = [reallines(open(filename), apachedate2utc) for filename in sys.argv[1:]]
48
49for line in mergesort(openedfiles, apachedate2utc):
50    sys.stdout.write(line)
51sys.stdout.flush()
Note: See TracBrowser for help on using the browser.