Change Event.error/incidence for Event.severity
This commit is contained in:
parent
b5e3d0c6ec
commit
e009bf4bc1
|
@ -9,7 +9,7 @@
|
||||||
"elapsed": 2
|
"elapsed": 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"elapsed": 60
|
"elapsed": 60
|
||||||
},
|
},
|
||||||
|
@ -91,14 +91,14 @@
|
||||||
{
|
{
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"type": "StepRandom",
|
"type": "StepRandom",
|
||||||
"startTime": "2018-07-11T11:20:01.005336",
|
"startTime": "2018-07-11T11:20:01.005336",
|
||||||
"endTime": "2018-07-11T11:42:12.971177"
|
"endTime": "2018-07-11T11:42:12.971177"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"zeros": false,
|
"zeros": false,
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"type": "EraseBasic",
|
"type": "EraseBasic",
|
||||||
"endTime": "2018-07-11T11:42:12.975358",
|
"endTime": "2018-07-11T11:42:12.975358",
|
||||||
"startTime": "2018-07-11T11:20:01.004892"
|
"startTime": "2018-07-11T11:20:01.004892"
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"status": "Unspecified Error. Self-test not started.",
|
"status": "Unspecified Error. Self-test not started.",
|
||||||
"elapsed": 0
|
"elapsed": 0
|
||||||
|
|
|
@ -74,13 +74,13 @@
|
||||||
"type": "EraseBasic",
|
"type": "EraseBasic",
|
||||||
"zeros": false,
|
"zeros": false,
|
||||||
"endTime": "2018-07-11T11:56:52.390306",
|
"endTime": "2018-07-11T11:56:52.390306",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"startTime": "2018-07-11T10:49:31.998217",
|
"startTime": "2018-07-11T10:49:31.998217",
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
"type": "StepRandom",
|
"type": "StepRandom",
|
||||||
"endTime": "2018-07-11T11:56:52.386505",
|
"endTime": "2018-07-11T11:56:52.386505",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"startTime": "2018-07-11T10:49:31.998609"
|
"startTime": "2018-07-11T10:49:31.998609"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"status": "Unspecified Error. Self-test not started.",
|
"status": "Unspecified Error. Self-test not started.",
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"elapsed": 0
|
"elapsed": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -130,7 +130,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"elapsed": 60
|
"elapsed": 60
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
{
|
{
|
||||||
"elapsed": 1,
|
"elapsed": 1,
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"status": "Unspecified Error. Self-test not started.",
|
"status": "Unspecified Error. Self-test not started.",
|
||||||
"length": "Short"
|
"length": "Short"
|
||||||
},
|
},
|
||||||
|
@ -83,13 +83,13 @@
|
||||||
"startTime": "2018-07-11T10:32:14.445306",
|
"startTime": "2018-07-11T10:32:14.445306",
|
||||||
"zeros": false,
|
"zeros": false,
|
||||||
"type": "EraseBasic",
|
"type": "EraseBasic",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"endTime": "2018-07-11T10:53:46.442123",
|
"endTime": "2018-07-11T10:53:46.442123",
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
"startTime": "2018-07-11T10:32:14.445496",
|
"startTime": "2018-07-11T10:32:14.445496",
|
||||||
"type": "StepRandom",
|
"type": "StepRandom",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"endTime": "2018-07-11T10:53:46.438901"
|
"endTime": "2018-07-11T10:53:46.438901"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -107,7 +107,7 @@
|
||||||
{
|
{
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"status": "Unspecified Error. Self-test not started.",
|
"status": "Unspecified Error. Self-test not started.",
|
||||||
"length": "Short"
|
"length": "Short"
|
||||||
},
|
},
|
||||||
|
@ -115,13 +115,13 @@
|
||||||
"startTime": "2018-07-11T10:53:46.442187",
|
"startTime": "2018-07-11T10:53:46.442187",
|
||||||
"zeros": false,
|
"zeros": false,
|
||||||
"type": "EraseBasic",
|
"type": "EraseBasic",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"endTime": "2018-07-11T11:16:28.469899",
|
"endTime": "2018-07-11T11:16:28.469899",
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
"startTime": "2018-07-11T10:53:46.442343",
|
"startTime": "2018-07-11T10:53:46.442343",
|
||||||
"type": "StepRandom",
|
"type": "StepRandom",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"endTime": "2018-07-11T11:16:28.463789"
|
"endTime": "2018-07-11T11:16:28.463789"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -157,7 +157,7 @@
|
||||||
"chassis": "Tower",
|
"chassis": "Tower",
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"type": "StressTest"
|
"type": "StressTest"
|
||||||
},
|
},
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
{
|
{
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"error": false
|
"severity": "Info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"elapsed": 1,
|
"elapsed": 1,
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
"elapsed": 15
|
"elapsed": 15
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
|
@ -102,13 +102,13 @@
|
||||||
"startTime": "2018-07-11T13:28:07.319948",
|
"startTime": "2018-07-11T13:28:07.319948",
|
||||||
"type": "EraseBasic",
|
"type": "EraseBasic",
|
||||||
"endTime": "2018-07-11T14:04:04.864425",
|
"endTime": "2018-07-11T14:04:04.864425",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
"startTime": "2018-07-11T13:28:07.320244",
|
"startTime": "2018-07-11T13:28:07.320244",
|
||||||
"type": "StepRandom",
|
"type": "StepRandom",
|
||||||
"endTime": "2018-07-11T14:04:04.861590",
|
"endTime": "2018-07-11T14:04:04.861590",
|
||||||
"error": false
|
"severity": "Info"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"zeros": false
|
"zeros": false
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
"manufacturer": "NEC Computers SAS",
|
"manufacturer": "NEC Computers SAS",
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"type": "StressTest"
|
"type": "StressTest"
|
||||||
},
|
},
|
||||||
|
@ -101,7 +101,7 @@
|
||||||
"size": 305245,
|
"size": 305245,
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"endTime": "2018-07-11T11:33:41.531918",
|
"endTime": "2018-07-11T11:33:41.531918",
|
||||||
"startTime": "2018-07-11T10:30:35.643855",
|
"startTime": "2018-07-11T10:30:35.643855",
|
||||||
"zeros": false,
|
"zeros": false,
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
"type": "StepRandom",
|
"type": "StepRandom",
|
||||||
"endTime": "2018-07-11T11:33:41.529224",
|
"endTime": "2018-07-11T11:33:41.529224",
|
||||||
"startTime": "2018-07-11T10:30:35.644043",
|
"startTime": "2018-07-11T10:30:35.644043",
|
||||||
"error": false
|
"severity": "Info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -125,7 +125,7 @@
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
"elapsed": 1,
|
"elapsed": 1,
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"status": "Unspecified Error. Self-test not started."
|
"status": "Unspecified Error. Self-test not started."
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -101,7 +101,7 @@
|
||||||
"powerCycleCount": 693,
|
"powerCycleCount": 693,
|
||||||
"assessment": true,
|
"assessment": true,
|
||||||
"offlineUncorrectable": 0,
|
"offlineUncorrectable": 0,
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
"reallocatedSectorCount": 0
|
"reallocatedSectorCount": 0
|
||||||
},
|
},
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
{
|
{
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"error": false
|
"severity": "Info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"elapsed": 1,
|
"elapsed": 1,
|
||||||
|
|
|
@ -62,7 +62,7 @@
|
||||||
"assessment": true,
|
"assessment": true,
|
||||||
"currentPendingSectorCount": 0,
|
"currentPendingSectorCount": 0,
|
||||||
"elapsed": 134,
|
"elapsed": 134,
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
"lifetime": 19549,
|
"lifetime": 19549,
|
||||||
"offlineUncorrectable": 0,
|
"offlineUncorrectable": 0,
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"type": "StressTest"
|
"type": "StressTest"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
"elapsed": 2,
|
"elapsed": 2,
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"status": "Unspecified Error. Self-test not started."
|
"status": "Unspecified Error. Self-test not started."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -99,12 +99,12 @@
|
||||||
{
|
{
|
||||||
"type": "StepRandom",
|
"type": "StepRandom",
|
||||||
"startTime": "2018-07-03T09:15:22.257059",
|
"startTime": "2018-07-03T09:15:22.257059",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"endTime": "2018-07-03T10:32:11.843190"
|
"endTime": "2018-07-03T10:32:11.843190"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"startTime": "2018-07-03T09:15:22.256074",
|
"startTime": "2018-07-03T09:15:22.256074",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"zeros": false,
|
"zeros": false,
|
||||||
"endTime": "2018-07-03T10:32:11.848455"
|
"endTime": "2018-07-03T10:32:11.848455"
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"elapsed": 60
|
"elapsed": 60
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -83,7 +83,7 @@
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"status": "Unspecified Error. Self-test not started.",
|
"status": "Unspecified Error. Self-test not started.",
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"length": "Short"
|
"length": "Short"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"status": "Unspecified Error. Self-test not started.",
|
"status": "Unspecified Error. Self-test not started.",
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"elapsed": 1,
|
"elapsed": 1,
|
||||||
"length": Short
|
"length": Short
|
||||||
|
@ -142,7 +142,7 @@
|
||||||
{
|
{
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"error": false
|
"severity": "Info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"rate": 0.9759,
|
"rate": 0.9759,
|
||||||
|
|
|
@ -96,7 +96,7 @@
|
||||||
"status": "Unspecified Error. Self-test not started.",
|
"status": "Unspecified Error. Self-test not started.",
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"length": Short,
|
"length": Short,
|
||||||
"error": true
|
"severity": "Error"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"elapsed": 120
|
"elapsed": 120
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
{
|
{
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"elapsed": 300,
|
"elapsed": 300,
|
||||||
"error": false
|
"severity": "Info"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"serialNumber": "CZC0408YJG",
|
"serialNumber": "CZC0408YJG",
|
||||||
|
@ -125,7 +125,7 @@
|
||||||
"offlineUncorrectable": 1,
|
"offlineUncorrectable": 1,
|
||||||
"powerCycleCount": 1838,
|
"powerCycleCount": 1838,
|
||||||
"assessment": true,
|
"assessment": true,
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
"lifetime": 10546,
|
"lifetime": 10546,
|
||||||
"reallocatedSectorCount": 0,
|
"reallocatedSectorCount": 0,
|
||||||
|
|
|
@ -64,7 +64,7 @@ components:
|
||||||
elapsed: 21
|
elapsed: 21
|
||||||
- type: TestDataStorage
|
- type: TestDataStorage
|
||||||
elapsed: 233
|
elapsed: 233
|
||||||
error: False
|
severity: Info
|
||||||
status: Completed without error
|
status: Completed without error
|
||||||
length: Short
|
length: Short
|
||||||
lifetime: 99
|
lifetime: 99
|
||||||
|
|
|
@ -273,9 +273,10 @@ class DataStoragePrivacyCompliance(Enum):
|
||||||
"""Returns the correct enum depending of the passed-in erasure."""
|
"""Returns the correct enum depending of the passed-in erasure."""
|
||||||
from ereuse_devicehub.resources.event.models import EraseSectors
|
from ereuse_devicehub.resources.event.models import EraseSectors
|
||||||
if isinstance(erasure, EraseSectors):
|
if isinstance(erasure, EraseSectors):
|
||||||
return cls.EraseSectors if not erasure.error else cls.EraseSectorsError
|
c = cls.EraseSectors if erasure.severity != Severity.Error else cls.EraseSectorsError
|
||||||
else:
|
else:
|
||||||
return cls.EraseBasic if not erasure.error else cls.EraseBasicError
|
c = cls.EraseBasic if erasure.severity == Severity.Error else cls.EraseBasicError
|
||||||
|
return c
|
||||||
|
|
||||||
|
|
||||||
class PrinterTechnology(Enum):
|
class PrinterTechnology(Enum):
|
||||||
|
@ -285,3 +286,38 @@ class PrinterTechnology(Enum):
|
||||||
SolidInk = 'Solid ink'
|
SolidInk = 'Solid ink'
|
||||||
Dye = 'Dye-sublimation'
|
Dye = 'Dye-sublimation'
|
||||||
Thermal = 'Thermal'
|
Thermal = 'Thermal'
|
||||||
|
|
||||||
|
|
||||||
|
class Severity(IntEnum):
|
||||||
|
"""A flag evaluating the event execution. Ex. failed events
|
||||||
|
have the value `Severity.Error`.
|
||||||
|
|
||||||
|
Devicehub uses 4 severity levels:
|
||||||
|
|
||||||
|
- Info: default neutral severity. The event succeeded.
|
||||||
|
- Notice: The event succeeded but it is raising awareness.
|
||||||
|
Notices are not usually that important but something
|
||||||
|
(good or bad) worth checking.
|
||||||
|
- Warning: The event succeeded but there is something important
|
||||||
|
to check negatively affecting the event.
|
||||||
|
- Error: the event failed.
|
||||||
|
|
||||||
|
Devicehub specially raises user awareness when an event
|
||||||
|
has a Severity of ``Warning`` or greater.
|
||||||
|
"""
|
||||||
|
|
||||||
|
Info = 0
|
||||||
|
Notice = 1
|
||||||
|
Warning = 2
|
||||||
|
Error = 3
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
if self == self.Info:
|
||||||
|
m = '✓'
|
||||||
|
elif self == self.Notice:
|
||||||
|
m = 'ℹ️'
|
||||||
|
elif self == self.Warning:
|
||||||
|
m = '⚠'
|
||||||
|
else:
|
||||||
|
m = '❌'
|
||||||
|
return m
|
||||||
|
|
|
@ -6,11 +6,12 @@ from typing import Set, Union
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
import inflection
|
import inflection
|
||||||
|
import teal.db
|
||||||
from boltons import urlutils
|
from boltons import urlutils
|
||||||
from citext import CIText
|
from citext import CIText
|
||||||
from flask import current_app as app, g
|
from flask import current_app as app, g
|
||||||
from sqlalchemy import BigInteger, Boolean, CheckConstraint, Column, DateTime, Enum as DBEnum, \
|
from sqlalchemy import BigInteger, Boolean, CheckConstraint, Column, DateTime, Enum as DBEnum, \
|
||||||
Float, ForeignKey, Interval, JSON, Numeric, SmallInteger, Unicode, event, orm, Integer
|
Float, ForeignKey, Integer, Interval, JSON, Numeric, SmallInteger, Unicode, event, orm
|
||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.ext.declarative import declared_attr
|
from sqlalchemy.ext.declarative import declared_attr
|
||||||
from sqlalchemy.ext.orderinglist import ordering_list
|
from sqlalchemy.ext.orderinglist import ordering_list
|
||||||
|
@ -27,9 +28,9 @@ from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.resources.agent.models import Agent
|
from ereuse_devicehub.resources.agent.models import Agent
|
||||||
from ereuse_devicehub.resources.device.models import Component, Computer, DataStorage, Desktop, \
|
from ereuse_devicehub.resources.device.models import Component, Computer, DataStorage, Desktop, \
|
||||||
Device, Laptop, Server
|
Device, Laptop, Server
|
||||||
from ereuse_devicehub.resources.enums import AppearanceRange, Bios, \
|
from ereuse_devicehub.resources.enums import AppearanceRange, Bios, FunctionalityRange, \
|
||||||
FunctionalityRange, PriceSoftware, RATE_NEGATIVE, RATE_POSITIVE, RatingRange, RatingSoftware, \
|
PriceSoftware, RATE_NEGATIVE, RATE_POSITIVE, RatingRange, RatingSoftware, ReceiverRole, \
|
||||||
ReceiverRole, SnapshotExpectedEvents, SnapshotSoftware, TestDataStorageLength
|
Severity, SnapshotExpectedEvents, SnapshotSoftware, TestDataStorageLength
|
||||||
from ereuse_devicehub.resources.models import STR_SM_SIZE, Thing
|
from ereuse_devicehub.resources.models import STR_SM_SIZE, Thing
|
||||||
from ereuse_devicehub.resources.user.models import User
|
from ereuse_devicehub.resources.user.models import User
|
||||||
|
|
||||||
|
@ -48,22 +49,14 @@ class Event(Thing):
|
||||||
name.comment = """
|
name.comment = """
|
||||||
A name or title for the event. Used when searching for events.
|
A name or title for the event. Used when searching for events.
|
||||||
"""
|
"""
|
||||||
incidence = Column(Boolean, default=False, nullable=False)
|
severity = Column(teal.db.IntEnum(Severity), default=Severity.Info, nullable=False)
|
||||||
incidence.comment = """
|
severity.comment = Severity.__doc__
|
||||||
Should this event be reviewed due some anomaly?
|
|
||||||
"""
|
|
||||||
closed = Column(Boolean, default=True, nullable=False)
|
closed = Column(Boolean, default=True, nullable=False)
|
||||||
closed.comment = """
|
closed.comment = """
|
||||||
Whether the author has finished the event.
|
Whether the author has finished the event.
|
||||||
After this is set to True, no modifications are allowed.
|
After this is set to True, no modifications are allowed.
|
||||||
By default events are closed when performed.
|
By default events are closed when performed.
|
||||||
"""
|
"""
|
||||||
error = Column(Boolean, default=False, nullable=False)
|
|
||||||
error.comment = """
|
|
||||||
Did the event fail?
|
|
||||||
For example, a failure in ``Erase`` means that the data storage
|
|
||||||
unit did not erase correctly.
|
|
||||||
"""
|
|
||||||
description = Column(Unicode, default='', nullable=False)
|
description = Column(Unicode, default='', nullable=False)
|
||||||
description.comment = """
|
description.comment = """
|
||||||
A comment about the event.
|
A comment about the event.
|
||||||
|
@ -181,6 +174,7 @@ class Event(Thing):
|
||||||
args = {POLYMORPHIC_ID: cls.t}
|
args = {POLYMORPHIC_ID: cls.t}
|
||||||
if cls.t == 'Event':
|
if cls.t == 'Event':
|
||||||
args[POLYMORPHIC_ON] = cls.type
|
args[POLYMORPHIC_ON] = cls.type
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
if JoinedTableMixin in cls.mro():
|
if JoinedTableMixin in cls.mro():
|
||||||
args[INHERIT_COND] = cls.id == Event.id
|
args[INHERIT_COND] = cls.id == Event.id
|
||||||
return args
|
return args
|
||||||
|
@ -197,16 +191,15 @@ class Event(Thing):
|
||||||
raise ValidationError('The event cannot start after it finished.')
|
raise ValidationError('The event cannot start after it finished.')
|
||||||
return start_time
|
return start_time
|
||||||
|
|
||||||
@property
|
|
||||||
def _err_str(self):
|
|
||||||
return '❌ Error.' if self.error else '✓'
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _date_str(self):
|
def _date_str(self):
|
||||||
return '{:%c}'.format(self.end_time or self.created)
|
return '{:%c}'.format(self.end_time or self.created)
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return '{}'.format(self._err_str)
|
return '{}'.format(self.severity)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<{0.t} {0.id} {0.severity}>'.format(self)
|
||||||
|
|
||||||
|
|
||||||
class EventComponent(db.Model):
|
class EventComponent(db.Model):
|
||||||
|
@ -232,7 +225,7 @@ class EventWithOneDevice(JoinedTableMixin, Event):
|
||||||
primaryjoin=Device.id == device_id)
|
primaryjoin=Device.id == device_id)
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return '<{0.t} {0.id!r} device={0.device!r}>'.format(self)
|
return '<{0.t} {0.id} {0.severity} device={0.device!r}>'.format(self)
|
||||||
|
|
||||||
@declared_attr
|
@declared_attr
|
||||||
def __mapper_args__(cls):
|
def __mapper_args__(cls):
|
||||||
|
@ -260,7 +253,7 @@ class EventWithMultipleDevices(Event):
|
||||||
collection_class=OrderedSet)
|
collection_class=OrderedSet)
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return '<{0.t} {0.id!r} devices={0.devices!r}>'.format(self)
|
return '<{0.t} {0.id} {0.severity} devices={0.devices!r}>'.format(self)
|
||||||
|
|
||||||
|
|
||||||
class EventDevice(db.Model):
|
class EventDevice(db.Model):
|
||||||
|
@ -299,7 +292,7 @@ class EraseBasic(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
||||||
# todo return erasure properties like num steps, if it is british...
|
# todo return erasure properties like num steps, if it is british...
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return '{} on {}.'.format(self._err_str, self.end_time)
|
return '{} on {}.'.format(self.severity, self.end_time)
|
||||||
|
|
||||||
|
|
||||||
class EraseSectors(EraseBasic):
|
class EraseSectors(EraseBasic):
|
||||||
|
@ -310,7 +303,7 @@ class Step(db.Model):
|
||||||
erasure_id = Column(UUID(as_uuid=True), ForeignKey(EraseBasic.id), primary_key=True)
|
erasure_id = Column(UUID(as_uuid=True), ForeignKey(EraseBasic.id), primary_key=True)
|
||||||
type = Column(Unicode(STR_SM_SIZE), nullable=False)
|
type = Column(Unicode(STR_SM_SIZE), nullable=False)
|
||||||
num = Column(SmallInteger, primary_key=True)
|
num = Column(SmallInteger, primary_key=True)
|
||||||
error = Column(Boolean, default=False, nullable=False)
|
severity = Column(teal.db.IntEnum(Severity), default=Severity.Info, nullable=False)
|
||||||
start_time = Column(DateTime, nullable=False)
|
start_time = Column(DateTime, nullable=False)
|
||||||
start_time.comment = Event.start_time.comment
|
start_time.comment = Event.start_time.comment
|
||||||
end_time = Column(DateTime, CheckConstraint('end_time > start_time'), nullable=False)
|
end_time = Column(DateTime, CheckConstraint('end_time > start_time'), nullable=False)
|
||||||
|
@ -358,7 +351,7 @@ class Snapshot(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
||||||
expected_events = Column(ArrayOfEnum(DBEnum(SnapshotExpectedEvents)))
|
expected_events = Column(ArrayOfEnum(DBEnum(SnapshotExpectedEvents)))
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return '{}. {} version {}.'.format(self._err_str, self.software, self.version)
|
return '{}. {} version {}.'.format(self.severity, self.software, self.version)
|
||||||
|
|
||||||
|
|
||||||
class Install(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class Install(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
||||||
|
@ -747,20 +740,18 @@ class TestDataStorage(Test):
|
||||||
|
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
|
# Define severity
|
||||||
# As of https://www.backblaze.com/blog/hard-drive-smart-stats/ and
|
# As of https://www.backblaze.com/blog/hard-drive-smart-stats/ and
|
||||||
# https://www.backblaze.com/blog-smart-stats-2014-8.html
|
# https://www.backblaze.com/blog-smart-stats-2014-8.html
|
||||||
# We can guess some future disk failures by analyzing some
|
# We can guess some future disk failures by analyzing some SMART data.
|
||||||
# SMART data
|
if self.severity is None:
|
||||||
if (self.reallocated_sector_count or 0) > 10:
|
# Test finished successfully
|
||||||
self.incidence = True
|
|
||||||
self.description = 'Warning: Chance of disk failure within a year.'
|
|
||||||
if (self.current_pending_sector_count or 0) > 40 \
|
|
||||||
and (self.reported_uncorrectable_errors or 0) > 10:
|
|
||||||
self.incidence = True
|
|
||||||
self.description = 'Warning: Chance of disk failure within a year.'
|
|
||||||
if not self.assessment:
|
if not self.assessment:
|
||||||
self.incidence = True
|
self.severity = Severity.Error
|
||||||
self.description = 'Warning: Drive failure expected soon.'
|
elif self.current_pending_sector_count and self.current_pending_sector_count > 40 \
|
||||||
|
or self.reallocated_sector_count and self.reallocated_sector_count > 10:
|
||||||
|
self.severity = Severity.Warning
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
t = inflection.humanize(self.status)
|
t = inflection.humanize(self.status)
|
||||||
|
@ -780,7 +771,7 @@ class StressTest(Test):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return '{}. Computing for {}'.format(self._err_str, self.elapsed)
|
return '{}. Computing for {}'.format(self.severity, self.elapsed)
|
||||||
|
|
||||||
|
|
||||||
class Benchmark(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class Benchmark(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
||||||
|
|
|
@ -17,8 +17,8 @@ from teal.enums import Country
|
||||||
from ereuse_devicehub.resources.agent.models import Agent
|
from ereuse_devicehub.resources.agent.models import Agent
|
||||||
from ereuse_devicehub.resources.device.models import Component, Computer, Device
|
from ereuse_devicehub.resources.device.models import Component, Computer, Device
|
||||||
from ereuse_devicehub.resources.enums import AppearanceRange, Bios, FunctionalityRange, \
|
from ereuse_devicehub.resources.enums import AppearanceRange, Bios, FunctionalityRange, \
|
||||||
PriceSoftware, RatingSoftware, ReceiverRole, SnapshotExpectedEvents, SnapshotSoftware, \
|
PriceSoftware, RatingSoftware, ReceiverRole, Severity, SnapshotExpectedEvents, \
|
||||||
TestDataStorageLength
|
SnapshotSoftware, TestDataStorageLength
|
||||||
from ereuse_devicehub.resources.models import Thing
|
from ereuse_devicehub.resources.models import Thing
|
||||||
from ereuse_devicehub.resources.user.models import User
|
from ereuse_devicehub.resources.user.models import User
|
||||||
|
|
||||||
|
@ -27,8 +27,6 @@ class Event(Thing):
|
||||||
id = ... # type: Column
|
id = ... # type: Column
|
||||||
name = ... # type: Column
|
name = ... # type: Column
|
||||||
type = ... # type: Column
|
type = ... # type: Column
|
||||||
error = ... # type: Column
|
|
||||||
incidence = ... # type: Column
|
|
||||||
description = ... # type: Column
|
description = ... # type: Column
|
||||||
snapshot_id = ... # type: Column
|
snapshot_id = ... # type: Column
|
||||||
snapshot = ... # type: relationship
|
snapshot = ... # type: relationship
|
||||||
|
@ -41,17 +39,14 @@ class Event(Thing):
|
||||||
start_time = ... # type: Column
|
start_time = ... # type: Column
|
||||||
end_time = ... # type: Column
|
end_time = ... # type: Column
|
||||||
agent_id = ... # type: Column
|
agent_id = ... # type: Column
|
||||||
|
severity = ... # type: Column
|
||||||
|
|
||||||
def __init__(self, id=None, name=None, incidence=None, closed=None, error=None,
|
def __init__(self, **kwargs) -> None:
|
||||||
description=None, start_time=None, end_time=None, snapshot=None, agent=None,
|
|
||||||
parent=None, created=None, updated=None, author=None) -> None:
|
|
||||||
super().__init__(created, updated)
|
super().__init__(created, updated)
|
||||||
self.id = ... # type: UUID
|
self.id = ... # type: UUID
|
||||||
self.name = ... # type: str
|
self.name = ... # type: str
|
||||||
self.type = ... # type: str
|
self.type = ... # type: str
|
||||||
self.incidence = ... # type: bool
|
|
||||||
self.closed = ... # type: bool
|
self.closed = ... # type: bool
|
||||||
self.error = ... # type: bool
|
|
||||||
self.description = ... # type: str
|
self.description = ... # type: str
|
||||||
self.start_time = ... # type: datetime
|
self.start_time = ... # type: datetime
|
||||||
self.end_time = ... # type: datetime
|
self.end_time = ... # type: datetime
|
||||||
|
@ -60,34 +55,25 @@ class Event(Thing):
|
||||||
self.parent = ... # type: Computer
|
self.parent = ... # type: Computer
|
||||||
self.agent = ... # type: Agent
|
self.agent = ... # type: Agent
|
||||||
self.author = ... # type: User
|
self.author = ... # type: User
|
||||||
|
self.severity = ... # type: Severity
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def url(self) -> urlutils.URL:
|
def url(self) -> urlutils.URL:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@property
|
|
||||||
def _err_str(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class EventWithOneDevice(Event):
|
class EventWithOneDevice(Event):
|
||||||
|
|
||||||
def __init__(self, id=None, name=None, incidence=None, closed=None, error=None,
|
def __init__(self, **kwargs) -> None:
|
||||||
description=None, start_time=None, end_time=None, snapshot=None, agent=None,
|
super().__init__(**kwargs)
|
||||||
parent=None, created=None, updated=None, author=None, device=None) -> None:
|
|
||||||
super().__init__(id, name, incidence, closed, error, description, start_time, end_time,
|
|
||||||
snapshot, agent, parent, created, updated, author)
|
|
||||||
self.device = ... # type: Device
|
self.device = ... # type: Device
|
||||||
|
|
||||||
|
|
||||||
class EventWithMultipleDevices(Event):
|
class EventWithMultipleDevices(Event):
|
||||||
devices = ... # type: relationship
|
devices = ... # type: relationship
|
||||||
|
|
||||||
def __init__(self, id=None, name=None, incidence=None, closed=None, error=None,
|
def __init__(self, **kwargs) -> None:
|
||||||
description=None, start_time=None, end_time=None, snapshot=None, agent=None,
|
super().__init__(**kwargs)
|
||||||
parent=None, created=None, updated=None, author=None, devices=None) -> None:
|
|
||||||
super().__init__(id, name, incidence, closed, error, description, start_time, end_time,
|
|
||||||
snapshot, agent, parent, created, updated, author)
|
|
||||||
self.devices = ... # type: Set[Device]
|
self.devices = ... # type: Set[Device]
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,15 +86,21 @@ class Remove(EventWithOneDevice):
|
||||||
|
|
||||||
|
|
||||||
class Step(Model):
|
class Step(Model):
|
||||||
|
type = ... # type: Column
|
||||||
|
num = ... # type: Column
|
||||||
|
start_time = ... # type: Column
|
||||||
|
end_time = ... # type: Column
|
||||||
|
erasure = ... # type: relationship
|
||||||
|
severity = ... # type: Column
|
||||||
|
|
||||||
def __init__(self, num=None, success=None, start_time=None, end_time=None,
|
def __init__(self, num=None, success=None, start_time=None, end_time=None,
|
||||||
erasure=None, error=None) -> None:
|
erasure=None, severity=None) -> None:
|
||||||
self.type = ... # type: str
|
self.type = ... # type: str
|
||||||
self.num = ... # type: int
|
self.num = ... # type: int
|
||||||
self.success = ... # type: bool
|
|
||||||
self.start_time = ... # type: datetime
|
self.start_time = ... # type: datetime
|
||||||
self.end_time = ... # type: datetime
|
self.end_time = ... # type: datetime
|
||||||
self.erasure = ... # type: EraseBasic
|
self.erasure = ... # type: EraseBasic
|
||||||
self.error = ... # type: bool
|
self.severity = ... # type: Severity
|
||||||
|
|
||||||
|
|
||||||
class StepZero(Step):
|
class StepZero(Step):
|
||||||
|
|
|
@ -12,7 +12,7 @@ from ereuse_devicehub.marshmallow import NestedOn
|
||||||
from ereuse_devicehub.resources.agent.schemas import Agent
|
from ereuse_devicehub.resources.agent.schemas import Agent
|
||||||
from ereuse_devicehub.resources.device.schemas import Component, Computer, Device
|
from ereuse_devicehub.resources.device.schemas import Component, Computer, Device
|
||||||
from ereuse_devicehub.resources.enums import AppearanceRange, Bios, FunctionalityRange, \
|
from ereuse_devicehub.resources.enums import AppearanceRange, Bios, FunctionalityRange, \
|
||||||
PriceSoftware, RATE_POSITIVE, RatingRange, RatingSoftware, ReceiverRole, \
|
PriceSoftware, RATE_POSITIVE, RatingRange, RatingSoftware, ReceiverRole, Severity, \
|
||||||
SnapshotExpectedEvents, SnapshotSoftware, TestDataStorageLength
|
SnapshotExpectedEvents, SnapshotSoftware, TestDataStorageLength
|
||||||
from ereuse_devicehub.resources.event import models as m
|
from ereuse_devicehub.resources.event import models as m
|
||||||
from ereuse_devicehub.resources.models import STR_BIG_SIZE, STR_SIZE
|
from ereuse_devicehub.resources.models import STR_BIG_SIZE, STR_SIZE
|
||||||
|
@ -25,9 +25,8 @@ class Event(Thing):
|
||||||
name = SanitizedStr(default='',
|
name = SanitizedStr(default='',
|
||||||
validate=Length(max=STR_BIG_SIZE),
|
validate=Length(max=STR_BIG_SIZE),
|
||||||
description=m.Event.name.comment)
|
description=m.Event.name.comment)
|
||||||
incidence = Boolean(default=False, description=m.Event.incidence.comment)
|
|
||||||
closed = Boolean(missing=True, description=m.Event.closed.comment)
|
closed = Boolean(missing=True, description=m.Event.closed.comment)
|
||||||
error = Boolean(default=False, description=m.Event.error.comment)
|
severity = EnumField(Severity, description=m.Event.severity.comment)
|
||||||
description = SanitizedStr(default='', description=m.Event.description.comment)
|
description = SanitizedStr(default='', description=m.Event.description.comment)
|
||||||
start_time = DateTime(data_key='startTime', description=m.Event.start_time.comment)
|
start_time = DateTime(data_key='startTime', description=m.Event.start_time.comment)
|
||||||
end_time = DateTime(data_key='endTime', description=m.Event.end_time.comment)
|
end_time = DateTime(data_key='endTime', description=m.Event.end_time.comment)
|
||||||
|
@ -85,7 +84,7 @@ class Step(Schema):
|
||||||
type = String(description='Only required when it is nested.')
|
type = String(description='Only required when it is nested.')
|
||||||
start_time = DateTime(required=True, data_key='startTime')
|
start_time = DateTime(required=True, data_key='startTime')
|
||||||
end_time = DateTime(required=True, data_key='endTime')
|
end_time = DateTime(required=True, data_key='endTime')
|
||||||
error = Boolean(default=False, description='Did the event fail?')
|
severity = EnumField(Severity, description=m.Event.severity.comment)
|
||||||
|
|
||||||
|
|
||||||
class StepZero(Step):
|
class StepZero(Step):
|
||||||
|
|
|
@ -69,12 +69,12 @@
|
||||||
{
|
{
|
||||||
"endTime": "2018-07-13T11:54:55.096491",
|
"endTime": "2018-07-13T11:54:55.096491",
|
||||||
"type": "StepRandom",
|
"type": "StepRandom",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"startTime": "2018-07-13T10:52:45.092981"
|
"startTime": "2018-07-13T10:52:45.092981"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "EraseBasic",
|
"type": "EraseBasic",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"zeros": false,
|
"zeros": false,
|
||||||
"startTime": "2018-07-13T10:52:45.092612"
|
"startTime": "2018-07-13T10:52:45.092612"
|
||||||
},
|
},
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
"elapsed": 131,
|
"elapsed": 131,
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
"offlineUncorrectable": 1,
|
"offlineUncorrectable": 1,
|
||||||
"error": true,
|
"severity": "Error",
|
||||||
"currentPendingSectorCount": 1,
|
"currentPendingSectorCount": 1,
|
||||||
"powerCycleCount": 1253,
|
"powerCycleCount": 1253,
|
||||||
"reallocatedSectorCount": 15,
|
"reallocatedSectorCount": 15,
|
||||||
|
@ -107,12 +107,12 @@
|
||||||
{
|
{
|
||||||
"endTime": "2018-07-13T12:55:47.326835",
|
"endTime": "2018-07-13T12:55:47.326835",
|
||||||
"type": "StepRandom",
|
"type": "StepRandom",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"startTime": "2018-07-13T11:54:55.100925"
|
"startTime": "2018-07-13T11:54:55.100925"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "EraseBasic",
|
"type": "EraseBasic",
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"zeros": false,
|
"zeros": false,
|
||||||
"startTime": "2018-07-13T11:54:55.100667"
|
"startTime": "2018-07-13T11:54:55.100667"
|
||||||
},
|
},
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
"elapsed": 115,
|
"elapsed": 115,
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
"offlineUncorrectable": 0,
|
"offlineUncorrectable": 0,
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"currentPendingSectorCount": 0,
|
"currentPendingSectorCount": 0,
|
||||||
"powerCycleCount": 1956,
|
"powerCycleCount": 1956,
|
||||||
"reallocatedSectorCount": 0,
|
"reallocatedSectorCount": 0,
|
||||||
|
|
|
@ -21,11 +21,11 @@ components:
|
||||||
endTime: 2018-06-01T09:12:06
|
endTime: 2018-06-01T09:12:06
|
||||||
steps:
|
steps:
|
||||||
- type: StepZero
|
- type: StepZero
|
||||||
error: False
|
severity: Info
|
||||||
startTime: 2018-06-01T08:15:00
|
startTime: 2018-06-01T08:15:00
|
||||||
endTime: 2018-06-01T09:16:00
|
endTime: 2018-06-01T09:16:00
|
||||||
- type: StepZero
|
- type: StepZero
|
||||||
error: False
|
severity: Info
|
||||||
startTime: 2018-06-01T08:16:00
|
startTime: 2018-06-01T08:16:00
|
||||||
endTime: 2018-06-01T09:17:00
|
endTime: 2018-06-01T09:17:00
|
||||||
- type: Processor
|
- type: Processor
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
"status": "Self-test routine in progress",
|
"status": "Self-test routine in progress",
|
||||||
"powerCycleCount": 648,
|
"powerCycleCount": 648,
|
||||||
"length": "Short",
|
"length": "Short",
|
||||||
"error": false,
|
"severity": "Error",
|
||||||
"lifetime": 202
|
"lifetime": 202
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
"type": "BenchmarkRamSysbench"
|
"type": "BenchmarkRamSysbench"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"error": false,
|
"severity": "Info",
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"type": "StressTest"
|
"type": "StressTest"
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ components:
|
||||||
serialNumber: 6VMB1A52
|
serialNumber: 6VMB1A52
|
||||||
size: 238475
|
size: 238475
|
||||||
test: {'@type': TestHardDrive, CommandTimeout: 1786733725708, CurrentPendingSectorCount: 0,
|
test: {'@type': TestHardDrive, CommandTimeout: 1786733725708, CurrentPendingSectorCount: 0,
|
||||||
OfflineUncorrectable: 0, assessment: true, error: false, firstError: null, lifetime: 16947,
|
OfflineUncorrectable: 0, assessment: true, severity: Info, firstError: null, lifetime: 16947,
|
||||||
passedLifetime: 16947, powerCycleCount: 1694, reallocatedSectorCount: 0, reportedUncorrectableErrors: 0,
|
passedLifetime: 16947, powerCycleCount: 1694, reallocatedSectorCount: 0, reportedUncorrectableErrors: 0,
|
||||||
status: Completed without error, type: Short offline}
|
status: Completed without error, type: Short offline}
|
||||||
type: HDD
|
type: HDD
|
||||||
|
|
|
@ -8,5 +8,5 @@
|
||||||
|
|
||||||
type: 'StressTest'
|
type: 'StressTest'
|
||||||
elapsed: 300
|
elapsed: 300
|
||||||
error: False
|
severity: Info
|
||||||
# snapshot: None fulfill!
|
# snapshot: None fulfill!
|
|
@ -7,7 +7,7 @@
|
||||||
# All numbers are invented
|
# All numbers are invented
|
||||||
|
|
||||||
type: 'EraseSectors'
|
type: 'EraseSectors'
|
||||||
error: False
|
severity: Info
|
||||||
# snapshot: None fulfill!
|
# snapshot: None fulfill!
|
||||||
# device: None fulfill!
|
# device: None fulfill!
|
||||||
zeros: False
|
zeros: False
|
||||||
|
@ -17,4 +17,4 @@ steps:
|
||||||
- type: 'StepRandom'
|
- type: 'StepRandom'
|
||||||
startTime: '2018-01-01T10:10:10'
|
startTime: '2018-01-01T10:10:10'
|
||||||
endTime: '2018-01-01T12:10:10'
|
endTime: '2018-01-01T12:10:10'
|
||||||
error: False
|
severity: Info
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
type: 'Install'
|
type: 'Install'
|
||||||
elapsed: 420
|
elapsed: 420
|
||||||
error: False
|
severity: Info
|
||||||
# snapshot: None fulfill!
|
# snapshot: None fulfill!
|
||||||
# device: None fulfill!
|
# device: None fulfill!
|
||||||
name: 'LinuxMint 18.01 32b'
|
name: 'LinuxMint 18.01 32b'
|
|
@ -20,7 +20,7 @@ from ereuse_devicehub.resources.device.exceptions import NeedsId
|
||||||
from ereuse_devicehub.resources.device.schemas import Device as DeviceS
|
from ereuse_devicehub.resources.device.schemas import Device as DeviceS
|
||||||
from ereuse_devicehub.resources.device.sync import MismatchBetweenTags, MismatchBetweenTagsAndHid, \
|
from ereuse_devicehub.resources.device.sync import MismatchBetweenTags, MismatchBetweenTagsAndHid, \
|
||||||
Sync
|
Sync
|
||||||
from ereuse_devicehub.resources.enums import ComputerChassis, DisplayTech
|
from ereuse_devicehub.resources.enums import ComputerChassis, DisplayTech, Severity
|
||||||
from ereuse_devicehub.resources.event import models as m
|
from ereuse_devicehub.resources.event import models as m
|
||||||
from ereuse_devicehub.resources.event.models import Remove, Test
|
from ereuse_devicehub.resources.event.models import Remove, Test
|
||||||
from ereuse_devicehub.resources.tag.model import Tag
|
from ereuse_devicehub.resources.tag.model import Tag
|
||||||
|
@ -393,7 +393,7 @@ def test_get_device(app: Devicehub, user: UserClient):
|
||||||
db.session.add(pc)
|
db.session.add(pc)
|
||||||
db.session.add(Test(device=pc,
|
db.session.add(Test(device=pc,
|
||||||
elapsed=timedelta(seconds=4),
|
elapsed=timedelta(seconds=4),
|
||||||
error=False,
|
severity=Severity.Info,
|
||||||
agent=Person(name='Timmy'),
|
agent=Person(name='Timmy'),
|
||||||
author=User(email='bar@bar.com')))
|
author=User(email='bar@bar.com')))
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
@ -402,7 +402,7 @@ def test_get_device(app: Devicehub, user: UserClient):
|
||||||
assert pc['events'][0]['type'] == 'Test'
|
assert pc['events'][0]['type'] == 'Test'
|
||||||
assert pc['events'][0]['device'] == 1
|
assert pc['events'][0]['device'] == 1
|
||||||
assert pc['events'][0]['elapsed'] == 4
|
assert pc['events'][0]['elapsed'] == 4
|
||||||
assert not pc['events'][0]['error']
|
assert pc['events'][0]['severity'] == 'Info'
|
||||||
assert UUID(pc['events'][0]['author'])
|
assert UUID(pc['events'][0]['author'])
|
||||||
assert 'events_components' not in pc, 'events_components are internal use only'
|
assert 'events_components' not in pc, 'events_components are internal use only'
|
||||||
assert 'events_one' not in pc, 'they are internal use only'
|
assert 'events_one' not in pc, 'they are internal use only'
|
||||||
|
|
|
@ -13,7 +13,7 @@ from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.resources.device import states
|
from ereuse_devicehub.resources.device import states
|
||||||
from ereuse_devicehub.resources.device.models import Desktop, Device, GraphicCard, HardDrive, \
|
from ereuse_devicehub.resources.device.models import Desktop, Device, GraphicCard, HardDrive, \
|
||||||
RamModule, SolidStateDrive
|
RamModule, SolidStateDrive
|
||||||
from ereuse_devicehub.resources.enums import ComputerChassis, TestDataStorageLength
|
from ereuse_devicehub.resources.enums import ComputerChassis, Severity, TestDataStorageLength
|
||||||
from ereuse_devicehub.resources.event import models
|
from ereuse_devicehub.resources.event import models
|
||||||
from tests import conftest
|
from tests import conftest
|
||||||
from tests.conftest import create_user, file
|
from tests.conftest import create_user, file
|
||||||
|
@ -89,7 +89,7 @@ def test_erase_sectors_steps():
|
||||||
def test_test_data_storage():
|
def test_test_data_storage():
|
||||||
test = models.TestDataStorage(
|
test = models.TestDataStorage(
|
||||||
device=HardDrive(serial_number='foo', manufacturer='bar', model='foo-bar'),
|
device=HardDrive(serial_number='foo', manufacturer='bar', model='foo-bar'),
|
||||||
error=False,
|
severity=Severity.Info,
|
||||||
elapsed=timedelta(minutes=25),
|
elapsed=timedelta(minutes=25),
|
||||||
length=TestDataStorageLength.Short,
|
length=TestDataStorageLength.Short,
|
||||||
status='ok!',
|
status='ok!',
|
||||||
|
|
|
@ -310,13 +310,13 @@ def test_erase(user: UserClient):
|
||||||
assert erasure['device']['id'] == storage['id']
|
assert erasure['device']['id'] == storage['id']
|
||||||
for step in erasure['steps']:
|
for step in erasure['steps']:
|
||||||
assert step['type'] == 'StepZero'
|
assert step['type'] == 'StepZero'
|
||||||
assert step['error'] is False
|
assert step['severity'] == 'Info'
|
||||||
assert 'num' not in step
|
assert 'num' not in step
|
||||||
assert storage['privacy'] == erasure['device']['privacy'] == 'EraseSectors'
|
assert storage['privacy'] == erasure['device']['privacy'] == 'EraseSectors'
|
||||||
|
|
||||||
# Let's try a second erasure with an error
|
# Let's try a second erasure with an error
|
||||||
s['uuid'] = uuid4()
|
s['uuid'] = uuid4()
|
||||||
s['components'][0]['events'][0]['error'] = True
|
s['components'][0]['events'][0]['severity'] = 'Error'
|
||||||
snapshot, _ = user.post(s, res=Snapshot)
|
snapshot, _ = user.post(s, res=Snapshot)
|
||||||
assert snapshot['components'][0]['hid'] == 'c1mr-c1s-c1ml'
|
assert snapshot['components'][0]['hid'] == 'c1mr-c1s-c1ml'
|
||||||
assert snapshot['components'][0]['privacy'] == 'EraseSectorsError'
|
assert snapshot['components'][0]['privacy'] == 'EraseSectorsError'
|
||||||
|
@ -330,8 +330,7 @@ def test_test_data_storage(user: UserClient):
|
||||||
ev for ev in snapshot['events']
|
ev for ev in snapshot['events']
|
||||||
if ev.get('reallocatedSectorCount', None) == 15
|
if ev.get('reallocatedSectorCount', None) == 15
|
||||||
)
|
)
|
||||||
assert incidence_test['incidence']
|
incidence_test['severity'] == 'Error'
|
||||||
assert incidence_test['description'] == 'Warning: Drive failure expected soon.'
|
|
||||||
|
|
||||||
|
|
||||||
def test_snapshot_computer_monitor(user: UserClient):
|
def test_snapshot_computer_monitor(user: UserClient):
|
||||||
|
|
|
@ -49,7 +49,7 @@ def test_workbench_server_condensed(user: UserClient):
|
||||||
('TestDataStorage', 6)
|
('TestDataStorage', 6)
|
||||||
}
|
}
|
||||||
assert snapshot['closed']
|
assert snapshot['closed']
|
||||||
assert not snapshot['error']
|
assert snapshot['severity'] == 'Info'
|
||||||
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
||||||
assert device['dataStorageSize'] == 1100
|
assert device['dataStorageSize'] == 1100
|
||||||
assert device['chassis'] == 'Tower'
|
assert device['chassis'] == 'Tower'
|
||||||
|
@ -59,7 +59,7 @@ def test_workbench_server_condensed(user: UserClient):
|
||||||
assert device['processorModel'] == device['components'][3]['model'] == 'p1-1ml'
|
assert device['processorModel'] == device['components'][3]['model'] == 'p1-1ml'
|
||||||
assert device['ramSize'] == 2048, 'There are 3 RAM: 2 x 1024 and 1 None sizes'
|
assert device['ramSize'] == 2048, 'There are 3 RAM: 2 x 1024 and 1 None sizes'
|
||||||
assert device['rate']['closed']
|
assert device['rate']['closed']
|
||||||
assert not device['rate']['error']
|
assert device['rate']['severity'] == 'Info'
|
||||||
assert device['rate']['rating'] == 0
|
assert device['rate']['rating'] == 0
|
||||||
assert device['rate']['workbench']
|
assert device['rate']['workbench']
|
||||||
assert device['rate']['appearanceRange'] == 'A'
|
assert device['rate']['appearanceRange'] == 'A'
|
||||||
|
@ -129,7 +129,7 @@ def test_workbench_server_phases(user: UserClient):
|
||||||
assert events[8]['type'] == 'Install'
|
assert events[8]['type'] == 'Install'
|
||||||
assert events[8]['device'] == 6
|
assert events[8]['device'] == 6
|
||||||
assert snapshot['closed']
|
assert snapshot['closed']
|
||||||
assert not snapshot['error']
|
assert snapshot['severity'] == 'Info'
|
||||||
|
|
||||||
pc, _ = user.get(res=Device, item=snapshot['id'])
|
pc, _ = user.get(res=Device, item=snapshot['id'])
|
||||||
assert len(pc['events']) == 10 # todo shall I add child events?
|
assert len(pc['events']) == 10 # todo shall I add child events?
|
||||||
|
@ -264,7 +264,7 @@ def test_snapshot_real_eee_1001pxd(user: UserClient):
|
||||||
assert erase['endTime']
|
assert erase['endTime']
|
||||||
assert erase['startTime']
|
assert erase['startTime']
|
||||||
assert erase['zeros'] is False
|
assert erase['zeros'] is False
|
||||||
assert erase['error'] is False
|
assert erase['severity'] == 'Info'
|
||||||
assert hdd['privacy'] == 'EraseBasic'
|
assert hdd['privacy'] == 'EraseBasic'
|
||||||
mother = components[8]
|
mother = components[8]
|
||||||
assert mother['hid'] == 'asustek_computer_inc-eee0123456789-1001pxd'
|
assert mother['hid'] == 'asustek_computer_inc-eee0123456789-1001pxd'
|
||||||
|
|
Reference in New Issue