ENV REPOS_DIR /home/opnfv/repos
ENV QTIP_DIR /home/opnfv/repos/qtip
+ENV PYTHONPATH /home/opnfv/repos/qtip
WORKDIR /home/opnfv
RUN pip install -r $REPOS_DIR/qtip/requirements.txt
-
+CMD cd $REPOS_DIR/qtip && python restful_server/qtip_server.py>/var/log/qtip/run.log
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
from datetime import datetime
+from operator import add
import uuid
jobs = {}
'end_time': None,
'state': 'processing',
'state_detail': [],
- 'result': []}
+ 'result': None,
+ 'result_detail': []}
jobs[job['job_id']] = job
return job['job_id']
def finish_job(job_id):
jobs[job_id]['end_time'] = str(datetime.now())
jobs[job_id]['state'] = 'finished'
+ jobs[job_id]['result'] = reduce(add, map(lambda x: x['result'],
+ jobs[job_id]['result_detail']))
del threads[job_id]
jobs[job_id]['state_detail'] = state_detail
-def update_job_result(job_id, result):
- jobs[job_id]['result'] = result
+def update_job_result_detail(job_id, benchmark, result):
+ result['benchmark'] = benchmark
+ jobs[job_id]['result_detail'].append(result)
def is_job_timeout(job_id):
if db.is_job_timeout(job_id) or stop_event.is_set():
break
db.update_benmark_state_in_state_detail(job_id, benchmark, 'processing')
- args_handler.prepare_and_run_benchmark(installer_type, '/home',
- args_handler.get_benchmark_path(pod_name, suite_name, benchmark))
+ result = args_handler.prepare_and_run_benchmark(installer_type,
+ '/home',
+ args_handler.get_benchmark_path(pod_name,
+ suite_name,
+ benchmark))
+ db.update_job_result_detail(job_id, benchmark, copy(result))
db.update_benmark_state_in_state_detail(job_id, benchmark, 'finished')
db.finish_job(job_id)
api.add_resource(Job, '/api/v1.0/jobs/<string:id>')
if __name__ == "__main__":
- app.run()
+ app.run(host='0.0.0.0')
"role": "2-host"}])
])
@mock.patch('func.driver.AnsibleApi.execute_playbook')
- def test_driver_success(self, mock_ansible, test_input, expected):
+ @mock.patch('func.driver.AnsibleApi.get_detail_playbook_stats')
+ def test_driver_success(self, mock_stats, mock_ansible, test_input, expected):
mock_ansible.return_value = True
+ mock_stats.return_value = [(u'10.20.6.14', {'unreachable': 0,
+ 'skipped': 13,
+ 'ok': 27,
+ 'changed': 26,
+ 'failures': 0}),
+ ('localhost', {'unreachable': 0,
+ 'skipped': 0,
+ 'ok': 6,
+ 'changed': 6,
+ 'failures': 0}),
+ (u'10.20.6.13', {'unreachable': 0,
+ 'skipped': 13,
+ 'ok': 27,
+ 'changed': 26,
+ 'failures': 0})]
dri = Driver()
- dri.drive_bench(test_input[0], test_input[1], test_input[2], test_input[3],
- test_input[4], test_input[5], test_input[6], test_input[7])
+ result = dri.drive_bench(test_input[0], test_input[1], test_input[2], test_input[3],
+ test_input[4], test_input[5], test_input[6], test_input[7])
call_list = mock_ansible.call_args_list
for call in call_list:
call_args, call_kwargs = call
real_call = call_args[3]
assert real_call == expected[call_list.index(call)]
+ assert result['result'] == 0
{'state': 'finished', 'benchmark': 'ramspeed_bm.yaml'},
{'state': 'finished', 'benchmark': 'dpi_bm.yaml'},
{'state': 'finished', 'benchmark': 'ssl_bm.yaml'}],
- 'result': []}),
+ 'result': 0}),
({'installer_type': 'fuel',
'installer_ip': '10.20.0.2',
'pod_name': 'zte-pod1',
{u'state': u'finished', u'benchmark': u'ramspeed_vm.yaml'},
{u'state': u'finished', u'benchmark': u'dpi_vm.yaml'},
{u'state': u'finished', u'benchmark': u'ssl_vm.yaml'}],
- 'result': []})
+ 'result': 0})
])
@mock.patch('restful_server.qtip_server.args_handler.prepare_and_run_benchmark')
def test_post_get_delete_job_successful(self, mock_args_handler, app_client, body, expected):
+ mock_args_handler.return_value = {'result': 0,
+ 'detail': {'host': [(u'10.20.6.14', {'unreachable': 0,
+ 'skipped': 13,
+ 'ok': 27,
+ 'changed': 26,
+ 'failures': 0}),
+ ('localhost', {'unreachable': 0,
+ 'skipped': 0,
+ 'ok': 6,
+ 'changed': 6,
+ 'failures': 0}),
+ (u'10.20.6.13', {'unreachable': 0,
+ 'skipped': 13,
+ 'ok': 27,
+ 'changed': 26,
+ 'failures': 0})]}}
+
reply = app_client.post("/api/v1.0/jobs", data=body)
print(reply.data)
id = json.loads(reply.data)['job_id']