blob: 667b3d34ac5dd08bbe2c0fb01348c552f510381e [file] [log] [blame]
#coding:utf-8
import os,sys
import json
import time
from datetime import datetime
from collections import OrderedDict
def gen_desc(res_json):
"""
replace your scene description as following examples.
"""
desc_json={
"mysqlVerison":"5.7.24",
"tableDescription":"id bigint(20) primary key,\nk int(11),\nc char(120),\npad char(60)\n",
"shardingRule":"tables:\n tbl:\n actualDataNodes: ds_${0..3}.tbl${0..1023}\n tableStrategy:\n inline:\n shardingColumn: k\n algorithmExpression: tbl${k % 1024}\n keyGenerator:\n type: SNOWFLAKE\n column: id\ndefaultDatabaseStrategy:\n inline:\n shardingColumn: id\n algorithmExpression: ds_${id % 4}",
"masterSlaveRule":"None",
"encryptRule":"None",
"INSERT+UPDATE+DELETE":{
"SqlExample":"INSERT INTO tbl(k, c, pad) VALUES(1, '###-###-###', '###-###');\nUPDATE tbl SET c='####-####-####', pad='####-####' WHERE id=?;\nDELETE FROM tbl WHERE id=?",
"ComparativeType": "INSERT+UPDATE+DELETE"
},
"SELECT":{
"SqlExample":"SELECT id,k FROM tbl ignore index(`PRIMARY`) WHERE id=? AND k=?",
"ComparativeType": "SELECT"
},
}
res_json['DESC']=desc_json
return res_json
def gen_select(input_file_name,res_json):
#if not os.path.exists(select_file_name):
# os.system(r"touch {}".format(select_file_name))
mysql_file_name = '{}/{}'.format(input_file_name, "mysql_select.jtl")
sharding_proxy_file_name = '{}/{}'.format(input_file_name, "sharding-proxy_select.jtl")
sharding_jdbc_file_name = '{}/{}'.format(input_file_name, "sharding-jdbc_select.jtl")
with open(sharding_proxy_file_name) as f:
for line in f:
line = line.strip("\n")
if line != "":
res_json['SELECT'][0]['data'].append(json.loads(line))
with open(sharding_jdbc_file_name) as f:
for line in f:
line = line.strip("\n")
if line != "":
res_json['SELECT'][1]['data'].append(json.loads(line))
with open(mysql_file_name) as f:
for line in f:
line = line.strip("\n")
if line != "":
res_json['SELECT'][2]['data'].append(json.loads(line))
def gen_all(input_file_name,res_json):
mysql_file_name = '{}/{}'.format(input_file_name, "mysql_all.jtl")
sharding_proxy_file_name = '{}/{}'.format(input_file_name, "sharding-proxy_all.jtl")
sharding_jdbc_file_name = '{}/{}'.format(input_file_name, "sharding-jdbc_all.jtl")
with open(sharding_proxy_file_name) as f:
for line in f:
line = line.strip("\n")
if line != "":
res_json['INSERT+UPDATE+DELETE'][0]['data'].append(json.loads(line))
with open(sharding_jdbc_file_name) as f:
for line in f:
line = line.strip("\n")
if line != "":
res_json['INSERT+UPDATE+DELETE'][1]['data'].append(json.loads(line))
with open(mysql_file_name) as f:
for line in f:
line = line.strip("\n")
if line != "":
res_json['INSERT+UPDATE+DELETE'][2]['data'].append(json.loads(line))
def cur_file_dir():
path = sys.path[0]
if os.path.isdir(path):
return path
elif os.path.isfile(path):
return os.path.dirname(path)
def gen_json(input_file_name, out_name):
res_json = OrderedDict()
res_json = {
"SELECT":[
{"type":"Sharding-Proxy",
"data":[]
},
{"type":"Sharding-JDBC",
"data":[]
},
{"type":"MySQL",
"data":[]
}
],
"INSERT+UPDATE+DELETE":[
{"type":"Sharding-Proxy",
"data":[]
},
{"type":"Sharding-JDBC",
"data":[]
},
{"type":"MySQL",
"data":[]
}
],
"DESC":{
}
}
res_json=gen_desc(res_json)
gen_select(input_file_name,res_json)
gen_all(input_file_name,res_json)
save_dir = cur_file_dir()
newfile='%s/%s'%(save_dir,out_name)
with open(newfile,'w') as f:
f.write(json.dumps(res_json))
if __name__ == '__main__':
input_file_name = sys.argv[1]
out_name = sys.argv[2]
gen_json(input_file_name, out_name)