diff options
-rw-r--r-- | INFO | 1 | ||||
-rw-r--r-- | jjb/apex/apex.yml | 107 | ||||
-rw-r--r-- | jjb/functest/functest-ci-jobs.yml | 16 | ||||
-rw-r--r-- | jjb/joid/joid-ci-jobs.yml | 12 | ||||
-rw-r--r-- | jjb/opnfv/opnfv-docs.yml | 4 | ||||
-rwxr-xr-x | utils/jenkins-jnlp-connect.sh | 9 | ||||
-rw-r--r-- | utils/test/result_collection_api/dashboard/functest2Dashboard.py | 19 | ||||
-rw-r--r-- | utils/test/result_collection_api/resources/models.py | 1 | ||||
-rw-r--r-- | utils/test/result_collection_api/tools/dashboard/css/opnfv_dashboard_tests.css | 2 | ||||
-rw-r--r-- | utils/test/result_collection_api/tools/dashboard/js/opnfv_dashboard_tests.js | 4 | ||||
-rw-r--r-- | utils/test/result_collection_api/tools/reporting/default.css | 56 | ||||
-rw-r--r-- | utils/test/result_collection_api/tools/reporting/index-tmpl.html | 91 | ||||
-rw-r--r-- | utils/test/result_collection_api/tools/reporting/reporting.py | 83 |
13 files changed, 339 insertions, 66 deletions
@@ -18,7 +18,6 @@ Morgan Richomme (Orange, morgan.richomme@orange.com) Matthew Lijun (Huawei, matthew.lijun@huawei.com) Peter Bandzi (Cisco, pbandzi@cisco.com) Jose Lausuch (Ericsson, jose.lausuch@ericsson.com) -Guy Rodrigue Koffi (Orange, koffirodrigue@gmail.com) Ryota Mibu (NEC, r-mibu@cq.jp.nec.com) Link to TSC approval of the project: http://ircbot.wl.linuxfoundation.org/meetings/opnfv-meeting/2015/opnfv-meeting.2015-07-14-14.00.html diff --git a/jjb/apex/apex.yml b/jjb/apex/apex.yml index 35e8e3da5..a1e2fe01d 100644 --- a/jjb/apex/apex.yml +++ b/jjb/apex/apex.yml @@ -15,10 +15,12 @@ branch: 'master' gs-pathname: '' block-stream: 'brahmaputra' + slave: 'intel-pod7' - brahmaputra: branch: 'stable/brahmaputra' gs-pathname: '/brahmaputra' block-stream: 'master' + slave: 'opnfv-jump-1' disabled: false project: 'apex' @@ -37,7 +39,7 @@ - job-template: name: 'apex-verify-{stream}' - node: opnfv-jump-1 + node: '{slave}' parameters: - apex-parameter: @@ -99,26 +101,30 @@ - 'apex-build' - trigger-builds: - project: 'apex-deploy-virtual-os-odl_l2-nofeature-ha-{stream}' - predefined-parameters: + predefined-parameters: | BUILD_DIRECTORY=apex-verify-{stream}/build_output + OPNFV_CLEAN='yes' git-revision: false block: true - trigger-builds: - project: 'apex-deploy-virtual-os-onos-nofeature-ha-{stream}' - predefined-parameters: + predefined-parameters: | BUILD_DIRECTORY=apex-verify-{stream}/build_output + OPNFV_CLEAN='yes' git-revision: false block: true - trigger-builds: - project: 'apex-deploy-virtual-os-odl_l3-nofeature-ha-{stream}' - predefined-parameters: + predefined-parameters: | BUILD_DIRECTORY=apex-verify-{stream}/build_output + OPNFV_CLEAN='yes' git-revision: false block: true - trigger-builds: - project: 'apex-deploy-virtual-os-odl_l2-sfc-noha-{stream}' - predefined-parameters: + predefined-parameters: | BUILD_DIRECTORY=apex-verify-{stream}/build_output + OPNFV_CLEAN='yes' git-revision: false block: true - 'apex-workspace-cleanup' @@ -160,6 +166,8 @@ builders: - trigger-builds: - project: 'apex-deploy-{platform}-{scenario}-{stream}' + predefined-parameters: + OPNFV_CLEAN='yes' git-revision: false block: true - trigger-builds: @@ -189,7 +197,7 @@ # Required Variables: # stream: branch with - in place of / (eg. stable) # branch: branch (eg. stable) - node: opnfv-jump-1 + node: '{slave}' disabled: false @@ -235,7 +243,7 @@ # Required Variables: # stream: branch with - in place of / (eg. stable) # branch: branch (eg. stable) - node: opnfv-jump-1 + node: '{slave}' disabled: false @@ -350,8 +358,9 @@ block: true - trigger-builds: - project: 'apex-deploy-baremetal-os-odl_l2-nofeature-ha-{stream}' - predefined-parameters: + predefined-parameters: | BUILD_DIRECTORY=apex-build-{stream}/build_output + OPNFV_CLEAN='yes' git-revision: true block: true - trigger-builds: @@ -451,6 +460,10 @@ name: GS_URL default: artifacts.opnfv.org/$PROJECT{gs-pathname} description: "URL to Google Storage." + - string: + name: OPNFV_CLEAN + default: 'no' + description: "Use yes in lower case to invoke clean. Indicates if the deploy environment should be cleaned before deployment" ######################## # builder macros @@ -473,21 +486,25 @@ if echo $BUILD_TAG | grep "apex-verify" 1> /dev/null; then if echo $GERRIT_BRANCH | grep "brahmaputra" 1> /dev/null; then export OPNFV_ARTIFACT_VERSION=brahmaputra-dev${BUILD_NUMBER} + export BUILD_ARGS="-c file://$CACHE_DIRECTORY $BUILD_DIRECTORY" else export OPNFV_ARTIFACT_VERSION=dev${BUILD_NUMBER} + export BUILD_ARGS="-c file://$CACHE_DIRECTORY" fi elif [ "$ARTIFACT_VERSION" == "daily" ]; then if echo $GERRIT_BRANCH | grep "brahmaputra" 1> /dev/null; then export OPNFV_ARTIFACT_VERSION=brahmaputra-$(date -u +"%Y-%m-%d") + export BUILD_ARGS="-c file://$CACHE_DIRECTORY $BUILD_DIRECTORY" else export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d") + export BUILD_ARGS="-c file://$CACHE_DIRECTORY --iso" fi else export OPNFV_ARTIFACT_VERSION=${ARTIFACT_VERSION} fi # start the build cd $WORKSPACE/ci - ./build.sh -v $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY $BUILD_DIRECTORY + ./build.sh -v $OPNFV_ARTIFACT_VERSION $BUILD_ARGS RPM_VERSION=$(grep Version $BUILD_DIRECTORY/../build/opnfv-apex.spec | awk '{ print $2 }')-$(echo $OPNFV_ARTIFACT_VERSION | tr -d '_-') # list the contents of BUILD_OUTPUT directory ls -al $BUILD_DIRECTORY @@ -503,8 +520,8 @@ echo "OPNFV_RPM_MD5SUM=$(md5sum $BUILD_DIRECTORY/opnfv-apex-$RPM_VERSION.noarch.rpm | cut -d' ' -f1)" echo "OPNFV_BUILD_URL=$BUILD_URL" ) > $WORKSPACE/opnfv.properties - echo echo "--------------------------------------------------------" + echo "Done!" - builder: name: 'apex-workspace-cleanup' @@ -611,43 +628,51 @@ fi fi - RPM_LIST=$RPM_INSTALL_PATH - for pkg in common undercloud opendaylight-sfc; do - RPM_LIST+=" ${RPM_INSTALL_PATH/opnfv-apex/opnfv-apex-${pkg}}" - done + if [ -z "$DEPLOY_SCENARIO" ]; then + echo "Deploy scenario not set!" + exit 1 + fi - # update / install the new rpm - if rpm -q opnfv-apex > /dev/null; then - if [ $(basename $OPNFV_RPM_URL) == $(rpm -q opnfv-apex).rpm ]; then - echo "RPM is already installed" - elif sudo yum update -y $RPM_LIST | grep "does not update installed package"; then - if ! sudo yum downgrade -y $RPM_LIST; then - sudo yum remove -y opnfv-undercloud opnfv-common - sudo yum downgrade -y $RPM_INSTALL_PATH - fi - fi + # use local build for verify + if [[ $BUILD_DIRECTORY == *verify* ]]; then + if [ ! -e "${WORKSPACE}/build/lib" ]; then ln -s ${WORKSPACE}/lib ${WORKSPACE}/build/lib; fi + DEPLOY_CMD="./deploy.sh -c ${WORKSPACE}/build -r ${WORKSPACE}/build/images/" + DEPLOY_FILE="${WORKSPACE}/config/deploy/${DEPLOY_SCENARIO}.yaml" + NETWORK_FILE="${WORKSPACE}/config/deploy/network/network_settings.yaml" else - sudo yum install -y $RPM_LIST; + RPM_LIST=$RPM_INSTALL_PATH + for pkg in common undercloud opendaylight-sfc; do + RPM_LIST+=" ${RPM_INSTALL_PATH/opnfv-apex/opnfv-apex-${pkg}}" + done + + # update / install the new rpm + if rpm -q opnfv-apex > /dev/null; then + if [ $(basename $OPNFV_RPM_URL) == $(rpm -q opnfv-apex).rpm ]; then + echo "RPM is already installed" + elif sudo yum update -y $RPM_LIST | grep "does not update installed package"; then + if ! sudo yum downgrade -y $RPM_LIST; then + sudo yum remove -y opnfv-undercloud opnfv-common + sudo yum downgrade -y $RPM_INSTALL_PATH + fi + fi + else + sudo yum install -y $RPM_LIST; + fi + DEPLOY_CMD=opnfv-deploy + DEPLOY_FILE="/etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml" + NETWORK_FILE="/etc/opnfv-apex/network_settings.yaml" fi - # cleanup virtual machines before we start - sudo opnfv-clean + if [ "$OPNFV_CLEAN" == 'yes' ]; then + sudo ./clean.sh + fi # initiate virtual deployment - if [ -e /etc/opnfv-apex/network_settings.yaml ]; then - if [ -n "$DEPLOY_SCENARIO" ]; then - echo "Deploy Scenario set to ${DEPLOY_SCENARIO}" - if [ -e /etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml ]; then - sudo opnfv-deploy -v -d /etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml -n /etc/opnfv-apex/network_settings.yaml --debug - else - echo "File does not exist /etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml" - exit 1 - fi - else - echo "Deploy scenario not set!" - exit 1 - fi + echo "Deploy Scenario set to ${DEPLOY_SCENARIO}" + if [ -e $DEPLOY_FILE ]; then + sudo $DEPLOY_CMD -v -d ${DEPLOY_FILE} -n $NETWORK_FILE --debug else - sudo opnfv-deploy -v + echo "File does not exist /etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml" + exit 1 fi echo echo "--------------------------------------------------------" diff --git a/jjb/functest/functest-ci-jobs.yml b/jjb/functest/functest-ci-jobs.yml index ba5cfec83..90b5a67d4 100644 --- a/jjb/functest/functest-ci-jobs.yml +++ b/jjb/functest/functest-ci-jobs.yml @@ -211,12 +211,10 @@ - shell: | #!/bin/bash set +e - flag="" - if [ "${PUSH_RESULTS_TO_DB}" == "true" ]; then - flag="-r" - fi + flags="-s" + [[ "$PUSH_RESULTS_TO_DB" == "true" ]] && flags+=" -r" echo "Functest: run $FUNCTEST_SUITE_NAME" - cmd="${FUNCTEST_REPO_DIR}/docker/run_tests.sh --test $FUNCTEST_SUITE_NAME ${flag}" + cmd="${FUNCTEST_REPO_DIR}/docker/run_tests.sh --test $FUNCTEST_SUITE_NAME ${flags}" container_id=$(docker ps -a | grep opnfv/functest | awk '{print $1}' | head -1) docker exec $container_id $cmd @@ -226,11 +224,9 @@ - shell: | #!/bin/bash set +e - flag="" - if [ "${PUSH_RESULTS_TO_DB}" == "true" ]; then - flag="-r" - fi - cmd="${FUNCTEST_REPO_DIR}/docker/run_tests.sh ${flag}" + flags="-s" + [[ "$PUSH_RESULTS_TO_DB" == "true" ]] && flags+=" -r" + cmd="${FUNCTEST_REPO_DIR}/docker/run_tests.sh ${flags}" container_id=$(docker ps -a | grep opnfv/functest | awk '{print $1}' | head -1) docker exec $container_id $cmd diff --git a/jjb/joid/joid-ci-jobs.yml b/jjb/joid/joid-ci-jobs.yml index adf3022b2..685e6fb6c 100644 --- a/jjb/joid/joid-ci-jobs.yml +++ b/jjb/joid/joid-ci-jobs.yml @@ -200,7 +200,7 @@ - trigger: name: 'joid-os-nosdn-nofeature-ha-intel-pod6-master-trigger' triggers: - - timed: '0 2 * * *' + - timed: '#0 2 * * *' - trigger: name: 'joid-os-nosdn-nofeature-ha-orange-pod2-master-trigger' triggers: @@ -225,7 +225,7 @@ - trigger: name: 'joid-os-nosdn-nofeature-ha-orange-pod2-brahmaputra-trigger' triggers: - - timed: '0 2 * * *' + - timed: '' - trigger: name: 'joid-os-nosdn-nofeature-ha-juniper-pod1-brahmaputra-trigger' triggers: @@ -244,7 +244,7 @@ - trigger: name: 'joid-os-odl_l2-nofeature-ha-intel-pod6-master-trigger' triggers: - - timed: '0 10 * * *' + - timed: '#0 10 * * *' - trigger: name: 'joid-os-odl_l2-nofeature-ha-orange-pod2-master-trigger' triggers: @@ -270,7 +270,7 @@ - trigger: name: 'joid-os-odl_l2-nofeature-ha-orange-pod2-brahmaputra-trigger' triggers: - - timed: '0 10 * * *' + - timed: '' - trigger: name: 'joid-os-odl_l2-nofeature-ha-juniper-pod1-brahmaputra-trigger' triggers: @@ -288,7 +288,7 @@ - trigger: name: 'joid-os-onos-nofeature-ha-intel-pod6-master-trigger' triggers: - - timed: '0 18 * * *' + - timed: '#0 18 * * *' - trigger: name: 'joid-os-onos-nofeature-ha-orange-pod2-master-trigger' triggers: @@ -314,7 +314,7 @@ - trigger: name: 'joid-os-onos-nofeature-ha-orange-pod2-brahmaputra-trigger' triggers: - - timed: '0 18 * * *' + - timed: '' - trigger: name: 'joid-os-onos-nofeature-ha-juniper-pod1-brahmaputra-trigger' triggers: diff --git a/jjb/opnfv/opnfv-docs.yml b/jjb/opnfv/opnfv-docs.yml index 652a3d530..f9d6a89bc 100644 --- a/jjb/opnfv/opnfv-docs.yml +++ b/jjb/opnfv/opnfv-docs.yml @@ -53,7 +53,7 @@ projects: - project-compare-type: 'REG_EXP' #Left out arno projects oscar|octopus|functest|genesis - project-pattern: 'vswitchperf|apex|availability|bottlenecks|compass4nfv|conductor|copper|doctor|dovetail|dpacc|escalator|fastpathmetrics|fuel|inspector|ipv6|joid|kvmfornfv|lsoapi|moon|movie|multisite|octopus|onosfw|ovsnfv|parser|prediction|promise|qtip|releng|rs|sdnvpn|sfc|vnf_forwarding_graph|enfv|pinpoint|pharos|cperf|functest|genesisreq' + project-pattern: 'vswitchperf|apex|availability|bottlenecks|compass4nfv|conductor|copper|doctor|dovetail|dpacc|escalator|fastpathmetrics|fuel|inspector|ipv6|joid|kvmfornfv|lsoapi|moon|movie|multisite|octopus|onosfw|ovsnfv|parser|prediction|promise|qtip|releng|rs|sdnvpn|sfc|vnf_forwarding_graph|enfv|pinpoint|pharos|cperf|functest|genesisreq|models' branches: - branch-compare-type: 'ANT' branch-pattern: '**/{branch}' @@ -91,7 +91,7 @@ comment-contains-value: 'remerge' projects: - project-compare-type: 'REG_EXP' - project-pattern: 'vswitchperf|apex|availability|bottlenecks|compass4nfv|conductor|copper|doctor|dovetail|dpacc|escalator|fastpathmetrics|fuel|inspector|ipv6|joid|kvmfornfv|lsoapi|moon|movie|multisite|octopus|onosfw|ovsnfv|parser|prediction|promise|qtip|releng|rs|sdnvpn|sfc|vnf_forwarding_graph|enfv|pinpoint|pharos|cperf|functest|genesisreq' + project-pattern: 'vswitchperf|apex|availability|bottlenecks|compass4nfv|conductor|copper|doctor|dovetail|dpacc|escalator|fastpathmetrics|fuel|inspector|ipv6|joid|kvmfornfv|lsoapi|moon|movie|multisite|octopus|onosfw|ovsnfv|parser|prediction|promise|qtip|releng|rs|sdnvpn|sfc|vnf_forwarding_graph|enfv|pinpoint|pharos|cperf|functest|genesisreq|models' branches: - branch-compare-type: 'ANT' branch-pattern: '**/{branch}' diff --git a/utils/jenkins-jnlp-connect.sh b/utils/jenkins-jnlp-connect.sh index 6fb6827fd..e0c6ff2e0 100755 --- a/utils/jenkins-jnlp-connect.sh +++ b/utils/jenkins-jnlp-connect.sh @@ -48,10 +48,14 @@ if [[ $(whoami) != "root" && $(whoami) != "$jenkinsuser" ]]; then exit 1 fi -if [[ $distro == Debian || $distro == Ubuntu ]]; then +if [ -d /etc/monit/conf.d ]; then monitconfdir="/etc/monit/conf.d/" -elif [[ $distro == Fedora || $distro == CentOS || $distro == Redhat ]]; then +elif [ -d /etc/monit.d ]; then monitconfdir="/etc/monit.d" +else + echo "Could not determine the location of the monit configuration file." + echo "Make sure monit is installed." + exit 1 fi #make pid dir @@ -186,6 +190,5 @@ do done connectionstring="java -jar slave.jar -jnlpUrl https://build.opnfv.org/ci/computer/"$slave_name"/slave-agent.jnlp -secret "$slave_secret" -noCertificateCheck " -distro="$(tr -s ' \011' '\012' < /etc/issue | head -n 1)" main "$@" diff --git a/utils/test/result_collection_api/dashboard/functest2Dashboard.py b/utils/test/result_collection_api/dashboard/functest2Dashboard.py index 3f4e1a2db..a2ed3085c 100644 --- a/utils/test/result_collection_api/dashboard/functest2Dashboard.py +++ b/utils/test/result_collection_api/dashboard/functest2Dashboard.py @@ -213,6 +213,25 @@ def format_Tempest_for_dashboard(results): 'data_set': [{'Run': nbTests, 'Failed': nbFailures}]}) + # Graph 4: (Success rate)=f(time) + # *************************************** + new_element = [] + for data in results: + try: + diff = (int(data['details']['tests']) - int(data['details']['failures'])) + success_rate = 100*diff/int(data['details']['tests']) + except: + success_rate = 0 + + new_element.append({'x': data['creation_date'], + 'y1': success_rate}) + + test_data.append({'name': "Tempest success rate", + 'info': {'type': "graph", + 'xlabel': 'time', + 'y1label': 'Success rate'}, + 'data_set': new_element}) + return test_data diff --git a/utils/test/result_collection_api/resources/models.py b/utils/test/result_collection_api/resources/models.py index 8f7522226..6f9386208 100644 --- a/utils/test/result_collection_api/resources/models.py +++ b/utils/test/result_collection_api/resources/models.py @@ -167,6 +167,7 @@ class TestResult: t.creation_date = str(test_result_dict.get('creation_date'))
t.details = test_result_dict.get('details')
t.version = test_result_dict.get('version')
+ t.installer = test_result_dict.get('installer')
t.build_tag = test_result_dict.get('build_tag')
return t
diff --git a/utils/test/result_collection_api/tools/dashboard/css/opnfv_dashboard_tests.css b/utils/test/result_collection_api/tools/dashboard/css/opnfv_dashboard_tests.css index c74e26c63..894725bb2 100644 --- a/utils/test/result_collection_api/tools/dashboard/css/opnfv_dashboard_tests.css +++ b/utils/test/result_collection_api/tools/dashboard/css/opnfv_dashboard_tests.css @@ -21,7 +21,7 @@ body { #testcase_selected{
position: relative;
left: 50px;
- font-size: 20px;
+ font-size: 20px;
color: #00ADBB;
}
diff --git a/utils/test/result_collection_api/tools/dashboard/js/opnfv_dashboard_tests.js b/utils/test/result_collection_api/tools/dashboard/js/opnfv_dashboard_tests.js index 4bb56af79..e5bcca625 100644 --- a/utils/test/result_collection_api/tools/dashboard/js/opnfv_dashboard_tests.js +++ b/utils/test/result_collection_api/tools/dashboard/js/opnfv_dashboard_tests.js @@ -176,7 +176,7 @@ function show_installers_pods(active_pod) html_pods += '<ul class="nav nav-pills">';
for (var i in opnfv_dashboard_installers_pods[opnfv_dashboard_installer])
if (opnfv_dashboard_installers_pods[opnfv_dashboard_installer][i]==active_pod)
- html_pods += '<li class="active"><a href="#" onClick="on_pod_draw_graph(\''+opnfv_dashboard_installers_pods[opnfv_dashboard_installer][i]+'\')">'+opnfv_dashboard_installers_pods_print[opnfv_dashboard_installer][i]+'</a></li>';
+ html_pods += '<li class="active"><a href="#" onClick="on_pod_draw_graph(\''+opnfv_dashboard_installers_pods[opnfv_dashboard_installer][i]+'\')">'+opnfv_dashboard_installers_pods_print[opnfv_dashboard_installer][i]+'</a></li>';
else
html_pods += '<li><a href="#" onClick="on_pod_draw_graph(\''+opnfv_dashboard_installers_pods[opnfv_dashboard_installer][i]+'\')">'+opnfv_dashboard_installers_pods_print[opnfv_dashboard_installer][i]+'</a></li>';
html_pods += '</ul>';
@@ -198,7 +198,7 @@ console.log(div_scenario); // generate HTML menus and buttons
$( document ).ready(function(){
console.log( "ready!" );
-
+
//show_installers('');
show_testcases();
on_ready_draw_graph();
diff --git a/utils/test/result_collection_api/tools/reporting/default.css b/utils/test/result_collection_api/tools/reporting/default.css new file mode 100644 index 000000000..0e330e965 --- /dev/null +++ b/utils/test/result_collection_api/tools/reporting/default.css @@ -0,0 +1,56 @@ +.panel-header-item { + position: relative; + display: inline-block; + padding-left: 17px; + padding-right: 17px; +} + +.panel-pod-name { + margin-top: 10px; + margin-right: 27px; + float:right; + padding: 6px; +} + +.panel-default > .panel-heading .badge { + background-color: #007e88; + position: relative; + display: inline-block; +} + +.panel-default > .panel-heading .progress-bar { + height: 100%; + position: absolute; + left: 0; + top: 0; + width: 100%; + background-color: #0095a2 +} +.panel-default > .panel-heading h4 { + color: white; +} + +.panel-default > .panel-heading { + background-color: #00ADBB; + overflow: hidden; + position: relative; + width: 100%; +} + +th{ + text-align: center; +} + +td{ + text-align: center; +} + +.tr-danger { + background-color: #177870; + color: white; +} + +.btn-more { + color: white; + background-color: #0095a2; +}
\ No newline at end of file diff --git a/utils/test/result_collection_api/tools/reporting/index-tmpl.html b/utils/test/result_collection_api/tools/reporting/index-tmpl.html new file mode 100644 index 000000000..4d1c50915 --- /dev/null +++ b/utils/test/result_collection_api/tools/reporting/index-tmpl.html @@ -0,0 +1,91 @@ + <html> + <head> + <meta charset="utf-8"> + <!-- Bootstrap core CSS --> + <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"> + <link href="default.css" rel="stylesheet"> + <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> + <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> + <script type="text/javascript"> + $(document).ready(function (){ + $(".btn-more").click(function() { + $(this).hide(); + $(this).parent().find(".panel-default").show(); + }); + }) + </script> + </head> + <body> + <div class="container"> + <div class="masthead"> + <h3 class="text-muted">vIMS status page</h3> + <nav> + <ul class="nav nav-justified"> + <li class="active"><a href="#">Home</a></li> + <li><a href="index-fuel.html">Fuel</a></li> + <li><a href="index-compass.html">Compass</a></li> + <li><a href="index-joid.html">JOID</a></li> + <li><a href="index-apex.html">APEX</a></li> + </ul> + </nav> + </div> +<div class="row"> + <div class="col-md-1"></div> + <div class="col-md-10"> + <div class="page-header"> + <h2>{{installer}}</h2> + </div> + {% for scenario_name, results in scenario_results.iteritems() -%} + <div class="scenario-part"> + <div class="page-header"> + <h3><span class="glyphicon glyphicon-chevron-right"> <b>{{scenario_name}}</b></h3> + </div> + {% for result in results -%} + {% if loop.index > 2 -%} + <div class="panel panel-default" hidden> + {%- else -%} + <div class="panel panel-default"> + {%- endif %} + <div class="panel-heading"> + <div class="progress-bar" role="progressbar" aria-valuenow="{{result.pr_step_ok}}" aria-valuemin="0" aria-valuemax="100" style="width: {{result.pr_step_ok}}%"></div> + <span class="panel-header-item"> + <h4><b>{{result.creation_date}}</b></h4> + </span> + <span class="badge panel-pod-name">{{result.pod_name}}</span> + </div> + <table class="table"> + <tr> + <th width="20%">Step</th> + <th width="10%">Status</th> + <th width="10%">Duration</th> + <th width="60%">Result</th> + </tr> + {% for step_od_name in step_order -%} + {% if step_od_name in result.details.keys() -%} + {% set step_result = result.details[step_od_name] -%} + {% if step_result.duration != 0 -%} + <tr class="tr-ok"> + <td>{{step_od_name}}</td> + <td><span class="glyphicon glyphicon-ok"></td> + <td><b>{{step_result.duration_display}}</b></td> + <td>{{step_result.result}}</td> + </tr> + {%- else -%} + <tr class="tr-danger"> + <td>{{step_od_name}}</td> + <td><span class="glyphicon glyphicon-remove"></td> + <td><b>0s</b></td> + <td>{{step_result.result}}</td> + </tr> + {%- endif %} + {%- endif %} + {%- endfor %} + </table> + </div> + {%- endfor %} + <button type="button" class="btn btn-more">More than two</button> + </div> + {%- endfor %} + </div> + <div class="col-md-1"></div> +</div>
\ No newline at end of file diff --git a/utils/test/result_collection_api/tools/reporting/reporting.py b/utils/test/result_collection_api/tools/reporting/reporting.py new file mode 100644 index 000000000..246c6250c --- /dev/null +++ b/utils/test/result_collection_api/tools/reporting/reporting.py @@ -0,0 +1,83 @@ +from urllib2 import Request, urlopen, URLError +import json +import jinja2 +import os + +def sig_test_format(sig_test): + nbPassed = 0 + nbFailures = 0 + nbSkipped = 0 + for data_test in sig_test: + if data_test['result'] == "Passed": + nbPassed+= 1 + elif data_test['result'] == "Failed": + nbFailures += 1 + elif data_test['result'] == "Skipped": + nbSkipped += 1 + total_sig_test_result = {} + total_sig_test_result['passed'] = nbPassed + total_sig_test_result['failures'] = nbFailures + total_sig_test_result['skipped'] = nbSkipped + return total_sig_test_result + +installers = ["fuel", "compass", "joid", "apex"] +step_order = ["initialisation", "orchestrator", "vIMS", "sig_test"] + +for installer in installers: + request = Request('http://testresults.opnfv.org/testapi/results?case=vIMS&installer=' + installer) + + try: + response = urlopen(request) + k = response.read() + results = json.loads(k) + except URLError, e: + print 'No kittez. Got an error code:', e + + test_results = results['test_results'] + test_results.reverse() + + scenario_results = {} + for r in test_results: + if not r['version'] in scenario_results.keys(): + scenario_results[r['version']] = [] + scenario_results[r['version']].append(r) + + for s, s_result in scenario_results.items(): + scenario_results[s] = s_result[0:5] + for result in scenario_results[s]: + result["creation_date"] = result["creation_date"].split(".")[0] + sig_test = result['details']['sig_test']['result'] + if not sig_test == "": + format_result = sig_test_format(sig_test) + if format_result['failures'] > format_result['passed']: + result['details']['sig_test']['duration'] = 0 + result['details']['sig_test']['result'] = format_result + nb_step_ok = 0 + nb_step = len(result['details']) + + for step_name, step_result in result['details'].items(): + if step_result['duration'] != 0: + nb_step_ok += 1 + m, s = divmod(step_result['duration'], 60) + m_display = "" + if int(m) != 0: + m_display += str(int(m)) + "m " + step_result['duration_display'] = m_display + str(int(s)) + "s" + + result['pr_step_ok'] = 0 + if nb_step != 0: + result['pr_step_ok'] = (float(nb_step_ok)/nb_step)*100 + + + templateLoader = jinja2.FileSystemLoader(os.path.dirname(os.path.abspath(__file__))) + templateEnv = jinja2.Environment( loader=templateLoader ) + + TEMPLATE_FILE = "index-tmpl.html" + template = templateEnv.get_template( TEMPLATE_FILE ) + + outputText = template.render( scenario_results = scenario_results, step_order = step_order, installer = installer) + + with open("index-" + installer + ".html", "wb") as fh: + fh.write(outputText) + + |