aboutsummaryrefslogtreecommitdiff
path: root/benchmarks/util/result_uploader.py
diff options
context:
space:
mode:
Diffstat (limited to 'benchmarks/util/result_uploader.py')
-rwxr-xr-xbenchmarks/util/result_uploader.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/benchmarks/util/result_uploader.py b/benchmarks/util/result_uploader.py
new file mode 100755
index 00000000..a667da02
--- /dev/null
+++ b/benchmarks/util/result_uploader.py
@@ -0,0 +1,94 @@
+from __future__ import print_function
+from __future__ import absolute_import
+import argparse
+import os
+import re
+import copy
+import uuid
+import calendar
+import time
+import datetime
+
+from util import big_query_utils
+from util import result_parser
+
+_PROJECT_ID = 'grpc-testing'
+_DATASET = 'protobuf_benchmark_result'
+_TABLE = 'opensource_result_v2'
+_NOW = "%d%02d%02d" % (datetime.datetime.now().year,
+ datetime.datetime.now().month,
+ datetime.datetime.now().day)
+
+_INITIAL_TIME = calendar.timegm(time.gmtime())
+
+def get_metadata():
+ build_number = os.getenv('BUILD_NUMBER')
+ build_url = os.getenv('BUILD_URL')
+ job_name = os.getenv('JOB_NAME')
+ git_commit = os.getenv('GIT_COMMIT')
+ # actual commit is the actual head of PR that is getting tested
+ git_actual_commit = os.getenv('ghprbActualCommit')
+
+ utc_timestamp = str(calendar.timegm(time.gmtime()))
+ metadata = {'created': utc_timestamp}
+
+ if build_number:
+ metadata['buildNumber'] = build_number
+ if build_url:
+ metadata['buildUrl'] = build_url
+ if job_name:
+ metadata['jobName'] = job_name
+ if git_commit:
+ metadata['gitCommit'] = git_commit
+ if git_actual_commit:
+ metadata['gitActualCommit'] = git_actual_commit
+
+ return metadata
+
+
+def upload_result(result_list, metadata):
+ for result in result_list:
+ new_result = {}
+ new_result["metric"] = "throughput"
+ new_result["value"] = result["throughput"]
+ new_result["unit"] = "MB/s"
+ new_result["test"] = "protobuf_benchmark"
+ new_result["product_name"] = "protobuf"
+ labels_string = ""
+ for key in result:
+ labels_string += ",|%s:%s|" % (key, result[key])
+ new_result["labels"] = labels_string[1:]
+ new_result["timestamp"] = _INITIAL_TIME
+
+ bq = big_query_utils.create_big_query()
+ row = big_query_utils.make_row(str(uuid.uuid4()), new_result)
+ if not big_query_utils.insert_rows(bq, _PROJECT_ID, _DATASET,
+ _TABLE + "$" + _NOW,
+ [row]):
+ print('Error when uploading result', new_result)
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-cpp", "--cpp_input_file",
+ help="The CPP benchmark result file's name",
+ default="")
+ parser.add_argument("-java", "--java_input_file",
+ help="The Java benchmark result file's name",
+ default="")
+ parser.add_argument("-python", "--python_input_file",
+ help="The Python benchmark result file's name",
+ default="")
+ parser.add_argument("-go", "--go_input_file",
+ help="The golang benchmark result file's name",
+ default="")
+ args = parser.parse_args()
+
+ metadata = get_metadata()
+ print("uploading results...")
+ upload_result(result_parser.get_result_from_file(
+ cpp_file=args.cpp_input_file,
+ java_file=args.java_input_file,
+ python_file=args.python_input_file,
+ go_file=args.go_input_file
+ ), metadata) \ No newline at end of file