Refactor pushing suite result to test db 67/22767/5
authorzhifeng.jiang <jiang.zhifeng@zte.com.cn>
Fri, 7 Oct 2016 05:12:39 +0000 (13:12 +0800)
committerzhifeng.jiang <jiang.zhifeng@zte.com.cn>
Thu, 13 Oct 2016 01:28:16 +0000 (09:28 +0800)
modification:
    remove compute_suite.py,network_suite.py,storage_suite.py
    handler all suite result in suite_result.py
    refactor pushtoDB.py so that it can be called by qtip_server

JIRA:QTIP-99

Change-Id: I1630a512c22cba7be038f5301f1454b8ef4f762f
Signed-off-by: zhifeng.jiang <jiang.zhifeng@zte.com.cn>
15 files changed:
dashboard/__init__.py [new file with mode: 0644]
dashboard/pushtoDB.py
data/__init__.py [new file with mode: 0644]
data/ref_results/__init__.py [new file with mode: 0644]
data/ref_results/compute_benchmarks_indices.py
data/ref_results/compute_suite.py [deleted file]
data/ref_results/index_calculation.py
data/ref_results/network_benchmarks_indices.py
data/ref_results/network_suite.py [deleted file]
data/ref_results/storage_benchmarks_indices.py
data/ref_results/storage_suite.py [deleted file]
data/ref_results/suite_result.py [new file with mode: 0644]
docker/run_qtip.sh
qtip.py
restful_server/result_handler.py [new file with mode: 0644]

diff --git a/dashboard/__init__.py b/dashboard/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
index d5458b1..e6a4d23 100644 (file)
@@ -3,6 +3,10 @@ import json
 import datetime
 import os
 import sys
