mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-15 06:06:35 +08:00
70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
import os
|
|
import re
|
|
import sys
|
|
import subprocess
|
|
|
|
from dateutil.parser import parse as parse_datestr
|
|
from glob import glob
|
|
|
|
import gspread
|
|
|
|
from oauth2client.service_account import ServiceAccountCredentials
|
|
|
|
scope = ['https://spreadsheets.google.com/feeds']
|
|
|
|
|
|
def usage():
|
|
print "./scripts/upload-benchmark-data.py <datadir>"
|
|
|
|
|
|
def anymean(filename):
|
|
output = subprocess.check_output(['./scripts/toolbox/any_mean.py', filename])
|
|
if output == '':
|
|
return 0.0, 0.0
|
|
|
|
# e.g. 'Synced Messages: 77.00 +-0.00'
|
|
synced_messages, confidence_interval = re.match('^Synced Messages: ([0-9.]+) (\+-[0-9.]+)$', output).groups()
|
|
return synced_messages, confidence_interval
|
|
|
|
|
|
def update_spreadsheet(datadir):
|
|
credentials = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
|
|
gc = gspread.authorize(credentials)
|
|
worksheet = gc.open("Nylas Mail Benchmarks").sheet1
|
|
|
|
filenames = []
|
|
for filename in glob('{datadir}/*-results.txt'.format(datadir=datadir)):
|
|
gitsha = re.match('^(.*)-results.txt$', os.path.basename(filename)).groups(0)[0]
|
|
formatted_datetime = subprocess.check_output(['git', 'show', '-s', '--format=%ci', gitsha])
|
|
parsed_datetime = parse_datestr(formatted_datetime)
|
|
filenames.append((filename, gitsha, parsed_datetime))
|
|
|
|
new_data = []
|
|
for filename, gitsha, parsed_datetime in sorted(filenames, key=lambda t: t[2]):
|
|
synced_messages, confidence_interval = anymean(filename)
|
|
row = (parsed_datetime.strftime("%Y-%m-%d %H:%M:%S"), gitsha, synced_messages, confidence_interval)
|
|
new_data.append(row)
|
|
print row
|
|
|
|
# TODO: might want to use the batch upload api in order to not run into rate-limits
|
|
for i, new_row in enumerate(new_data):
|
|
row_num = i+2
|
|
existing_row = worksheet.range('A{row_num}:D{row_num}'.format(row_num=row_num))
|
|
for j, cell in enumerate(existing_row):
|
|
col_num = j+1
|
|
cell.value = new_row[j]
|
|
print "updating cell {row_num}:{col_num} with {val}".format(row_num=row_num, col_num=col_num, val=cell.value)
|
|
worksheet.update_cells(existing_row)
|
|
|
|
|
|
def main():
|
|
if len(sys.argv) != 2:
|
|
usage()
|
|
return 1
|
|
|
|
datadir = sys.argv[1]
|
|
update_spreadsheet(datadir)
|
|
return 0
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|