Merge "only publish testcases appear in testcases.py to save time"
authorMorgan Richomme <morgan.richomme@orange.com>
Tue, 20 Sep 2016 07:26:13 +0000 (07:26 +0000)
committerGerrit Code Review <gerrit@172.30.200.206>
Tue, 20 Sep 2016 07:26:13 +0000 (07:26 +0000)
25 files changed:
jjb/armband/armband-ci-jobs.yml
jjb/bottlenecks/bottlenecks-project-jobs.yml
jjb/doctor/doctor.yml
jjb/functest/functest-ci-jobs.yml
jjb/opnfv/opnfv-docker.sh
jjb/opnfv/opnfv-docker.yml
utils/calculate_version.sh
utils/test/reporting/yardstick/img/gauge_0.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_100.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_16.7.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_25.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_33.3.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_41.7.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_50.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_58.3.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_66.7.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_75.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_8.3.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_83.3.png [new file with mode: 0644]
utils/test/reporting/yardstick/img/gauge_91.7.png [new file with mode: 0644]
utils/test/reporting/yardstick/reporting-status.py
utils/test/reporting/yardstick/reportingConf.py
utils/test/reporting/yardstick/reportingUtils.py
utils/test/reporting/yardstick/scenarioResult.py
utils/test/reporting/yardstick/template/index-status-tmpl.html

index 2598732..f6b4865 100644 (file)
 - trigger:
     name: 'fuel-os-odl_l2-nofeature-ha-armband-baremetal-master-trigger'
     triggers:
-        - timed: '0 3,15 * * 1'
+        - timed: '0 0 * * 1'
 - trigger:
     name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-master-trigger'
     triggers:
-        - timed: '0 3,15 * * 2'
+        - timed: '0 0 * * 2'
 - trigger:
     name: 'fuel-os-odl_l3-nofeature-ha-armband-baremetal-master-trigger'
     triggers:
-        - timed: '0 3,15 * * 3'
+        - timed: '0 0 * * 3'
 - trigger:
     name: 'fuel-os-odl_l2-bgpvpn-ha-armband-baremetal-master-trigger'
     triggers:
-        - timed: '0 3,15 * * 4'
+        - timed: '0 0 * * 4'
 - trigger:
     name: 'fuel-os-odl_l2-nofeature-noha-armband-baremetal-master-trigger'
     triggers:
-        - timed: '0 3,15 * * 5'
+        - timed: '0 0 * * 5'
 #----------------------------------------------------------------------
 # Enea Armband CI Baremetal Triggers running against colorado branch
 #----------------------------------------------------------------------
 - trigger:
     name: 'fuel-os-odl_l2-nofeature-ha-armband-baremetal-colorado-trigger'
     triggers:
-        - timed: '0 4,16 * * 1'
+        - timed: '0 4 * * *'
 - trigger:
     name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-colorado-trigger'
     triggers:
-        - timed: '0 4,16 * * 2'
+        - timed: '0 8 * * *'
 - trigger:
     name: 'fuel-os-odl_l3-nofeature-ha-armband-baremetal-colorado-trigger'
     triggers:
-        - timed: '0 4,16 * * 3'
+        - timed: '0 12 * * *'
 - trigger:
     name: 'fuel-os-odl_l2-bgpvpn-ha-armband-baremetal-colorado-trigger'
     triggers:
-        - timed: '0 4,16 * * 4'
+        - timed: '0 16 * * *'
 - trigger:
     name: 'fuel-os-odl_l2-nofeature-noha-armband-baremetal-colorado-trigger'
     triggers:
-        - timed: '0 4,16 * * 5'
+        - timed: '0 20 * * *'
 #---------------------------------------------------------------
 # Enea Armband CI Virtual Triggers running against master branch
 #---------------------------------------------------------------
index fffc22d..523d363 100644 (file)
@@ -71,9 +71,8 @@
                   - branch-compare-type: 'ANT'
                     branch-pattern: '**/{branch}'
     builders:
-         - shell: |
-             echo "bottlenecks: verify job"
-         #TO DO: this should be changed when the unittest ready
+        - bottlenecks-hello
+        #- bottlenecks-unit-tests
 
 - job-template:
     name: 'bottlenecks-merge-{stream}'
                       branch-pattern: '**/{branch}'
 
     builders:
-         - shell: |
-             echo "bottlenecks: merge"
+        - bottlenecks-hello
+        #- bottlenecks-unit-tests
 
 - job-template:
     name: 'bottlenecks-{suite}-upload-artifacts-{stream}'
             echo "Bottlenecks: cleanup cache used for storage downloaded packages"
 
             /bin/rm -rf $CACHE_DIR
