add model for save errors of parse snapshots
This commit is contained in:
parent
77a35ec1a3
commit
cb5fb14c92
|
@ -0,0 +1,22 @@
|
|||
from citext import CIText
|
||||
from sqlalchemy import BigInteger, Column, Sequence, SmallInteger
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
|
||||
from ereuse_devicehub.db import db
|
||||
from ereuse_devicehub.resources.enums import Severity
|
||||
from ereuse_devicehub.resources.models import Thing
|
||||
|
||||
|
||||
class SnapshotErrors(Thing):
|
||||
"""A Snapshot errors."""
|
||||
|
||||
id = Column(BigInteger, Sequence('snapshot_errors_seq'), primary_key=True)
|
||||
description = Column(CIText(), default='', nullable=False)
|
||||
severity = Column(SmallInteger, default=Severity.Info, nullable=False)
|
||||
snapshot_uuid = Column(UUID(as_uuid=True), nullable=False)
|
||||
|
||||
def save(self, commit=False):
|
||||
db.session.add(self)
|
||||
|
||||
if commit:
|
||||
db.session.commit()
|
|
@ -6,6 +6,8 @@ from dmidecode import DMIParse
|
|||
|
||||
from ereuse_devicehub.parser import base2
|
||||
from ereuse_devicehub.parser.computer import Computer
|
||||
from ereuse_devicehub.parser.models import SnapshotErrors
|
||||
from ereuse_devicehub.resources.enums import Severity
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -435,7 +437,7 @@ class ParseSnapshotLsHw:
|
|||
try:
|
||||
uuid.UUID(uuid)
|
||||
except AttributeError as err:
|
||||
self.errors(err)
|
||||
self.errors("{}".format(err))
|
||||
txt = "Error: Snapshot: {uuid} have this uuid: {device}".format(
|
||||
uuid=self.uuid, device=uuid
|
||||
)
|
||||
|
@ -481,7 +483,7 @@ class ParseSnapshotLsHw:
|
|||
self.DataStorageInterface(interface.upper())
|
||||
except ValueError as err:
|
||||
txt = "interface {} is not in DataStorageInterface Enum".format(interface)
|
||||
self.errors(err)
|
||||
self.errors("{}".format(err))
|
||||
self.errors(txt)
|
||||
return "ATA"
|
||||
|
||||
|
@ -519,9 +521,13 @@ class ParseSnapshotLsHw:
|
|||
|
||||
return action
|
||||
|
||||
def errors(self, txt=None):
|
||||
def errors(self, txt=None, severity=Severity.Info):
|
||||
if not txt:
|
||||
return self._errors
|
||||
|
||||
logger.error(txt)
|
||||
self._errors.append(txt)
|
||||
error = SnapshotErrors(
|
||||
description=txt, snapshot_uuid=self.uuid, severity=severity
|
||||
)
|
||||
error.save()
|
||||
|
|
|
@ -7,12 +7,14 @@ from datetime import datetime
|
|||
|
||||
from flask import current_app as app
|
||||
from flask import g
|
||||
from marshmallow import ValidationError
|
||||
from sqlalchemy.util import OrderedSet
|
||||
|
||||
from ereuse_devicehub.db import db
|
||||
from ereuse_devicehub.parser.models import SnapshotErrors
|
||||
from ereuse_devicehub.parser.parser import ParseSnapshotLsHw
|
||||
from ereuse_devicehub.resources.action.models import Snapshot
|
||||
from ereuse_devicehub.parser.schemas import Snapshot_lite
|
||||
from ereuse_devicehub.resources.action.models import Snapshot
|
||||
from ereuse_devicehub.resources.device.models import Computer
|
||||
from ereuse_devicehub.resources.enums import Severity, SnapshotSoftware
|
||||
from ereuse_devicehub.resources.user.exceptions import InsufficientPermission
|
||||
|
@ -82,7 +84,17 @@ class SnapshotView:
|
|||
self.validate_json(snapshot_json)
|
||||
snapshot_json = self.build_lite()
|
||||
|
||||
try:
|
||||
self.snapshot_json = resource_def.schema.load(snapshot_json)
|
||||
except ValidationError as err:
|
||||
txt = "{}".format(err)
|
||||
uuid = snapshot_json.get('uuid')
|
||||
error = SnapshotErrors(
|
||||
description=txt, snapshot_uuid=uuid, severity=Severity.Error
|
||||
)
|
||||
error.save(commit=True)
|
||||
raise err
|
||||
|
||||
self.response = self.build()
|
||||
move_json(self.tmp_snapshots, self.path_snapshot, g.user.email)
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
Reference in New Issue