diff options
-rw-r--r-- | docker/Dockerfile | 38 | ||||
-rw-r--r-- | integration/storperf/README.md | 50 | ||||
-rwxr-xr-x | integration/storperf/cleanup.sh | 14 | ||||
-rw-r--r-- | integration/storperf/docker-compose.yaml (renamed from integration/storperf/storperf-docker-compose.yaml) | 15 | ||||
-rwxr-xr-x | integration/storperf/launch_containers.sh | 100 | ||||
-rwxr-xr-x | integration/storperf/prepare.sh (renamed from integration/storperf/openstack.sh) | 23 | ||||
-rwxr-xr-x | integration/storperf/run_ci.sh | 21 | ||||
-rwxr-xr-x | integration/storperf/start_job.sh | 39 | ||||
-rwxr-xr-x | integration/storperf/storperf.sh | 88 | ||||
-rwxr-xr-x | integration/storperf/storperf_docker.sh | 35 | ||||
-rw-r--r-- | integration/storperf/storperf_requirments.txt (renamed from integration/storperf/storperf_requirements.txt) | 3 | ||||
-rw-r--r-- | qtip/cli/commands/cmd_qpi.py | 48 | ||||
-rw-r--r-- | requirements.txt | 2 | ||||
-rw-r--r-- | resources/QPI/compute.yaml | 7 | ||||
-rw-r--r-- | tests/unit/cli/cmd_qpi_test.py | 24 |
15 files changed, 280 insertions, 227 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile index bab503fc..0405aa45 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -8,11 +8,17 @@ LABEL version="0.1" description="OPNFV QTIP Docker container" ARG BRANCH=master -ENV REPOS_DIR /home/opnfv/repos -ENV PYTHONPATH /home/opnfv/repos/qtip -ENV USER root +ENV REPOS_DIR=/home/opnfv/repos \ + PYTHONPATH=/home/opnfv/repos/qtip \ + USER=root + WORKDIR /home/opnfv +RUN mkdir -p ${REPOS_DIR} \ + && mkdir -p /root/qtip/logs \ + && mkdir -p /root/.ssh \ + && chmod 700 /root/.ssh + # Packaged Dependencies RUN apt-get update && apt-get install -y \ software-properties-common \ @@ -28,26 +34,19 @@ RUN apt-get update && apt-get install -y \ python-setuptools \ rsync \ iputils-ping \ + wget \ + curl \ + openssh-client \ --no-install-recommends \ -&& rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* RUN pip install -U pip && pip install -U setuptools -RUN apt-add-repository ppa:ansible/ansible -y -RUN apt-key update -y -RUN apt-get update && apt-get install ansible -y - -RUN mkdir -p ${REPOS_DIR} -RUN mkdir -p /root/.ssh -RUN mkdir -p /root/qtip/logs - -RUN chmod 700 /root/.ssh - #Cloning Repos -RUN git config --global http.sslVerify false -RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/qtip $REPOS_DIR/qtip - -RUN cd $REPOS_DIR/qtip && pip install -U -e . +RUN git config --global http.sslVerify false \ + && git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/qtip $REPOS_DIR/qtip \ + && cd $REPOS_DIR/qtip \ + && pip install -U -e . RUN echo 'eval $(ssh-agent)' >> /root/.bashrc @@ -55,8 +54,7 @@ RUN echo 'eval $(ssh-agent)' >> /root/.bashrc EXPOSE 5000 #Config supervisor -RUN mkdir -p /var/log/supervisor -RUN locale-gen en_US en_US.UTF-8 +RUN mkdir -p /var/log/supervisor && locale-gen en_US en_US.UTF-8 COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf CMD ["/usr/bin/supervisord"]
\ No newline at end of file diff --git a/integration/storperf/README.md b/integration/storperf/README.md index 137e15be..bdcc7e70 100644 --- a/integration/storperf/README.md +++ b/integration/storperf/README.md @@ -1,13 +1,45 @@ -# usage +# Usage Please make sure pip, docker and docker-compose are installer on your environment. -``` -storperf.sh -t installer_type -i installer_ip -s stack_json_file -j job_json_file +1. Launch qtip and storperf containers. -options: - -t : installer type. For now only supports Apex. - -i : installer ip address. - -s : Stack configuration json file. If not given, default_stack.json will be used. - -j : Storperf job configuration json file. If not given, default_job.json will be used. -```
\ No newline at end of file + ``` + $ cd qtip/integration/storperf + $ bash launch_containers.sh -t apex -n "" + + Arguments: + + -t : Installer type. For now only supports Apex. + -n : Node name. + ``` + + Then you will get 5 containers: + + ``` + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + 2c079d5d88bc opnfv/qtip "/usr/bin/supervisord" 38 minutes ago Up 38 minutes 5000/tcp qtip + 2032a16dab17 opnfv/storperf-httpfrontend "nginx -g 'daemon ..." 38 minutes ago Up 38 minutes 80/tcp, 0.0.0.0:5000->5000/tcp storperf-httpfrontend + c0d3e2763d35 schickling/swagger-ui "sh run.sh" 39 minutes ago Up 38 minutes 80/tcp storperf-swaggerui + 0e08a1968829 opnfv/storperf-reporting "python app.py" 39 minutes ago Up 38 minutes 0.0.0.0:5080->5000/tcp storperf-reporting + b92967139d8e opnfv/storperf-master "/usr/bin/supervisord" 39 minutes ago Up 39 minutes 5000/tcp, 0.0.0.0:8000->8000/tcp storperf-master + ``` + +2. Prepare environment. + + ``` + $ docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/prepare.sh" + ``` + + This command can create a flavor and upload a Ubuntu 16.04 image on OpenStack. + +3. Run storperf job. + + ``` + $ docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/start_job.sh -s stack.json -j job.json" + + Arguments: + + -s : Stack configuration json file. If not given, default_stack.json will be used. + -j : Storperf job configuration json file. If not given, default_job.json will be used. + ``` diff --git a/integration/storperf/cleanup.sh b/integration/storperf/cleanup.sh new file mode 100755 index 00000000..1aee1658 --- /dev/null +++ b/integration/storperf/cleanup.sh @@ -0,0 +1,14 @@ +#! /bin/bash +############################################################################## +# Copyright (c) 2017 ZTE and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +echo "Deleting image" +openstack image delete "Ubuntu 16.04 x86_64" + +echo "Deteing flavor" +openstack flavor delete storperf diff --git a/integration/storperf/storperf-docker-compose.yaml b/integration/storperf/docker-compose.yaml index ec121802..8cef5bc3 100644 --- a/integration/storperf/storperf-docker-compose.yaml +++ b/integration/storperf/docker-compose.yaml @@ -1,5 +1,5 @@ ############################################################################## -# Copyright (c) 2017 Dell EMC and others. +# Copyright (c) 2017 Dell EMC, ZTE and others. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 @@ -10,6 +10,7 @@ version: '2' services: + storperf-master: container_name: "storperf-master" image: opnfv/storperf-master @@ -18,15 +19,12 @@ services: env_file: ${ENV_FILE} volumes: - ${CARBON_DIR}:/opt/graphite/storage/whisper - - ./storperf-master/:/home/opnfv/repos/storperf storperf-reporting: container_name: "storperf-reporting" image: opnfv/storperf-reporting ports: - "5080:5000" - volumes: - - ./storperf-reporting/:/home/opnfv/storperf-reporting storperf-swaggerui: container_name: "storperf-swaggerui" @@ -40,4 +38,11 @@ services: links: - storperf-master - storperf-reporting - - storperf-swaggerui
\ No newline at end of file + - storperf-swaggerui + + qtip: + container_name: qtip + image: opnfv/qtip + env_file: ${ENV_FILE} + links: + - storperf-httpfrontend diff --git a/integration/storperf/launch_containers.sh b/integration/storperf/launch_containers.sh new file mode 100755 index 00000000..3fcf8052 --- /dev/null +++ b/integration/storperf/launch_containers.sh @@ -0,0 +1,100 @@ +#! /bin/bash +############################################################################## +# Copyright (c) 2017 ZTE and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +usage(){ + echo "usage: $0 -t <installer_type> -n <node_name>" >&2 +} + +#Get options +while getopts ":t:n:he" optchar; do + case "${optchar}" in + t) installer_type=${OPTARG} ;; + n) node_name=${OPTARG} ;; + h) usage + exit 0 + ;; + *) echo "Non-option argument: '-${OPTARG}'" >&2 + usage + exit 2 + ;; + esac +done + + +#set vars from env if not provided by user as options +installer_type=${installer_type:-$INSTALLER_TYPE} +node_name=${node_name:-$NODE_NAME} + +case $installer_type in + apex) + installer_ip=`sudo virsh domifaddr undercloud | grep ipv4 | awk '{print $4}' | cut -d/ -f1` + ;; + *) + + echo "Unsupported $installer_type. Cannot continue!" + exit 1 +esac + +if [[ -z $WORKSPACE ]];then + WORKSPACE=`pwd` +fi + +git clone --depth 1 https://gerrit.opnfv.org/gerrit/releng $WORKSPACE/releng + +$WORKSPACE/releng/utils/fetch_os_creds.sh -i ${installer_type} -a ${installer_ip} -d $WORKSPACE/openrc + +grep "export" $WORKSPACE/openrc | sed "s/export //" > $WORKSPACE/admin.rc +echo "INSTALLER_TYPE=${installer_type}" >> $WORKSPACE/admin.rc +echo "INSTALLER_IP=${installer_ip}" >> $WORKSPACE/admin.rc +echo "NODE_NAME=${node_name}" >> $WORKSPACE/admin.rc +export ENV_FILE=$WORKSPACE/admin.rc + +export CARBON_DIR=$WORKSPACE/carbon/ +WWW_DATA_UID=33 +WWW_DATA_GID=33 +sudo install --owner=${WWW_DATA_UID} --group=${WWW_DATA_GID} -d "${CARBON_DIR}" + +clean_storperf_container() +{ + docker-compose -f docker-compose.yaml down + + for name in qtip storperf-master storperf-swaggerui storperf-httpfrontend storperf-reporting + do + container=`docker ps -a -q -f name=$name` + if [[ ! -z $container ]];then + echo "Stopping any existing $name container" + docker rm -fv $container + fi + + image=`docker images opnfv/$name` + if [[ ! -z $image ]];then + echo "Deleteing any existing opnfv/$name image" + docker rmi -f opnfv/$container_name + fi + done +} + +launch_storperf_container() +{ + docker-compose pull + docker-compose -f docker-compose.yaml up -d + + echo "Waiting for StorPerf to become active" + + while [ $(curl -s -o /dev/null -I -w "%{http_code}" -X GET http://127.0.0.1:5000/api/v1.0/configurations) != "200" ] + do + sleep 1 + done +} + +echo "Clean existing storperf containers" +clean_storperf_container + +echo "Launch new storperf containers" +launch_storperf_container
\ No newline at end of file diff --git a/integration/storperf/openstack.sh b/integration/storperf/prepare.sh index 99701871..345a80bc 100755 --- a/integration/storperf/openstack.sh +++ b/integration/storperf/prepare.sh @@ -7,6 +7,16 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# See https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within +script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +pip install -r $script_dir/storperf_requirements.txt + +if [[ -z $WORKSPACE ]];then + WORKSPACE=`pwd` +fi + + delete_storperf_stack() { echo "Checking for an existing stack" @@ -16,6 +26,7 @@ delete_storperf_stack() fi } + load_ubuntu_image() { echo "Checking for Ubuntu 16.04 image in Glance" @@ -24,8 +35,8 @@ load_ubuntu_image() cd $WORKSPACE if [[ ! -f ubuntu-16.04-server-cloudimg-amd64-disk1.img ]];then echo "download Ubuntu 16.04 image" - wget https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img - wget https://cloud-images.ubuntu.com/releases/16.04/release/MD5SUMS + wget -q https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img + wget -q https://cloud-images.ubuntu.com/releases/16.04/release/MD5SUMS checksum=$(cat ./MD5SUMS |grep ubuntu-16.04-server-cloudimg-amd64-disk1.img | md5sum -c) if [[ $checksum =~ 'FAILED' ]];then echo "Check image md5sum failed. Exit!" @@ -58,8 +69,6 @@ create_storperf_flavor() } -nova_vm_mapping() -{ - rm ./nova_vm.json - openstack server list --name storperf-agent -c ID -c Host --long -f json > nova_vm.json -}
\ No newline at end of file +delete_storperf_stack +load_ubuntu_image +create_storperf_flavor diff --git a/integration/storperf/run_ci.sh b/integration/storperf/run_ci.sh new file mode 100755 index 00000000..ca67ac62 --- /dev/null +++ b/integration/storperf/run_ci.sh @@ -0,0 +1,21 @@ +#! /bin/bash +############################################################################## +# Copyright (c) 2017 ZTE and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + + +source $WORKSPACE/integration/storperf/launch_containers.sh -t $INSTALLER_TYPE -n $NODE_NAME + +docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/prepare.sh" + +docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/start_job.sh" + +docker exec qtip bash -c "/home/opnfv/repos/qtip/integration/storperf/cleanup.sh" + +exit 0 + + diff --git a/integration/storperf/start_job.sh b/integration/storperf/start_job.sh index e94356e5..672dabef 100755 --- a/integration/storperf/start_job.sh +++ b/integration/storperf/start_job.sh @@ -29,11 +29,22 @@ done # See https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +stack_json=${stack_json:-"$script_dir/default_stack.json"} +job_json=${job_json:-"$script_dir/default_job.json"} + if [[ -z $WORKSPACE ]];then WORKSPACE=`pwd` fi -source $script_dir/openstack.sh +nova_vm_mapping() +{ + rm $WORKSPACE/nova_vm.json + openstack server list --name storperf-agent -c ID -c Host --long -f json > $WORKSPACE/nova_vm.json + + echo ========================================================================== + cat $WORKSPACE/nova_vm.json + echo ========================================================================== +} echo ========================================================================== echo "Start to create storperf stack" @@ -42,7 +53,7 @@ echo ========================================================================== curl -X POST --header 'Content-Type: application/json' \ --header 'Accept: application/json' -d @${stack_json} \ - 'http://127.0.0.1:5000/api/v1.0/configurations' + 'http://storperf-httpfrontend:5000/api/v1.0/configurations' nova_vm_mapping @@ -54,23 +65,26 @@ echo ========================================================================== JOB=$(curl -s -X POST --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ - -d @${job_json} 'http://127.0.0.1:5000/api/v1.0/jobs' | \ + -d @${job_json} 'http://storperf-httpfrontend:5000/api/v1.0/jobs' | \ awk '/job_id/ {print $2}' | sed 's/"//g') echo "JOB ID: $JOB" if [[ -z "$JOB" ]]; then echo "Oops, JOB ID is empty!" else - echo "Loop: check job status" - curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=$JOB&type=status" \ + echo "checking job status..." + curl -s -X GET "http://storperf-httpfrontend:5000/api/v1.0/jobs?id=$JOB&type=status" \ -o $WORKSPACE/status.json + cat $WORKSPACE/status.json + JOB_STATUS=`cat $WORKSPACE/status.json | awk '/Status/ {print $2}' | cut -d\" -f2` + while [ "$JOB_STATUS" != "Completed" ] do - sleep 30 + sleep 180 mv $WORKSPACE/status.json $WORKSPACE/old-status.json - curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=$JOB&type=status" \ + curl -s -X GET "http://storperf-httpfrontend:5000/api/v1.0/jobs?id=$JOB&type=status" \ -o $WORKSPACE/status.json JOB_STATUS=`cat $WORKSPACE/status.json | awk '/Status/ {print $2}' | cut -d\" -f2` diff $WORKSPACE/status.json $WORKSPACE/old-status.json >/dev/null @@ -80,19 +94,16 @@ else fi done - echo ========================================================================== + echo echo "Storperf test completed!" - echo ========================================================================== - - curl -s -X GET "http://127.0.0.1:5000/api/v1.0/jobs?id=$JOB&type=metadata" \ - -o $WORKSPACE/report.json echo ========================================================================== echo Final report echo ========================================================================== + curl -s -X GET "http://storperf-httpfrontend:5000/api/v1.0/jobs?id=$JOB&type=metadata" \ + -o $WORKSPACE/report.json cat $WORKSPACE/report.json fi echo "Deleting stack for cleanup" -curl -s -X DELETE --header 'Accept: application/json' 'http://127.0.0.1:5000/api/v1.0/configurations' - +curl -s -X DELETE --header 'Accept: application/json' 'http://storperf-httpfrontend:5000/api/v1.0/configurations'
\ No newline at end of file diff --git a/integration/storperf/storperf.sh b/integration/storperf/storperf.sh deleted file mode 100755 index 31e059d7..00000000 --- a/integration/storperf/storperf.sh +++ /dev/null @@ -1,88 +0,0 @@ -#! /bin/bash -############################################################################## -# Copyright (c) 2017 ZTE and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -usage(){ - echo "usage: $0 -t <installer_type> -i <installer_ip> -s <stack_json_path> -j <job_json_path> " >&2 -} - -#Get options -while getopts ":t:i:s:j:he" optchar; do - case "${optchar}" in - t) installer_type=${OPTARG} ;; - i) installer_ip=${OPTARG} ;; - s) stack_json=${OPTARG} ;; - j) job_json=${OPTARG} ;; - h) usage - exit 0 - ;; - *) echo "Non-option argument: '-${OPTARG}'" >&2 - usage - exit 2 - ;; - esac -done - -# See https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within -script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -if [[ -z $WORKSPACE ]];then - WORKSPACE=`pwd` -fi - -#set vars from env if not provided by user as options -installer_type=${installer_type:-$INSTALLER_TYPE} -installer_ip=${installer_ip:-$INSTALLER_IP} -stack_json=${stack_json:-"$script_dir/default_stack.json"} -job_json=${job_json:-"$script_dir/default_job.json"} - -source $script_dir/openstack.sh -source $script_dir/storperf_docker.sh - -git clone --depth 1 https://gerrit.opnfv.org/gerrit/storperf $WORKSPACE/storperf -git clone --depth 1 https://gerrit.opnfv.org/gerrit/releng $WORKSPACE/releng - -virtualenv $WORKSPACE/storperf_venv -source $WORKSPACE/storperf_venv/bin/activate - -pip install -r $script_dir/storperf_requirements.txt - -$WORKSPACE/releng/utils/fetch_os_creds.sh -i ${installer_type} -a ${installer_ip} -d $WORKSPACE/openrc -source $WORKSPACE/openrc - -grep "export" $WORKSPACE/openrc | sed "s/export //" > $WORKSPACE/admin.rc -echo "INSTALLER_TYPE=${installer_type}" >> $WORKSPACE/admin.rc -export ENV_FILE=$WORKSPACE/admin.rc - -if [[ ! -d $WORKSPACE/carbon ]];then - mkdir -p $WORKSPACE/carbon - sudo chown 33:33 $WORKSPACE/carbon -fi -export CARBON_DIR=$WORKSPACE/carbon/ - -delete_storperf_stack -load_ubuntu_image -create_storperf_flavor - -cd $WORKSPACE/storperf/docker -cp $script_dir/storperf-docker-compose.yaml ./ -echo "Clean existing storperf containers" -clean_storperf_container -echo "Launch new storperf containers" -launch_storperf_container - -$script_dir/start_job.sh -s $stack_json -j $job_json - -echo "Clean up environment" -cd $WORKSPACE/storperf/docker -clean_storperf_container -openstack flavor delete storperf -openstack image delete "Ubuntu 16.04 x86_64" - -echo "Done!" - diff --git a/integration/storperf/storperf_docker.sh b/integration/storperf/storperf_docker.sh deleted file mode 100755 index 629a4edb..00000000 --- a/integration/storperf/storperf_docker.sh +++ /dev/null @@ -1,35 +0,0 @@ -#! /bin/bash -############################################################################## -# Copyright (c) 2017 ZTE and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -clean_storperf_container() -{ - docker-compose -f storperf-docker-compose.yaml down - - for container_name in storperf storperf-master storperf-swaggerui storperf-httpfrontend storperf-reporting - do - container=`docker ps -a -q -f name=$container_name` - if [[ ! -z $container ]];then - echo "Stopping any existing $container_name container" - docker rm -fv $container - fi - done -} - - -launch_storperf_container() -{ - docker-compose -f storperf-docker-compose.yaml up -d - - echo "Waiting for StorPerf to become active" - - while [ $(curl -s -o /dev/null -I -w "%{http_code}" -X GET http://127.0.0.1:5000/api/v1.0/configurations) != "200" ] - do - sleep 1 - done -}
\ No newline at end of file diff --git a/integration/storperf/storperf_requirements.txt b/integration/storperf/storperf_requirments.txt index 4f8b07c5..4a279ae5 100644 --- a/integration/storperf/storperf_requirements.txt +++ b/integration/storperf/storperf_requirments.txt @@ -1,6 +1,5 @@ -setuptools==33.1.1 functools32==3.2.3.post2 pytz==2016.10 osc_lib==1.3.0 python-openstackclient==3.7.0 -python-heatclient==1.7.0
\ No newline at end of file +python-heatclient==1.7.0 diff --git a/qtip/cli/commands/cmd_qpi.py b/qtip/cli/commands/cmd_qpi.py index d08842a4..4865b7ae 100644 --- a/qtip/cli/commands/cmd_qpi.py +++ b/qtip/cli/commands/cmd_qpi.py @@ -9,47 +9,41 @@ import click -from colorama import Fore import os +from os import path +from prettytable import PrettyTable +import yaml -from qtip.base.error import InvalidContentError -from qtip.base.error import NotFoundError -from qtip.cli import utils -from qtip.loader.qpi import QPISpec +QPI_PATH = path.join(path.dirname(__file__), '..', '..', '..', + 'resources', 'QPI') @click.group() def cli(): - ''' Collection of performance tests ''' + """ Collection of performance tests """ pass @cli.command('list', help='List all the QPI specs') def cmd_list(): - qpis = QPISpec.list_all() - table = utils.table('QPIs', qpis) + table = PrettyTable(['QPI', 'Description']) + table.align = 'l' + for qpi in os.listdir(QPI_PATH): + if qpi.endswith('yaml'): + with open('{}/{}'.format(QPI_PATH, qpi)) as conf: + details = yaml.safe_load(conf) + table.add_row([details['name'], details['description']]) click.echo(table) @cli.command('show', help='View details of a QPI') @click.argument('name') def show(name): - try: - qpi = QPISpec('{}.yaml'.format(name)) - except NotFoundError as nf: - click.echo(Fore.RED + "ERROR: qpi spec: " + nf.message) - except InvalidContentError as ice: - click.echo(Fore.RED + "ERROR: qpi spec: " + ice.message) - else: - cnt = qpi.content - output = utils.render('qpi', cnt) - click.echo(output) - - -@cli.command('run', help='Run performance tests for the specified QPI') -@click.argument('name') -@click.option('-p', '--path', help='Path to store results') -def run(name, path): - runner_path = path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir, - 'runner/runner.py') - os.system('python {0} -b all -d {1}'.format(runner_path, path)) + table = PrettyTable(['QPI', 'Description', 'Formula']) + table.align = 'l' + with open('{}/{}.yaml'.format(QPI_PATH, name)) as conf: + qpi = yaml.safe_load(conf) + for section in qpi['sections']: + table.add_row([section['name'], section['description'], + section['formula']]) + click.echo(table) diff --git a/requirements.txt b/requirements.txt index 3a13361a..3b1d7498 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,4 +11,4 @@ six PyYAML humanfriendly asq -Django +Django
\ No newline at end of file diff --git a/resources/QPI/compute.yaml b/resources/QPI/compute.yaml index 8169da4f..50c1cfbf 100644 --- a/resources/QPI/compute.yaml +++ b/resources/QPI/compute.yaml @@ -29,7 +29,7 @@ sections: # split based on different application metrics: - name: ssl_rsa description: performance of cryptographic using RSA cipher algorithm - formual: geometric mean + formula: geometric mean workloads: - name: rsa_sign_512 description: rsa 512 bits sign per second @@ -50,7 +50,7 @@ sections: # split based on different application - name: ssl_aes description: > performance of advanced encryption standard (AES) cipher algorithm in cipher block chaining (CBC) mode - formual: geometric mean + formula: geometric mean workloads: - name: aes_128_cbc_16_bytes description: aes 128 bits key cbc on 16 bytes blocks @@ -64,6 +64,7 @@ sections: # split based on different application description: aes 128 bits key cbc on 8192 bytes blocks - name: DPI description: deep packet inspection + formula: geometric mean metrics: - name: dpi_throughput description: deep packet inspection throughput @@ -74,6 +75,7 @@ sections: # split based on different application description: DPI bits per second - name: memory description: cache and memory performance + formula: geometric mean metrics: - name: floatmem description: > @@ -123,6 +125,7 @@ sections: # split based on different application (A = m*B + C). - name: arithmetic description: arithmetic computing speed + formula: geometric mean metrics: - name: integer description: > diff --git a/tests/unit/cli/cmd_qpi_test.py b/tests/unit/cli/cmd_qpi_test.py index e7823c9b..ba5f814e 100644 --- a/tests/unit/cli/cmd_qpi_test.py +++ b/tests/unit/cli/cmd_qpi_test.py @@ -20,24 +20,14 @@ def runner(): def test_list(runner): result = runner.invoke(cli, ['qpi', 'list']) - assert 'QPIs' and 'compute' in result.output - - -def test_run(runner): - result = runner.invoke(cli, ['qpi', 'run', 'fake-qpi']) - assert result.output == '' - - result = runner.invoke(cli, ['qpi', 'run']) - assert 'Missing argument "name".' in result.output + assert 'QPI' in result.output + assert 'compute' in result.output + assert 'Description' in result.output + assert 'QTIP Performance Index of compute' in result.output def test_show(runner): result = runner.invoke(cli, ['qpi', 'show', 'compute']) - assert 'Name: compute' in result.output - assert 'Description: sample performance index of computing' in result.output - - result = runner.invoke(cli, ['qpi', 'show']) - assert 'Missing argument "name".' in result.output - - result = runner.invoke(cli, ['qpi', 'show', 'xyz']) - assert "ERROR: qpi spec: xyz not found" in result.output + assert 'QPI' in result.output + assert 'Description' in result.output + assert 'Formula' in result.output |