+
+- builder:
+    name: bottlenecks-unit-tests
+    builders:
+        - shell: |
+            #!/bin/bash
+            set -o errexit
+            set -o pipefail
+
+            echo "Running unit tests..."
+            cd $WORKSPACE
+            virtualenv $WORKSPACE/bottlenecks_venv
+            source $WORKSPACE/bottlenecks_venv/bin/activate
+
+            # install python packages
+            easy_install -U setuptools
+            easy_install -U pip
+            pip install -r requirements.txt
+
+            # unit tests
+            /bin/bash $WORKSPACE/tests.sh
+
+            deactivate
+
+- builder:
+    name: bottlenecks-hello
+    builders:
+        - shell: |
+            #!/bin/bash
+            set -o errexit
+
+            echo "hello"
index fcbd1b0..5f32db7 100644 (file)
@@ -18,6 +18,7 @@
     installer:
         - apex:
             slave-label: 'ool-virtual1'
+            pod: 'ool-virtual1'
 
     inspector:
         - sample
@@ -73,6 +74,8 @@
 - job-template:
     name: 'doctor-verify-{installer}-{inspector}-{stream}'
 
+    node: '{slave-label}'
+
     parameters:
         - project-parameter:
             project: '{project}'
 
     builders:
         - trigger-builds:
-          - project: 'functest-{installer}-virtual-suite-{stream}'
+          - project: 'functest-{installer}-{pod}-suite-{stream}'
             current-parameters: true
             predefined-parameters: |
               FUNCTEST_SUITE_NAME=doctor
index d5b99b2..4747835 100644 (file)
             slave-label: '{pod}'
             installer: fuel
             <<: *colorado
+# PODs for verify jobs triggered by each patch upload
+        - ool-virtual1:
+            slave-label: '{pod}'
+            installer: apex
+            <<: *master
 #--------------------------------
 
     testsuite:
index 07198c6..c5edf7c 100644 (file)
@@ -71,6 +71,8 @@ if [[ "$DOCKER_REPO_NAME" == "opnfv/bottlenecks" ]]; then
     cd $WORKSPACE/ci/docker
 elif [[ "$DOCKER_REPO_NAME" == "opnfv/cperf" ]]; then
     cd $WORKSPACE/docker
+elif [[ "$DOCKER_REPO_NAME" == "opnfv/dovetail" ]]; then
+    cd $WORKSPACE/docker
 elif [[ "$DOCKER_REPO_NAME" == "opnfv/functest" ]]; then
     cd $WORKSPACE/docker
 elif [[ "$DOCKER_REPO_NAME" == "opnfv/qtip" ]]; then
index 4250eef..f313b3b 100644 (file)
@@ -16,6 +16,9 @@
     jobs:
         - '{project}-docker-build-push-{stream}'
         - 'yardstick-docker-build-push-{stream}'
+        #dovetail not sync with release, an independent job
+        #only master by now, will adjust accordingly in future
+        - 'dovetail-docker-build-push-{dovetailstream}'
 
     stream:
         - master:
         - colorado:
             branch: 'stable/{stream}'
             disabled: false
+    dovetailstream:
+        - master:
+            branch: '{dovetailstream}'
+            disabled: false
 
 ########################
 # job templates
     triggers:
         - pollscm:
             cron: "*/30 * * * *"