+from utils import logger_utils
+
+logger = logger_utils.QtipLogger('push_db').get
+
 TEST_DB = 'http://testresults.opnfv.org/test/api/v1'
 
 suite_list = [('compute_result.json', 'compute_test_suite'),
@@ -11,28 +15,25 @@ suite_list = [('compute_result.json', 'compute_test_suite'),
 payload_list = {}
 
 
-def push_results_to_db(db_url, case_name, payload, logger=None, pod_name="dell-pod1"):
+def push_results_to_db(db_url, case_name, payload, installer, pod_name):
 
     url = db_url + "/results"
     creation_date = str(datetime.datetime.utcnow().isoformat())
-    installer = os.environ['INSTALLER_TYPE']
-    pod_name = os.environ['NODE_NAME']
 
     params = {"project_name": "qtip", "case_name": case_name,
               "pod_name": pod_name, "installer": installer, "start_date": creation_date,
               "version": "test", "details": payload}
 
     headers = {'Content-Type': 'application/json'}
-    print pod_name
-    print installer
-    print creation_date
-
+    logger.info('pod_name:{0},installer:{1},creation_data:{2}'.format(pod_name,
+                                                                      installer,
+                                                                      creation_date))
     try:
         r = requests.post(url, data=json.dumps(params), headers=headers)
-        print r
+        logger.info(r)
         return True
     except:
-        print "Error:", sys.exc_info()[0]
+        logger.info("Error:{0}".format(sys.exc_info()[0]))
         return False
 
 
@@ -50,13 +51,15 @@ def main():
     global payload_list
     populate_payload(suite_list)
     if payload_list:
-        print payload_list
+        logger.info(payload_list)
         for suite, case in payload_list.items():
             with open('results/' + suite, 'r') as result_file:
                 j = json.load(result_file)
-            push_results_to_db(TEST_DB, case, j)
+            push_results_to_db(TEST_DB, case, j,
+                               os.environ['INSTALLER_TYPE'],
+                               os.environ['NODE_NAME'])
     elif not payload_list:
-        print 'Results not found'
+        logger.info('Results not found')
 
 
 if __name__ == "__main__":
diff --git a/data/__init__.py b/data/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/data/ref_results/__init__.py b/data/ref_results/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
index 400d54a..9012cef 100644 (file)
@@ -4,7 +4,7 @@ from result_accum import result_concat as concat
 
 
 def dpi_index():
-    dpi_dict = concat('../../results/dpi/')
+    dpi_dict = concat('results/dpi/')
     dpi_bm_ref = get_reference('compute', 'dpi_bm')
     dpi_bm_index = get_index(dpi_dict, 'dpi_bm', dpi_bm_ref, 'details', 'bps')
 
@@ -20,7 +20,7 @@ def dpi_index():
 
 def dhrystone_index():
 
-    dhrystone_dict = concat('../../results/dhrystone/')
+    dhrystone_dict = concat('results/dhrystone/')
     dhrystone_single_bm_ref = get_reference('compute', 'dhrystone_bm', 'single_cpu')
     dhrystone_single_bm_index = get_index(dhrystone_dict, 'dhrystone_bm', dhrystone_single_bm_ref, 'details', 'single', 'score')
 
@@ -46,7 +46,7 @@ def dhrystone_index():
 
 def whetstone_index():
 
-    whetstone_dict = concat('../../results/whetstone/')
+    whetstone_dict = concat('results/whetstone/')
     whetstone_single_bm_ref = get_reference('compute', 'whetstone_bm', 'single_cpu')
     whetstone_single_bm_index = get_index(whetstone_dict, 'whetstone_bm', whetstone_single_bm_ref, 'details', 'single', 'score')
 
@@ -72,7 +72,7 @@ def whetstone_index():
 
 def ramspeed_index():
 
-    ramspeed_dict = concat('../../results/ramspeed/')
+    ramspeed_dict = concat('results/ramspeed/')
     ramspeed_int_bm_ref = get_reference('compute', 'ramspeed_bm', 'INTmem', 'Average (MB/s)')
     ramspeed_int_bm_index = get_index(ramspeed_dict, 'ramspeed_bm', ramspeed_int_bm_ref, 'details', 'int_bandwidth', 'average')
 
@@ -99,7 +99,7 @@ def ramspeed_index():
 
 def ssl_index():
 
-    ssl_dict = concat('../../results/ssl/')
+    ssl_dict = concat('results/ssl/')
 
     ssl_RSA512b_bm_ref = get_reference('compute', 'ssl_bm', 'RSA', '512b')
     ssl_RSA1024b_bm_ref = get_reference('compute', 'ssl_bm', 'RSA', '1024b')
diff --git a/data/ref_results/compute_suite.py b/data/ref_results/compute_suite.py
deleted file mode 100644 (file)
index 7154183..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-import json
-import compute_benchmarks_indices as benchmark_indices
-
-
-compute_dict = {}
-try:
-    compute_dict['DPI'] = benchmark_indices.dpi_index()
-except OSError:
-    pass
-
-try:
-    compute_dict['Dhrystone'] = benchmark_indices.dhrystone_index()
-except OSError:
-    pass
-
-try:
-    compute_dict['Whetstone'] = benchmark_indices.whetstone_index()
-except OSError:
-    pass
-
-try:
-    compute_dict['SSL'] = benchmark_indices.ssl_index()
-except OSError:
-    pass
-
-try:
-    compute_dict['RamSpeed'] = benchmark_indices.ramspeed_index()
-except OSError:
-    pass
-
-compute_bench_list = ['DPI', 'Dhrystone', 'Whetstone', 'SSL', 'RamSpeed']
-l = len(compute_bench_list)
-
-temp = 0
-for benchmark in compute_bench_list:
-    try:
-        temp = temp + float(compute_dict[benchmark]['index'])
-    except KeyError:
-        l = l - 1
-        pass
-
-if l == 0:
-    print "No compute suite results found"
-else:
-    compute_suite_index = temp / l
-    compute_dict_f = {}
-    compute_dict_f['index'] = compute_suite_index
-    compute_dict_f['suite_results'] = compute_dict
-    with open('../../results/compute_result.json', 'w+') as result_json:
-        json.dump(compute_dict_f, result_json, indent=4, sort_keys=True)
index 7dee749..5ca4a46 100644 (file)
@@ -13,7 +13,7 @@ def compute_index(total_measured, ref_result, count):
 
 def get_reference(*args):
 
-    with open('./reference.json') as reference_file:
+    with open('data/ref_results/reference.json') as reference_file:
         reference_djson = json.load(reference_file)
         for arg in args:
             ref_n = reference_djson.get(str(arg))
index f4c581d..c19d18e 100644 (file)
@@ -4,7 +4,7 @@ from result_accum import result_concat as concat
 
 
 def iperf_index():
-    iperf_dict = concat('../../results/iperf/')
+    iperf_dict = concat('results/iperf/')
     iperf_bm_ref = get_reference('network', 'iperf_bm', 'throughput received(b/s)')
     iperf_bm_index = get_index(iperf_dict, 'iperf_bm', iperf_bm_ref, 'details', 'bandwidth', 'received_throughput')
     iperf_vm_ref = get_reference('network', 'iperf_vm', 'throughput received(b/s)')
diff --git a/data/ref_results/network_suite.py b/data/ref_results/network_suite.py
deleted file mode 100644 (file)
index ae4ed10..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-import json
-import network_benchmarks_indices as benchmark_indices
-
-
-network_dict = {}
-try:
-    network_dict['IPERF'] = benchmark_indices.iperf_index()
-except:
-    pass
-
-network_bench_list = ['IPERF']
-temp = 0
-l = len(network_bench_list)
-
-for benchmark in network_bench_list:
-    try:
-        temp = temp + float(network_dict[benchmark]['index'])
-    except:
-        l = l - 1
-        pass
-
-if l == 0:
-    print "No network results found"
-else:
-    network_suite_index = temp / len(network_bench_list)
-    network_dict_f = {}
-    network_dict_f['index'] = network_suite_index
-    network_dict_f['suite_results'] = network_dict
-    with open('../../results/network_result.json', 'w+') as result_json:
-        json.dump(network_dict_f, result_json, indent=4, sort_keys=True)
index 6c5dd43..a5aef63 100644 (file)
@@ -4,7 +4,7 @@ from result_accum import result_concat as concat
 
 
 def fio_index():
-    fio_dict = concat('../../results/fio/')
+    fio_dict = concat('results/fio/')
     fio_r_bm_ref = get_reference('storage', 'fio_bm', 'read', 'IOPS')
     fio_r_bm_index = get_index(fio_dict, 'fio_bm', fio_r_bm_ref, 'details', 'job_0', 'read', 'io_ps')
     fio_w_bm_ref = get_reference('storage', 'fio_bm', 'write', 'IOPS')
diff --git a/data/ref_results/storage_suite.py b/data/ref_results/storage_suite.py
deleted file mode 100644 (file)
index 38d9762..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-import json
-import storage_benchmarks_indices as benchmark_indices
-
-
-storage_dict = {}
-try:
-    storage_dict['FIO'] = benchmark_indices.fio_index()
-except OSError:
-    pass
-
-storage_bench_list = ['FIO']
-l = len(storage_bench_list)
-temp = 0
-for benchmark in storage_bench_list:
-    try:
-        temp = temp + float(storage_dict[benchmark]['index'])
-    except KeyError:
-        l -= 1
-if l == 0:
-    print "No Storage results found"
-else:
-    storage_suite_index = temp / l
-    storage_dict_f = {}
-    storage_dict_f['index'] = storage_suite_index
-    storage_dict_f['storage_suite'] = storage_dict
-    with open('../../results/storage_result.json', 'w+') as result_json:
-        json.dump(storage_dict_f, result_json, indent=4, sort_keys=True)
diff --git a/data/ref_results/suite_result.py b/data/ref_results/suite_result.py
new file mode 100644 (file)
index 0000000..d0b4647
--- /dev/null
@@ -0,0 +1,55 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corp 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
+##############################################################################
+import json
+import importlib
+import sys
+from utils import logger_utils
+
+logger = logger_utils.QtipLogger('suite_result').get
+
+
+def get_benchmark_result(benchmark_name, suite_name):
+    benchmark_indices = importlib.import_module('{0}_benchmarks_indices'.format(suite_name))
+    methodToCall = getattr(benchmark_indices, '{0}_index'.format(benchmark_name))
+    return methodToCall()
+
+
+def get_suite_result(suite_name):
+    suite_dict = {}
+    suite_bench_list = {'compute': ['DPI', 'Dhrystone', 'Whetstone', 'SSL', 'RamSpeed'],
+                        'storage': ['FIO'],
+                        'network': ['IPERF']}
+    temp = 0
+    l = len(suite_bench_list[suite_name])
+    for benchmark in suite_bench_list[suite_name]:
+        try:
+            suite_dict[benchmark] = get_benchmark_result(benchmark.lower(), suite_name)
+            temp = temp + float(suite_dict[benchmark]['index'])
+        except OSError:
+            l = l - 1
+            pass
+
+    if l == 0:
+        logger.info("No {0} suite results found".format(suite_name))
+        return False
+    else:
+        suite_index = temp / l
+        suite_dict_f = {'index': suite_index,
+                        'suite_results': suite_dict}
+        with open('results/{0}_result.json'.format(suite_name), 'w+') as result_json:
+            json.dump(suite_dict_f, result_json, indent=4, sort_keys=True)
+        return True
+
+
+def main():
+    get_suite_result(sys.argv[1])
+
+
+if __name__ == "__main__":
+    main()
index 79529e5..d766d46 100755 (executable)
@@ -3,21 +3,21 @@ run_test_suite()
 {
     if [ "$TEST_CASE" == "compute" ]; then
         cd ${QTIP_DIR}  && python qtip.py -l default -f compute
-        cd ${QTIP_DIR}/data/ref_results/ && python compute_suite.py
+        cd ${QTIP_DIR} && python data/ref_results/suite_result.py compute
     elif [ "$TEST_CASE" == "storage" ]; then
         cd ${QTIP_DIR}  && python qtip.py -l default -f storage
-        cd ${QTIP_DIR}/data/ref_results/ && python storage_suite.py
+        cd ${QTIP_DIR} && python data/ref_results/suite_result.py storage
     elif [ "$TEST_CASE" == "network" ]; then
         cd ${QTIP_DIR}  && python qtip.py -l default -f network
-        cd ${QTIP_DIR}/data/ref_results/ && python network_suite.py
+        cd ${QTIP_DIR} && python data/ref_results/suite_result.py network
     elif [ "$TEST_CASE" == "all" ]; then
         cd ${QTIP_DIR}  && python qtip.py -l default -f compute
         cd ${QTIP_DIR}  && python qtip.py -l default -f storage
         cd ${QTIP_DIR}  && python qtip.py -l default -f network
-    
-        cd ${QTIP_DIR}/data/ref_results/ && python compute_suite.py
-        cd ${QTIP_DIR}/data/ref_results/ && python storage_suite.py
-        cd ${QTIP_DIR}/data/ref_results/ && python network_suite.py
+
+        cd ${QTIP_DIR} && python data/ref_results/suite_result.py compute
+        cd ${QTIP_DIR} && python data/ref_results/suite_result.py storage
+        cd ${QTIP_DIR} && python data/ref_results/suite_result.py network
     fi
 }
 
diff --git a/qtip.py b/qtip.py
index 094483f..3813095 100644 (file)
--- a/qtip.py
+++ b/qtip.py
@@ -1,22 +1,19 @@
-##############################################################################\r
-# Copyright (c) 2015 Dell Inc  and others.\r
-#\r
-# All rights reserved. This program and the accompanying materials\r
-# are made available under the terms of the Apache License, Version 2.0\r
-# which accompanies this distribution, and is available at\r
-# http://www.apache.org/licenses/LICENSE-2.0\r
-##############################################################################\r
-from func.cli import Cli\r
-import os\r
-\r
-\r
-def main():\r
-    os.system('./data/file_permission.sh')\r
-    Cli()\r
-#    os.system('cd data/ref_results && python compute_suite.py')\r
-#    os.system('cd data/ref_results && python storage_suite.py')\r
-#    os.system('cd data/ref_results && python network_suite.py')\r
-#   os.system('cd data/report && python Qtip_Report.py')\r
-\r
-if __name__ == "__main__":\r
-    main()\r
+##############################################################################
+# Copyright (c) 2015 Dell Inc  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
+##############################################################################
+from func.cli import Cli
+import os
+
+
+def main():
+    os.system('./data/file_permission.sh')
+    Cli()
+
+
+if __name__ == "__main__":
+    main()
diff --git a/restful_server/result_handler.py b/restful_server/result_handler.py
new file mode 100644 (file)
index 0000000..059a251
--- /dev/null
@@ -0,0 +1,22 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corp 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
+##############################################################################
+import json
+import data.ref_results.suite_result as suite_result
+import dashboard.pushtoDB as push_to_db
+
+
+def dump_suite_result(suite_name):
+    return suite_result.get_suite_result(suite_name)
+
+
+def push_suite_result_to_db(suite_name, test_db_url, installer_type, node_name):
+    with open('results/{0}_result.json'.format(suite_name), 'r') as result_file:
+        j = json.load(result_file)
+        push_to_db.push_results_to_db(test_db_url, '{0}_test_suite'.format(suite_name),
+                                      j, installer_type, node_name)