summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur She <arthur.she@linaro.org>2015-11-03 06:48:06 -0800
committerArthur She <arthur.she@linaro.org>2015-11-03 06:48:06 -0800
commit7757b7d5d6178c7422becba5adc2047d32b177d8 (patch)
tree1207faeec144ae69891bc493d2d224bcdef10cad
parent35aaadf85b773be7d208c8d7dec253152caa13cf (diff)
patch from Milosz.
-rwxr-xr-xart_post_script.py180
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": {} }