+
+- job-template:
+    name: 'dovetail-docker-build-push-{dovetailstream}'
+
+    disabled: '{obj:disabled}'
+
+    parameters:
+        - project-parameter:
+            project: 'dovetail'
+        - 'opnfv-build-ubuntu-defaults'
+        - string:
+            name: PUSH_IMAGE
+            default: "true"
+            description: "To enable/disable pushing the image to Dockerhub."
+        #BASE_VERSION parameter is used for version control
+        #by now, only master branch is used, this parameter takes no effect
+        #once branch control settled, should be adjusted togather with
+        #opnfv-docker.sh and caculate_version.sh
+        - string:
+            name: BASE_VERSION
+            default: "1.0"
+            description: "Base version to be used."
+        - string:
+            name: DOCKER_REPO_NAME
+            default: "opnfv/dovetail"
+            description: "Dockerhub repo to be pushed to."
+        - string:
+            name: UPDATE_LATEST_STABLE
+            default: "false"
+            description: "This will update the latest_stable image only."
+        - string:
+            name: STABLE_TAG
+            description: "If above option is true, this is the tag to be pulled."
+
+    scm:
+        - git-scm:
+            credentials-id: '{ssh-credentials}'
+            refspec: ''
+            branch: '{branch}'
+
+    builders:
+        - shell:
+            !include-raw-escape: ./opnfv-docker.sh
+
+    triggers:
+        - pollscm:
+            cron: "*/30 * * * *"
index 608a3bd..cf929dd 100755 (executable)
@@ -35,11 +35,13 @@ function docker_version() {
     fi
     tag_json=$(curl $url_tag 2>/dev/null | python -mjson.tool | grep ${BASE_VERSION} | head -1)
     #e.g. tag_json= "name": "brahmaputra.0.2",
+    #special case, for dovetail, not sync with release, tag_json name not headed with arno, etc
     if [ "${tag_json}" == "" ]; then
         echo ${BASE_VERSION}.0
     else
         tag=$(echo $tag_json | awk '{print $2}' | sed 's/\,//' | sed 's/\"//g')
         #e.g.: tag=brahmaputra.0.2
+        #special case, for dovetail, not sync with release
         tag_current_version=$(echo $tag | sed 's/.*\.//')
         tag_new_version=$(($tag_current_version+1))
         #e.g.: tag=brahmaputra.0.3
diff --git a/utils/test/reporting/yardstick/img/gauge_0.png b/utils/test/reporting/yardstick/img/gauge_0.png
new file mode 100644 (file)
index 0000000..ecefc0e
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_0.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_100.png b/utils/test/reporting/yardstick/img/gauge_100.png
new file mode 100644 (file)
index 0000000..e199e15
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_100.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_16.7.png b/utils/test/reporting/yardstick/img/gauge_16.7.png
new file mode 100644 (file)
index 0000000..3e3993c
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_16.7.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_25.png b/utils/test/reporting/yardstick/img/gauge_25.png
new file mode 100644 (file)
index 0000000..4923659
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_25.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_33.3.png b/utils/test/reporting/yardstick/img/gauge_33.3.png
new file mode 100644 (file)
index 0000000..364574b
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_33.3.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_41.7.png b/utils/test/reporting/yardstick/img/gauge_41.7.png
new file mode 100644 (file)
index 0000000..8c3e910
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_41.7.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_50.png b/utils/test/reporting/yardstick/img/gauge_50.png
new file mode 100644 (file)
index 0000000..2874b9f
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_50.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_58.3.png b/utils/test/reporting/yardstick/img/gauge_58.3.png
new file mode 100644 (file)
index 0000000..beedc8a
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_58.3.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_66.7.png b/utils/test/reporting/yardstick/img/gauge_66.7.png
new file mode 100644 (file)
index 0000000..93f44d1
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_66.7.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_75.png b/utils/test/reporting/yardstick/img/gauge_75.png
new file mode 100644 (file)
index 0000000..9fc261f
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_75.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_8.3.png b/utils/test/reporting/yardstick/img/gauge_8.3.png
new file mode 100644 (file)
index 0000000..59f8657
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_8.3.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_83.3.png b/utils/test/reporting/yardstick/img/gauge_83.3.png
new file mode 100644 (file)
index 0000000..27ae4ec
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_83.3.png differ
diff --git a/utils/test/reporting/yardstick/img/gauge_91.7.png b/utils/test/reporting/yardstick/img/gauge_91.7.png
new file mode 100644 (file)
index 0000000..2808657
Binary files /dev/null and b/utils/test/reporting/yardstick/img/gauge_91.7.png differ
index 57a9594..345acef 100644 (file)
@@ -26,6 +26,7 @@ logger.info("*   Data retention = %s days              *" % conf.PERIOD)
 logger.info("*                                         *")
 logger.info("*******************************************")
 
+
 # For all the versions
 for version in conf.versions:
     # For all the installers
@@ -38,8 +39,6 @@ for version in conf.versions:
                 if not scenario_results.has_key(k):
                     scenario_results[k] = []
                 scenario_results[k] += stable_result[k]
-        for k,v in scenario_results.items():
-            scenario_results[k] = v[0:conf.LASTEST_TESTS]
         scenario_result_criteria = {}
 
         # From each scenarios get results list
@@ -47,23 +46,26 @@ for version in conf.versions:
             logger.info("---------------------------------")
             logger.info("installer %s, version %s, scenario %s:" % (installer, version, s))
 
-            s_status = 'KO'
-            scenario_criteria = len(s_result)
-            scenario_score = 0
-
+            ten_criteria = len(s_result)
+            ten_score = 0
             for v in s_result:
-                if v['criteria'] == 'SUCCESS':
-                    scenario_score += 1
+                ten_score += v
 
-            if scenario_score == scenario_criteria and scenario_criteria == 4:
-                s_status = 'OK'
-                logger.info(">>>>> scenario OK, save the information")
-            else:
-                logger.info(">>>> scenario not OK, score = %s/%s" % (scenario_score, scenario_criteria))
+            four_result = s_result[:conf.LASTEST_TESTS]
+            four_criteria = len(four_result)
+            four_score = 0
+            for v in four_result:
+                four_score += v
 
-            s_score = str(scenario_score) + '/' + str(scenario_criteria)
-            scenario_result_criteria[s] = sr.ScenarioResult(s_status, s_score)
+            s_status = str(utils.get_status(four_result, s_result))
+            s_four_score = str(four_score) + '/' + str(four_criteria)
+            s_ten_score = str(ten_score) + '/' + str(ten_criteria)
+            scenario_result_criteria[s] = sr.ScenarioResult(s_status, s_four_score, s_ten_score)
 
+            if '100' == s_status:
+                logger.info(">>>>> scenario OK, save the information")
+            else:
+                logger.info(">>>> scenario not OK, last 4 iterations = %s, last 10 days = %s" % (s_four_score, s_ten_score))
             logger.info("--------------------------")
 
         templateLoader = jinja2.FileSystemLoader(conf.REPORTING_PATH)
index 447b428..52d9997 100644 (file)
@@ -13,8 +13,8 @@ installers = ["apex", "compass", "fuel", "joid"]
 
 versions = ["master", "colorado"]
 
-# get data in the past 7 days
-PERIOD = 7
+# get data in the past 10 days
+PERIOD = 10
 
 # get the lastest 4 test results to determinate the success criteria
 LASTEST_TESTS = 4
index 06bcd49..71eb919 100644 (file)
@@ -45,17 +45,59 @@ def getScenarioStatus(installer, version):
         print 'Got an error code:', e
 
     scenario_results = {}
+    result_dict = {}
     if test_results is not None:
         for r in test_results:
-            if r['stop_date'] != 'None':
+            if r['stop_date'] != 'None' and r['criteria'] is not None:
                 if not r['scenario'] in scenario_results.keys():
                     scenario_results[r['scenario']] = []
                 scenario_results[r['scenario']].append(r)
 
         for k,v in scenario_results.items():
-            scenario_results[k] = v[:conf.LASTEST_TESTS]
+            # scenario_results[k] = v[:conf.LASTEST_TESTS]
+            s_list = []
+            for element in v:
+                if element['criteria'] == 'SUCCESS':
+                    s_list.append(1)
+                else:
+                    s_list.append(0)
+            result_dict[k] = s_list
 
-    return scenario_results
+    # return scenario_results
+    return result_dict
+
+def subfind(given_list, pattern_list):
+    for i in range(len(given_list)):
+        if given_list[i] == pattern_list[0] and given_list[i:i + conf.LASTEST_TESTS] == pattern_list:
+            return True
+    return False
+
+def get_percent(status):
+    
+    if status * 100 % 6:
+        return round(float(status) * 100 / 6, 1)
+    else:
+        return status * 100 / 6
+
+def get_status(four_list, ten_list):
+    four_score = 0
+    ten_score = 0
+
+    for v in four_list:
+        four_score += v
+    for v in ten_list:
+        ten_score += v
+
+    if four_score == conf.LASTEST_TESTS:
+        status = 6
+    elif subfind(ten_list, [1, 1, 1, 1]):
+        status = 5
+    elif ten_score == 0:
+        status = 0
+    else:
+        status = four_score + 1
+
+    return get_percent(status)
 
 
 def _test():
index 743346a..61ffb2c 100644 (file)
@@ -9,12 +9,16 @@
 
 
 class ScenarioResult(object):
-    def __init__(self, status, score=0):
+    def __init__(self, status, four_days_score='', ten_days_score=''):
         self.status = status
-        self.score = score
+        self.four_days_score = four_days_score
+        self.ten_days_score = ten_days_score
 
     def getStatus(self):
         return self.status
 
-    def getScore(self):
-        return self.score
+    def getTenDaysScore(self):
+        return self.ten_days_score
+
+    def getFourDaysScore(self):
+        return self.four_days_score
index ff1a619..602ce8a 100644 (file)
             <div class="panel-heading"><h4><b>List of last scenarios ({{version}}) run over the last {{period}} days </b></h4></div>
                 <table class="table">
                     <tr>
-                        <th width="60%">Scenario</th>
+                        <th width="40%">Scenario</th>
                         <th width="20%">Status</th>
-                        <th width="20%">Score</th>
+                        <th width="20%">Last 4 Iterations</th>
+                        <th width="20%">Last 10 Days</th>
                     </tr>
                         {% for scenario,result in scenario_results.iteritems() -%}
                             <tr class="tr-ok">
                                 <td>{{scenario}}</td>
                                 <td>
-                                    {%if scenario_results[scenario].getStatus() is sameas "OK" -%}
-                                    <img src="../../img/icon-ok.png">
-                                    {%- else -%}
-                                    <img src="../../img/icon-nok.png">
-                                    {%- endif %}
+                                    <img src="../../img/gauge_{{ scenario_results[scenario].getStatus() }}.png">
                                 </td>
-                                <td>{{scenario_results[scenario].getScore()}}</td>
+                                <td>{{scenario_results[scenario].getFourDaysScore()}}</td>
+                                <td>{{scenario_results[scenario].getTenDaysScore()}}</td>
                             </tr>
                         {%- endfor %}
                 </table>