diff options
author | Arthur She <arthur.she@linaro.org> | 2015-11-03 06:48:06 -0800 |
---|---|---|
committer | Arthur She <arthur.she@linaro.org> | 2015-11-03 06:48:06 -0800 |
commit | 7757b7d5d6178c7422becba5adc2047d32b177d8 (patch) | |
tree | 1207faeec144ae69891bc493d2d224bcdef10cad | |
parent | 35aaadf85b773be7d208c8d7dec253152caa13cf (diff) |
patch from Milosz.
-rwxr-xr-x | art_post_script.py | 180 |
1 files changed, 113 insertions, 67 deletions
diff --git a/art_post_script.py b/art_post_script.py index 65e6160..210a665 100755 --- a/art_post_script.py +++ b/art_post_script.py @@ -5,6 +5,7 @@ import json import re import os import ast +import sys import zipfile import base64 import shutil @@ -13,6 +14,7 @@ import logging import requests import pickle from argparse import RawTextHelpFormatter +from optparse import OptionParser from StringIO import StringIO import xml.etree.ElementTree as ET from jenkinsapi.jenkins import Jenkins @@ -40,15 +42,16 @@ class InfoRequestError(Exception): class ArtDb(object): - def __init__(self, backend_url, username, password): + def __init__(self, backend_url, password): self.backend_url = backend_url - self.auth_user = username + #self.auth_user = username self.auth_pw = password def retrieve_object_list(backend_url, endpoint, params): url = urljoin(backend_url, endpoint) - #response = requests.get(url, params=params, headers=headers) - response = requests.get(url, params=params) + headers = {"Authorization": "Token %s" % self.auth_pw} + response = requests.get(url, params=params, headers=headers) + #response = requests.get(url, params=params) if response.status_code == 200: return response.json() else: @@ -56,12 +59,26 @@ class ArtDb(object): print response.reason print response.text return [] - + def push_object(self, endpoint, params): url = urljoin(self.backend_url, endpoint) + headers = {"Authorization": "Token %s" % self.auth_pw} + s = requests.Session() + r = requests.Request('POST', + url, + data=params, + headers=headers) + prep = r.prepare() + print r.headers + #headers.update({'Content-Type':'application/json'}) + #response = requests.post(url, data=params, headers=headers) + response = s.send(prep) + print response.request.headers + + #url = urljoin(self.backend_url, endpoint) #headers.update({'Content-Type':'application/json'}) #response = requests.post(url, data=params, headers=headers) - response = requests.post(url, data=params) + #response = requests.post(url, data=params) #pprint.pprint(params) if response.status_code < 300: return response.json() @@ -71,52 +88,54 @@ class ArtDb(object): return [] def submit_result_to_db(self, data): -# data = { "build_url" : "", +# data = { "build_url" : "", # "manifest" : "", # "gerrit_params" : {}, # "test_result" : [] } - + params = { "manifest": data['manifest'] } manifest = self.push_object(MANIFEST_ENDPOINT, params) - params = { - "name": data['test_result']['benchmark_name'] - } - benchmark = self.push_object(BENCHMARK_ENDPOINT, params) - params = { - "name" : data['test_result']['board_config'] - } - boardconfig = self.push_object(BOARDCONFIGURATION_ENDPOINT, params) - params = { - "displayname" : data['test_result']['board'], - "display" : data['test_result']['board'], - "configuration" : boardconfig['id'] - } - board = self.push_object(BOARD_ENDPOINT, params) + params = { "name" : data['gerrit_params']['GERRIT_BRANCH'] } branch = self.push_object(BRANCH_ENDPOINT, params) - params = { - "board": board['id'], - "branch": branch['id'], - "manifest": manifest['id'], - "build_url": data['build_url'], - "gerrit_change_id": data['gerrit_params']['GERRIT_CHANGE_ID'], - "gerrit_patchset_number": data['gerrit_params']['GERRIT_PATCHSET_NUMBER'], - "gerrit_change_number": data['gerrit_params']['GERRIT_CHANGE_NUMBER'], - "gerrit_change_url": data['gerrit_params']['GERRIT_CHANGE_URL'] - } - result = self.push_object(RESULT_ENDPOINT, params) - params = { - "benchmark": benchmark['id'], - "result": result['id'] - } - for t in data['test_result']['subscore']: - params.update(t) -# logger.info("Submit: %s" % str(params)) - self.push_object(RESULTDATA_ENDPOINT, params) + for bench in data['test_result']: + params = { + "name" : bench['board_config'] + } + boardconfig = self.push_object(BOARDCONFIGURATION_ENDPOINT, params) + params = { + "displayname" : bench['board'], + "display" : bench['board'], + "configuration" : boardconfig['id'] + } + board = self.push_object(BOARD_ENDPOINT, params) + params = { + "board": board['id'], + "branch": branch['id'], + "manifest": manifest['id'], + "build_url": data['build_url'], + "gerrit_change_id": data['gerrit_params']['GERRIT_CHANGE_ID'], + "gerrit_patchset_number": data['gerrit_params']['GERRIT_PATCHSET_NUMBER'], + "gerrit_change_number": data['gerrit_params']['GERRIT_CHANGE_NUMBER'], + "gerrit_change_url": data['gerrit_params']['GERRIT_CHANGE_URL'] + } + result = self.push_object(RESULT_ENDPOINT, params) + params = { + "name": bench['benchmark_name'] + } + benchmark = self.push_object(BENCHMARK_ENDPOINT, params) + params = { + "benchmark": benchmark['id'], + "result": result['id'] + } + for t in bench['subscore']: + params.update(t) + logger.info("Submit: %s" % str(params)) + self.push_object(RESULTDATA_ENDPOINT, params) class LinaroAndroidBuildSystem(object): @@ -226,6 +245,7 @@ class LAVA(object): logger.warning("Job #%s seems not be a complete job, can not get test result" % job_no) raise # Get target device name + #import pdb;pdb.set_trace() test_result['board'] = target['attributes']['target'] test_result['board_config'] = target['attributes']['target'] # Get test name and test result @@ -253,6 +273,8 @@ class LAVA(object): for benchmark in benchmark_list: # print("Benchmark: %s" % benchmark) test_result = {} + test_result['board'] = target['attributes']['target'] + test_result['board_config'] = target['attributes']['target'] # benchmark iteration test_result['benchmark_name'] = benchmark test_result['subscore'] = [] @@ -273,32 +295,55 @@ class LAVA(object): # if not test_result['test_result']: # raise InfoRequestError("No test cases in job #%s" % job_no) + import pprint + pprint.pprint(test_result_list) return test_result_list if __name__ == '__main__': - # Replace these authentication credential with environment variables - # Define them by ourselves - JENKINS_USERNAME = "arthur.she@linaro.org" - JENKINS_PASSWORD = "" - LAVA_USERNAME = "arthur.she" - LAVA_TOKEN = "" - BACKEND_DB_USERNAME = "" - BACKEND_DB_PASSWORD = "" - - parser = argparse.ArgumentParser() - parser.add_argument("-u", "--build-url", dest="build_url", required=True, + #parser = argparse.ArgumentParser() + parser = OptionParser() + parser.add_option("--build-url", dest="build_url", help="Specify the Jenkins build job url. This is MANDATORY.") - parser.add_argument("-db", "--backend-db", dest="backend_db", required=True, + parser.add_option("--backend-url", dest="backend_url", help="Specify the backend database url. This is MANDATORY.") - - args = parser.parse_args() - - if args.build_url[len(args.build_url) - 1] != '/': - url = args.build_url + '/' + parser.add_option("--db-token", dest="backend_token", + help="Specify the backend db token. This is MANDATORY.") + parser.add_option("--lava-url", dest="lava_url", + help="Specify the LAVA url. This is MANDATORY.") + parser.add_option("--lava-user", dest="lava_user", + help="Specify the LAVA user. This is MANDATORY.") + parser.add_option("--lava-token", dest="lava_token", + help="Specify the LAVA token. This is MANDATORY.") + parser.add_option("--jenkins-user", dest="jenkins_user", + help="Specify the Jenkins user. This is MANDATORY.") + parser.add_option("--jenkins-token", dest="jenkins_token", + help="Specify the Jenkins token. This is MANDATORY.") + + options, args = parser.parse_args() + + if not options.build_url: + parser.error("Build URL is mandatory") + if not options.backend_url: + parser.error("Backend URL is mandatory") + if not options.backend_token: + parser.error("Backend Token is mandatory") + if not options.lava_url: + parser.error("LAVA url is mandatory") + if not options.lava_user: + parser.error("LAVA user is mandatory") + if not options.lava_token: + parser.error("LAVA token is mandatory") + if not options.jenkins_user: + parser.error("Jenkins user is mandatory") + if not options.jenkins_token: + parser.error("Jenkins token is mandatory") + + if options.build_url[len(options.build_url) - 1] != '/': + url = options.build_url + '/' else: - url = args.build_url + url = options.build_url ul = url.split('/') jenkins_build_number = ul[-2] jenkins_project = ul[-3] @@ -306,13 +351,14 @@ if __name__ == '__main__': logger.info("build_no: %s\nproj: %s\nbase_url: %s" % (jenkins_build_number, jenkins_project, jenkins_base_url)) - try: - jenkins = LinaroAndroidBuildSystem(jenkins_base_url, jenkins_project, JENKINS_USERNAME, JENKINS_PASSWORD) - lava = LAVA(LAVA_USERNAME, LAVA_TOKEN) - backend_db = ArtDb(args.backend_db, BACKEND_DB_USERNAME, BACKEND_DB_PASSWORD) - except Exception as e: - logger.error("Initial objects error.\n%s" % e) - exit(-1) + #try: + jenkins = LinaroAndroidBuildSystem(jenkins_base_url, jenkins_project, options.jenkins_user, options.jenkins_token) + #lava = LAVA(LAVA_USERNAME, LAVA_TOKEN) + lava = LAVA(options.lava_user, options.lava_token) + backend_db = ArtDb(options.backend_url, options.backend_token) + #except Exception as e: + # logger.error("Initial objects error.\n%s" % e) + # exit(-1) try: gerrit_param = jenkins.get_build_gerrit_parameters(int(jenkins_build_number)) manifest = jenkins.get_build_manifest(int(jenkins_build_number)) @@ -320,7 +366,7 @@ if __name__ == '__main__': logger.error("Can not get required build information!\n%s" % e) exit(-1) - data = { "build_url" : args.build_url, + data = { "build_url" : options.build_url, "manifest": manifest, "gerrit_params": gerrit_param, "test_result": {} } |