summaryrefslogtreecommitdiffstats
path: root/opnfv_testapi/resources/sut_handlers.py
diff options
context:
space:
mode:
authorxudan <xudan16@huawei.com>2018-07-06 05:16:40 -0400
committerxudan <xudan16@huawei.com>2018-07-06 05:21:42 -0400
commitb3e40f026d655501bfa581452c447784604ecb05 (patch)
tree406f8bfc1abc1b33f98153d03abd34ef7b0e2fe9 /opnfv_testapi/resources/sut_handlers.py
parentb1b0ea32d1a296c7d055c5391261dcad6be48c63 (diff)
Move all web portal code to the new repo dovetail-webportal
This is only the first step to simply copy the file here. There still need some more work to make sure all work well. All the changes will be submitted with other patches to make it easily to review. JIRA: DOVETAIL-671 Change-Id: I64d32a9df562184166b6199e2719f298687d1a0a Signed-off-by: xudan <xudan16@huawei.com>
Diffstat (limited to 'opnfv_testapi/resources/sut_handlers.py')
-rw-r--r--opnfv_testapi/resources/sut_handlers.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/opnfv_testapi/resources/sut_handlers.py b/opnfv_testapi/resources/sut_handlers.py
new file mode 100644
index 0000000..16c50b8
--- /dev/null
+++ b/opnfv_testapi/resources/sut_handlers.py
@@ -0,0 +1,112 @@
+##############################################################################
+# Copyright (c) 2017
+# 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 logging
+import json
+import os
+
+from opnfv_testapi.resources import handlers
+from opnfv_testapi.resources import sut_models
+from opnfv_testapi.tornado_swagger import swagger
+
+LOG = logging.getLogger(__name__)
+LOG.setLevel(logging.DEBUG)
+
+RESULT_PATH = '/home/testapi/logs/{}/results'
+
+
+class GenericSutHandler(handlers.GenericApiHandler):
+ def __init__(self, application, request, **kwargs):
+ super(GenericSutHandler, self).__init__(application,
+ request,
+ **kwargs)
+ self.table = "suts"
+ self.table_cls = sut_models.Sut
+
+
+class HardwareHandler(GenericSutHandler):
+ @swagger.operation(nickname="getHardwareById")
+ def get(self, id):
+ endpoint_info = self._read_endpoint_info(id)
+ LOG.debug('Endpoint info: %s', endpoint_info)
+
+ all_info = self._read_sut_info(id)
+ LOG.debug('All SUT info: %s', all_info)
+
+ hardware_info = {k: self._get_single_host_info(v)
+ for k, v in all_info.items()}
+ LOG.debug('SUT info: %s', hardware_info)
+
+ data = {
+ 'endpoint_info': endpoint_info,
+ 'hardware_info': hardware_info
+ }
+
+ self.write(data)
+
+ def _read_endpoint_info(self, id):
+ path = os.path.join(RESULT_PATH.format(id), 'endpoint_info.json')
+ try:
+ with open(path) as f:
+ endpoint_info = json.load(f)
+ except Exception:
+ endpoint_info = []
+
+ return endpoint_info
+
+ def _read_sut_info(self, id):
+ path = os.path.join(RESULT_PATH.format(id), 'all_hosts_info.json')
+ try:
+ with open(path) as f:
+ all_info = json.load(f)
+ except Exception:
+ all_info = {}
+ return all_info
+
+ def _get_single_host_info(self, single_info):
+ info = []
+ facts = single_info.get('ansible_facts', {})
+
+ info.append(['hostname', facts.get('ansible_hostname')])
+
+ info.append(['product_name', facts.get('ansible_product_name')])
+ info.append(['product_version', facts.get('ansible_product_version')])
+
+ processors = facts.get('ansible_processor', [])
+ try:
+ processor_type = '{} {}'.format(processors[0], processors[1])
+ except IndexError:
+ LOG.exception('No Processor in SUT data')
+ processor_type = None
+ info.append(['processor_type', processor_type])
+ info.append(['architecture', facts.get('ansible_architecture')])
+ info.append(['processor_cores', facts.get('ansible_processor_cores')])
+ info.append(['processor_vcpus', facts.get('ansible_processor_vcpus')])
+
+ memory = facts.get('ansible_memtotal_mb')
+ memory = round(memory * 1.0 / 1024, 2) if memory else None
+ info.append(['memory', '{} GB'.format(memory)])
+
+ devices = facts.get('ansible_devices', {})
+ info.extend([self._get_device_info(k, v) for k, v in devices.items()])
+
+ lsb_description = facts.get('ansible_lsb', {}).get('description')
+ info.append(['OS', lsb_description])
+
+ interfaces = facts.get('ansible_interfaces')
+ info.append(['interfaces', interfaces])
+ info.extend([self._get_interface_info(facts, i) for i in interfaces])
+ info = [i for i in info if i]
+
+ return info
+
+ def _get_interface_info(self, facts, name):
+ mac = facts.get('ansible_{}'.format(name), {}).get('macaddress')
+ return [name, mac] if mac else []
+
+ def _get_device_info(self, name, info):
+ return ['disk_{}'.format(name), info.get('size')]