diff --git a/ereuse_devicehub/api/views.py b/ereuse_devicehub/api/views.py index 23414b38..ceddd791 100644 --- a/ereuse_devicehub/api/views.py +++ b/ereuse_devicehub/api/views.py @@ -1,4 +1,5 @@ import json +import logging from binascii import Error as asciiError from flask import Blueprint @@ -21,6 +22,8 @@ from ereuse_devicehub.resources.action.views.snapshot import ( ) from ereuse_devicehub.resources.enums import Severity +logger = logging.getLogger(__name__) + api = Blueprint('api', __name__, url_prefix='/api') @@ -55,7 +58,19 @@ class InventoryView(LoginMixin, SnapshotMixin): if type(snapshot_json) == Response: return snapshot_json - self.snapshot_json = ParseSnapshotLsHw(snapshot_json).get_snapshot() + try: + self.snapshot_json = ParseSnapshotLsHw(snapshot_json).get_snapshot() + raise 1 == 2 + except Exception as err: + logger.error("Error: {} \n{}\n".format(err, self.snapshot_json)) + + self.response = jsonify( + { + 'error': err, + } + ) + self.response.status_code = 500 + return self.response snapshot = self.build() snapshot.device.set_hid() diff --git a/ereuse_devicehub/parser/parser.py b/ereuse_devicehub/parser/parser.py index 9207c59a..39f4bee8 100644 --- a/ereuse_devicehub/parser/parser.py +++ b/ereuse_devicehub/parser/parser.py @@ -18,25 +18,28 @@ logger = logging.getLogger(__name__) class ParseSnapshot: def __init__(self, snapshot, default="n/a"): self.default = default - self.dmidecode_raw = snapshot["data"]["dmidecode"] - self.smart_raw = snapshot["data"]["smart"] - self.hwinfo_raw = snapshot["data"]["hwinfo"] + self.dmidecode_raw = snapshot["hwmd"]["dmidecode"] + self.smart_raw = snapshot["hwmd"]["smart"] + self.hwinfo_raw = snapshot["hwmd"]["hwinfo"] + self.lshw_raw = snapshot["hwmd"]["lshw"] + self.lscpi_raw = snapshot["hwmd"]["lspci"] self.device = {"actions": []} self.components = [] self.dmi = DMIParse(self.dmidecode_raw) self.smart = self.loads(self.smart_raw) + self.lshw = self.loads(self.lshw_raw) self.hwinfo = self.parse_hwinfo() self.set_basic_datas() self.set_components() self.snapshot_json = { "device": self.device, - "software": "Workbench", + "software": "UsodyOS", "components": self.components, "uuid": snapshot['uuid'], "type": snapshot['type'], - "version": "14.0.0", + "version": "1.0.0", "endTime": snapshot["timestamp"], "elapsed": 1, "sid": snapshot["sid"], @@ -46,6 +49,7 @@ class ParseSnapshot: return Snapshot().load(self.snapshot_json) def set_basic_datas(self): + # import pdb; pdb.set_trace() self.device['manufacturer'] = self.dmi.manufacturer() self.device['model'] = self.dmi.model() self.device['serialNumber'] = self.dmi.serial_number() @@ -321,10 +325,10 @@ class ParseSnapshotLsHw: self.uuid = snapshot.get("uuid") self.sid = snapshot.get("sid") self.version = str(snapshot.get("version")) - self.dmidecode_raw = snapshot["data"]["dmidecode"] - self.smart = snapshot["data"]["smart"] - self.hwinfo_raw = snapshot["data"]["hwinfo"] - self.lshw = snapshot["data"]["lshw"] + self.dmidecode_raw = snapshot["hwmd"]["dmidecode"] + self.smart = snapshot["hwmd"]["smart"] + self.hwinfo_raw = snapshot["hwmd"]["hwinfo"] + self.lshw = snapshot["hwmd"]["lshw"] self.device = {"actions": []} self.components = [] self.components_obj = [] diff --git a/ereuse_devicehub/parser/schemas.py b/ereuse_devicehub/parser/schemas.py index fbdc671d..415d3147 100644 --- a/ereuse_devicehub/parser/schemas.py +++ b/ereuse_devicehub/parser/schemas.py @@ -5,13 +5,24 @@ from marshmallow.fields import Dict, List, Nested, String from ereuse_devicehub.resources.schemas import Thing +# from marshmallow_enum import EnumField + class Snapshot_lite_data(MarshmallowSchema): - dmidecode = String(required=True) - hwinfo = String(required=True) - smart = List(Dict(), required=True) + hwmd_version = String(required=True) lshw = Dict(required=True) + dmidecode = String(required=True) lspci = String(required=True) + hwinfo = String(required=True) + smart = List(Dict(), required=False) + + +class Test(MarshmallowSchema): + type = String(required=True) + + +class Sanitize(MarshmallowSchema): + type = String(required=True) class Snapshot_lite(Thing): @@ -19,11 +30,18 @@ class Snapshot_lite(Thing): version = String(required=True) schema_api = String(required=True) software = String(required=True) + # software = EnumField( + # SnapshotSoftware, + # required=True, + # description='The software that generated this Snapshot.', + # ) sid = String(required=True) type = String(required=True) timestamp = String(required=True) settings_version = String(required=False) - data = Nested(Snapshot_lite_data, required=True) + hwmd = Nested(Snapshot_lite_data, required=True) + tests = Nested(Test, many=True, collection_class=list, required=False) + sanitize = Nested(Sanitize, many=True, collection_class=list, required=False) @validates_schema def validate_workbench_version(self, data: dict): diff --git a/ereuse_devicehub/resources/enums.py b/ereuse_devicehub/resources/enums.py index dd82fbc6..8662bfa8 100644 --- a/ereuse_devicehub/resources/enums.py +++ b/ereuse_devicehub/resources/enums.py @@ -15,6 +15,7 @@ class SnapshotSoftware(Enum): Web = 'Web' DesktopApp = 'DesktopApp' WorkbenchDesktop = 'WorkbenchDesktop' + UsodyOS = 'UsodyOS' def __str__(self): return self.name