xref: /aosp_15_r20/external/protobuf/benchmarks/util/result_uploader.py (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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