#!/usr/bin/env python3 # Copyright (c) 2022 Intel Corporation # SPDX-License-Identifier: Apache-2.0 # This script upload test ci results to the zephyr ES instance for reporting and analysis. # see https://kibana.zephyrproject.io/ from elasticsearch import Elasticsearch from elasticsearch.helpers import bulk import sys import os import json import argparse def gendata(f, index, run_date=None, run_id=None, run_attempt=None): with open(f, "r") as j: data = json.load(j) for t in data['testsuites']: name = t['name'] _grouping = name.split("/")[-1] main_group = _grouping.split(".")[0] sub_group = _grouping.split(".")[1] env = data['environment'] if run_date: env['run_date'] = run_date if run_id: env['run_id'] = run_id if run_attempt: env['run_attempt'] = run_attempt t['environment'] = env t['component'] = main_group t['sub_component'] = sub_group yield { "_index": index, "_source": t } def main(): args = parse_args() if args.index: index_name = args.index else: index_name = 'tests-zephyr-1' settings = { "index": { "number_of_shards": 4 } } mappings = { "properties": { "execution_time": {"type": "float"}, "retries": {"type": "integer"}, "testcases.execution_time": {"type": "float"}, } } if args.dry_run: xx = None for f in args.files: xx = gendata(f, index_name, args.run_date, args.run_id, args.run_attempt) for x in xx: print(x) sys.exit(0) es = Elasticsearch( [os.environ['ELASTICSEARCH_SERVER']], api_key=os.environ['ELASTICSEARCH_KEY'], verify_certs=False ) if args.create_index: es.indices.create(index=index_name, mappings=mappings, settings=settings) else: if args.run_date: print(f"Setting run date from command line: {args.run_date}") for f in args.files: bulk(es, gendata(f, index_name, args.run_date, args.run_id, args.run_attempt)) def parse_args(): parser = argparse.ArgumentParser(allow_abbrev=False) parser.add_argument('-y','--dry-run', action="store_true", help='Dry run.') parser.add_argument('-c','--create-index', action="store_true", help='Create index.') parser.add_argument('-i', '--index', help='index to push to.', required=True) parser.add_argument('-r', '--run-date', help='Run date in ISO format', required=False) parser.add_argument('--run-id', required=False, help="unique run-id (e.g. from github.run_id context)") parser.add_argument('--run-attempt', required=False, help="unique run attempt number (e.g. from github.run_attempt context)") parser.add_argument('files', metavar='FILE', nargs='+', help='file with test data.') args = parser.parse_args() return args if __name__ == '__main__': main()