#!/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): 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 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) 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)) 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('files', metavar='FILE', nargs='+', help='file with test data.') args = parser.parse_args() return args if __name__ == '__main__': main()