1*1b46b959SChen Xi#!/usr/bin/env python3 2*1b46b959SChen Xiimport sys 3*1b46b959SChen Xiimport os 4*1b46b959SChen Xiimport argparse 5*1b46b959SChen Xi 6*1b46b959SChen Xixshome = os.environ['NOOP_HOME'] 7*1b46b959SChen Xiassert(xshome) # NOOP_HOME is set 8*1b46b959SChen Xiprint('XSHOME:',xshome) 9*1b46b959SChen Xi 10*1b46b959SChen Xixsbuild = xshome + '/build/' 11*1b46b959SChen Xi 12*1b46b959SChen Xidef find_lateset(suffix): 13*1b46b959SChen Xi fs = [f for f in os.listdir(xsbuild) if f.endswith(suffix)] 14*1b46b959SChen Xi fs.sort() 15*1b46b959SChen Xi return fs[-1] 16*1b46b959SChen Xi 17*1b46b959SChen Xidef parse_db(table_name, script): 18*1b46b959SChen Xi return (f'sqlite3 {db} "select * from (' + 19*1b46b959SChen Xi f'select * from {table_name} ' + 20*1b46b959SChen Xi (f'where {sql} ' if(sql != '') else '') + 21*1b46b959SChen Xi (f'order by STAMP desc ' if(last) else '') + 22*1b46b959SChen Xi f'limit {limit}' + 23*1b46b959SChen Xi f') order by STAMP asc" | sh {script}') 24*1b46b959SChen Xi 25*1b46b959SChen Xiparser = argparse.ArgumentParser(description='L2DB helper') 26*1b46b959SChen Xiparser.add_argument('cmd', choices=['log', 'mp'], help='[Required] log for TLLOG; mp for L2 MainPipe') 27*1b46b959SChen Xiparser.add_argument('sql', nargs='?', default='', help='[Optional] sql query, e.g. "STAMP > 10000" or "ADDRESS=0x80000000"') 28*1b46b959SChen Xiparser.add_argument('-l', '--last', action='store_true', help='select the last N records') 29*1b46b959SChen Xiparser.add_argument('-n', '--limit', type=int, default=20, help='select N records') 30*1b46b959SChen Xiparser.add_argument('-p', '--path', default=None, help='path to db file (if not designated, use the latest in build)') 31*1b46b959SChen Xiargs = parser.parse_args() 32*1b46b959SChen Xi# print(args) 33*1b46b959SChen Xi 34*1b46b959SChen Xicmd = args.cmd 35*1b46b959SChen Xisql = args.sql 36*1b46b959SChen Xilast = args.last 37*1b46b959SChen Xilimit = args.limit 38*1b46b959SChen Xidb = xsbuild + find_lateset('.db') if args.path == None else args.path 39*1b46b959SChen Xiprint(db) 40*1b46b959SChen Xi 41*1b46b959SChen Xiline = '' 42*1b46b959SChen Xiif(cmd == 'log'): 43*1b46b959SChen Xi line = parse_db('TLLOG', xshome + '/scripts/cache/convert_tllog.sh') 44*1b46b959SChen Xi 45*1b46b959SChen Xielif(cmd == 'mp'): 46*1b46b959SChen Xi line = parse_db('L2MP', xshome + '/scripts/cache/convert_mp.sh') 47*1b46b959SChen Xi 48*1b46b959SChen Xi# elif(cmd == 'clean'): 49*1b46b959SChen Xi# os.system(f'rm -rf {xsbuild}*.vcd') 50*1b46b959SChen Xi# os.system(f'rm -rf {xsbuild}*.vpd') 51*1b46b959SChen Xi# os.system(f'rm -rf {xsbuild}*.gtkw') 52*1b46b959SChen Xi# os.system(f'rm -rf {xsbuild}*.db') 53*1b46b959SChen Xi 54*1b46b959SChen Xielse: 55*1b46b959SChen Xi print('Unknown command') 56*1b46b959SChen Xi exit() 57*1b46b959SChen Xi 58*1b46b959SChen Xiprint(line) 59*1b46b959SChen Xios.system(line)