from datetime import datetime import glob import os import time import xml.etree.ElementTree as ET def generate(): BODY = {} ts = time.time() formatted_ts = \ datetime.fromtimestamp(ts).strftime('%Y-%m-%dT%H:%M:%S.%fZ') BODY['@timestamp'] = formatted_ts # Plots are obtained from csv files ( in archives directory in $WORKSPACE). csv_files = glob.glob('archives/*.csv') BODY['project'] = 'opendaylight' BODY['subject'] = 'test' # If there are no csv files, then it is a functional test. # Parse csv files and fill perfomance parameter values if len(csv_files) == 0: BODY['test-type'] = 'functional' else: BODY['test-type'] = 'performance' BODY['plots'] = {} for f in csv_files: key = (f.split('/')[-1])[:-4] BODY['plots'][key] = {} with open(f) as file: lines = file.readlines() props = lines[0].strip().split(',') vals = lines[1].strip().split(',') for i in range(len(props)): BODY['plots'][key][props[i]] = float(vals[i]) # Fill the required parameters whose values are obtained from environment. BODY['jenkins-silo'] = os.environ['SILO'] BODY['test-name'] = os.environ['JOB_NAME'] BODY['test-run'] = int(os.environ['BUILD_NUMBER']) # Parsing robot log for stats on start-time, pass/fail tests and duration. robot_log = os.environ['WORKSPACE'] + '/output.xml' tree = ET.parse(robot_log) BODY['id'] = '{}-{}'.format(os.environ['JOB_NAME'], os.environ['BUILD_NUMBER']) BODY['start-time'] = tree.getroot().attrib['generated'] BODY['pass-tests'] = int(tree.getroot().find('statistics') [0][1].get('pass')) BODY['fail-tests'] = int(tree.getroot().find('statistics') [0][1].get('fail')) endtime = tree.getroot().find('suite').find('status').get('endtime') starttime = tree.getroot().find('suite').find('status').get('starttime') elap_time = datetime.strptime(endtime, '%Y%m%d %H:%M:%S.%f') \ - datetime.strptime(starttime, '%Y%m%d %H:%M:%S.%f') BODY['duration'] = str(elap_time) return BODY