add new parse for hwmd step1 scooter

This commit is contained in:
Cayo Puigdefabregas 2023-07-03 18:49:15 +02:00
parent 99f4c71ee1
commit ca4a995a27
4 changed files with 52 additions and 14 deletions

View File

@ -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
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()

View File

@ -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 = []

View File

@ -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):

View File

@ -15,6 +15,7 @@ class SnapshotSoftware(Enum):
Web = 'Web'
DesktopApp = 'DesktopApp'
WorkbenchDesktop = 'WorkbenchDesktop'
UsodyOS = 'UsodyOS'
def __str__(self):
return self.name