1*1b3f573fSAndroid Build Coastguard Workerfrom __future__ import print_function 2*1b3f573fSAndroid Build Coastguard Workerfrom __future__ import absolute_import 3*1b3f573fSAndroid Build Coastguard Workerimport argparse 4*1b3f573fSAndroid Build Coastguard Workerimport os 5*1b3f573fSAndroid Build Coastguard Workerimport re 6*1b3f573fSAndroid Build Coastguard Workerimport copy 7*1b3f573fSAndroid Build Coastguard Workerimport uuid 8*1b3f573fSAndroid Build Coastguard Workerimport calendar 9*1b3f573fSAndroid Build Coastguard Workerimport time 10*1b3f573fSAndroid Build Coastguard Workerimport datetime 11*1b3f573fSAndroid Build Coastguard Worker 12*1b3f573fSAndroid Build Coastguard Workerfrom util import big_query_utils 13*1b3f573fSAndroid Build Coastguard Workerfrom util import result_parser 14*1b3f573fSAndroid Build Coastguard Worker 15*1b3f573fSAndroid Build Coastguard Worker_PROJECT_ID = 'grpc-testing' 16*1b3f573fSAndroid Build Coastguard Worker_DATASET = 'protobuf_benchmark_result' 17*1b3f573fSAndroid Build Coastguard Worker_TABLE = 'opensource_result_v2' 18*1b3f573fSAndroid Build Coastguard Worker_NOW = "%d%02d%02d" % (datetime.datetime.now().year, 19*1b3f573fSAndroid Build Coastguard Worker datetime.datetime.now().month, 20*1b3f573fSAndroid Build Coastguard Worker datetime.datetime.now().day) 21*1b3f573fSAndroid Build Coastguard Worker 22*1b3f573fSAndroid Build Coastguard Worker_INITIAL_TIME = calendar.timegm(time.gmtime()) 23*1b3f573fSAndroid Build Coastguard Worker 24*1b3f573fSAndroid Build Coastguard Workerdef get_metadata(): 25*1b3f573fSAndroid Build Coastguard Worker build_number = os.getenv('BUILD_NUMBER') 26*1b3f573fSAndroid Build Coastguard Worker build_url = os.getenv('BUILD_URL') 27*1b3f573fSAndroid Build Coastguard Worker job_name = os.getenv('JOB_NAME') 28*1b3f573fSAndroid Build Coastguard Worker git_commit = os.getenv('GIT_COMMIT') 29*1b3f573fSAndroid Build Coastguard Worker # actual commit is the actual head of PR that is getting tested 30*1b3f573fSAndroid Build Coastguard Worker git_actual_commit = os.getenv('ghprbActualCommit') 31*1b3f573fSAndroid Build Coastguard Worker 32*1b3f573fSAndroid Build Coastguard Worker utc_timestamp = str(calendar.timegm(time.gmtime())) 33*1b3f573fSAndroid Build Coastguard Worker metadata = {'created': utc_timestamp} 34*1b3f573fSAndroid Build Coastguard Worker 35*1b3f573fSAndroid Build Coastguard Worker if build_number: 36*1b3f573fSAndroid Build Coastguard Worker metadata['buildNumber'] = build_number 37*1b3f573fSAndroid Build Coastguard Worker if build_url: 38*1b3f573fSAndroid Build Coastguard Worker metadata['buildUrl'] = build_url 39*1b3f573fSAndroid Build Coastguard Worker if job_name: 40*1b3f573fSAndroid Build Coastguard Worker metadata['jobName'] = job_name 41*1b3f573fSAndroid Build Coastguard Worker if git_commit: 42*1b3f573fSAndroid Build Coastguard Worker metadata['gitCommit'] = git_commit 43*1b3f573fSAndroid Build Coastguard Worker if git_actual_commit: 44*1b3f573fSAndroid Build Coastguard Worker metadata['gitActualCommit'] = git_actual_commit 45*1b3f573fSAndroid Build Coastguard Worker 46*1b3f573fSAndroid Build Coastguard Worker return metadata 47*1b3f573fSAndroid Build Coastguard Worker 48*1b3f573fSAndroid Build Coastguard Worker 49*1b3f573fSAndroid Build Coastguard Workerdef upload_result(result_list, metadata): 50*1b3f573fSAndroid Build Coastguard Worker for result in result_list: 51*1b3f573fSAndroid Build Coastguard Worker new_result = {} 52*1b3f573fSAndroid Build Coastguard Worker new_result["metric"] = "throughput" 53*1b3f573fSAndroid Build Coastguard Worker new_result["value"] = result["throughput"] 54*1b3f573fSAndroid Build Coastguard Worker new_result["unit"] = "MB/s" 55*1b3f573fSAndroid Build Coastguard Worker new_result["test"] = "protobuf_benchmark" 56*1b3f573fSAndroid Build Coastguard Worker new_result["product_name"] = "protobuf" 57*1b3f573fSAndroid Build Coastguard Worker labels_string = "" 58*1b3f573fSAndroid Build Coastguard Worker for key in result: 59*1b3f573fSAndroid Build Coastguard Worker labels_string += ",|%s:%s|" % (key, result[key]) 60*1b3f573fSAndroid Build Coastguard Worker new_result["labels"] = labels_string[1:] 61*1b3f573fSAndroid Build Coastguard Worker new_result["timestamp"] = _INITIAL_TIME 62*1b3f573fSAndroid Build Coastguard Worker print(labels_string) 63*1b3f573fSAndroid Build Coastguard Worker 64*1b3f573fSAndroid Build Coastguard Worker bq = big_query_utils.create_big_query() 65*1b3f573fSAndroid Build Coastguard Worker row = big_query_utils.make_row(str(uuid.uuid4()), new_result) 66*1b3f573fSAndroid Build Coastguard Worker if not big_query_utils.insert_rows(bq, _PROJECT_ID, _DATASET, 67*1b3f573fSAndroid Build Coastguard Worker _TABLE + "$" + _NOW, 68*1b3f573fSAndroid Build Coastguard Worker [row]): 69*1b3f573fSAndroid Build Coastguard Worker print('Error when uploading result', new_result) 70*1b3f573fSAndroid Build Coastguard Worker 71*1b3f573fSAndroid Build Coastguard Worker 72*1b3f573fSAndroid Build Coastguard Workerif __name__ == "__main__": 73*1b3f573fSAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 74*1b3f573fSAndroid Build Coastguard Worker parser.add_argument("-cpp", "--cpp_input_file", 75*1b3f573fSAndroid Build Coastguard Worker help="The CPP benchmark result file's name", 76*1b3f573fSAndroid Build Coastguard Worker default="") 77*1b3f573fSAndroid Build Coastguard Worker parser.add_argument("-java", "--java_input_file", 78*1b3f573fSAndroid Build Coastguard Worker help="The Java benchmark result file's name", 79*1b3f573fSAndroid Build Coastguard Worker default="") 80*1b3f573fSAndroid Build Coastguard Worker parser.add_argument("-python", "--python_input_file", 81*1b3f573fSAndroid Build Coastguard Worker help="The Python benchmark result file's name", 82*1b3f573fSAndroid Build Coastguard Worker default="") 83*1b3f573fSAndroid Build Coastguard Worker parser.add_argument("-go", "--go_input_file", 84*1b3f573fSAndroid Build Coastguard Worker help="The golang benchmark result file's name", 85*1b3f573fSAndroid Build Coastguard Worker default="") 86*1b3f573fSAndroid Build Coastguard Worker parser.add_argument("-node", "--node_input_file", 87*1b3f573fSAndroid Build Coastguard Worker help="The node.js benchmark result file's name", 88*1b3f573fSAndroid Build Coastguard Worker default="") 89*1b3f573fSAndroid Build Coastguard Worker parser.add_argument("-php", "--php_input_file", 90*1b3f573fSAndroid Build Coastguard Worker help="The pure php benchmark result file's name", 91*1b3f573fSAndroid Build Coastguard Worker default="") 92*1b3f573fSAndroid Build Coastguard Worker parser.add_argument("-php_c", "--php_c_input_file", 93*1b3f573fSAndroid Build Coastguard Worker help="The php with c ext benchmark result file's name", 94*1b3f573fSAndroid Build Coastguard Worker default="") 95*1b3f573fSAndroid Build Coastguard Worker args = parser.parse_args() 96*1b3f573fSAndroid Build Coastguard Worker 97*1b3f573fSAndroid Build Coastguard Worker metadata = get_metadata() 98*1b3f573fSAndroid Build Coastguard Worker print("uploading results...") 99*1b3f573fSAndroid Build Coastguard Worker upload_result(result_parser.get_result_from_file( 100*1b3f573fSAndroid Build Coastguard Worker cpp_file=args.cpp_input_file, 101*1b3f573fSAndroid Build Coastguard Worker java_file=args.java_input_file, 102*1b3f573fSAndroid Build Coastguard Worker python_file=args.python_input_file, 103*1b3f573fSAndroid Build Coastguard Worker go_file=args.go_input_file, 104*1b3f573fSAndroid Build Coastguard Worker node_file=args.node_input_file, 105*1b3f573fSAndroid Build Coastguard Worker php_file=args.php_input_file, 106*1b3f573fSAndroid Build Coastguard Worker php_c_file=args.php_c_input_file, 107*1b3f573fSAndroid Build Coastguard Worker ), metadata) 108