mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-26 07:58:52 +01:00
more work on script
This commit is contained in:
parent
33d6f212b2
commit
4e2c93fd3c
1 changed files with 83 additions and 13 deletions
|
@ -1,33 +1,103 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import sys, re
|
||||
import sys, re, datetime
|
||||
from datetime import date
|
||||
|
||||
def CONNNAME_ASSIGN(thread, timestamp, mtch):
|
||||
global g_games
|
||||
connname = mtch.group(2)
|
||||
if not connname in g_games:
|
||||
game = {'connname': connname,
|
||||
'cids' : set(),
|
||||
'ts': timestamp
|
||||
}
|
||||
g_games[connname] = game
|
||||
game = g_games[connname]
|
||||
game['cids'].add( mtch.group(1) )
|
||||
|
||||
|
||||
def CID(thread, timestamp, mtch):
|
||||
print "CID called with", mtch.group(0)
|
||||
|
||||
# Global full-line patterns
|
||||
LINE = re.compile('(<0x.*>)(\d\d:\d\d:\d\d): (.*)$')
|
||||
DATE = re.compile('It\'s a new day: \d\d/\d\d/\d\d\d\d')
|
||||
nMatches = 0
|
||||
nDates = 0
|
||||
DATE = re.compile('It\'s a new day: (\d\d/\d\d/\d\d\d\d)')
|
||||
|
||||
# Patterns for the meat of log lines, after thread and timestamp
|
||||
g_patterns = {
|
||||
'CID' : [ re.compile('^cid:(\d*)\((.*):([0-9a-f]*):(\d)\) .*$'), CID ],
|
||||
'CONNNAME_ASSIGN': [re.compile('^(cid:\d*)\(.* assignConnName: assigning name: (.*)$'),
|
||||
CONNNAME_ASSIGN],
|
||||
'UDP_READ': [re.compile('read_udp_packet: recvfrom=>(\d*)$')],
|
||||
'REFRESH_RESETTING': [re.compile( '^Refresh: RESETTING.*$' )],
|
||||
'HANDLE_ENQUEUING': [re.compile( '^handle: enqueuing packet \d* \(socket (\d*), len (\d*)\)$' )],
|
||||
'PACKED_DISPATCH': [re.compile( '^thread_main: dispatching packet (\d*) \(socket (\d)\); (\d*) seconds old$' )],
|
||||
'HANDLE_UDP_PACKET': [re.compile( '^handle_udp_packet\(msg=(.*)\)$' )],
|
||||
'REMEMBERDEVICE': [re.compile( '^rememberDevice\(devid=(.*), saddr=\'.*\'\)')],
|
||||
'REMEMBERDEVICE_REPL': [re.compile( '^rememberDevice: replacing address for .*$' )],
|
||||
'MAP_CONTAINS': [re.compile( '^dev->addr map now contains \d* entries' )],
|
||||
'RETRIEVEMESSAGES': [re.compile( '^retrieveMessages\(\)$' )],
|
||||
'ACKPACKETIF': [re.compile( '^ackPacketIf: acking packet \d*$' )],
|
||||
'SEND_VIA_UDP_IMPL': [re.compile( '^send_via_udp_impl\(\)=>\d*$' )],
|
||||
'REFRESH_ADDING' : [re.compile( '^Refresh: adding \'(.*)\'$' )],
|
||||
'REFRESH_REFRESHING' : [re.compile( '^Refresh: refreshing \'(.*)\'; last seen \d* milliseconds ago$' )],
|
||||
'PROCESSMESSAGE' : [re.compile( '^processMessage got (.*)$' )],
|
||||
'PROCESSRECONNECT' : [re.compile( '^processReconnect\(\)$' )],
|
||||
'QUERY' : [re.compile( '^query: .*$' )],
|
||||
'ADDTOGAME_QUERY' : [re.compile( '^[a-zA-Z]*: query: .*$' )],
|
||||
'FINDGAMEFOR' : [re.compile( '^FindGameFor\((.*)\)=>1$' )],
|
||||
'SETOWNER' : [re.compile( '^SetOwner\(owner=(\d*)\); m_ownerCount now (\d*)$' )],
|
||||
'HOSTREC_CREATED' : [re.compile( '^HostRec created HostRec with id \d$' ) ],
|
||||
'SEND_MSG_VIA_UDP': [re.compile( '^send_msg_via_udp: sent \d* bytes \(plus header\) on UDP socket, token=.*\(\d*\)$')],
|
||||
'SEND_MSG_VIA_UDP_DONE': [re.compile( '^send_msg_via_udp\(\)=>\d*$' )],
|
||||
'HANDLE_UDP_PACKET_ACK' : [re.compile( '^handle_udp_packet: got ack for packet (\d*)$' )],
|
||||
'CALLPROC' : [re.compile( '^callProc\(.*\)$' )],
|
||||
'ONMSGACKED' : [re.compile( '^onMsgAcked\(packetID=\d*, acked=true\)$')],
|
||||
'RECYCLE_LOCKED_LOCKING' : [re.compile( '^Recycle_locked\(cref=0x.*,cookie=(.*)\)$')],
|
||||
|
||||
'RECYCLE_LOCKED_ERASING' : [re.compile( 'Recycle_locked: erasing cref cid (\d*)')],
|
||||
}
|
||||
|
||||
|
||||
# indexed by connname.
|
||||
g_games = {}
|
||||
|
||||
def handleLine(thread, timestamp, rest):
|
||||
global nMatches
|
||||
nMatches += 1
|
||||
print "handleLine got", thread, "and", timestamp, "and", rest
|
||||
global g_games, g_curDate, g_patterns
|
||||
mtch = None
|
||||
for RE in g_patterns.keys():
|
||||
mtch = g_patterns[RE][0].match( rest )
|
||||
if mtch:
|
||||
if 1 < len(g_patterns[RE]):
|
||||
g_patterns[RE][1](thread, timestamp, mtch)
|
||||
break
|
||||
|
||||
if not mtch:
|
||||
print "No match for:", rest
|
||||
sys.exit(0)
|
||||
|
||||
def main():
|
||||
global nMatches, nDates
|
||||
|
||||
global g_curDate, g_games
|
||||
g_curDate = None
|
||||
|
||||
for line in sys.stdin:
|
||||
line.strip()
|
||||
mtch = LINE.match(line)
|
||||
if mtch:
|
||||
handleLine( mtch.group(1), mtch.group(2), mtch.group(3) )
|
||||
break
|
||||
ts = datetime.datetime.strptime(mtch.group(2), '%H:%M:%S')
|
||||
if g_curDate:
|
||||
ts = datetime.datetime.combine( g_curDate, ts.time() )
|
||||
handleLine( mtch.group(1), ts, mtch.group(3) )
|
||||
continue
|
||||
mtch = DATE.match(line)
|
||||
if mtch:
|
||||
nDates += 1
|
||||
g_curDate = datetime.datetime.strptime(mtch.group(1), '%d/%m/%Y').date()
|
||||
continue
|
||||
print "unmatched: ", line
|
||||
break
|
||||
|
||||
print "got", nMatches, "normal lines and", nDates, "dates."
|
||||
print 'here'
|
||||
for conname in g_games.keys():
|
||||
print conname, g_games[conname]['ts']
|
||||
|
||||
main()
|
||||
|
|
Loading…
Add table
Reference in a new issue