Change event to action complying with schema.org
This commit is contained in:
parent
0dc8ced255
commit
61f4c127d4
|
@ -7,7 +7,7 @@ from teal.config import Config
|
||||||
from teal.enums import Currency
|
from teal.enums import Currency
|
||||||
from teal.utils import import_resource
|
from teal.utils import import_resource
|
||||||
|
|
||||||
from ereuse_devicehub.resources import agent, event, inventory, lot, tag, user
|
from ereuse_devicehub.resources import action, agent, inventory, lot, tag, user
|
||||||
from ereuse_devicehub.resources.device import definitions
|
from ereuse_devicehub.resources.device import definitions
|
||||||
from ereuse_devicehub.resources.documents import documents
|
from ereuse_devicehub.resources.documents import documents
|
||||||
from ereuse_devicehub.resources.enums import PriceSoftware
|
from ereuse_devicehub.resources.enums import PriceSoftware
|
||||||
|
@ -15,7 +15,7 @@ from ereuse_devicehub.resources.enums import PriceSoftware
|
||||||
|
|
||||||
class DevicehubConfig(Config):
|
class DevicehubConfig(Config):
|
||||||
RESOURCE_DEFINITIONS = set(chain(import_resource(definitions),
|
RESOURCE_DEFINITIONS = set(chain(import_resource(definitions),
|
||||||
import_resource(event),
|
import_resource(action),
|
||||||
import_resource(user),
|
import_resource(user),
|
||||||
import_resource(tag),
|
import_resource(tag),
|
||||||
import_resource(agent),
|
import_resource(agent),
|
||||||
|
|
|
@ -14,7 +14,7 @@ class DhSession(SchemaSession):
|
||||||
to be used once in each request, at the very end before
|
to be used once in each request, at the very end before
|
||||||
a commit.
|
a commit.
|
||||||
"""
|
"""
|
||||||
# This was done before with an ``before_commit`` sqlalchemy event
|
# This was done before with an ``before_commit`` sqlalchemy action
|
||||||
# however it is too fragile –it does not detect previously-flushed
|
# however it is too fragile –it does not detect previously-flushed
|
||||||
# things
|
# things
|
||||||
# This solution makes this more aware to the user, although
|
# This solution makes this more aware to the user, although
|
||||||
|
|
|
@ -11,9 +11,9 @@ from ereuse_utils.test import ANY
|
||||||
|
|
||||||
from ereuse_devicehub.client import UserClient
|
from ereuse_devicehub.client import UserClient
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
|
from ereuse_devicehub.resources.action import models as m
|
||||||
from ereuse_devicehub.resources.agent.models import Person
|
from ereuse_devicehub.resources.agent.models import Person
|
||||||
from ereuse_devicehub.resources.device.models import Device
|
from ereuse_devicehub.resources.device.models import Device
|
||||||
from ereuse_devicehub.resources.event import models as m
|
|
||||||
from ereuse_devicehub.resources.lot.models import Lot
|
from ereuse_devicehub.resources.lot.models import Lot
|
||||||
from ereuse_devicehub.resources.tag.model import Tag
|
from ereuse_devicehub.resources.tag.model import Tag
|
||||||
from ereuse_devicehub.resources.user import User
|
from ereuse_devicehub.resources.user import User
|
||||||
|
@ -95,18 +95,18 @@ class Dummy:
|
||||||
# Make one hdd ErasePhysical
|
# Make one hdd ErasePhysical
|
||||||
hdd = next(hdd for hdd in s['components'] if hdd['type'] == 'HardDrive')
|
hdd = next(hdd for hdd in s['components'] if hdd['type'] == 'HardDrive')
|
||||||
user.post({'type': 'ErasePhysical', 'method': 'Shred', 'device': hdd['id']},
|
user.post({'type': 'ErasePhysical', 'method': 'Shred', 'device': hdd['id']},
|
||||||
res=m.Event)
|
res=m.Action)
|
||||||
assert sample_pc
|
assert sample_pc
|
||||||
print('PC sample is', sample_pc)
|
print('PC sample is', sample_pc)
|
||||||
# Link tags and eTags
|
# Link tags and eTags
|
||||||
for tag, pc in zip((self.TAGS[1], self.TAGS[2], self.ET[0][0], self.ET[1][1]), pcs):
|
for tag, pc in zip((self.TAGS[1], self.TAGS[2], self.ET[0][0], self.ET[1][1]), pcs):
|
||||||
user.put({}, res=Tag, item='{}/device/{}'.format(tag, pc), status=204)
|
user.put({}, res=Tag, item='{}/device/{}'.format(tag, pc), status=204)
|
||||||
|
|
||||||
# Perform generic events
|
# Perform generic actions
|
||||||
for pc, model in zip(pcs,
|
for pc, model in zip(pcs,
|
||||||
{m.ToRepair, m.Repair, m.ToPrepare, m.ReadyToUse, m.ToPrepare,
|
{m.ToRepair, m.Repair, m.ToPrepare, m.ReadyToUse, m.ToPrepare,
|
||||||
m.Prepare}):
|
m.Prepare}):
|
||||||
user.post({'type': model.t, 'devices': [pc]}, res=m.Event)
|
user.post({'type': model.t, 'devices': [pc]}, res=m.Action)
|
||||||
|
|
||||||
# Perform a Sell to several devices
|
# Perform a Sell to several devices
|
||||||
user.post(
|
user.post(
|
||||||
|
@ -115,7 +115,7 @@ class Dummy:
|
||||||
'to': user.user['individuals'][0]['id'],
|
'to': user.user['individuals'][0]['id'],
|
||||||
'devices': list(itertools.islice(pcs, len(pcs) // 2))
|
'devices': list(itertools.islice(pcs, len(pcs) // 2))
|
||||||
},
|
},
|
||||||
res=m.Event)
|
res=m.Action)
|
||||||
|
|
||||||
parent, _ = user.post(({'name': 'Parent'}), res=Lot)
|
parent, _ = user.post(({'name': 'Parent'}), res=Lot)
|
||||||
child, _ = user.post(({'name': 'Child'}), res=Lot)
|
child, _ = user.post(({'name': 'Child'}), res=Lot)
|
||||||
|
@ -139,14 +139,14 @@ class Dummy:
|
||||||
i, _ = user.get(res=Device, query=[('search', 'pc')])
|
i, _ = user.get(res=Device, query=[('search', 'pc')])
|
||||||
assert 14 == len(i['items'])
|
assert 14 == len(i['items'])
|
||||||
|
|
||||||
# Let's create a set of events for the pc device
|
# Let's create a set of actions for the pc device
|
||||||
# Make device Ready
|
# Make device Ready
|
||||||
|
|
||||||
user.post({'type': m.ToPrepare.t, 'devices': [sample_pc]}, res=m.Event)
|
user.post({'type': m.ToPrepare.t, 'devices': [sample_pc]}, res=m.Action)
|
||||||
user.post({'type': m.Prepare.t, 'devices': [sample_pc]}, res=m.Event)
|
user.post({'type': m.Prepare.t, 'devices': [sample_pc]}, res=m.Action)
|
||||||
user.post({'type': m.ReadyToUse.t, 'devices': [sample_pc]}, res=m.Event)
|
user.post({'type': m.ReadyToUse.t, 'devices': [sample_pc]}, res=m.Action)
|
||||||
user.post({'type': m.Price.t, 'device': sample_pc, 'currency': 'EUR', 'price': 85},
|
user.post({'type': m.Price.t, 'device': sample_pc, 'currency': 'EUR', 'price': 85},
|
||||||
res=m.Event)
|
res=m.Action)
|
||||||
# todo test reserve
|
# todo test reserve
|
||||||
user.post( # Sell device
|
user.post( # Sell device
|
||||||
{
|
{
|
||||||
|
@ -154,7 +154,7 @@ class Dummy:
|
||||||
'to': user.user['individuals'][0]['id'],
|
'to': user.user['individuals'][0]['id'],
|
||||||
'devices': [sample_pc]
|
'devices': [sample_pc]
|
||||||
},
|
},
|
||||||
res=m.Event)
|
res=m.Action)
|
||||||
# todo Receive
|
# todo Receive
|
||||||
|
|
||||||
user.get(res=Device, item=sample_pc) # Test
|
user.get(res=Device, item=sample_pc) # Test
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
{
|
{
|
||||||
"address": 64,
|
"address": 64,
|
||||||
"cores": 1,
|
"cores": 1,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"rate": 6666.22,
|
"rate": 6666.22,
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
"type": "Processor"
|
"type": "Processor"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"manufacturer": "Qualcomm Atheros",
|
||||||
"model": "AR9285 Wireless Network Adapter",
|
"model": "AR9285 Wireless Network Adapter",
|
||||||
"serialNumber": "74:2f:68:8b:fd:c8",
|
"serialNumber": "74:2f:68:8b:fd:c8",
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
"wireless": true
|
"wireless": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"manufacturer": "Qualcomm Atheros",
|
||||||
"model": "AR8152 v2.0 Fast Ethernet",
|
"model": "AR8152 v2.0 Fast Ethernet",
|
||||||
"serialNumber": "14:da:e9:42:f6:7c",
|
"serialNumber": "14:da:e9:42:f6:7c",
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
"wireless": false
|
"wireless": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"interface": "DDR2",
|
"interface": "DDR2",
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
|
@ -54,21 +54,21 @@
|
||||||
"type": "RamModule"
|
"type": "RamModule"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Azurewave",
|
"manufacturer": "Azurewave",
|
||||||
"model": "USB 2.0 UVC VGA WebCam",
|
"model": "USB 2.0 UVC VGA WebCam",
|
||||||
"serialNumber": "0x0001",
|
"serialNumber": "0x0001",
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"endTime": "2018-11-24T22:00:39.643726+00:00",
|
"endTime": "2018-11-24T22:00:39.643726+00:00",
|
||||||
"severity": "Info",
|
"severity": "Info",
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
"type": "HardDrive"
|
"type": "HardDrive"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"model": "Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller",
|
"model": "Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller",
|
||||||
|
@ -131,7 +131,7 @@
|
||||||
"type": "GraphicCard"
|
"type": "GraphicCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "TestBios",
|
"type": "TestBios",
|
||||||
"accessRange": "A"
|
"accessRange": "A"
|
||||||
|
@ -150,7 +150,7 @@
|
||||||
],
|
],
|
||||||
"device": {
|
"device": {
|
||||||
"chassis": "Netbook",
|
"chassis": "Netbook",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 16,
|
"elapsed": 16,
|
||||||
"rate": 15.9165,
|
"rate": 15.9165,
|
||||||
|
@ -180,13 +180,6 @@
|
||||||
},
|
},
|
||||||
"elapsed": 14725,
|
"elapsed": 14725,
|
||||||
"endTime": "2018-11-24T18:06:37.611704+00:00",
|
"endTime": "2018-11-24T18:06:37.611704+00:00",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"TestDataStorage",
|
|
||||||
"StressTest",
|
|
||||||
"EraseBasic",
|
|
||||||
"Install"
|
|
||||||
],
|
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"uuid": "f6cba71f-0ac1-4aba-8b6a-c1fd56ab483d",
|
"uuid": "f6cba71f-0ac1-4aba-8b6a-c1fd56ab483d",
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
"serialNumber": "94OAAQ021116",
|
"serialNumber": "94OAAQ021116",
|
||||||
"type": "Laptop",
|
"type": "Laptop",
|
||||||
"model": "1000H",
|
"model": "1000H",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 19,
|
"elapsed": 19,
|
||||||
"rate": 19.3106,
|
"rate": 19.3106,
|
||||||
|
@ -29,21 +29,21 @@
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": false,
|
"wireless": false,
|
||||||
"model": "AR8121/AR8113/AR8114 Gigabit or Fast Ethernet",
|
"model": "AR8121/AR8113/AR8114 Gigabit or Fast Ethernet",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Qualcomm Atheros"
|
"manufacturer": "Qualcomm Atheros"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation"
|
"manufacturer": "Intel Corporation"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": "SN0001",
|
"serialNumber": "SN0001",
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"model": "CNF7129",
|
"model": "CNF7129",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Chicony Electronics Co., Ltd."
|
"manufacturer": "Chicony Electronics Co., Ltd."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"interface": "SDRAM",
|
"interface": "SDRAM",
|
||||||
"model": null,
|
"model": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": null
|
"manufacturer": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"address": 32,
|
"address": 32,
|
||||||
"model": "Intel Atom CPU N270 @ 1.60GHz",
|
"model": "Intel Atom CPU N270 @ 1.60GHz",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 172,
|
"elapsed": 172,
|
||||||
"rate": 171.6818,
|
"rate": 171.6818,
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"interface": "ATA",
|
"interface": "ATA",
|
||||||
"model": "ST9160310AS",
|
"model": "ST9160310AS",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"readSpeed": 63.3,
|
"readSpeed": 63.3,
|
||||||
"type": "BenchmarkDataStorage",
|
"type": "BenchmarkDataStorage",
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"model": "Mobile 945GSE Express Integrated Graphics Controller",
|
"model": "Mobile 945GSE Express Integrated Graphics Controller",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation"
|
"manufacturer": "Intel Corporation"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
"serial": 0,
|
"serial": 0,
|
||||||
"slots": 1,
|
"slots": 1,
|
||||||
"model": "1000H",
|
"model": "1000H",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"accessRange": "A",
|
"accessRange": "A",
|
||||||
"type": "TestBios"
|
"type": "TestBios"
|
||||||
|
|
|
@ -10,7 +10,7 @@ device:
|
||||||
resolutionWidth: 1920
|
resolutionWidth: 1920
|
||||||
resolutionHeight: 1080
|
resolutionHeight: 1080
|
||||||
size: 21.5
|
size: 21.5
|
||||||
events:
|
actions:
|
||||||
- type: VisualTest
|
- type: VisualTest
|
||||||
appearanceRange: A
|
appearanceRange: A
|
||||||
functionalityRange: C
|
functionalityRange: C
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"device": {
|
"device": {
|
||||||
"chassis": "Tower",
|
"chassis": "Tower",
|
||||||
"serialNumber": "6G0772J",
|
"serialNumber": "6G0772J",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"rate": 2.1341,
|
"rate": 2.1341,
|
||||||
"type": "BenchmarkRamSysbench",
|
"type": "BenchmarkRamSysbench",
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
{
|
{
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"rate": 11970.92,
|
"rate": 11970.92,
|
||||||
"type": "BenchmarkProcessor",
|
"type": "BenchmarkProcessor",
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801G AC'97 Audio Controller"
|
"model": "82801G AC'97 Audio Controller"
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
{
|
{
|
||||||
"size": 512,
|
"size": 512,
|
||||||
"serialNumber": "4A7012A1",
|
"serialNumber": "4A7012A1",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"speed": 533.0,
|
"speed": 533.0,
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
{
|
{
|
||||||
"size": 512,
|
"size": 512,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"speed": 533.0,
|
"speed": 533.0,
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": "00:13:72:78:53:12",
|
"serialNumber": "00:13:72:78:53:12",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"manufacturer": "Broadcom Limited",
|
"manufacturer": "Broadcom Limited",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": "5LR30DTZ",
|
"serialNumber": "5LR30DTZ",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
|
@ -124,7 +124,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
|
@ -134,7 +134,7 @@
|
||||||
"slots": 0,
|
"slots": 0,
|
||||||
"usb": 5,
|
"usb": 5,
|
||||||
"serial": 1,
|
"serial": 1,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "TestBios",
|
"type": "TestBios",
|
||||||
"accessRange": "A"
|
"accessRange": "A"
|
||||||
|
@ -153,10 +153,5 @@
|
||||||
"elapsed": 1512,
|
"elapsed": 1512,
|
||||||
"endTime": "2018-07-11T11:17:00.888231+00:00",
|
"endTime": "2018-07-11T11:17:00.888231+00:00",
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"SmartTest",
|
|
||||||
"StressTest",
|
|
||||||
"EraseBasic"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
{
|
{
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"SmartTest",
|
|
||||||
"StressTest",
|
|
||||||
"EraseBasic"
|
|
||||||
],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"elapsed": -3058,
|
"elapsed": -3058,
|
||||||
"uuid": "106930cd-e948-4cca-a8c8-1e39d6192ad6",
|
"uuid": "106930cd-e948-4cca-a8c8-1e39d6192ad6",
|
||||||
|
@ -14,7 +8,7 @@
|
||||||
{
|
{
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.199,
|
"speed": 1.199,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "BenchmarkProcessor",
|
"type": "BenchmarkProcessor",
|
||||||
"rate": 23409.32,
|
"rate": 23409.32,
|
||||||
|
@ -35,7 +29,7 @@
|
||||||
{
|
{
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"model": "Core Processor Integrated Graphics Controller",
|
"model": "Core Processor Integrated Graphics Controller",
|
||||||
"manufacturer": "Intel Corporation"
|
"manufacturer": "Intel Corporation"
|
||||||
|
@ -43,7 +37,7 @@
|
||||||
{
|
{
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": "6c:62:6d:81:22:65",
|
"serialNumber": "6c:62:6d:81:22:65",
|
||||||
"model": "82578DM Gigabit Network Connection",
|
"model": "82578DM Gigabit Network Connection",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
|
@ -51,7 +45,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
||||||
"manufacturer": "Intel Corporation"
|
"manufacturer": "Intel Corporation"
|
||||||
|
@ -60,7 +54,7 @@
|
||||||
"speed": 1333.0,
|
"speed": 1333.0,
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
"serialNumber": "E6002F30",
|
"serialNumber": "E6002F30",
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
|
@ -69,7 +63,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "EraseBasic",
|
"type": "EraseBasic",
|
||||||
|
|
||||||
|
@ -110,7 +104,7 @@
|
||||||
"serial": 0,
|
"serial": 0,
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"slots": 0,
|
"slots": 0,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": "CZC0408YNC",
|
"serialNumber": "CZC0408YNC",
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
@ -122,7 +116,7 @@
|
||||||
"device": {
|
"device": {
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower",
|
"chassis": "Tower",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "BenchmarkRamSysbench",
|
"type": "BenchmarkRamSysbench",
|
||||||
"rate": 0.9767,
|
"rate": 0.9767,
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"rate": 23408.76,
|
"rate": 23408.76,
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
|
@ -38,14 +38,14 @@
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": false,
|
"wireless": false,
|
||||||
"serialNumber": "6c:62:6d:81:21:7f",
|
"serialNumber": "6c:62:6d:81:21:7f",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"speed": 1333.0,
|
"speed": 1333.0,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"interface": "ATA",
|
"interface": "ATA",
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
"manufacturer": "Hitachi",
|
"manufacturer": "Hitachi",
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"serialNumber": "PVB200Z30JWXRF",
|
"serialNumber": "PVB200Z30JWXRF",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 1,
|
"elapsed": 1,
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"serialNumber": "9QZCVLJX",
|
"serialNumber": "9QZCVLJX",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
"serialNumber": "CZC0408YP6",
|
"serialNumber": "CZC0408YP6",
|
||||||
"slots": 0,
|
"slots": 0,
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"events": []
|
"actions": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"closed": false,
|
"closed": false,
|
||||||
|
@ -155,7 +155,7 @@
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"serialNumber": "CZC0408YP6",
|
"serialNumber": "CZC0408YP6",
|
||||||
"chassis": "Tower",
|
"chassis": "Tower",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"severity": "Info",
|
"severity": "Info",
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
|
@ -168,12 +168,6 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"SmartTest",
|
|
||||||
"StressTest",
|
|
||||||
"EraseBasic"
|
|
||||||
],
|
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"endTime": "2018-07-11T10:30:22.395958+00:00",
|
"endTime": "2018-07-11T10:30:22.395958+00:00",
|
||||||
"elapsed": 2766
|
"elapsed": 2766
|
||||||
|
|
|
@ -7,7 +7,7 @@ device:
|
||||||
serialNumber: BAR
|
serialNumber: BAR
|
||||||
manufacturer: BAZ
|
manufacturer: BAZ
|
||||||
layout: ES
|
layout: ES
|
||||||
events:
|
actions:
|
||||||
- type: VisualTest
|
- type: VisualTest
|
||||||
appearanceRange: A
|
appearanceRange: A
|
||||||
functionalityRange: A
|
functionalityRange: A
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"endTime": "2018-09-22T19:05:47.005552+00:00",
|
"endTime": "2018-09-22T19:05:47.005552+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"rate": 15.9663,
|
"rate": 15.9663,
|
||||||
"type": "BenchmarkRamSysbench",
|
"type": "BenchmarkRamSysbench",
|
||||||
|
@ -20,21 +20,17 @@
|
||||||
"manufacturer": "eMachines"
|
"manufacturer": "eMachines"
|
||||||
},
|
},
|
||||||
"elapsed": 451,
|
"elapsed": 451,
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"TestDataStorage",
|
|
||||||
"StressTest"
|
|
||||||
],
|
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"model": "Video WebCam",
|
"model": "Video WebCam",
|
||||||
"serialNumber": "CN0314-SN30-OV035-VA-R05.00.00",
|
"serialNumber": "CN0314-SN30-OV035-VA-R05.00.00",
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"manufacturer": "SuYin"
|
"manufacturer": "SuYin"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"model": "SBx00 Azalia",
|
"model": "SBx00 Azalia",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
|
@ -44,7 +40,7 @@
|
||||||
"speed": 400.0,
|
"speed": 400.0,
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"model": "HYMP125S64CP8-S6",
|
"model": "HYMP125S64CP8-S6",
|
||||||
"interface": "DDR2",
|
"interface": "DDR2",
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
|
@ -55,7 +51,7 @@
|
||||||
"speed": 400.0,
|
"speed": 400.0,
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"model": "HYMP125S64CP8-S6",
|
"model": "HYMP125S64CP8-S6",
|
||||||
"interface": "DDR2",
|
"interface": "DDR2",
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
|
@ -66,7 +62,7 @@
|
||||||
"speed": 0.8,
|
"speed": 0.8,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"rate": 173.6996,
|
"rate": 173.6996,
|
||||||
"type": "BenchmarkProcessorSysbench",
|
"type": "BenchmarkProcessorSysbench",
|
||||||
|
@ -85,7 +81,7 @@
|
||||||
"manufacturer": "Advanced Micro Devices AMD"
|
"manufacturer": "Advanced Micro Devices AMD"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"model": "AR9285 Wireless Network Adapter",
|
"model": "AR9285 Wireless Network Adapter",
|
||||||
"serialNumber": "0c:60:76:5f:49:91",
|
"serialNumber": "0c:60:76:5f:49:91",
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
|
@ -94,7 +90,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"speed": 100,
|
"speed": 100,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"model": "AR8132 Fast Ethernet",
|
"model": "AR8132 Fast Ethernet",
|
||||||
"serialNumber": "00:26:22:59:a1:56",
|
"serialNumber": "00:26:22:59:a1:56",
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
|
@ -104,7 +100,7 @@
|
||||||
{
|
{
|
||||||
"size": 152627,
|
"size": 152627,
|
||||||
"serialNumber": "WD-WX80A8996018",
|
"serialNumber": "WD-WX80A8996018",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"writeSpeed": 17.8,
|
"writeSpeed": 17.8,
|
||||||
"type": "BenchmarkDataStorage",
|
"type": "BenchmarkDataStorage",
|
||||||
|
@ -130,7 +126,7 @@
|
||||||
"manufacturer": "Western Digital"
|
"manufacturer": "Western Digital"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"model": "RS780M Mobility Radeon HD 3200",
|
"model": "RS780M Mobility Radeon HD 3200",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
|
@ -140,7 +136,7 @@
|
||||||
{
|
{
|
||||||
"slots": 4,
|
"slots": 4,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"model": "E627",
|
"model": "E627",
|
||||||
"usb": 3,
|
"usb": 3,
|
||||||
"serialNumber": "LXN650207893942DE21601",
|
"serialNumber": "LXN650207893942DE21601",
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"device": {
|
"device": {
|
||||||
"serialNumber": "PB357N0",
|
"serialNumber": "PB357N0",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"serialNumber": "d4:3d:7e:41:c4:c4",
|
"serialNumber": "d4:3d:7e:41:c4:c4",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cores": 2,
|
"cores": 2,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"type": "BenchmarkProcessor",
|
"type": "BenchmarkProcessor",
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
"type": "Processor"
|
"type": "Processor"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
"type": "GraphicCard"
|
"type": "GraphicCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": "292E48DA",
|
"serialNumber": "292E48DA",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"speed": 1333.0,
|
"speed": 1333.0,
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": "Z2AYPLNP",
|
"serialNumber": "Z2AYPLNP",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"writeSpeed": 20.4,
|
"writeSpeed": 20.4,
|
||||||
"type": "BenchmarkDataStorage",
|
"type": "BenchmarkDataStorage",
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
"serial": 1,
|
"serial": 1,
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"pcmcia": 0,
|
"pcmcia": 0,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"slots": 2,
|
"slots": 2,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
@ -132,10 +132,5 @@
|
||||||
"type": "Motherboard"
|
"type": "Motherboard"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"SmartTest",
|
|
||||||
"StressTest",
|
|
||||||
"EraseBasic"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"device": {
|
"device": {
|
||||||
"serialNumber": "SN 123456789ABC",
|
"serialNumber": "SN 123456789ABC",
|
||||||
"manufacturer": "NEC Computers SAS",
|
"manufacturer": "NEC Computers SAS",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"severity": "Info",
|
"severity": "Info",
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
"serialNumber": "00:24:21:7a:90:02",
|
"serialNumber": "00:24:21:7a:90:02",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": false,
|
"wireless": false,
|
||||||
"model": "82566DM-2 Gigabit Network Connection"
|
"model": "82566DM-2 Gigabit Network Connection"
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"speed": 3.0,
|
"speed": 3.0,
|
||||||
"cores": 2,
|
"cores": 2,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"rate": 20.1309,
|
"rate": 20.1309,
|
||||||
"elapsed": 20,
|
"elapsed": 20,
|
||||||
|
@ -60,14 +60,14 @@
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"model": "82Q35 Express Integrated Graphics Controller"
|
"model": "82Q35 Express Integrated Graphics Controller"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"model": "82801I HD Audio Controller"
|
"model": "82801I HD Audio Controller"
|
||||||
},
|
},
|
||||||
|
@ -78,7 +78,7 @@
|
||||||
"interface": "DDR2",
|
"interface": "DDR2",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"model": "M3 78T2863QZS-CE6"
|
"model": "M3 78T2863QZS-CE6"
|
||||||
},
|
},
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
"interface": "DDR2",
|
"interface": "DDR2",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"model": "M3 78T2863QZS-CE6"
|
"model": "M3 78T2863QZS-CE6"
|
||||||
},
|
},
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
"manufacturer": "Hitachi",
|
"manufacturer": "Hitachi",
|
||||||
"interface": "ATA",
|
"interface": "ATA",
|
||||||
"size": 305245,
|
"size": 305245,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"severity": "Info",
|
"severity": "Info",
|
||||||
"endTime": "2018-07-11T11:33:41.531918+00:00",
|
"endTime": "2018-07-11T11:33:41.531918+00:00",
|
||||||
|
@ -136,7 +136,7 @@
|
||||||
"serial": 1,
|
"serial": 1,
|
||||||
"pcmcia": 0,
|
"pcmcia": 0,
|
||||||
"usb": 8,
|
"usb": 8,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "TestBios",
|
"type": "TestBios",
|
||||||
"accessRange": "A"
|
"accessRange": "A"
|
||||||
|
@ -149,12 +149,6 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"version": "11.0a3",
|
"version": "11.0a3",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"SmartTest",
|
|
||||||
"StressTest",
|
|
||||||
"EraseBasic"
|
|
||||||
],
|
|
||||||
"endTime": "2018-07-11T10:28:55.879745+00:00",
|
"endTime": "2018-07-11T10:28:55.879745+00:00",
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"elapsed": 3886,
|
"elapsed": 3886,
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "00:26:18:96:dc:af",
|
"serialNumber": "00:26:18:96:dc:af",
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"speed": 1333.0,
|
"speed": 1333.0,
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"speed": 1333.0,
|
"speed": 1333.0,
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"speed": 1333.0,
|
"speed": 1333.0,
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"speed": 1333.0,
|
"speed": 1333.0,
|
||||||
|
@ -53,14 +53,14 @@
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"speed": 2.5330000000000004,
|
"speed": 2.5330000000000004,
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"threads": 8,
|
"threads": 8,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 9,
|
"elapsed": 9,
|
||||||
"type": "BenchmarkProcessorSysbench",
|
"type": "BenchmarkProcessorSysbench",
|
||||||
|
@ -91,7 +91,7 @@
|
||||||
"serialNumber": "S246J90Z406422",
|
"serialNumber": "S246J90Z406422",
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 953869,
|
"size": 953869,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 120,
|
"elapsed": 120,
|
||||||
"lifetime": 14298,
|
"lifetime": 14298,
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"firewire": 1,
|
"firewire": 1,
|
||||||
|
@ -131,7 +131,7 @@
|
||||||
"pcmcia": 0,
|
"pcmcia": 0,
|
||||||
"slots": 4,
|
"slots": 4,
|
||||||
"serial": 1,
|
"serial": 1,
|
||||||
"events": []
|
"actions": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"elapsed": 203,
|
"elapsed": 203,
|
||||||
|
@ -141,7 +141,7 @@
|
||||||
"chassis": "Tower",
|
"chassis": "Tower",
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
|
@ -158,11 +158,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"version": "11.0a6",
|
"version": "11.0a6",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"TestDataStorage",
|
|
||||||
"StressTest"
|
|
||||||
],
|
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"closed": true,
|
"closed": true,
|
||||||
"software": "Workbench"
|
"software": "Workbench"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"closed": true,
|
"closed": true,
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82567LM-3 Gigabit Network Connection",
|
"model": "82567LM-3 Gigabit Network Connection",
|
||||||
"serialNumber": "00:23:7d:49:5e:31",
|
"serialNumber": "00:23:7d:49:5e:31",
|
||||||
|
@ -11,14 +11,14 @@
|
||||||
"wireless": false
|
"wireless": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801JD/DO HD Audio Controller",
|
"model": "82801JD/DO HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"interface": "DDR2",
|
"interface": "DDR2",
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
{
|
{
|
||||||
"address": 64,
|
"address": 64,
|
||||||
"cores": 2,
|
"cores": 2,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"rate": 11970.54,
|
"rate": 11970.54,
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
"type": "Processor"
|
"type": "Processor"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 16,
|
"elapsed": 16,
|
||||||
"readSpeed": 76.8,
|
"readSpeed": 76.8,
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
"type": "HardDrive"
|
"type": "HardDrive"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"model": "4 Series Chipset Integrated Graphics Controller",
|
"model": "4 Series Chipset Integrated Graphics Controller",
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
"type": "GraphicCard"
|
"type": "GraphicCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "TestBios",
|
"type": "TestBios",
|
||||||
"accessRange": "A"
|
"accessRange": "A"
|
||||||
|
@ -108,7 +108,7 @@
|
||||||
],
|
],
|
||||||
"device": {
|
"device": {
|
||||||
"chassis": "Tower",
|
"chassis": "Tower",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
"severity": "Info",
|
"severity": "Info",
|
||||||
|
@ -142,11 +142,7 @@
|
||||||
},
|
},
|
||||||
"elapsed": 238,
|
"elapsed": 238,
|
||||||
"endTime": "2018-10-15T13:59:37.431309+00:00",
|
"endTime": "2018-10-15T13:59:37.431309+00:00",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"TestDataStorage",
|
|
||||||
"StressTest"
|
|
||||||
],
|
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"uuid": "ec23c11b-80b6-42cd-ac5c-73ba7acddbc4",
|
"uuid": "ec23c11b-80b6-42cd-ac5c-73ba7acddbc4",
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
"serialNumber": "74:2f:68:8b:fd:c8",
|
"serialNumber": "74:2f:68:8b:fd:c8",
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"manufacturer": "Qualcomm Atheros",
|
||||||
"wireless": true,
|
"wireless": true,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"manufacturer": "Qualcomm Atheros",
|
||||||
"speed": 100,
|
"speed": 100,
|
||||||
"wireless": false,
|
"wireless": false,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"speed": 1.667,
|
"speed": 1.667,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "BenchmarkProcessorSysbench",
|
"type": "BenchmarkProcessorSysbench",
|
||||||
"rate": 164.0803,
|
"rate": 164.0803,
|
||||||
|
@ -45,21 +45,21 @@
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"model": "USB 2.0 UVC VGA WebCam",
|
"model": "USB 2.0 UVC VGA WebCam",
|
||||||
"serialNumber": "0x0001",
|
"serialNumber": "0x0001",
|
||||||
"manufacturer": "Azurewave",
|
"manufacturer": "Azurewave",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"speed": 667.0,
|
"speed": 667.0,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
"interface": "ATA",
|
"interface": "ATA",
|
||||||
"serialNumber": "E2024242CV86HJ",
|
"serialNumber": "E2024242CV86HJ",
|
||||||
"manufacturer": "Hitachi",
|
"manufacturer": "Hitachi",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "BenchmarkDataStorage",
|
"type": "BenchmarkDataStorage",
|
||||||
"elapsed": 16,
|
"elapsed": 16,
|
||||||
|
@ -120,7 +120,7 @@
|
||||||
"serialNumber": "Eee0123456789",
|
"serialNumber": "Eee0123456789",
|
||||||
"usb": 5,
|
"usb": 5,
|
||||||
"manufacturer": "ASUSTeK Computer INC.",
|
"manufacturer": "ASUSTeK Computer INC.",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "TestBios",
|
"type": "TestBios",
|
||||||
"accessRange": "C"
|
"accessRange": "C"
|
||||||
|
@ -140,7 +140,7 @@
|
||||||
"serialNumber": "B8OAAS048286",
|
"serialNumber": "B8OAAS048286",
|
||||||
"manufacturer": "ASUSTeK Computer INC.",
|
"manufacturer": "ASUSTeK Computer INC.",
|
||||||
"chassis": "Netbook",
|
"chassis": "Netbook",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "BenchmarkRamSysbench",
|
"type": "BenchmarkRamSysbench",
|
||||||
"rate": 15.7188,
|
"rate": 15.7188,
|
||||||
|
@ -158,11 +158,5 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"SmartTest",
|
|
||||||
"StressTest",
|
|
||||||
"EraseBasic"
|
|
||||||
],
|
|
||||||
"closed": false
|
"closed": false
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
"serialNumber": "00:23:24:0d:86:28",
|
"serialNumber": "00:23:24:0d:86:28",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"wireless": false,
|
"wireless": false,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
"serialNumber": "00:0e:0c:b6:f2:91",
|
"serialNumber": "00:0e:0c:b6:f2:91",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"wireless": false,
|
"wireless": false,
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cores": 4,
|
"cores": 4,
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
"speed": 1.9980000000000002,
|
"speed": 1.9980000000000002,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"rate": 6665.7,
|
"rate": 6665.7,
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
"model": "4 Series Chipset Integrated Graphics Controller",
|
"model": "4 Series Chipset Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"memory": 256.0
|
"memory": 256.0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
"model": "82801JD/DO HD Audio Controller",
|
"model": "82801JD/DO HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -64,7 +64,7 @@
|
||||||
"serialNumber": "F8482E29",
|
"serialNumber": "F8482E29",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
"serialNumber": "62072F30",
|
"serialNumber": "62072F30",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size": 238475,
|
"size": 238475,
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
"model": "ST3250318AS",
|
"model": "ST3250318AS",
|
||||||
"serialNumber": "9VY6HBKE",
|
"serialNumber": "9VY6HBKE",
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"type": "TestDataStorage",
|
"type": "TestDataStorage",
|
||||||
|
@ -108,7 +108,7 @@
|
||||||
"serialNumber": "CZC03217S7",
|
"serialNumber": "CZC03217S7",
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serial": 0,
|
"serial": 0,
|
||||||
"usb": 8
|
"usb": 8
|
||||||
}
|
}
|
||||||
|
@ -120,9 +120,6 @@
|
||||||
"chassis": "Tower",
|
"chassis": "Tower",
|
||||||
"serialNumber": "CZC03217S7",
|
"serialNumber": "CZC03217S7",
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"events": []
|
"actions": []
|
||||||
},
|
}
|
||||||
"expectedEvents": [
|
|
||||||
"SmartTest"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"uuid": "f9e5e587-baee-44e1-9a94-255d216bbda9",
|
"uuid": "f9e5e587-baee-44e1-9a94-255d216bbda9",
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": "6c:62:6d:81:22:9f",
|
"serialNumber": "6c:62:6d:81:22:9f",
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"events": [
|
"actions": [
|
||||||
],
|
],
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
"serialNumber": "B4012F30",
|
"serialNumber": "B4012F30",
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
"serialNumber": "8E9F2E29",
|
"serialNumber": "8E9F2E29",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
"serialNumber": "9A012F30",
|
"serialNumber": "9A012F30",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"events": [
|
"actions": [
|
||||||
],
|
],
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
"serialNumber": "8F9F2E29",
|
"serialNumber": "8F9F2E29",
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cores": 2,
|
"cores": 2,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"rate": 23410.76,
|
"rate": 23410.76,
|
||||||
"type": "BenchmarkProcessor",
|
"type": "BenchmarkProcessor",
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
"model": "Intel Core i3 CPU 530 @ 2.93GHz"
|
"model": "Intel Core i3 CPU 530 @ 2.93GHz"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"writeSpeed": 24.5,
|
"writeSpeed": 24.5,
|
||||||
"readSpeed": 111.0,
|
"readSpeed": 111.0,
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
"model": "WDC WD3200AAJS-6"
|
"model": "WDC WD3200AAJS-6"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
|
@ -110,14 +110,14 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Core Processor Integrated Graphics Controller"
|
"model": "Core Processor Integrated Graphics Controller"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "TestBios",
|
"type": "TestBios",
|
||||||
"accessRange": "A"
|
"accessRange": "A"
|
||||||
|
@ -137,13 +137,8 @@
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"elapsed": 96,
|
"elapsed": 96,
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [
|
|
||||||
"StressTest",
|
|
||||||
"Benchmark",
|
|
||||||
"SmartTest"
|
|
||||||
],
|
|
||||||
"device": {
|
"device": {
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"elapsed": 60,
|
"elapsed": 60,
|
||||||
|
|
|
@ -1,9 +1,4 @@
|
||||||
{
|
{
|
||||||
"expectedEvents": [
|
|
||||||
"SmartTest",
|
|
||||||
"Benchmark",
|
|
||||||
"StressTest"
|
|
||||||
],
|
|
||||||
"endTime": "2018-06-29T15:29:29.322424+00:00",
|
"endTime": "2018-06-29T15:29:29.322424+00:00",
|
||||||
"elapsed": 391,
|
"elapsed": 391,
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
|
@ -14,7 +9,7 @@
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"format": "SODIMM",
|
"format": "SODIMM",
|
||||||
"events": [
|
"actions": [
|
||||||
],
|
],
|
||||||
"speed": 533.0,
|
"speed": 533.0,
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
|
@ -23,21 +18,21 @@
|
||||||
{
|
{
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"model": "NM10/ICH7 Family High Definition Audio Controller"
|
"model": "NM10/ICH7 Family High Definition Audio Controller"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Chicony Electronics Co., Ltd.",
|
"manufacturer": "Chicony Electronics Co., Ltd.",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"model": "USB2.0 UVC WebCam"
|
"model": "USB2.0 UVC WebCam"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"serialNumber": "00:23:08:a5:07:6d",
|
"serialNumber": "00:23:08:a5:07:6d",
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"manufacturer": "Qualcomm Atheros",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": true,
|
"wireless": true,
|
||||||
"model": "AR9285 Wireless Network Adapter"
|
"model": "AR9285 Wireless Network Adapter"
|
||||||
|
@ -45,7 +40,7 @@
|
||||||
{
|
{
|
||||||
"serialNumber": "00:23:5a:fe:d7:14",
|
"serialNumber": "00:23:5a:fe:d7:14",
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"speed": 100,
|
"speed": 100,
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": false,
|
"wireless": false,
|
||||||
|
@ -55,7 +50,7 @@
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"address": 32,
|
"address": 32,
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"rate": 171.3049,
|
"rate": 171.3049,
|
||||||
"type": "BenchmarkProcessorSysbench",
|
"type": "BenchmarkProcessorSysbench",
|
||||||
|
@ -75,7 +70,7 @@
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"model": "Mobile 945GSE Express Integrated Graphics Controller"
|
"model": "Mobile 945GSE Express Integrated Graphics Controller"
|
||||||
},
|
},
|
||||||
|
@ -84,7 +79,7 @@
|
||||||
"interface": "ATA",
|
"interface": "ATA",
|
||||||
"size": 152627,
|
"size": 152627,
|
||||||
"manufacturer": "Hitachi",
|
"manufacturer": "Hitachi",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 71,
|
"elapsed": 71,
|
||||||
"readSpeed": 19.1,
|
"readSpeed": 19.1,
|
||||||
|
@ -107,7 +102,7 @@
|
||||||
"serialNumber": "0123456789AB",
|
"serialNumber": "0123456789AB",
|
||||||
"manufacturer": "TOSHIBA",
|
"manufacturer": "TOSHIBA",
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"pcmcia": 0,
|
"pcmcia": 0,
|
||||||
"usb": 5,
|
"usb": 5,
|
||||||
"serial": 1,
|
"serial": 1,
|
||||||
|
@ -119,7 +114,7 @@
|
||||||
"device": {
|
"device": {
|
||||||
"serialNumber": "79545417K",
|
"serialNumber": "79545417K",
|
||||||
"manufacturer": "TOSHIBA",
|
"manufacturer": "TOSHIBA",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "StressTest",
|
"type": "StressTest",
|
||||||
"severity": "Info",
|
"severity": "Info",
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
{
|
{
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"TestDataStorage",
|
|
||||||
"StressTest"
|
|
||||||
],
|
|
||||||
"device": {
|
"device": {
|
||||||
"model": "HP Compaq 8100 Elite SFF",
|
"model": "HP Compaq 8100 Elite SFF",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "BenchmarkRamSysbench",
|
"type": "BenchmarkRamSysbench",
|
||||||
"elapsed": 1,
|
"elapsed": 1,
|
||||||
|
@ -27,7 +23,7 @@
|
||||||
{
|
{
|
||||||
"model": "Intel Core i3 CPU 530 @ 2.93GHz",
|
"model": "Intel Core i3 CPU 530 @ 2.93GHz",
|
||||||
"address": 64,
|
"address": 64,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "BenchmarkProcessor",
|
"type": "BenchmarkProcessor",
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
|
@ -48,7 +44,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"model": "Core Processor Integrated Graphics Controller",
|
"model": "Core Processor Integrated Graphics Controller",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
|
@ -56,7 +52,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"manufacturer": "Intel Corporation"
|
"manufacturer": "Intel Corporation"
|
||||||
|
@ -64,7 +60,7 @@
|
||||||
{
|
{
|
||||||
"model": "16JTF25664AZ-1G4F",
|
"model": "16JTF25664AZ-1G4F",
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": "B4012F30",
|
"serialNumber": "B4012F30",
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
|
@ -75,7 +71,7 @@
|
||||||
{
|
{
|
||||||
"model": "16JTF25664AZ-1G4F",
|
"model": "16JTF25664AZ-1G4F",
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": "8E9F2E29",
|
"serialNumber": "8E9F2E29",
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
|
@ -86,7 +82,7 @@
|
||||||
{
|
{
|
||||||
"model": "16JTF25664AZ-1G4F",
|
"model": "16JTF25664AZ-1G4F",
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": "9A012F30",
|
"serialNumber": "9A012F30",
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
|
@ -97,7 +93,7 @@
|
||||||
{
|
{
|
||||||
"model": "16JTF25664AZ-1G4F",
|
"model": "16JTF25664AZ-1G4F",
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": "8F9F2E29",
|
"serialNumber": "8F9F2E29",
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
|
@ -107,7 +103,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"model": "82578DM Gigabit Network Connection",
|
"model": "82578DM Gigabit Network Connection",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": "6c:62:6d:81:22:9f",
|
"serialNumber": "6c:62:6d:81:22:9f",
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": false,
|
"wireless": false,
|
||||||
|
@ -117,7 +113,7 @@
|
||||||
{
|
{
|
||||||
"model": "WDC WD3200AAJS-6",
|
"model": "WDC WD3200AAJS-6",
|
||||||
"interface": "ATA",
|
"interface": "ATA",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"currentPendingSectorCount": 0,
|
"currentPendingSectorCount": 0,
|
||||||
"commandTimeout": 0,
|
"commandTimeout": 0,
|
||||||
|
@ -148,7 +144,7 @@
|
||||||
{
|
{
|
||||||
"model": "304Ah",
|
"model": "304Ah",
|
||||||
"pcmcia": 0,
|
"pcmcia": 0,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
|
|
|
@ -7,7 +7,7 @@ device:
|
||||||
model: A1586
|
model: A1586
|
||||||
serialNumber: ABCDEF
|
serialNumber: ABCDEF
|
||||||
imei: 35686800-004141-20
|
imei: 35686800-004141-20
|
||||||
events:
|
actions:
|
||||||
- type: VisualTest
|
- type: VisualTest
|
||||||
appearanceRange: A
|
appearanceRange: A
|
||||||
functionalityRange: B
|
functionalityRange: B
|
||||||
|
|
|
@ -9,7 +9,6 @@ type: Snapshot
|
||||||
uuid: cb8ce6b5-6a1b-4084-b5b9-d8fadad2a015
|
uuid: cb8ce6b5-6a1b-4084-b5b9-d8fadad2a015
|
||||||
version: '11.0'
|
version: '11.0'
|
||||||
software: Workbench
|
software: Workbench
|
||||||
expectedEvents: [TestDataStorage, StressTest, EraseSectors, Install]
|
|
||||||
elapsed: 500
|
elapsed: 500
|
||||||
device:
|
device:
|
||||||
type: Desktop
|
type: Desktop
|
||||||
|
@ -20,7 +19,7 @@ device:
|
||||||
tags:
|
tags:
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: tag1
|
id: tag1
|
||||||
events:
|
actions:
|
||||||
- type: VisualTest
|
- type: VisualTest
|
||||||
appearanceRange: A
|
appearanceRange: A
|
||||||
functionalityRange: B
|
functionalityRange: B
|
||||||
|
@ -45,7 +44,7 @@ components:
|
||||||
- type: Processor
|
- type: Processor
|
||||||
model: p1-1ml
|
model: p1-1ml
|
||||||
manufacturer: p1-1mr
|
manufacturer: p1-1mr
|
||||||
events:
|
actions:
|
||||||
- type: BenchmarkProcessor
|
- type: BenchmarkProcessor
|
||||||
rate: 2410
|
rate: 2410
|
||||||
elapsed: 44
|
elapsed: 44
|
||||||
|
@ -57,7 +56,7 @@ components:
|
||||||
model: ssd1-1ml
|
model: ssd1-1ml
|
||||||
manufacturer: ssd1-1mr
|
manufacturer: ssd1-1mr
|
||||||
size: 1100
|
size: 1100
|
||||||
events:
|
actions:
|
||||||
- type: BenchmarkDataStorage
|
- type: BenchmarkDataStorage
|
||||||
readSpeed: 20
|
readSpeed: 20
|
||||||
writeSpeed: 15
|
writeSpeed: 15
|
||||||
|
@ -80,7 +79,7 @@ components:
|
||||||
serialNumber: hdd1-1s
|
serialNumber: hdd1-1s
|
||||||
model: hdd1-1ml
|
model: hdd1-1ml
|
||||||
manufacturer: hdd1-1mr
|
manufacturer: hdd1-1mr
|
||||||
events:
|
actions:
|
||||||
- type: BenchmarkDataStorage
|
- type: BenchmarkDataStorage
|
||||||
readSpeed: 10
|
readSpeed: 10
|
||||||
writeSpeed: 5
|
writeSpeed: 5
|
||||||
|
|
|
@ -2,29 +2,29 @@ from typing import Callable, Iterable, Tuple
|
||||||
|
|
||||||
from teal.resource import Converters, Resource
|
from teal.resource import Converters, Resource
|
||||||
|
|
||||||
|
from ereuse_devicehub.resources.action import schemas
|
||||||
|
from ereuse_devicehub.resources.action.views import ActionView
|
||||||
from ereuse_devicehub.resources.device.sync import Sync
|
from ereuse_devicehub.resources.device.sync import Sync
|
||||||
from ereuse_devicehub.resources.event import schemas
|
|
||||||
from ereuse_devicehub.resources.event.views import EventView
|
|
||||||
|
|
||||||
|
|
||||||
class EventDef(Resource):
|
class ActionDef(Resource):
|
||||||
SCHEMA = schemas.Event
|
SCHEMA = schemas.Action
|
||||||
VIEW = EventView
|
VIEW = ActionView
|
||||||
AUTH = True
|
AUTH = True
|
||||||
ID_CONVERTER = Converters.uuid
|
ID_CONVERTER = Converters.uuid
|
||||||
|
|
||||||
|
|
||||||
class AddDef(EventDef):
|
class AddDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Add
|
SCHEMA = schemas.Add
|
||||||
|
|
||||||
|
|
||||||
class RemoveDef(EventDef):
|
class RemoveDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Remove
|
SCHEMA = schemas.Remove
|
||||||
|
|
||||||
|
|
||||||
class EraseBasicDef(EventDef):
|
class EraseBasicDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.EraseBasic
|
SCHEMA = schemas.EraseBasic
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ class StepRandomDef(StepDef):
|
||||||
SCHEMA = schemas.StepRandom
|
SCHEMA = schemas.StepRandom
|
||||||
|
|
||||||
|
|
||||||
class BenchmarkDef(EventDef):
|
class BenchmarkDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Benchmark
|
SCHEMA = schemas.Benchmark
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ class BenchmarkRamSysbenchDef(BenchmarkWithRateDef):
|
||||||
SCHEMA = schemas.BenchmarkRamSysbench
|
SCHEMA = schemas.BenchmarkRamSysbench
|
||||||
|
|
||||||
|
|
||||||
class TestDef(EventDef):
|
class TestDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Test
|
SCHEMA = schemas.Test
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ class VisualTestDef(TestDef):
|
||||||
SCHEMA = schemas.VisualTest
|
SCHEMA = schemas.VisualTest
|
||||||
|
|
||||||
|
|
||||||
class RateDef(EventDef):
|
class RateDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Rate
|
SCHEMA = schemas.Rate
|
||||||
|
|
||||||
|
@ -144,22 +144,22 @@ class RateComputerDef(RateDef):
|
||||||
SCHEMA = schemas.RateComputer
|
SCHEMA = schemas.RateComputer
|
||||||
|
|
||||||
|
|
||||||
class PriceDef(EventDef):
|
class PriceDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Price
|
SCHEMA = schemas.Price
|
||||||
|
|
||||||
|
|
||||||
class EreusePriceDef(EventDef):
|
class EreusePriceDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.EreusePrice
|
SCHEMA = schemas.EreusePrice
|
||||||
|
|
||||||
|
|
||||||
class InstallDef(EventDef):
|
class InstallDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Install
|
SCHEMA = schemas.Install
|
||||||
|
|
||||||
|
|
||||||
class SnapshotDef(EventDef):
|
class SnapshotDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Snapshot
|
SCHEMA = schemas.Snapshot
|
||||||
|
|
||||||
|
@ -167,92 +167,92 @@ class SnapshotDef(EventDef):
|
||||||
static_url_path=None,
|
static_url_path=None,
|
||||||
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
||||||
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
||||||
url_prefix = '/{}'.format(EventDef.resource)
|
url_prefix = '/{}'.format(ActionDef.resource)
|
||||||
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
||||||
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
||||||
self.sync = Sync()
|
self.sync = Sync()
|
||||||
|
|
||||||
|
|
||||||
class ToRepairDef(EventDef):
|
class ToRepairDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.ToRepair
|
SCHEMA = schemas.ToRepair
|
||||||
|
|
||||||
|
|
||||||
class RepairDef(EventDef):
|
class RepairDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Repair
|
SCHEMA = schemas.Repair
|
||||||
|
|
||||||
|
|
||||||
class ReadyToUse(EventDef):
|
class ReadyToUse(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.ReadyToUse
|
SCHEMA = schemas.ReadyToUse
|
||||||
|
|
||||||
|
|
||||||
class ToPrepareDef(EventDef):
|
class ToPrepareDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.ToPrepare
|
SCHEMA = schemas.ToPrepare
|
||||||
|
|
||||||
|
|
||||||
class PrepareDef(EventDef):
|
class PrepareDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Prepare
|
SCHEMA = schemas.Prepare
|
||||||
|
|
||||||
|
|
||||||
class LiveDef(EventDef):
|
class LiveDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Live
|
SCHEMA = schemas.Live
|
||||||
|
|
||||||
|
|
||||||
class ReserveDef(EventDef):
|
class ReserveDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Reserve
|
SCHEMA = schemas.Reserve
|
||||||
|
|
||||||
|
|
||||||
class CancelReservationDef(EventDef):
|
class CancelReservationDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.CancelReservation
|
SCHEMA = schemas.CancelReservation
|
||||||
|
|
||||||
|
|
||||||
class SellDef(EventDef):
|
class SellDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Sell
|
SCHEMA = schemas.Sell
|
||||||
|
|
||||||
|
|
||||||
class DonateDef(EventDef):
|
class DonateDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Donate
|
SCHEMA = schemas.Donate
|
||||||
|
|
||||||
|
|
||||||
class RentDef(EventDef):
|
class RentDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Rent
|
SCHEMA = schemas.Rent
|
||||||
|
|
||||||
|
|
||||||
class CancelTradeDef(EventDef):
|
class CancelTradeDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.CancelTrade
|
SCHEMA = schemas.CancelTrade
|
||||||
|
|
||||||
|
|
||||||
class ToDisposeProductDef(EventDef):
|
class ToDisposeProductDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.ToDisposeProduct
|
SCHEMA = schemas.ToDisposeProduct
|
||||||
|
|
||||||
|
|
||||||
class DisposeProductDef(EventDef):
|
class DisposeProductDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.DisposeProduct
|
SCHEMA = schemas.DisposeProduct
|
||||||
|
|
||||||
|
|
||||||
class ReceiveDef(EventDef):
|
class ReceiveDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Receive
|
SCHEMA = schemas.Receive
|
||||||
|
|
||||||
|
|
||||||
class MigrateToDef(EventDef):
|
class MigrateToDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.MigrateTo
|
SCHEMA = schemas.MigrateTo
|
||||||
|
|
||||||
|
|
||||||
class MigrateFromDef(EventDef):
|
class MigrateFromDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.MigrateFrom
|
SCHEMA = schemas.MigrateFrom
|
|
@ -1,7 +1,7 @@
|
||||||
"""
|
"""
|
||||||
This file contains all events can apply to a device and is sorted according to a structure based on:
|
This file contains all actions can apply to a device and is sorted according to a structure based on:
|
||||||
|
|
||||||
* Generic Events
|
* Generic Actions
|
||||||
* Benchmarks
|
* Benchmarks
|
||||||
* Tests
|
* Tests
|
||||||
* Rates
|
* Rates
|
||||||
|
@ -31,7 +31,7 @@ from sqlalchemy.ext.orderinglist import ordering_list
|
||||||
from sqlalchemy.orm import backref, relationship, validates
|
from sqlalchemy.orm import backref, relationship, validates
|
||||||
from sqlalchemy.orm.events import AttributeEvents as Events
|
from sqlalchemy.orm.events import AttributeEvents as Events
|
||||||
from sqlalchemy.util import OrderedSet
|
from sqlalchemy.util import OrderedSet
|
||||||
from teal.db import ArrayOfEnum, CASCADE_OWN, INHERIT_COND, IP, POLYMORPHIC_ID, \
|
from teal.db import CASCADE_OWN, INHERIT_COND, IP, POLYMORPHIC_ID, \
|
||||||
POLYMORPHIC_ON, StrictVersionType, URL, check_lower, check_range
|
POLYMORPHIC_ON, StrictVersionType, URL, check_lower, check_range
|
||||||
from teal.enums import Country, Currency, Subdivision
|
from teal.enums import Country, Currency, Subdivision
|
||||||
from teal.marshmallow import ValidationError
|
from teal.marshmallow import ValidationError
|
||||||
|
@ -43,8 +43,8 @@ from ereuse_devicehub.resources.device.models import Component, Computer, DataSt
|
||||||
Device, Laptop, Server
|
Device, Laptop, Server
|
||||||
from ereuse_devicehub.resources.enums import AppearanceRange, BatteryHealth, BiosAccessRange, \
|
from ereuse_devicehub.resources.enums import AppearanceRange, BatteryHealth, BiosAccessRange, \
|
||||||
ErasureStandards, FunctionalityRange, PhysicalErasureMethod, PriceSoftware, \
|
ErasureStandards, FunctionalityRange, PhysicalErasureMethod, PriceSoftware, \
|
||||||
R_NEGATIVE, R_POSITIVE, RatingRange, ReceiverRole, Severity, SnapshotExpectedEvents, \
|
R_NEGATIVE, R_POSITIVE, RatingRange, ReceiverRole, Severity, SnapshotSoftware, \
|
||||||
SnapshotSoftware, TestDataStorageLength
|
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
|
||||||
|
|
||||||
|
@ -53,18 +53,18 @@ class JoinedTableMixin:
|
||||||
# noinspection PyMethodParameters
|
# noinspection PyMethodParameters
|
||||||
@declared_attr
|
@declared_attr
|
||||||
def id(cls):
|
def id(cls):
|
||||||
return Column(UUID(as_uuid=True), ForeignKey(Event.id), primary_key=True)
|
return Column(UUID(as_uuid=True), ForeignKey(Action.id), primary_key=True)
|
||||||
|
|
||||||
|
|
||||||
_sorted_events = {
|
_sorted_actions = {
|
||||||
'order_by': lambda: Event.end_time,
|
'order_by': lambda: Action.end_time,
|
||||||
'collection_class': SortedSet
|
'collection_class': SortedSet
|
||||||
}
|
}
|
||||||
"""For db.backref, return the events sorted by end_time."""
|
"""For db.backref, return the actions sorted by end_time."""
|
||||||
|
|
||||||
|
|
||||||
class Event(Thing):
|
class Action(Thing):
|
||||||
"""Event performed on a device.
|
"""Action performed on a device.
|
||||||
|
|
||||||
This class extends `Schema's Action <https://schema.org/Action>`_.
|
This class extends `Schema's Action <https://schema.org/Action>`_.
|
||||||
"""
|
"""
|
||||||
|
@ -72,19 +72,19 @@ class Event(Thing):
|
||||||
type = Column(Unicode, nullable=False)
|
type = Column(Unicode, nullable=False)
|
||||||
name = Column(CIText(), default='', nullable=False)
|
name = Column(CIText(), default='', nullable=False)
|
||||||
name.comment = """
|
name.comment = """
|
||||||
A name or title for the event. Used when searching for events.
|
A name or title for the action. Used when searching for actions.
|
||||||
"""
|
"""
|
||||||
severity = Column(teal.db.IntEnum(Severity), default=Severity.Info, nullable=False)
|
severity = Column(teal.db.IntEnum(Severity), default=Severity.Info, nullable=False)
|
||||||
severity.comment = Severity.__doc__
|
severity.comment = Severity.__doc__
|
||||||
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 action.
|
||||||
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 actions are closed when performed.
|
||||||
"""
|
"""
|
||||||
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 action.
|
||||||
"""
|
"""
|
||||||
start_time = Column(db.TIMESTAMP(timezone=True))
|
start_time = Column(db.TIMESTAMP(timezone=True))
|
||||||
start_time.comment = """
|
start_time.comment = """
|
||||||
|
@ -103,13 +103,13 @@ class Event(Thing):
|
||||||
|
|
||||||
snapshot_id = Column(UUID(as_uuid=True), ForeignKey('snapshot.id',
|
snapshot_id = Column(UUID(as_uuid=True), ForeignKey('snapshot.id',
|
||||||
use_alter=True,
|
use_alter=True,
|
||||||
name='snapshot_events'))
|
name='snapshot_actions'))
|
||||||
snapshot = relationship('Snapshot',
|
snapshot = relationship('Snapshot',
|
||||||
backref=backref('events',
|
backref=backref('actions',
|
||||||
lazy=True,
|
lazy=True,
|
||||||
cascade=CASCADE_OWN,
|
cascade=CASCADE_OWN,
|
||||||
**_sorted_events),
|
**_sorted_actions),
|
||||||
primaryjoin='Event.snapshot_id == Snapshot.id')
|
primaryjoin='Action.snapshot_id == Snapshot.id')
|
||||||
|
|
||||||
author_id = Column(UUID(as_uuid=True),
|
author_id = Column(UUID(as_uuid=True),
|
||||||
ForeignKey(User.id),
|
ForeignKey(User.id),
|
||||||
|
@ -117,7 +117,7 @@ class Event(Thing):
|
||||||
default=lambda: g.user.id)
|
default=lambda: g.user.id)
|
||||||
# todo compute the org
|
# todo compute the org
|
||||||
author = relationship(User,
|
author = relationship(User,
|
||||||
backref=backref('authored_events', lazy=True, collection_class=set),
|
backref=backref('authored_actions', lazy=True, collection_class=set),
|
||||||
primaryjoin=author_id == User.id)
|
primaryjoin=author_id == User.id)
|
||||||
author_id.comment = """
|
author_id.comment = """
|
||||||
The user that recorded this action in the system.
|
The user that recorded this action in the system.
|
||||||
|
@ -133,7 +133,7 @@ class Event(Thing):
|
||||||
default=lambda: g.user.individual.id)
|
default=lambda: g.user.individual.id)
|
||||||
# todo compute the org
|
# todo compute the org
|
||||||
agent = relationship(Agent,
|
agent = relationship(Agent,
|
||||||
backref=backref('events_agent', lazy=True, **_sorted_events),
|
backref=backref('actions_agent', lazy=True, **_sorted_actions),
|
||||||
primaryjoin=agent_id == Agent.id)
|
primaryjoin=agent_id == Agent.id)
|
||||||
agent_id.comment = """
|
agent_id.comment = """
|
||||||
The direct performer or driver of the action. e.g. John wrote a book.
|
The direct performer or driver of the action. e.g. John wrote a book.
|
||||||
|
@ -143,29 +143,29 @@ class Event(Thing):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
components = relationship(Component,
|
components = relationship(Component,
|
||||||
backref=backref('events_components', lazy=True, **_sorted_events),
|
backref=backref('actions_components', lazy=True, **_sorted_actions),
|
||||||
secondary=lambda: EventComponent.__table__,
|
secondary=lambda: ActionComponent.__table__,
|
||||||
order_by=lambda: Component.id,
|
order_by=lambda: Component.id,
|
||||||
collection_class=OrderedSet)
|
collection_class=OrderedSet)
|
||||||
components.comment = """
|
components.comment = """
|
||||||
The components that are affected by the event.
|
The components that are affected by the action.
|
||||||
|
|
||||||
When performing events to parent devices their components are
|
When performing actions to parent devices their components are
|
||||||
affected too.
|
affected too.
|
||||||
|
|
||||||
For example: an ``Allocate`` is performed to a Computer and this
|
For example: an ``Allocate`` is performed to a Computer and this
|
||||||
relationship is filled with the components the computer had
|
relationship is filled with the components the computer had
|
||||||
at the time of the event.
|
at the time of the action.
|
||||||
|
|
||||||
For Add and Remove though, this has another meaning: the components
|
For Add and Remove though, this has another meaning: the components
|
||||||
that are added or removed.
|
that are added or removed.
|
||||||
"""
|
"""
|
||||||
parent_id = Column(BigInteger, ForeignKey(Computer.id))
|
parent_id = Column(BigInteger, ForeignKey(Computer.id))
|
||||||
parent = relationship(Computer,
|
parent = relationship(Computer,
|
||||||
backref=backref('events_parent', lazy=True, **_sorted_events),
|
backref=backref('actions_parent', lazy=True, **_sorted_actions),
|
||||||
primaryjoin=parent_id == Computer.id)
|
primaryjoin=parent_id == Computer.id)
|
||||||
parent_id.comment = """
|
parent_id.comment = """
|
||||||
For events that are performed to components, the device parent
|
For actions that are performed to components, the device parent
|
||||||
at that time.
|
at that time.
|
||||||
|
|
||||||
For example: for a ``EraseBasic`` performed on a data storage, this
|
For example: for a ``EraseBasic`` performed on a data storage, this
|
||||||
|
@ -186,8 +186,8 @@ class Event(Thing):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def url(self) -> urlutils.URL:
|
def url(self) -> urlutils.URL:
|
||||||
"""The URL where to GET this event."""
|
"""The URL where to GET this action."""
|
||||||
return urlutils.URL(url_for_resource(Event, item_id=self.id))
|
return urlutils.URL(url_for_resource(Action, item_id=self.id))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def certificate(self) -> Optional[urlutils.URL]:
|
def certificate(self) -> Optional[urlutils.URL]:
|
||||||
|
@ -204,23 +204,23 @@ class Event(Thing):
|
||||||
#sqlalchemy.ext.declarative.declared_attr>`_
|
#sqlalchemy.ext.declarative.declared_attr>`_
|
||||||
"""
|
"""
|
||||||
args = {POLYMORPHIC_ID: cls.t}
|
args = {POLYMORPHIC_ID: cls.t}
|
||||||
if cls.t == 'Event':
|
if cls.t == 'Action':
|
||||||
args[POLYMORPHIC_ON] = cls.type
|
args[POLYMORPHIC_ON] = cls.type
|
||||||
# noinspection PyUnresolvedReferences
|
# noinspection PyUnresolvedReferences
|
||||||
if JoinedTableMixin in cls.mro():
|
if JoinedTableMixin in cls.mro():
|
||||||
args[INHERIT_COND] = cls.id == Event.id
|
args[INHERIT_COND] = cls.id == Action.id
|
||||||
return args
|
return args
|
||||||
|
|
||||||
@validates('end_time')
|
@validates('end_time')
|
||||||
def validate_end_time(self, _, end_time: datetime):
|
def validate_end_time(self, _, end_time: datetime):
|
||||||
if self.start_time and end_time <= self.start_time:
|
if self.start_time and end_time <= self.start_time:
|
||||||
raise ValidationError('The event cannot finish before it starts.')
|
raise ValidationError('The action cannot finish before it starts.')
|
||||||
return end_time
|
return end_time
|
||||||
|
|
||||||
@validates('start_time')
|
@validates('start_time')
|
||||||
def validate_start_time(self, _, start_time: datetime):
|
def validate_start_time(self, _, start_time: datetime):
|
||||||
if self.end_time and start_time >= self.end_time:
|
if self.end_time and start_time >= self.end_time:
|
||||||
raise ValidationError('The event cannot start after it finished.')
|
raise ValidationError('The action cannot start after it finished.')
|
||||||
return start_time
|
return start_time
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -245,29 +245,29 @@ class Event(Thing):
|
||||||
return '<{0.t} {0.id} {0.severity}>'.format(self)
|
return '<{0.t} {0.id} {0.severity}>'.format(self)
|
||||||
|
|
||||||
|
|
||||||
class EventComponent(db.Model):
|
class ActionComponent(db.Model):
|
||||||
device_id = Column(BigInteger, ForeignKey(Component.id), primary_key=True)
|
device_id = Column(BigInteger, ForeignKey(Component.id), primary_key=True)
|
||||||
event_id = Column(UUID(as_uuid=True), ForeignKey(Event.id), primary_key=True)
|
action_id = Column(UUID(as_uuid=True), ForeignKey(Action.id), primary_key=True)
|
||||||
|
|
||||||
|
|
||||||
class JoinedWithOneDeviceMixin:
|
class JoinedWithOneDeviceMixin:
|
||||||
# noinspection PyMethodParameters
|
# noinspection PyMethodParameters
|
||||||
@declared_attr
|
@declared_attr
|
||||||
def id(cls):
|
def id(cls):
|
||||||
return Column(UUID(as_uuid=True), ForeignKey(EventWithOneDevice.id), primary_key=True)
|
return Column(UUID(as_uuid=True), ForeignKey(ActionWithOneDevice.id), primary_key=True)
|
||||||
|
|
||||||
|
|
||||||
class EventWithOneDevice(JoinedTableMixin, Event):
|
class ActionWithOneDevice(JoinedTableMixin, Action):
|
||||||
device_id = Column(BigInteger, ForeignKey(Device.id), nullable=False)
|
device_id = Column(BigInteger, ForeignKey(Device.id), nullable=False)
|
||||||
device = relationship(Device,
|
device = relationship(Device,
|
||||||
backref=backref('events_one',
|
backref=backref('actions_one',
|
||||||
lazy=True,
|
lazy=True,
|
||||||
cascade=CASCADE_OWN,
|
cascade=CASCADE_OWN,
|
||||||
**_sorted_events),
|
**_sorted_actions),
|
||||||
primaryjoin=Device.id == device_id)
|
primaryjoin=Device.id == device_id)
|
||||||
|
|
||||||
__table_args__ = (
|
__table_args__ = (
|
||||||
db.Index('event_one_device_id_index', device_id, postgresql_using='hash'),
|
db.Index('action_one_device_id_index', device_id, postgresql_using='hash'),
|
||||||
)
|
)
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
|
@ -283,15 +283,15 @@ class EventWithOneDevice(JoinedTableMixin, Event):
|
||||||
#sqlalchemy.ext.declarative.declared_attr>`_
|
#sqlalchemy.ext.declarative.declared_attr>`_
|
||||||
"""
|
"""
|
||||||
args = {POLYMORPHIC_ID: cls.t}
|
args = {POLYMORPHIC_ID: cls.t}
|
||||||
if cls.t == 'EventWithOneDevice':
|
if cls.t == 'ActionWithOneDevice':
|
||||||
args[POLYMORPHIC_ON] = cls.type
|
args[POLYMORPHIC_ON] = cls.type
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
class EventWithMultipleDevices(Event):
|
class ActionWithMultipleDevices(Action):
|
||||||
devices = relationship(Device,
|
devices = relationship(Device,
|
||||||
backref=backref('events_multiple', lazy=True, **_sorted_events),
|
backref=backref('actions_multiple', lazy=True, **_sorted_actions),
|
||||||
secondary=lambda: EventDevice.__table__,
|
secondary=lambda: ActionDevice.__table__,
|
||||||
order_by=lambda: Device.id,
|
order_by=lambda: Device.id,
|
||||||
collection_class=OrderedSet)
|
collection_class=OrderedSet)
|
||||||
|
|
||||||
|
@ -299,13 +299,13 @@ class EventWithMultipleDevices(Event):
|
||||||
return '<{0.t} {0.id} {0.severity} devices={0.devices!r}>'.format(self)
|
return '<{0.t} {0.id} {0.severity} devices={0.devices!r}>'.format(self)
|
||||||
|
|
||||||
|
|
||||||
class EventDevice(db.Model):
|
class ActionDevice(db.Model):
|
||||||
device_id = Column(BigInteger, ForeignKey(Device.id), primary_key=True)
|
device_id = Column(BigInteger, ForeignKey(Device.id), primary_key=True)
|
||||||
event_id = Column(UUID(as_uuid=True), ForeignKey(EventWithMultipleDevices.id),
|
action_id = Column(UUID(as_uuid=True), ForeignKey(ActionWithMultipleDevices.id),
|
||||||
primary_key=True)
|
primary_key=True)
|
||||||
|
|
||||||
|
|
||||||
class Add(EventWithOneDevice):
|
class Add(ActionWithOneDevice):
|
||||||
"""The act of adding components to a device.
|
"""The act of adding components to a device.
|
||||||
|
|
||||||
It is usually used internally from a :class:`.Snapshot`, for
|
It is usually used internally from a :class:`.Snapshot`, for
|
||||||
|
@ -313,7 +313,7 @@ class Add(EventWithOneDevice):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class Remove(EventWithOneDevice):
|
class Remove(ActionWithOneDevice):
|
||||||
"""The act of removing components from a device.
|
"""The act of removing components from a device.
|
||||||
|
|
||||||
It is usually used internally from a :class:`.Snapshot`, for
|
It is usually used internally from a :class:`.Snapshot`, for
|
||||||
|
@ -321,20 +321,20 @@ class Remove(EventWithOneDevice):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class Allocate(JoinedTableMixin, EventWithMultipleDevices):
|
class Allocate(JoinedTableMixin, ActionWithMultipleDevices):
|
||||||
to_id = Column(UUID, ForeignKey(User.id))
|
to_id = Column(UUID, ForeignKey(User.id))
|
||||||
to = relationship(User, primaryjoin=User.id == to_id)
|
to = relationship(User, primaryjoin=User.id == to_id)
|
||||||
organization = Column(CIText())
|
organization = Column(CIText())
|
||||||
|
|
||||||
|
|
||||||
class Deallocate(JoinedTableMixin, EventWithMultipleDevices):
|
class Deallocate(JoinedTableMixin, ActionWithMultipleDevices):
|
||||||
from_id = Column(UUID, ForeignKey(User.id))
|
from_id = Column(UUID, ForeignKey(User.id))
|
||||||
from_rel = relationship(User, primaryjoin=User.id == from_id)
|
from_rel = relationship(User, primaryjoin=User.id == from_id)
|
||||||
organization = Column(CIText())
|
organization = Column(CIText())
|
||||||
|
|
||||||
|
|
||||||
class EraseBasic(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class EraseBasic(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
||||||
"""An erasure attempt to a ``DataStorage``. The event contains
|
"""An erasure attempt to a ``DataStorage``. The action contains
|
||||||
information about success and nature of the erasure.
|
information about success and nature of the erasure.
|
||||||
|
|
||||||
EraseBasic is a software-based fast non-100%-secured way of
|
EraseBasic is a software-based fast non-100%-secured way of
|
||||||
|
@ -409,10 +409,10 @@ class Step(db.Model):
|
||||||
num = Column(SmallInteger, primary_key=True)
|
num = Column(SmallInteger, primary_key=True)
|
||||||
severity = Column(teal.db.IntEnum(Severity), default=Severity.Info, nullable=False)
|
severity = Column(teal.db.IntEnum(Severity), default=Severity.Info, nullable=False)
|
||||||
start_time = Column(db.TIMESTAMP(timezone=True), nullable=False)
|
start_time = Column(db.TIMESTAMP(timezone=True), nullable=False)
|
||||||
start_time.comment = Event.start_time.comment
|
start_time.comment = Action.start_time.comment
|
||||||
end_time = Column(db.TIMESTAMP(timezone=True), CheckConstraint('end_time > start_time'),
|
end_time = Column(db.TIMESTAMP(timezone=True), CheckConstraint('end_time > start_time'),
|
||||||
nullable=False)
|
nullable=False)
|
||||||
end_time.comment = Event.end_time.comment
|
end_time.comment = Action.end_time.comment
|
||||||
|
|
||||||
erasure = relationship(EraseBasic,
|
erasure = relationship(EraseBasic,
|
||||||
backref=backref('steps',
|
backref=backref('steps',
|
||||||
|
@ -453,7 +453,7 @@ class StepRandom(Step):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Snapshot(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class Snapshot(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
||||||
"""The Snapshot sets the physical information of the device (S/N, model...)
|
"""The Snapshot sets the physical information of the device (S/N, model...)
|
||||||
and updates it with erasures, benchmarks, ratings, and tests; updates the
|
and updates it with erasures, benchmarks, ratings, and tests; updates the
|
||||||
composition of its components (adding / removing them), and links tags
|
composition of its components (adding / removing them), and links tags
|
||||||
|
@ -488,11 +488,11 @@ class Snapshot(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
||||||
**Snapshots from Workbench**
|
**Snapshots from Workbench**
|
||||||
|
|
||||||
When processing a device from the Workbench, this one performs a Snapshot
|
When processing a device from the Workbench, this one performs a Snapshot
|
||||||
and then performs more events (like testings, benchmarking...).
|
and then performs more actions (like testings, benchmarking...).
|
||||||
|
|
||||||
There are two ways of sending this information. In an async way,
|
There are two ways of sending this information. In an async way,
|
||||||
this is, submitting events as soon as Workbench performs then, or
|
this is, submitting actions as soon as Workbench performs then, or
|
||||||
submitting only one Snapshot event with all the other events embedded.
|
submitting only one Snapshot action with all the other actions embedded.
|
||||||
|
|
||||||
**Asynced**
|
**Asynced**
|
||||||
|
|
||||||
|
@ -502,42 +502,42 @@ class Snapshot(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
||||||
1. In **T1**, WorkbenchServer (as the middleware from Workbench and
|
1. In **T1**, WorkbenchServer (as the middleware from Workbench and
|
||||||
Devicehub) submits:
|
Devicehub) submits:
|
||||||
|
|
||||||
- A ``Snapshot`` event with the required information to **synchronize**
|
- A ``Snapshot`` action with the required information to **synchronize**
|
||||||
and **rate** the device. This is:
|
and **rate** the device. This is:
|
||||||
|
|
||||||
- Identification information about the device and components
|
- Identification information about the device and components
|
||||||
(S/N, model, physical characteristics...)
|
(S/N, model, physical characteristics...)
|
||||||
- ``Tags`` in a ``tags`` property in the ``device``.
|
- ``Tags`` in a ``tags`` property in the ``device``.
|
||||||
- ``Rate`` in an ``events`` property in the ``device``.
|
- ``Rate`` in an ``actions`` property in the ``device``.
|
||||||
- ``Benchmarks`` in an ``events`` property in each ``component``
|
- ``Benchmarks`` in an ``actions`` property in each ``component``
|
||||||
or ``device``.
|
or ``device``.
|
||||||
- ``TestDataStorage`` as in ``Benchmarks``.
|
- ``TestDataStorage`` as in ``Benchmarks``.
|
||||||
- An ordered set of **expected events**, defining which are the next
|
- An ordered set of **expected actions**, defining which are the next
|
||||||
events that Workbench will perform to the device in ideal
|
actions that Workbench will perform to the device in ideal
|
||||||
conditions (device doesn't fail, no Internet drop...).
|
conditions (device doesn't fail, no Internet drop...).
|
||||||
|
|
||||||
Devicehub **syncs** the device with the database and perform the
|
Devicehub **syncs** the device with the database and perform the
|
||||||
``Benchmark``, the ``TestDataStorage``, and finally the ``Rate``.
|
``Benchmark``, the ``TestDataStorage``, and finally the ``Rate``.
|
||||||
This leaves the Snapshot **open** to wait for the next events
|
This leaves the Snapshot **open** to wait for the next actions
|
||||||
to come.
|
to come.
|
||||||
2. Assuming that we expect all events, in **T2**, WorkbenchServer
|
2. Assuming that we expect all actions, in **T2**, WorkbenchServer
|
||||||
submits a ``StressTest`` with a ``snapshot`` field containing the
|
submits a ``StressTest`` with a ``snapshot`` field containing the
|
||||||
ID of the Snapshot in 1, and Devicehub links the event with such
|
ID of the Snapshot in 1, and Devicehub links the action with such
|
||||||
``Snapshot``.
|
``Snapshot``.
|
||||||
3. In **T3**, WorkbenchServer submits the ``Erase`` with the ``Snapshot``
|
3. In **T3**, WorkbenchServer submits the ``Erase`` with the ``Snapshot``
|
||||||
and ``component`` IDs from 1, linking it to them. It repeats
|
and ``component`` IDs from 1, linking it to them. It repeats
|
||||||
this for all the erased data storage devices; **T3+Tn** being
|
this for all the erased data storage devices; **T3+Tn** being
|
||||||
*n* the erased data storage devices.
|
*n* the erased data storage devices.
|
||||||
4. WorkbenchServer does like in 3. but for the event ``Install``,
|
4. WorkbenchServer does like in 3. but for the action ``Install``,
|
||||||
finishing in **T3+Tn+Tx**, being *x* the number of data storage
|
finishing in **T3+Tn+Tx**, being *x* the number of data storage
|
||||||
devices with an OS installed into.
|
devices with an OS installed into.
|
||||||
5. In **T3+Tn+Tx**, when all *expected events* have been performed,
|
5. In **T3+Tn+Tx**, when all *expected actions* have been performed,
|
||||||
Devicehub **closes** the ``Snapshot`` from 1.
|
Devicehub **closes** the ``Snapshot`` from 1.
|
||||||
|
|
||||||
**Synced**
|
**Synced**
|
||||||
|
|
||||||
Optionally, Devicehub understands receiving a ``Snapshot`` with all
|
Optionally, Devicehub understands receiving a ``Snapshot`` with all
|
||||||
the events in an ``events`` property inside each affected ``component``
|
the actions in an ``actions`` property inside each affected ``component``
|
||||||
or ``device``.
|
or ``device``.
|
||||||
"""
|
"""
|
||||||
uuid = Column(UUID(as_uuid=True), unique=True)
|
uuid = Column(UUID(as_uuid=True), unique=True)
|
||||||
|
@ -548,13 +548,12 @@ class Snapshot(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
||||||
For Snapshots made with Workbench, the total amount of time
|
For Snapshots made with Workbench, the total amount of time
|
||||||
it took to complete.
|
it took to complete.
|
||||||
"""
|
"""
|
||||||
expected_events = Column(ArrayOfEnum(DBEnum(SnapshotExpectedEvents)))
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return '{}. {} version {}.'.format(self.severity, self.software, self.version)
|
return '{}. {} version {}.'.format(self.severity, self.software, self.version)
|
||||||
|
|
||||||
|
|
||||||
class Install(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class Install(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
||||||
"""The action of installing an Operative System to a data
|
"""The action of installing an Operative System to a data
|
||||||
storage unit.
|
storage unit.
|
||||||
"""
|
"""
|
||||||
|
@ -572,7 +571,7 @@ class SnapshotRequest(db.Model):
|
||||||
cascade=CASCADE_OWN))
|
cascade=CASCADE_OWN))
|
||||||
|
|
||||||
|
|
||||||
class Benchmark(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class Benchmark(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
||||||
"""The act of gauging the performance of a device."""
|
"""The act of gauging the performance of a device."""
|
||||||
elapsed = Column(Interval)
|
elapsed = Column(Interval)
|
||||||
|
|
||||||
|
@ -644,7 +643,7 @@ class BenchmarkGraphicCard(BenchmarkWithRate):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Test(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class Test(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
||||||
"""The act of testing the physical condition of a device and its
|
"""The act of testing the physical condition of a device and its
|
||||||
components.
|
components.
|
||||||
|
|
||||||
|
@ -860,7 +859,7 @@ class VisualTest(TestMixin, Test):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Rate(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class Rate(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
||||||
"""The act of computing a rate based on different categories"""
|
"""The act of computing a rate based on different categories"""
|
||||||
# todo jn: explain in each comment what the rate considers.
|
# todo jn: explain in each comment what the rate considers.
|
||||||
N = 2
|
N = 2
|
||||||
|
@ -1008,7 +1007,7 @@ class RateComputer(RateMixin, Rate):
|
||||||
"""
|
"""
|
||||||
The act of compute general computer rate
|
The act of compute general computer rate
|
||||||
"""
|
"""
|
||||||
from ereuse_devicehub.resources.event.rate.workbench.v1_0 import rate_algorithm
|
from ereuse_devicehub.resources.action.rate.workbench.v1_0 import rate_algorithm
|
||||||
rate = rate_algorithm.compute(device)
|
rate = rate_algorithm.compute(device)
|
||||||
price = None
|
price = None
|
||||||
with suppress(InvalidRangeForPrice): # We will have exception if range == VERY_LOW
|
with suppress(InvalidRangeForPrice): # We will have exception if range == VERY_LOW
|
||||||
|
@ -1016,14 +1015,14 @@ class RateComputer(RateMixin, Rate):
|
||||||
return rate, price
|
return rate, price
|
||||||
|
|
||||||
|
|
||||||
class Price(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class Price(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
||||||
"""The act of setting a trading price for the device.
|
"""The act of setting a trading price for the device.
|
||||||
|
|
||||||
This does not imply that the device is ultimately traded for that
|
This does not imply that the device is ultimately traded for that
|
||||||
price. Use the :class:`.Sell` for that.
|
price. Use the :class:`.Sell` for that.
|
||||||
|
|
||||||
Devicehub automatically computes a price from ``AggregateRating``
|
Devicehub automatically computes a price from ``AggregateRating``
|
||||||
events. As in a **Rate**, price can have **software** and **version**,
|
actions. As in a **Rate**, price can have **software** and **version**,
|
||||||
and there is an **official** price that is used to automatically
|
and there is an **official** price that is used to automatically
|
||||||
compute the price from an ``AggregateRating``. Only the official price
|
compute the price from an ``AggregateRating``. Only the official price
|
||||||
is computed from an ``AggregateRating``.
|
is computed from an ``AggregateRating``.
|
||||||
|
@ -1174,11 +1173,11 @@ class EreusePrice(Price):
|
||||||
return self.Service(self.device, self.rating.rating_range, role, self.price)
|
return self.Service(self.device, self.rating.rating_range, role, self.price)
|
||||||
|
|
||||||
|
|
||||||
class ToRepair(EventWithMultipleDevices):
|
class ToRepair(ActionWithMultipleDevices):
|
||||||
"""Select a device to be repaired."""
|
"""Select a device to be repaired."""
|
||||||
|
|
||||||
|
|
||||||
class Repair(EventWithMultipleDevices):
|
class Repair(ActionWithMultipleDevices):
|
||||||
"""Repair is the act of performing reparations.
|
"""Repair is the act of performing reparations.
|
||||||
|
|
||||||
If a repair without an error is performed,
|
If a repair without an error is performed,
|
||||||
|
@ -1186,41 +1185,41 @@ class Repair(EventWithMultipleDevices):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class ReadyToUse(EventWithMultipleDevices):
|
class ReadyToUse(ActionWithMultipleDevices):
|
||||||
"""The device is ready to be used.
|
"""The device is ready to be used.
|
||||||
|
|
||||||
This involves greater preparation from the ``Prepare`` event,
|
This involves greater preparation from the ``Prepare`` action,
|
||||||
and users should only use a device after this event is performed.
|
and users should only use a device after this action is performed.
|
||||||
|
|
||||||
Users usually require devices with this event before shipping them
|
Users usually require devices with this action before shipping them
|
||||||
to costumers.
|
to costumers.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class ToPrepare(EventWithMultipleDevices):
|
class ToPrepare(ActionWithMultipleDevices):
|
||||||
"""The device has been selected for preparation.
|
"""The device has been selected for preparation.
|
||||||
|
|
||||||
See Prepare for more info.
|
See Prepare for more info.
|
||||||
|
|
||||||
Usually **ToPrepare** is the next event done after registering the
|
Usually **ToPrepare** is the next action done after registering the
|
||||||
device.
|
device.
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Prepare(EventWithMultipleDevices):
|
class Prepare(ActionWithMultipleDevices):
|
||||||
"""Work has been performed to the device to a defined point of
|
"""Work has been performed to the device to a defined point of
|
||||||
acceptance.
|
acceptance.
|
||||||
|
|
||||||
Users using this event have to agree what is this point
|
Users using this action have to agree what is this point
|
||||||
of acceptance; for some is when the device just works, for others
|
of acceptance; for some is when the device just works, for others
|
||||||
when some testing has been performed.
|
when some testing has been performed.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class Live(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
class Live(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
||||||
"""A keep-alive from a device connected to the Internet with
|
"""A keep-alive from a device connected to the Internet with
|
||||||
information about its state (in the form of a ``Snapshot`` event)
|
information about its state (in the form of a ``Snapshot`` action)
|
||||||
and usage statistics.
|
and usage statistics.
|
||||||
"""
|
"""
|
||||||
ip = Column(IP, nullable=False,
|
ip = Column(IP, nullable=False,
|
||||||
|
@ -1244,7 +1243,7 @@ class Live(JoinedWithOneDeviceMixin, EventWithOneDevice):
|
||||||
# todo testing
|
# todo testing
|
||||||
|
|
||||||
|
|
||||||
class Organize(JoinedTableMixin, EventWithMultipleDevices):
|
class Organize(JoinedTableMixin, ActionWithMultipleDevices):
|
||||||
"""The act of manipulating/administering/supervising/controlling
|
"""The act of manipulating/administering/supervising/controlling
|
||||||
one or more devices.
|
one or more devices.
|
||||||
"""
|
"""
|
||||||
|
@ -1253,7 +1252,7 @@ class Organize(JoinedTableMixin, EventWithMultipleDevices):
|
||||||
class Reserve(Organize):
|
class Reserve(Organize):
|
||||||
"""The act of reserving devices.
|
"""The act of reserving devices.
|
||||||
|
|
||||||
After this event is performed, the user is the **reservee** of the
|
After this action is performed, the user is the **reservee** of the
|
||||||
devices. There can only be one non-cancelled reservation for
|
devices. There can only be one non-cancelled reservation for
|
||||||
a device, and a reservation can only have one reservee.
|
a device, and a reservation can only have one reservee.
|
||||||
"""
|
"""
|
||||||
|
@ -1263,14 +1262,14 @@ class CancelReservation(Organize):
|
||||||
"""The act of cancelling a reservation."""
|
"""The act of cancelling a reservation."""
|
||||||
|
|
||||||
|
|
||||||
class Trade(JoinedTableMixin, EventWithMultipleDevices):
|
class Trade(JoinedTableMixin, ActionWithMultipleDevices):
|
||||||
"""Trade actions log the political exchange of devices between users.
|
"""Trade actions log the political exchange of devices between users.
|
||||||
Every time a trade event is performed, the old user looses its
|
Every time a trade action is performed, the old user looses its
|
||||||
political possession, for example ownership, in favor of another
|
political possession, for example ownership, in favor of another
|
||||||
user.
|
user.
|
||||||
|
|
||||||
|
|
||||||
Performing trade events changes the *Trading* state of the
|
Performing trade actions changes the *Trading* state of the
|
||||||
device —:class:`ereuse_devicehub.resources.device.states.Trading`.
|
device —:class:`ereuse_devicehub.resources.device.states.Trading`.
|
||||||
|
|
||||||
This class and its inheritors
|
This class and its inheritors
|
||||||
|
@ -1297,7 +1296,7 @@ class Trade(JoinedTableMixin, EventWithMultipleDevices):
|
||||||
to_id = Column(UUID(as_uuid=True), ForeignKey(Agent.id), nullable=False)
|
to_id = Column(UUID(as_uuid=True), ForeignKey(Agent.id), nullable=False)
|
||||||
# todo compute the org
|
# todo compute the org
|
||||||
to = relationship(Agent,
|
to = relationship(Agent,
|
||||||
backref=backref('events_to', lazy=True, **_sorted_events),
|
backref=backref('actions_to', lazy=True, **_sorted_actions),
|
||||||
primaryjoin=to_id == Agent.id)
|
primaryjoin=to_id == Agent.id)
|
||||||
to_comment = """
|
to_comment = """
|
||||||
The agent that gets the device due this deal.
|
The agent that gets the device due this deal.
|
||||||
|
@ -1357,7 +1356,7 @@ class DisposeProduct(Trade):
|
||||||
# ``RecyclingCenter``.
|
# ``RecyclingCenter``.
|
||||||
|
|
||||||
|
|
||||||
class Receive(JoinedTableMixin, EventWithMultipleDevices):
|
class Receive(JoinedTableMixin, ActionWithMultipleDevices):
|
||||||
"""The act of physically taking delivery of a device.
|
"""The act of physically taking delivery of a device.
|
||||||
|
|
||||||
The receiver confirms that the devices have arrived, and thus,
|
The receiver confirms that the devices have arrived, and thus,
|
||||||
|
@ -1377,7 +1376,7 @@ class Receive(JoinedTableMixin, EventWithMultipleDevices):
|
||||||
default=ReceiverRole.Intermediary)
|
default=ReceiverRole.Intermediary)
|
||||||
|
|
||||||
|
|
||||||
class Migrate(JoinedTableMixin, EventWithMultipleDevices):
|
class Migrate(JoinedTableMixin, ActionWithMultipleDevices):
|
||||||
"""Moves the devices to a new database/inventory. Devices cannot be
|
"""Moves the devices to a new database/inventory. Devices cannot be
|
||||||
modified anymore at the previous database.
|
modified anymore at the previous database.
|
||||||
"""
|
"""
|
||||||
|
@ -1398,52 +1397,52 @@ class MigrateFrom(Migrate):
|
||||||
# Listeners
|
# Listeners
|
||||||
# Listeners validate values and keep relationships synced
|
# Listeners validate values and keep relationships synced
|
||||||
|
|
||||||
# The following listeners avoids setting values to events that
|
# The following listeners avoids setting values to actions that
|
||||||
# do not make sense. For example, EraseBasic to a graphic card.
|
# do not make sense. For example, EraseBasic to a graphic card.
|
||||||
|
|
||||||
@event.listens_for(TestDataStorage.device, Events.set.__name__, propagate=True)
|
@event.listens_for(TestDataStorage.device, Events.set.__name__, propagate=True)
|
||||||
@event.listens_for(Install.device, Events.set.__name__, propagate=True)
|
@event.listens_for(Install.device, Events.set.__name__, propagate=True)
|
||||||
@event.listens_for(EraseBasic.device, Events.set.__name__, propagate=True)
|
@event.listens_for(EraseBasic.device, Events.set.__name__, propagate=True)
|
||||||
def validate_device_is_data_storage(target: Event, value: DataStorage, old_value, initiator):
|
def validate_device_is_data_storage(target: Action, value: DataStorage, old_value, initiator):
|
||||||
"""Validates that the device for data-storage events is effectively a data storage."""
|
"""Validates that the device for data-storage actions is effectively a data storage."""
|
||||||
if value and not isinstance(value, DataStorage):
|
if value and not isinstance(value, DataStorage):
|
||||||
raise TypeError('{} must be a DataStorage but you passed {}'.format(initiator.impl, value))
|
raise TypeError('{} must be a DataStorage but you passed {}'.format(initiator.impl, value))
|
||||||
|
|
||||||
|
|
||||||
@event.listens_for(BenchmarkRamSysbench.device, Events.set.__name__, propagate=True)
|
@event.listens_for(BenchmarkRamSysbench.device, Events.set.__name__, propagate=True)
|
||||||
def events_not_for_components(target: Event, value: Device, old_value, initiator):
|
def actions_not_for_components(target: Action, value: Device, old_value, initiator):
|
||||||
"""Validates events that cannot be performed to components."""
|
"""Validates actions that cannot be performed to components."""
|
||||||
if isinstance(value, Component):
|
if isinstance(value, Component):
|
||||||
raise TypeError('{!r} cannot be performed to a component ({!r}).'.format(target, value))
|
raise TypeError('{!r} cannot be performed to a component ({!r}).'.format(target, value))
|
||||||
|
|
||||||
|
|
||||||
# The following listeners keep relationships with device <-> components synced with the event
|
# The following listeners keep relationships with device <-> components synced with the action
|
||||||
# So, if you add or remove devices from events these listeners will
|
# So, if you add or remove devices from actions these listeners will
|
||||||
# automatically add/remove the ``components`` and ``parent`` of such events
|
# automatically add/remove the ``components`` and ``parent`` of such actions
|
||||||
# See the tests for examples
|
# See the tests for examples
|
||||||
|
|
||||||
@event.listens_for(EventWithOneDevice.device, Events.set.__name__, propagate=True)
|
@event.listens_for(ActionWithOneDevice.device, Events.set.__name__, propagate=True)
|
||||||
def update_components_event_one(target: EventWithOneDevice, device: Device, __, ___):
|
def update_components_action_one(target: ActionWithOneDevice, device: Device, __, ___):
|
||||||
"""
|
"""
|
||||||
Syncs the :attr:`.Event.components` with the components in
|
Syncs the :attr:`.Action.components` with the components in
|
||||||
:attr:`ereuse_devicehub.resources.device.models.Computer.components`.
|
:attr:`ereuse_devicehub.resources.device.models.Computer.components`.
|
||||||
"""
|
"""
|
||||||
# For Add and Remove, ``components`` have different meanings
|
# For Add and Remove, ``components`` have different meanings
|
||||||
# see Event.components for more info
|
# see Action.components for more info
|
||||||
if not isinstance(target, (Add, Remove)):
|
if not isinstance(target, (Add, Remove)):
|
||||||
target.components.clear()
|
target.components.clear()
|
||||||
if isinstance(device, Computer):
|
if isinstance(device, Computer):
|
||||||
target.components |= device.components
|
target.components |= device.components
|
||||||
|
|
||||||
|
|
||||||
@event.listens_for(EventWithMultipleDevices.devices, Events.init_collection.__name__,
|
@event.listens_for(ActionWithMultipleDevices.devices, Events.init_collection.__name__,
|
||||||
propagate=True)
|
propagate=True)
|
||||||
@event.listens_for(EventWithMultipleDevices.devices, Events.bulk_replace.__name__, propagate=True)
|
@event.listens_for(ActionWithMultipleDevices.devices, Events.bulk_replace.__name__, propagate=True)
|
||||||
@event.listens_for(EventWithMultipleDevices.devices, Events.append.__name__, propagate=True)
|
@event.listens_for(ActionWithMultipleDevices.devices, Events.append.__name__, propagate=True)
|
||||||
def update_components_event_multiple(target: EventWithMultipleDevices,
|
def update_components_action_multiple(target: ActionWithMultipleDevices,
|
||||||
value: Union[Set[Device], Device], _):
|
value: Union[Set[Device], Device], _):
|
||||||
"""
|
"""
|
||||||
Syncs the :attr:`.Event.components` with the components in
|
Syncs the :attr:`.Action.components` with the components in
|
||||||
:attr:`ereuse_devicehub.resources.device.models.Computer.components`.
|
:attr:`ereuse_devicehub.resources.device.models.Computer.components`.
|
||||||
"""
|
"""
|
||||||
target.components.clear()
|
target.components.clear()
|
||||||
|
@ -1453,10 +1452,10 @@ def update_components_event_multiple(target: EventWithMultipleDevices,
|
||||||
target.components |= device.components
|
target.components |= device.components
|
||||||
|
|
||||||
|
|
||||||
@event.listens_for(EventWithMultipleDevices.devices, Events.remove.__name__, propagate=True)
|
@event.listens_for(ActionWithMultipleDevices.devices, Events.remove.__name__, propagate=True)
|
||||||
def remove_components_event_multiple(target: EventWithMultipleDevices, device: Device, __):
|
def remove_components_action_multiple(target: ActionWithMultipleDevices, device: Device, __):
|
||||||
"""
|
"""
|
||||||
Syncs the :attr:`.Event.components` with the components in
|
Syncs the :attr:`.Action.components` with the components in
|
||||||
:attr:`ereuse_devicehub.resources.device.models.Computer.components`.
|
:attr:`ereuse_devicehub.resources.device.models.Computer.components`.
|
||||||
"""
|
"""
|
||||||
target.components.clear()
|
target.components.clear()
|
||||||
|
@ -1471,7 +1470,7 @@ def remove_components_event_multiple(target: EventWithMultipleDevices, device: D
|
||||||
@event.listens_for(Benchmark.device, Events.set.__name__, propagate=True)
|
@event.listens_for(Benchmark.device, Events.set.__name__, propagate=True)
|
||||||
def update_parent(target: Union[EraseBasic, Test, Install], device: Device, _, __):
|
def update_parent(target: Union[EraseBasic, Test, Install], device: Device, _, __):
|
||||||
"""
|
"""
|
||||||
Syncs the :attr:`Event.parent` with the parent of the device.
|
Syncs the :attr:`Action.parent` with the parent of the device.
|
||||||
"""
|
"""
|
||||||
target.parent = None
|
target.parent = None
|
||||||
if isinstance(device, Component):
|
if isinstance(device, Component):
|
|
@ -16,14 +16,14 @@ 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, ErasureStandards, \
|
from ereuse_devicehub.resources.enums import AppearanceRange, BatteryHealth, ErasureStandards, \
|
||||||
FunctionalityRange, PhysicalErasureMethod, PriceSoftware, RatingRange, \
|
FunctionalityRange, PhysicalErasureMethod, PriceSoftware, RatingRange, ReceiverRole, Severity, \
|
||||||
ReceiverRole, Severity, SnapshotExpectedEvents, SnapshotSoftware, 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
|
||||||
|
|
||||||
|
|
||||||
class Event(Thing):
|
class Action(Thing):
|
||||||
id = ... # type: Column
|
id = ... # type: Column
|
||||||
name = ... # type: Column
|
name = ... # type: Column
|
||||||
type = ... # type: Column
|
type = ... # type: Column
|
||||||
|
@ -74,13 +74,13 @@ class Event(Thing):
|
||||||
return '{:%c}'.format(self.end_time or self.created)
|
return '{:%c}'.format(self.end_time or self.created)
|
||||||
|
|
||||||
|
|
||||||
class EventWithOneDevice(Event):
|
class ActionWithOneDevice(Action):
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.device = ... # type: Device
|
self.device = ... # type: Device
|
||||||
|
|
||||||
|
|
||||||
class EventWithMultipleDevices(Event):
|
class ActionWithMultipleDevices(Action):
|
||||||
devices = ... # type: relationship
|
devices = ... # type: relationship
|
||||||
|
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
||||||
|
@ -88,11 +88,11 @@ class EventWithMultipleDevices(Event):
|
||||||
self.devices = ... # type: Set[Device]
|
self.devices = ... # type: Set[Device]
|
||||||
|
|
||||||
|
|
||||||
class Add(EventWithOneDevice):
|
class Add(ActionWithOneDevice):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Remove(EventWithOneDevice):
|
class Remove(ActionWithOneDevice):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ class StepRandom(Step):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class EraseBasic(EventWithOneDevice):
|
class EraseBasic(ActionWithOneDevice):
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.start_time = ... # type: datetime
|
self.start_time = ... # type: datetime
|
||||||
|
@ -153,7 +153,7 @@ class ErasePhysical(EraseBasic):
|
||||||
self.method = ... # type: PhysicalErasureMethod
|
self.method = ... # type: PhysicalErasureMethod
|
||||||
|
|
||||||
|
|
||||||
class Snapshot(EventWithOneDevice):
|
class Snapshot(ActionWithOneDevice):
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.uuid = ... # type: UUID
|
self.uuid = ... # type: UUID
|
||||||
|
@ -161,11 +161,10 @@ class Snapshot(EventWithOneDevice):
|
||||||
self.software = ... # type: SnapshotSoftware
|
self.software = ... # type: SnapshotSoftware
|
||||||
self.elapsed = ... # type: timedelta
|
self.elapsed = ... # type: timedelta
|
||||||
self.device = ... # type: Computer
|
self.device = ... # type: Computer
|
||||||
self.events = ... # type: Set[Event]
|
self.actions = ... # type: Set[Action]
|
||||||
self.expected_events = ... # type: List[SnapshotExpectedEvents]
|
|
||||||
|
|
||||||
|
|
||||||
class Install(EventWithOneDevice):
|
class Install(ActionWithOneDevice):
|
||||||
name = ... # type: Column
|
name = ... # type: Column
|
||||||
elapsed = ... # type: Column
|
elapsed = ... # type: Column
|
||||||
address = ... # type: Column
|
address = ... # type: Column
|
||||||
|
@ -184,7 +183,7 @@ class SnapshotRequest(Model):
|
||||||
self.snapshot = ... # type: Snapshot
|
self.snapshot = ... # type: Snapshot
|
||||||
|
|
||||||
|
|
||||||
class Benchmark(EventWithOneDevice):
|
class Benchmark(ActionWithOneDevice):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -222,7 +221,7 @@ class BenchmarkGraphicCard(BenchmarkWithRate):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Test(EventWithOneDevice):
|
class Test(ActionWithOneDevice):
|
||||||
elapsed = ... # type: Column
|
elapsed = ... # type: Column
|
||||||
|
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
||||||
|
@ -231,6 +230,20 @@ class Test(EventWithOneDevice):
|
||||||
self.success = ... # type: bool
|
self.success = ... # type: bool
|
||||||
|
|
||||||
|
|
||||||
|
class MeasureBattery(Test):
|
||||||
|
size = ... # type: Column
|
||||||
|
voltage = ... # type: Column
|
||||||
|
cycle_count = ... # type: Column
|
||||||
|
health = ... # type: Column
|
||||||
|
|
||||||
|
def __init__(self, **kwargs) -> None:
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
self.size = ... # type: int
|
||||||
|
self.voltage = ... # type: int
|
||||||
|
self.cycle_count = ... # type: Optional[int]
|
||||||
|
self.health = ... # type: Optional[BatteryHealth]
|
||||||
|
|
||||||
|
|
||||||
class TestDataStorage(Test):
|
class TestDataStorage(Test):
|
||||||
length = ... # type: Column
|
length = ... # type: Column
|
||||||
status = ... # type: Column
|
status = ... # type: Column
|
||||||
|
@ -309,12 +322,12 @@ class VisualTest(Test):
|
||||||
|
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.appearance_range = ... # type: AppearanceRange
|
self.appearance_range = ... # type: AppearanceRange
|
||||||
self.functionality_range = ... # type: FunctionalityRange
|
self.functionality_range = ... # type: FunctionalityRange
|
||||||
self.labelling = ... # type: Optional[bool]
|
self.labelling = ... # type: Optional[bool]
|
||||||
|
|
||||||
|
|
||||||
class Rate(EventWithOneDevice):
|
class Rate(ActionWithOneDevice):
|
||||||
N = 2
|
N = 2
|
||||||
_rating = ... # type: Column
|
_rating = ... # type: Column
|
||||||
_appearance = ... # type: Column
|
_appearance = ... # type: Column
|
||||||
|
@ -367,7 +380,7 @@ class RateComputer(Rate):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Price(EventWithOneDevice):
|
class Price(ActionWithOneDevice):
|
||||||
SCALE = ...
|
SCALE = ...
|
||||||
ROUND = ...
|
ROUND = ...
|
||||||
currency = ... # type: Column
|
currency = ... # type: Column
|
||||||
|
@ -413,27 +426,27 @@ class EreusePrice(Price):
|
||||||
self.warranty2 = ... # type: float
|
self.warranty2 = ... # type: float
|
||||||
|
|
||||||
|
|
||||||
class ToRepair(EventWithMultipleDevices):
|
class ToRepair(ActionWithMultipleDevices):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Repair(EventWithMultipleDevices):
|
class Repair(ActionWithMultipleDevices):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ReadyToUse(EventWithMultipleDevices):
|
class ReadyToUse(ActionWithMultipleDevices):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ToPrepare(EventWithMultipleDevices):
|
class ToPrepare(ActionWithMultipleDevices):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Prepare(EventWithMultipleDevices):
|
class Prepare(ActionWithMultipleDevices):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Live(EventWithOneDevice):
|
class Live(ActionWithOneDevice):
|
||||||
ip = ... # type: Column
|
ip = ... # type: Column
|
||||||
subdivision_confidence = ... # type: Column
|
subdivision_confidence = ... # type: Column
|
||||||
subdivision = ... # type: Column
|
subdivision = ... # type: Column
|
||||||
|
@ -456,7 +469,7 @@ class Live(EventWithOneDevice):
|
||||||
self.country = ... # type: Country
|
self.country = ... # type: Country
|
||||||
|
|
||||||
|
|
||||||
class Organize(EventWithMultipleDevices):
|
class Organize(ActionWithMultipleDevices):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -464,7 +477,7 @@ class Reserve(Organize):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Trade(EventWithMultipleDevices):
|
class Trade(ActionWithMultipleDevices):
|
||||||
shipping_date = ... # type: Column
|
shipping_date = ... # type: Column
|
||||||
invoice_number = ... # type: Column
|
invoice_number = ... # type: Column
|
||||||
price = ... # type: relationship
|
price = ... # type: relationship
|
||||||
|
@ -504,7 +517,7 @@ class DisposeProduct(Trade):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Receive(EventWithMultipleDevices):
|
class Receive(ActionWithMultipleDevices):
|
||||||
role = ... # type:Column
|
role = ... # type:Column
|
||||||
|
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
||||||
|
@ -512,7 +525,7 @@ class Receive(EventWithMultipleDevices):
|
||||||
self.role = ... # type: ReceiverRole
|
self.role = ... # type: ReceiverRole
|
||||||
|
|
||||||
|
|
||||||
class Migrate(EventWithMultipleDevices):
|
class Migrate(ActionWithMultipleDevices):
|
||||||
other = ... # type: Column
|
other = ... # type: Column
|
||||||
|
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
|
@ -2,18 +2,18 @@ from enum import Enum, unique
|
||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
from typing import Dict, Iterable, Tuple
|
from typing import Dict, Iterable, Tuple
|
||||||
|
|
||||||
|
from ereuse_devicehub.resources.action.models import BenchmarkDataStorage, BenchmarkProcessor, \
|
||||||
|
BenchmarkProcessorSysbench, RateComputer, VisualTest
|
||||||
|
from ereuse_devicehub.resources.action.rate.rate import BaseRate
|
||||||
from ereuse_devicehub.resources.device.models import Computer, DataStorage, Processor, \
|
from ereuse_devicehub.resources.device.models import Computer, DataStorage, Processor, \
|
||||||
RamModule
|
RamModule
|
||||||
from ereuse_devicehub.resources.event.models import BenchmarkDataStorage, BenchmarkProcessor, \
|
|
||||||
BenchmarkProcessorSysbench, RateComputer, VisualTest
|
|
||||||
from ereuse_devicehub.resources.event.rate.rate import BaseRate
|
|
||||||
|
|
||||||
|
|
||||||
class RateAlgorithm(BaseRate):
|
class RateAlgorithm(BaseRate):
|
||||||
"""The algorithm that generates the Rate v1.0.
|
"""The algorithm that generates the Rate v1.0.
|
||||||
|
|
||||||
Do not call directly this class, but use
|
Do not call directly this class, but use
|
||||||
:meth:`ereuse_devicehub.resources.event.models.RateComputer.compute`,
|
:meth:`ereuse_devicehub.resources.action.models.RateComputer.compute`,
|
||||||
which then calls this.
|
which then calls this.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -44,13 +44,13 @@ class RateAlgorithm(BaseRate):
|
||||||
|
|
||||||
def compute(self, device: Computer) -> RateComputer:
|
def compute(self, device: Computer) -> RateComputer:
|
||||||
"""Generates a new
|
"""Generates a new
|
||||||
:class:`ereuse_devicehub.resources.event.models.RateComputer`
|
:class:`ereuse_devicehub.resources.action.models.RateComputer`
|
||||||
for the passed-in device.
|
for the passed-in device.
|
||||||
"""
|
"""
|
||||||
assert isinstance(device, Computer), 'Can only rate computers'
|
assert isinstance(device, Computer), 'Can only rate computers'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
visual_test = device.last_event_of(VisualTest)
|
visual_test = device.last_action_of(VisualTest)
|
||||||
except LookupError:
|
except LookupError:
|
||||||
raise CannotRate('You need a visual test.')
|
raise CannotRate('You need a visual test.')
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ class RateAlgorithm(BaseRate):
|
||||||
rate.appearance = self.Appearance[visual_test.appearance_range.name].value
|
rate.appearance = self.Appearance[visual_test.appearance_range.name].value
|
||||||
rate.functionality = self.Functionality[visual_test.functionality_range.name].value
|
rate.functionality = self.Functionality[visual_test.functionality_range.name].value
|
||||||
rate.rating = rate_components + rate.functionality + rate.appearance
|
rate.rating = rate_components + rate.functionality + rate.appearance
|
||||||
device.events_one.add(rate)
|
device.actions_one.add(rate)
|
||||||
assert 0 <= rate.rating <= 4.7, 'Rate ranges from 0 to 4.7'
|
assert 0 <= rate.rating <= 4.7, 'Rate ranges from 0 to 4.7'
|
||||||
return rate
|
return rate
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ class ProcessorRate(BaseRate):
|
||||||
cores = processor.cores or self.DEFAULT_CORES
|
cores = processor.cores or self.DEFAULT_CORES
|
||||||
speed = processor.speed or self.DEFAULT_SPEED
|
speed = processor.speed or self.DEFAULT_SPEED
|
||||||
benchmark_cpu = next(
|
benchmark_cpu = next(
|
||||||
e for e in reversed(processor.events)
|
e for e in reversed(processor.actions)
|
||||||
if isinstance(e, BenchmarkProcessor) and not isinstance(e, BenchmarkProcessorSysbench)
|
if isinstance(e, BenchmarkProcessor) and not isinstance(e, BenchmarkProcessorSysbench)
|
||||||
)
|
)
|
||||||
benchmark_cpu = benchmark_cpu.rate or self.DEFAULT_SCORE
|
benchmark_cpu = benchmark_cpu.rate or self.DEFAULT_SCORE
|
||||||
|
@ -203,7 +203,7 @@ class DataStorageRate(BaseRate):
|
||||||
# STEP: Filtering, data cleaning and merging of component parts
|
# STEP: Filtering, data cleaning and merging of component parts
|
||||||
for storage in data_storage_devices:
|
for storage in data_storage_devices:
|
||||||
# We assume all hdd snapshots have BenchmarkDataStorage
|
# We assume all hdd snapshots have BenchmarkDataStorage
|
||||||
benchmark = storage.last_event_of(BenchmarkDataStorage)
|
benchmark = storage.last_action_of(BenchmarkDataStorage)
|
||||||
# prevent NULL values
|
# prevent NULL values
|
||||||
_size = storage.size or 0
|
_size = storage.size or 0
|
||||||
size += _size
|
size += _size
|
|
@ -1,6 +1,6 @@
|
||||||
from flask import current_app as app
|
from flask import current_app as app
|
||||||
from marshmallow import Schema as MarshmallowSchema, ValidationError, fields as f, validates_schema
|
from marshmallow import Schema as MarshmallowSchema, ValidationError, fields as f, validates_schema
|
||||||
from marshmallow.fields import Boolean, DateTime, Decimal, Float, Integer, List, Nested, String, \
|
from marshmallow.fields import Boolean, DateTime, Decimal, Float, Integer, Nested, String, \
|
||||||
TimeDelta, UUID
|
TimeDelta, UUID
|
||||||
from marshmallow.validate import Length, OneOf, Range
|
from marshmallow.validate import Length, OneOf, Range
|
||||||
from sqlalchemy.util import OrderedSet
|
from sqlalchemy.util import OrderedSet
|
||||||
|
@ -10,55 +10,55 @@ from teal.resource import Schema
|
||||||
|
|
||||||
from ereuse_devicehub.marshmallow import NestedOn
|
from ereuse_devicehub.marshmallow import NestedOn
|
||||||
from ereuse_devicehub.resources import enums
|
from ereuse_devicehub.resources import enums
|
||||||
|
from ereuse_devicehub.resources.action import models as m
|
||||||
from ereuse_devicehub.resources.agent import schemas as s_agent
|
from ereuse_devicehub.resources.agent import schemas as s_agent
|
||||||
from ereuse_devicehub.resources.device import schemas as s_device
|
from ereuse_devicehub.resources.device import schemas as s_device
|
||||||
from ereuse_devicehub.resources.enums import AppearanceRange, BiosAccessRange, FunctionalityRange, \
|
from ereuse_devicehub.resources.enums import AppearanceRange, BiosAccessRange, FunctionalityRange, \
|
||||||
PhysicalErasureMethod, R_POSITIVE, RatingRange, ReceiverRole, \
|
PhysicalErasureMethod, R_POSITIVE, RatingRange, ReceiverRole, \
|
||||||
Severity, SnapshotExpectedEvents, SnapshotSoftware, TestDataStorageLength
|
Severity, SnapshotSoftware, TestDataStorageLength
|
||||||
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
|
||||||
from ereuse_devicehub.resources.schemas import Thing
|
from ereuse_devicehub.resources.schemas import Thing
|
||||||
from ereuse_devicehub.resources.user import schemas as s_user
|
from ereuse_devicehub.resources.user import schemas as s_user
|
||||||
|
|
||||||
|
|
||||||
class Event(Thing):
|
class Action(Thing):
|
||||||
__doc__ = m.Event.__doc__
|
__doc__ = m.Action.__doc__
|
||||||
id = UUID(dump_only=True)
|
id = UUID(dump_only=True)
|
||||||
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.Action.name.comment)
|
||||||
closed = Boolean(missing=True, description=m.Event.closed.comment)
|
closed = Boolean(missing=True, description=m.Action.closed.comment)
|
||||||
severity = EnumField(Severity, description=m.Event.severity.comment)
|
severity = EnumField(Severity, description=m.Action.severity.comment)
|
||||||
description = SanitizedStr(default='', description=m.Event.description.comment)
|
description = SanitizedStr(default='', description=m.Action.description.comment)
|
||||||
start_time = DateTime(data_key='startTime', description=m.Event.start_time.comment)
|
start_time = DateTime(data_key='startTime', description=m.Action.start_time.comment)
|
||||||
end_time = DateTime(data_key='endTime', description=m.Event.end_time.comment)
|
end_time = DateTime(data_key='endTime', description=m.Action.end_time.comment)
|
||||||
snapshot = NestedOn('Snapshot', dump_only=True)
|
snapshot = NestedOn('Snapshot', dump_only=True)
|
||||||
agent = NestedOn(s_agent.Agent, description=m.Event.agent_id.comment)
|
agent = NestedOn(s_agent.Agent, description=m.Action.agent_id.comment)
|
||||||
author = NestedOn(s_user.User, dump_only=True, exclude=('token',))
|
author = NestedOn(s_user.User, dump_only=True, exclude=('token',))
|
||||||
components = NestedOn(s_device.Component, dump_only=True, many=True)
|
components = NestedOn(s_device.Component, dump_only=True, many=True)
|
||||||
parent = NestedOn(s_device.Computer, dump_only=True, description=m.Event.parent_id.comment)
|
parent = NestedOn(s_device.Computer, dump_only=True, description=m.Action.parent_id.comment)
|
||||||
url = URL(dump_only=True, description=m.Event.url.__doc__)
|
url = URL(dump_only=True, description=m.Action.url.__doc__)
|
||||||
|
|
||||||
|
|
||||||
class EventWithOneDevice(Event):
|
class ActionWithOneDevice(Action):
|
||||||
__doc__ = m.EventWithOneDevice.__doc__
|
__doc__ = m.ActionWithOneDevice.__doc__
|
||||||
device = NestedOn(s_device.Device, only_query='id')
|
device = NestedOn(s_device.Device, only_query='id')
|
||||||
|
|
||||||
|
|
||||||
class EventWithMultipleDevices(Event):
|
class ActionWithMultipleDevices(Action):
|
||||||
__doc__ = m.EventWithMultipleDevices.__doc__
|
__doc__ = m.ActionWithMultipleDevices.__doc__
|
||||||
devices = NestedOn(s_device.Device, many=True, only_query='id', collection_class=OrderedSet)
|
devices = NestedOn(s_device.Device, many=True, only_query='id', collection_class=OrderedSet)
|
||||||
|
|
||||||
|
|
||||||
class Add(EventWithOneDevice):
|
class Add(ActionWithOneDevice):
|
||||||
__doc__ = m.Add.__doc__
|
__doc__ = m.Add.__doc__
|
||||||
|
|
||||||
|
|
||||||
class Remove(EventWithOneDevice):
|
class Remove(ActionWithOneDevice):
|
||||||
__doc__ = m.Remove.__doc__
|
__doc__ = m.Remove.__doc__
|
||||||
|
|
||||||
|
|
||||||
class Allocate(EventWithMultipleDevices):
|
class Allocate(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Allocate.__doc__
|
__doc__ = m.Allocate.__doc__
|
||||||
to = NestedOn(s_user.User,
|
to = NestedOn(s_user.User,
|
||||||
description='The user the devices are allocated to.')
|
description='The user the devices are allocated to.')
|
||||||
|
@ -67,7 +67,7 @@ class Allocate(EventWithMultipleDevices):
|
||||||
'user was when this happened.')
|
'user was when this happened.')
|
||||||
|
|
||||||
|
|
||||||
class Deallocate(EventWithMultipleDevices):
|
class Deallocate(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Deallocate.__doc__
|
__doc__ = m.Deallocate.__doc__
|
||||||
from_rel = Nested(s_user.User,
|
from_rel = Nested(s_user.User,
|
||||||
data_key='from',
|
data_key='from',
|
||||||
|
@ -77,7 +77,7 @@ class Deallocate(EventWithMultipleDevices):
|
||||||
'user was when this happened.')
|
'user was when this happened.')
|
||||||
|
|
||||||
|
|
||||||
class EraseBasic(EventWithOneDevice):
|
class EraseBasic(ActionWithOneDevice):
|
||||||
__doc__ = m.EraseBasic.__doc__
|
__doc__ = m.EraseBasic.__doc__
|
||||||
steps = NestedOn('Step', many=True)
|
steps = NestedOn('Step', many=True)
|
||||||
standards = f.List(EnumField(enums.ErasureStandards), dump_only=True)
|
standards = f.List(EnumField(enums.ErasureStandards), dump_only=True)
|
||||||
|
@ -98,7 +98,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')
|
||||||
severity = EnumField(Severity, description=m.Event.severity.comment)
|
severity = EnumField(Severity, description=m.Action.severity.comment)
|
||||||
|
|
||||||
|
|
||||||
class StepZero(Step):
|
class StepZero(Step):
|
||||||
|
@ -109,7 +109,7 @@ class StepRandom(Step):
|
||||||
__doc__ = m.StepRandom.__doc__
|
__doc__ = m.StepRandom.__doc__
|
||||||
|
|
||||||
|
|
||||||
class Benchmark(EventWithOneDevice):
|
class Benchmark(ActionWithOneDevice):
|
||||||
__doc__ = m.Benchmark.__doc__
|
__doc__ = m.Benchmark.__doc__
|
||||||
elapsed = TimeDelta(precision=TimeDelta.SECONDS, required=True)
|
elapsed = TimeDelta(precision=TimeDelta.SECONDS, required=True)
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ class BenchmarkGraphicCard(BenchmarkWithRate):
|
||||||
__doc__ = m.BenchmarkGraphicCard.__doc__
|
__doc__ = m.BenchmarkGraphicCard.__doc__
|
||||||
|
|
||||||
|
|
||||||
class Test(EventWithOneDevice):
|
class Test(ActionWithOneDevice):
|
||||||
__doc__ = m.Test.__doc__
|
__doc__ = m.Test.__doc__
|
||||||
|
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ class VisualTest(Test):
|
||||||
labelling = Boolean()
|
labelling = Boolean()
|
||||||
|
|
||||||
|
|
||||||
class Rate(EventWithOneDevice):
|
class Rate(ActionWithOneDevice):
|
||||||
__doc__ = m.Rate.__doc__
|
__doc__ = m.Rate.__doc__
|
||||||
rating = Integer(validate=Range(*R_POSITIVE),
|
rating = Integer(validate=Range(*R_POSITIVE),
|
||||||
dump_only=True,
|
dump_only=True,
|
||||||
|
@ -243,7 +243,7 @@ class RateComputer(Rate):
|
||||||
graphic_card_range = EnumField(RatingRange, dump_only=True, data_key='graphicCardRange')
|
graphic_card_range = EnumField(RatingRange, dump_only=True, data_key='graphicCardRange')
|
||||||
|
|
||||||
|
|
||||||
class Price(EventWithOneDevice):
|
class Price(ActionWithOneDevice):
|
||||||
__doc__ = m.Price.__doc__
|
__doc__ = m.Price.__doc__
|
||||||
currency = EnumField(Currency, required=True, description=m.Price.currency.comment)
|
currency = EnumField(Currency, required=True, description=m.Price.currency.comment)
|
||||||
price = Decimal(places=m.Price.SCALE,
|
price = Decimal(places=m.Price.SCALE,
|
||||||
|
@ -271,7 +271,7 @@ class EreusePrice(Price):
|
||||||
platform = Nested(Service)
|
platform = Nested(Service)
|
||||||
|
|
||||||
|
|
||||||
class Install(EventWithOneDevice):
|
class Install(ActionWithOneDevice):
|
||||||
__doc__ = m.Install.__doc__
|
__doc__ = m.Install.__doc__
|
||||||
name = SanitizedStr(validate=Length(min=4, max=STR_BIG_SIZE),
|
name = SanitizedStr(validate=Length(min=4, max=STR_BIG_SIZE),
|
||||||
required=True,
|
required=True,
|
||||||
|
@ -280,11 +280,11 @@ class Install(EventWithOneDevice):
|
||||||
address = Integer(validate=OneOf({8, 16, 32, 64, 128, 256}))
|
address = Integer(validate=OneOf({8, 16, 32, 64, 128, 256}))
|
||||||
|
|
||||||
|
|
||||||
class Snapshot(EventWithOneDevice):
|
class Snapshot(ActionWithOneDevice):
|
||||||
__doc__ = m.Snapshot.__doc__
|
__doc__ = m.Snapshot.__doc__
|
||||||
"""
|
"""
|
||||||
The Snapshot updates the state of the device with information about
|
The Snapshot updates the state of the device with information about
|
||||||
its components and events performed at them.
|
its components and actions performed at them.
|
||||||
|
|
||||||
See docs for more info.
|
See docs for more info.
|
||||||
"""
|
"""
|
||||||
|
@ -293,13 +293,7 @@ class Snapshot(EventWithOneDevice):
|
||||||
required=True,
|
required=True,
|
||||||
description='The software that generated this Snapshot.')
|
description='The software that generated this Snapshot.')
|
||||||
version = Version(required=True, description='The version of the software.')
|
version = Version(required=True, description='The version of the software.')
|
||||||
events = NestedOn(Event, many=True, dump_only=True)
|
actions = NestedOn(Action, many=True, dump_only=True)
|
||||||
expected_events = List(EnumField(SnapshotExpectedEvents),
|
|
||||||
data_key='expectedEvents',
|
|
||||||
description='Keep open this Snapshot until the following events'
|
|
||||||
'are performed. Setting this value will activate'
|
|
||||||
'the async Snapshot.')
|
|
||||||
|
|
||||||
elapsed = TimeDelta(precision=TimeDelta.SECONDS)
|
elapsed = TimeDelta(precision=TimeDelta.SECONDS)
|
||||||
components = NestedOn(s_device.Component,
|
components = NestedOn(s_device.Component,
|
||||||
many=True,
|
many=True,
|
||||||
|
@ -345,27 +339,27 @@ class Snapshot(EventWithOneDevice):
|
||||||
field_names=['elapsed'])
|
field_names=['elapsed'])
|
||||||
|
|
||||||
|
|
||||||
class ToRepair(EventWithMultipleDevices):
|
class ToRepair(ActionWithMultipleDevices):
|
||||||
__doc__ = m.ToRepair.__doc__
|
__doc__ = m.ToRepair.__doc__
|
||||||
|
|
||||||
|
|
||||||
class Repair(EventWithMultipleDevices):
|
class Repair(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Repair.__doc__
|
__doc__ = m.Repair.__doc__
|
||||||
|
|
||||||
|
|
||||||
class ReadyToUse(EventWithMultipleDevices):
|
class ReadyToUse(ActionWithMultipleDevices):
|
||||||
__doc__ = m.ReadyToUse.__doc__
|
__doc__ = m.ReadyToUse.__doc__
|
||||||
|
|
||||||
|
|
||||||
class ToPrepare(EventWithMultipleDevices):
|
class ToPrepare(ActionWithMultipleDevices):
|
||||||
__doc__ = m.ToPrepare.__doc__
|
__doc__ = m.ToPrepare.__doc__
|
||||||
|
|
||||||
|
|
||||||
class Prepare(EventWithMultipleDevices):
|
class Prepare(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Prepare.__doc__
|
__doc__ = m.Prepare.__doc__
|
||||||
|
|
||||||
|
|
||||||
class Live(EventWithOneDevice):
|
class Live(ActionWithOneDevice):
|
||||||
__doc__ = m.Live.__doc__
|
__doc__ = m.Live.__doc__
|
||||||
ip = IP(dump_only=True)
|
ip = IP(dump_only=True)
|
||||||
subdivision_confidence = Integer(dump_only=True, data_key='subdivisionConfidence')
|
subdivision_confidence = Integer(dump_only=True, data_key='subdivisionConfidence')
|
||||||
|
@ -378,7 +372,7 @@ class Live(EventWithOneDevice):
|
||||||
organization_type = SanitizedStr(lower=True, dump_only=True, data_key='organizationType')
|
organization_type = SanitizedStr(lower=True, dump_only=True, data_key='organizationType')
|
||||||
|
|
||||||
|
|
||||||
class Organize(EventWithMultipleDevices):
|
class Organize(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Organize.__doc__
|
__doc__ = m.Organize.__doc__
|
||||||
|
|
||||||
|
|
||||||
|
@ -390,7 +384,7 @@ class CancelReservation(Organize):
|
||||||
__doc__ = m.CancelReservation.__doc__
|
__doc__ = m.CancelReservation.__doc__
|
||||||
|
|
||||||
|
|
||||||
class Trade(EventWithMultipleDevices):
|
class Trade(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Trade.__doc__
|
__doc__ = m.Trade.__doc__
|
||||||
shipping_date = DateTime(data_key='shippingDate')
|
shipping_date = DateTime(data_key='shippingDate')
|
||||||
invoice_number = SanitizedStr(validate=Length(max=STR_SIZE), data_key='invoiceNumber')
|
invoice_number = SanitizedStr(validate=Length(max=STR_SIZE), data_key='invoiceNumber')
|
||||||
|
@ -423,12 +417,12 @@ class DisposeProduct(Trade):
|
||||||
__doc__ = m.DisposeProduct.__doc__
|
__doc__ = m.DisposeProduct.__doc__
|
||||||
|
|
||||||
|
|
||||||
class Receive(EventWithMultipleDevices):
|
class Receive(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Receive.__doc__
|
__doc__ = m.Receive.__doc__
|
||||||
role = EnumField(ReceiverRole)
|
role = EnumField(ReceiverRole)
|
||||||
|
|
||||||
|
|
||||||
class Migrate(EventWithMultipleDevices):
|
class Migrate(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Migrate.__doc__
|
__doc__ = m.Migrate.__doc__
|
||||||
other = URL()
|
other = URL()
|
||||||
|
|
|
@ -8,39 +8,39 @@ from teal.marshmallow import ValidationError
|
||||||
from teal.resource import View
|
from teal.resource import View
|
||||||
|
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
|
from ereuse_devicehub.resources.action.models import Action, RateComputer, Snapshot
|
||||||
|
from ereuse_devicehub.resources.action.rate.workbench.v1_0 import CannotRate
|
||||||
from ereuse_devicehub.resources.device.models import Component, Computer
|
from ereuse_devicehub.resources.device.models import Component, Computer
|
||||||
from ereuse_devicehub.resources.enums import SnapshotSoftware
|
from ereuse_devicehub.resources.enums import SnapshotSoftware
|
||||||
from ereuse_devicehub.resources.event.models import Event, RateComputer, Snapshot
|
|
||||||
from ereuse_devicehub.resources.event.rate.workbench.v1_0 import CannotRate
|
|
||||||
|
|
||||||
SUPPORTED_WORKBENCH = StrictVersion('11.0')
|
SUPPORTED_WORKBENCH = StrictVersion('11.0')
|
||||||
|
|
||||||
|
|
||||||
class EventView(View):
|
class ActionView(View):
|
||||||
def post(self):
|
def post(self):
|
||||||
"""Posts an event."""
|
"""Posts an action."""
|
||||||
json = request.get_json(validate=False)
|
json = request.get_json(validate=False)
|
||||||
if not json or 'type' not in json:
|
if not json or 'type' not in json:
|
||||||
raise ValidationError('Resource needs a type.')
|
raise ValidationError('Resource needs a type.')
|
||||||
# todo there should be a way to better get subclassess resource
|
# todo there should be a way to better get subclassess resource
|
||||||
# defs
|
# defs
|
||||||
resource_def = app.resources[json['type']]
|
resource_def = app.resources[json['type']]
|
||||||
e = resource_def.schema.load(json)
|
a = resource_def.schema.load(json)
|
||||||
if json['type'] == Snapshot.t:
|
if json['type'] == Snapshot.t:
|
||||||
return self.snapshot(e, resource_def)
|
return self.snapshot(a, resource_def)
|
||||||
Model = db.Model._decl_class_registry.data[json['type']]()
|
Model = db.Model._decl_class_registry.data[json['type']]()
|
||||||
event = Model(**e)
|
action = Model(**a)
|
||||||
db.session.add(event)
|
db.session.add(action)
|
||||||
db.session().final_flush()
|
db.session().final_flush()
|
||||||
ret = self.schema.jsonify(event)
|
ret = self.schema.jsonify(action)
|
||||||
ret.status_code = 201
|
ret.status_code = 201
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def one(self, id: UUID):
|
def one(self, id: UUID):
|
||||||
"""Gets one event."""
|
"""Gets one action."""
|
||||||
event = Event.query.filter_by(id=id).one()
|
action = Action.query.filter_by(id=id).one()
|
||||||
return self.schema.jsonify(event)
|
return self.schema.jsonify(action)
|
||||||
|
|
||||||
def snapshot(self, snapshot_json: dict, resource_def):
|
def snapshot(self, snapshot_json: dict, resource_def):
|
||||||
"""
|
"""
|
||||||
|
@ -57,30 +57,30 @@ class EventView(View):
|
||||||
components = snapshot_json.pop('components') # type: List[Component]
|
components = snapshot_json.pop('components') # type: List[Component]
|
||||||
snapshot = Snapshot(**snapshot_json)
|
snapshot = Snapshot(**snapshot_json)
|
||||||
|
|
||||||
# Remove new events from devices so they don't interfere with sync
|
# Remove new actions from devices so they don't interfere with sync
|
||||||
events_device = set(e for e in device.events_one)
|
actions_device = set(e for e in device.actions_one)
|
||||||
device.events_one.clear()
|
device.actions_one.clear()
|
||||||
if components:
|
if components:
|
||||||
events_components = tuple(set(e for e in c.events_one) for c in components)
|
actions_components = tuple(set(e for e in c.actions_one) for c in components)
|
||||||
for component in components:
|
for component in components:
|
||||||
component.events_one.clear()
|
component.actions_one.clear()
|
||||||
|
|
||||||
assert not device.events_one
|
assert not device.actions_one
|
||||||
assert all(not c.events_one for c in components) if components else True
|
assert all(not c.actions_one for c in components) if components else True
|
||||||
db_device, remove_events = resource_def.sync.run(device, components)
|
db_device, remove_actions = resource_def.sync.run(device, components)
|
||||||
del device # Do not use device anymore
|
del device # Do not use device anymore
|
||||||
snapshot.device = db_device
|
snapshot.device = db_device
|
||||||
snapshot.events |= remove_events | events_device # Set events to snapshot
|
snapshot.actions |= remove_actions | actions_device # Set actions to snapshot
|
||||||
# commit will change the order of the components by what
|
# commit will change the order of the components by what
|
||||||
# the DB wants. Let's get a copy of the list so we preserve order
|
# the DB wants. Let's get a copy of the list so we preserve order
|
||||||
ordered_components = OrderedSet(x for x in snapshot.components)
|
ordered_components = OrderedSet(x for x in snapshot.components)
|
||||||
|
|
||||||
# Add the new events to the db-existing devices and components
|
# Add the new actions to the db-existing devices and components
|
||||||
db_device.events_one |= events_device
|
db_device.actions_one |= actions_device
|
||||||
if components:
|
if components:
|
||||||
for component, events in zip(ordered_components, events_components):
|
for component, actions in zip(ordered_components, actions_components):
|
||||||
component.events_one |= events
|
component.actions_one |= actions
|
||||||
snapshot.events |= events
|
snapshot.actions |= actions
|
||||||
|
|
||||||
# Compute ratings
|
# Compute ratings
|
||||||
if snapshot.software == SnapshotSoftware.Workbench:
|
if snapshot.software == SnapshotSoftware.Workbench:
|
||||||
|
@ -89,9 +89,9 @@ class EventView(View):
|
||||||
except CannotRate:
|
except CannotRate:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
snapshot.events.add(rate_computer)
|
snapshot.actions.add(rate_computer)
|
||||||
if price:
|
if price:
|
||||||
snapshot.events.add(price)
|
snapshot.actions.add(price)
|
||||||
|
|
||||||
db.session.add(snapshot)
|
db.session.add(snapshot)
|
||||||
db.session().final_flush()
|
db.session().final_flush()
|
|
@ -67,9 +67,9 @@ class Agent(Thing):
|
||||||
return args
|
return args
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def events(self) -> list:
|
def actions(self) -> list:
|
||||||
# todo test
|
# todo test
|
||||||
return sorted(chain(self.events_agent, self.events_to), key=attrgetter('created'))
|
return sorted(chain(self.actions_agent, self.actions_to), key=attrgetter('created'))
|
||||||
|
|
||||||
@validates('name')
|
@validates('name')
|
||||||
def does_not_contain_slash(self, _, value: str):
|
def does_not_contain_slash(self, _, value: str):
|
||||||
|
|
|
@ -6,7 +6,7 @@ from sqlalchemy.orm import relationship
|
||||||
from sqlalchemy_utils import PhoneNumber
|
from sqlalchemy_utils import PhoneNumber
|
||||||
from teal import enums
|
from teal import enums
|
||||||
|
|
||||||
from ereuse_devicehub.resources.event.models import Event, Trade
|
from ereuse_devicehub.resources.action.models import Action, Trade
|
||||||
from ereuse_devicehub.resources.models import Thing
|
from ereuse_devicehub.resources.models import Thing
|
||||||
from ereuse_devicehub.resources.tag.model import Tag
|
from ereuse_devicehub.resources.tag.model import Tag
|
||||||
from ereuse_devicehub.resources.user import User
|
from ereuse_devicehub.resources.user import User
|
||||||
|
@ -28,11 +28,11 @@ class Agent(Thing):
|
||||||
self.country = ... # type: enums.Country
|
self.country = ... # type: enums.Country
|
||||||
self.telephone = ... # type: PhoneNumber
|
self.telephone = ... # type: PhoneNumber
|
||||||
self.email = ... # type: str
|
self.email = ... # type: str
|
||||||
self.events_agent = ... # type: Set[Event] # Ordered
|
self.actions_agent = ... # type: Set[Action] # Ordered
|
||||||
self.events_to = ... # type: Set[Trade] # Ordered
|
self.actions_to = ... # type: Set[Trade] # Ordered
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def events(self) -> List[Event]:
|
def actions(self) -> List[Action]:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -138,35 +138,35 @@ class Device(Thing):
|
||||||
self.hid = Naming.hid(self.type, self.manufacturer, self.model, self.serial_number)
|
self.hid = Naming.hid(self.type, self.manufacturer, self.model, self.serial_number)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def events(self) -> list:
|
def actions(self) -> list:
|
||||||
"""
|
"""
|
||||||
All the events where the device participated, including:
|
All the actions where the device participated, including:
|
||||||
|
|
||||||
1. Events performed directly to the device.
|
1. Actions performed directly to the device.
|
||||||
2. Events performed to a component.
|
2. Actions performed to a component.
|
||||||
3. Events performed to a parent device.
|
3. Actions performed to a parent device.
|
||||||
|
|
||||||
Events are returned by descending ``created`` time.
|
Actions are returned by descending ``created`` time.
|
||||||
"""
|
"""
|
||||||
return sorted(chain(self.events_multiple, self.events_one))
|
return sorted(chain(self.actions_multiple, self.actions_one))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def problems(self):
|
def problems(self):
|
||||||
"""Current events with severity.Warning or higher.
|
"""Current actions with severity.Warning or higher.
|
||||||
|
|
||||||
There can be up to 3 events: current Snapshot,
|
There can be up to 3 actions: current Snapshot,
|
||||||
current Physical event, current Trading event.
|
current Physical action, current Trading action.
|
||||||
"""
|
"""
|
||||||
from ereuse_devicehub.resources.device import states
|
from ereuse_devicehub.resources.device import states
|
||||||
from ereuse_devicehub.resources.event.models import Snapshot
|
from ereuse_devicehub.resources.action.models import Snapshot
|
||||||
events = set()
|
actions = set()
|
||||||
with suppress(LookupError, ValueError):
|
with suppress(LookupError, ValueError):
|
||||||
events.add(self.last_event_of(Snapshot))
|
actions.add(self.last_action_of(Snapshot))
|
||||||
with suppress(LookupError, ValueError):
|
with suppress(LookupError, ValueError):
|
||||||
events.add(self.last_event_of(*states.Physical.events()))
|
actions.add(self.last_action_of(*states.Physical.actions()))
|
||||||
with suppress(LookupError, ValueError):
|
with suppress(LookupError, ValueError):
|
||||||
events.add(self.last_event_of(*states.Trading.events()))
|
actions.add(self.last_action_of(*states.Trading.actions()))
|
||||||
return self._warning_events(events)
|
return self._warning_actions(actions)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def physical_properties(self) -> Dict[str, object or None]:
|
def physical_properties(self) -> Dict[str, object or None]:
|
||||||
|
@ -194,33 +194,33 @@ class Device(Thing):
|
||||||
def rate(self):
|
def rate(self):
|
||||||
"""The last Rate of the device."""
|
"""The last Rate of the device."""
|
||||||
with suppress(LookupError, ValueError):
|
with suppress(LookupError, ValueError):
|
||||||
from ereuse_devicehub.resources.event.models import Rate
|
from ereuse_devicehub.resources.action.models import Rate
|
||||||
return self.last_event_of(Rate)
|
return self.last_action_of(Rate)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def price(self):
|
def price(self):
|
||||||
"""The actual Price of the device, or None if no price has
|
"""The actual Price of the device, or None if no price has
|
||||||
ever been set."""
|
ever been set."""
|
||||||
with suppress(LookupError, ValueError):
|
with suppress(LookupError, ValueError):
|
||||||
from ereuse_devicehub.resources.event.models import Price
|
from ereuse_devicehub.resources.action.models import Price
|
||||||
return self.last_event_of(Price)
|
return self.last_action_of(Price)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def trading(self):
|
def trading(self):
|
||||||
"""The actual trading state, or None if no Trade event has
|
"""The actual trading state, or None if no Trade action has
|
||||||
ever been performed to this device."""
|
ever been performed to this device."""
|
||||||
from ereuse_devicehub.resources.device import states
|
from ereuse_devicehub.resources.device import states
|
||||||
with suppress(LookupError, ValueError):
|
with suppress(LookupError, ValueError):
|
||||||
event = self.last_event_of(*states.Trading.events())
|
action = self.last_action_of(*states.Trading.actions())
|
||||||
return states.Trading(event.__class__)
|
return states.Trading(action.__class__)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def physical(self):
|
def physical(self):
|
||||||
"""The actual physical state, None otherwise."""
|
"""The actual physical state, None otherwise."""
|
||||||
from ereuse_devicehub.resources.device import states
|
from ereuse_devicehub.resources.device import states
|
||||||
with suppress(LookupError, ValueError):
|
with suppress(LookupError, ValueError):
|
||||||
event = self.last_event_of(*states.Physical.events())
|
action = self.last_action_of(*states.Physical.actions())
|
||||||
return states.Physical(event.__class__)
|
return states.Physical(action.__class__)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def physical_possessor(self):
|
def physical_possessor(self):
|
||||||
|
@ -235,13 +235,13 @@ class Device(Thing):
|
||||||
own it legally.
|
own it legally.
|
||||||
|
|
||||||
Note that there can only be one physical possessor per device,
|
Note that there can only be one physical possessor per device,
|
||||||
and :class:`ereuse_devicehub.resources.event.models.Receive`
|
and :class:`ereuse_devicehub.resources.action.models.Receive`
|
||||||
changes it.
|
changes it.
|
||||||
"""
|
"""
|
||||||
from ereuse_devicehub.resources.event.models import Receive
|
from ereuse_devicehub.resources.action.models import Receive
|
||||||
with suppress(LookupError):
|
with suppress(LookupError):
|
||||||
event = self.last_event_of(Receive)
|
action = self.last_action_of(Receive)
|
||||||
return event.agent
|
return action.agent
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def working(self):
|
def working(self):
|
||||||
|
@ -252,10 +252,10 @@ class Device(Thing):
|
||||||
the one with the worst ``severity`` of them, or ``None`` if no
|
the one with the worst ``severity`` of them, or ``None`` if no
|
||||||
test has been executed.
|
test has been executed.
|
||||||
"""
|
"""
|
||||||
from ereuse_devicehub.resources.event.models import Test
|
from ereuse_devicehub.resources.action.models import Test
|
||||||
current_tests = unique_everseen((e for e in reversed(self.events) if isinstance(e, Test)),
|
current_tests = unique_everseen((e for e in reversed(self.actions) if isinstance(e, Test)),
|
||||||
key=attrgetter('type')) # last test of each type
|
key=attrgetter('type')) # last test of each type
|
||||||
return self._warning_events(current_tests)
|
return self._warning_actions(current_tests)
|
||||||
|
|
||||||
@declared_attr
|
@declared_attr
|
||||||
def __mapper_args__(cls):
|
def __mapper_args__(cls):
|
||||||
|
@ -271,19 +271,19 @@ class Device(Thing):
|
||||||
args[POLYMORPHIC_ON] = cls.type
|
args[POLYMORPHIC_ON] = cls.type
|
||||||
return args
|
return args
|
||||||
|
|
||||||
def last_event_of(self, *types):
|
def last_action_of(self, *types):
|
||||||
"""Gets the last event of the given types.
|
"""Gets the last action of the given types.
|
||||||
|
|
||||||
:raise LookupError: Device has not an event of the given type.
|
:raise LookupError: Device has not an action of the given type.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# noinspection PyTypeHints
|
# noinspection PyTypeHints
|
||||||
return next(e for e in reversed(self.events) if isinstance(e, types))
|
return next(e for e in reversed(self.actions) if isinstance(e, types))
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
raise LookupError('{!r} does not contain events of types {}.'.format(self, types))
|
raise LookupError('{!r} does not contain actions of types {}.'.format(self, types))
|
||||||
|
|
||||||
def _warning_events(self, events):
|
def _warning_actions(self, actions):
|
||||||
return sorted(ev for ev in events if ev.severity >= Severity.Warning)
|
return sorted(ev for ev in actions if ev.severity >= Severity.Warning)
|
||||||
|
|
||||||
def __lt__(self, other):
|
def __lt__(self, other):
|
||||||
return self.id < other.id
|
return self.id < other.id
|
||||||
|
@ -389,8 +389,8 @@ class Computer(Device):
|
||||||
super().__init__(chassis=chassis, **kwargs)
|
super().__init__(chassis=chassis, **kwargs)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def events(self) -> list:
|
def actions(self) -> list:
|
||||||
return sorted(chain(super().events, self.events_parent))
|
return sorted(chain(super().actions, self.actions_parent))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def ram_size(self) -> int:
|
def ram_size(self) -> int:
|
||||||
|
@ -561,8 +561,8 @@ class Component(Device):
|
||||||
return component
|
return component
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def events(self) -> list:
|
def actions(self) -> list:
|
||||||
return sorted(chain(super().events, self.events_components))
|
return sorted(chain(super().actions, self.actions_components))
|
||||||
|
|
||||||
|
|
||||||
class JoinedComponentTableMixin:
|
class JoinedComponentTableMixin:
|
||||||
|
@ -592,9 +592,9 @@ class DataStorage(JoinedComponentTableMixin, Component):
|
||||||
|
|
||||||
This is, the last erasure performed to the data storage.
|
This is, the last erasure performed to the data storage.
|
||||||
"""
|
"""
|
||||||
from ereuse_devicehub.resources.event.models import EraseBasic
|
from ereuse_devicehub.resources.action.models import EraseBasic
|
||||||
try:
|
try:
|
||||||
ev = self.last_event_of(EraseBasic)
|
ev = self.last_action_of(EraseBasic)
|
||||||
except LookupError:
|
except LookupError:
|
||||||
ev = None
|
ev = None
|
||||||
return ev
|
return ev
|
||||||
|
@ -698,8 +698,8 @@ class Battery(JoinedComponentTableMixin, Component):
|
||||||
@property
|
@property
|
||||||
def capacity(self) -> float:
|
def capacity(self) -> float:
|
||||||
"""The quantity of """
|
"""The quantity of """
|
||||||
from ereuse_devicehub.resources.event.models import MeasureBattery
|
from ereuse_devicehub.resources.action.models import MeasureBattery
|
||||||
real_size = self.last_event_of(MeasureBattery).size
|
real_size = self.last_action_of(MeasureBattery).size
|
||||||
return real_size / self.size if real_size and self.size else None
|
return real_size / self.size if real_size and self.size else None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,21 +11,21 @@ from sqlalchemy.orm import relationship
|
||||||
from teal.db import Model
|
from teal.db import Model
|
||||||
from teal.enums import Layouts
|
from teal.enums import Layouts
|
||||||
|
|
||||||
|
from ereuse_devicehub.resources.action import models as e
|
||||||
from ereuse_devicehub.resources.agent.models import Agent
|
from ereuse_devicehub.resources.agent.models import Agent
|
||||||
from ereuse_devicehub.resources.device import states
|
from ereuse_devicehub.resources.device import states
|
||||||
from ereuse_devicehub.resources.enums import BatteryTechnology, ComputerChassis, \
|
from ereuse_devicehub.resources.enums import BatteryTechnology, ComputerChassis, \
|
||||||
DataStorageInterface, DisplayTech, PrinterTechnology, RamFormat, RamInterface
|
DataStorageInterface, DisplayTech, PrinterTechnology, RamFormat, RamInterface
|
||||||
from ereuse_devicehub.resources.event import models as e
|
|
||||||
from ereuse_devicehub.resources.lot.models import Lot
|
from ereuse_devicehub.resources.lot.models import Lot
|
||||||
from ereuse_devicehub.resources.models import Thing
|
from ereuse_devicehub.resources.models import Thing
|
||||||
from ereuse_devicehub.resources.tag import Tag
|
from ereuse_devicehub.resources.tag import Tag
|
||||||
from ereuse_devicehub.resources.tag.model import Tags
|
from ereuse_devicehub.resources.tag.model import Tags
|
||||||
|
|
||||||
E = TypeVar('E', bound=e.Event)
|
E = TypeVar('E', bound=e.Action)
|
||||||
|
|
||||||
|
|
||||||
class Device(Thing):
|
class Device(Thing):
|
||||||
EVENT_SORT_KEY = attrgetter('created')
|
ACTION_SORT_KEY = attrgetter('created')
|
||||||
|
|
||||||
id = ... # type: Column
|
id = ... # type: Column
|
||||||
type = ... # type: Column
|
type = ... # type: Column
|
||||||
|
@ -58,8 +58,8 @@ class Device(Thing):
|
||||||
self.depth = ... # type: Optional[float]
|
self.depth = ... # type: Optional[float]
|
||||||
self.color = ... # type: Optional[Color]
|
self.color = ... # type: Optional[Color]
|
||||||
self.physical_properties = ... # type: Dict[str, object or None]
|
self.physical_properties = ... # type: Dict[str, object or None]
|
||||||
self.events_multiple = ... # type: Set[e.EventWithMultipleDevices]
|
self.actions_multiple = ... # type: Set[e.ActionWithMultipleDevices]
|
||||||
self.events_one = ... # type: Set[e.EventWithOneDevice]
|
self.actions_one = ... # type: Set[e.ActionWithOneDevice]
|
||||||
self.tags = ... # type: Tags[Tag]
|
self.tags = ... # type: Tags[Tag]
|
||||||
self.lots = ... # type: Set[Lot]
|
self.lots = ... # type: Set[Lot]
|
||||||
self.production_date = ... # type: Optional[datetime]
|
self.production_date = ... # type: Optional[datetime]
|
||||||
|
@ -68,11 +68,11 @@ class Device(Thing):
|
||||||
self.variant = ... # type: Optional[str]
|
self.variant = ... # type: Optional[str]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def events(self) -> List[e.Event]:
|
def actions(self) -> List[e.Action]:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def problems(self) -> List[e.Event]:
|
def problems(self) -> List[e.Action]:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -103,10 +103,10 @@ class Device(Thing):
|
||||||
def working(self) -> List[e.Test]:
|
def working(self) -> List[e.Test]:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def last_event_of(self, *types: Type[E]) -> E:
|
def last_action_of(self, *types: Type[E]) -> E:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _warning_events(self, events: Iterable[e.Event]) -> Generator[e.Event]:
|
def _warning_actions(self, actions: Iterable[e.Action]) -> Generator[e.Action]:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -139,11 +139,11 @@ class Computer(DisplayMixin, Device):
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.components = ... # type: Set[Component]
|
self.components = ... # type: Set[Component]
|
||||||
self.events_parent = ... # type: Set[e.Event]
|
self.actions_parent = ... # type: Set[e.Action]
|
||||||
self.chassis = ... # type: ComputerChassis
|
self.chassis = ... # type: ComputerChassis
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def events(self) -> List:
|
def actions(self) -> List:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -230,7 +230,7 @@ class Component(Device):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.parent_id = ... # type: int
|
self.parent_id = ... # type: int
|
||||||
self.parent = ... # type: Computer
|
self.parent = ... # type: Computer
|
||||||
self.events_components = ... # type: Set[e.Event]
|
self.actions_components = ... # type: Set[e.Action]
|
||||||
|
|
||||||
def similar_one(self, parent: Computer, blacklist: Set[int]) -> 'Component':
|
def similar_one(self, parent: Computer, blacklist: Set[int]) -> 'Component':
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -37,9 +37,9 @@ class Device(Thing):
|
||||||
width = Float(validate=Range(0.1, 5), unit=UnitCodes.m, description=m.Device.width.comment)
|
width = Float(validate=Range(0.1, 5), unit=UnitCodes.m, description=m.Device.width.comment)
|
||||||
height = Float(validate=Range(0.1, 5), unit=UnitCodes.m, description=m.Device.height.comment)
|
height = Float(validate=Range(0.1, 5), unit=UnitCodes.m, description=m.Device.height.comment)
|
||||||
depth = Float(validate=Range(0.1, 5), unit=UnitCodes.m, description=m.Device.depth.comment)
|
depth = Float(validate=Range(0.1, 5), unit=UnitCodes.m, description=m.Device.depth.comment)
|
||||||
events = NestedOn('Event', many=True, dump_only=True, description=m.Device.events.__doc__)
|
actions = NestedOn('Action', many=True, dump_only=True, description=m.Device.actions.__doc__)
|
||||||
events_one = NestedOn('Event', many=True, load_only=True, collection_class=OrderedSet)
|
actions_one = NestedOn('Action', many=True, load_only=True, collection_class=OrderedSet)
|
||||||
problems = NestedOn('Event', many=True, dump_only=True, description=m.Device.problems.__doc__)
|
problems = NestedOn('Action', many=True, dump_only=True, description=m.Device.problems.__doc__)
|
||||||
url = URL(dump_only=True, description=m.Device.url.__doc__)
|
url = URL(dump_only=True, description=m.Device.url.__doc__)
|
||||||
lots = NestedOn('Lot',
|
lots = NestedOn('Lot',
|
||||||
many=True,
|
many=True,
|
||||||
|
@ -53,34 +53,35 @@ class Device(Thing):
|
||||||
production_date = DateTime('iso',
|
production_date = DateTime('iso',
|
||||||
description=m.Device.updated.comment,
|
description=m.Device.updated.comment,
|
||||||
data_key='productionDate')
|
data_key='productionDate')
|
||||||
working = NestedOn('Event',
|
working = NestedOn('Action',
|
||||||
many=True,
|
many=True,
|
||||||
dump_only=True,
|
dump_only=True,
|
||||||
description=m.Device.working.__doc__)
|
description=m.Device.working.__doc__)
|
||||||
|
|
||||||
@pre_load
|
@pre_load
|
||||||
def from_events_to_events_one(self, data: dict):
|
def from_actions_to_actions_one(self, data: dict):
|
||||||
"""
|
"""
|
||||||
Not an elegant way of allowing submitting events to a device
|
Not an elegant way of allowing submitting actions to a device
|
||||||
(in the context of Snapshots) without creating an ``events``
|
(in the context of Snapshots) without creating an ``actions``
|
||||||
field at the model (which is not possible).
|
field at the model (which is not possible).
|
||||||
:param data:
|
:param data:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
# Note that it is secure to allow uploading events_one
|
# Note that it is secure to allow uploading actions_one
|
||||||
# as the only time an user can send a device object is
|
# as the only time an user can send a device object is
|
||||||
# in snapshots.
|
# in snapshots.
|
||||||
data['events_one'] = data.pop('events', [])
|
data['actions_one'] = data.pop('actions', [])
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@post_load
|
@post_load
|
||||||
def validate_snapshot_events(self, data):
|
def validate_snapshot_actions(self, data):
|
||||||
"""Validates that only snapshot-related events can be uploaded."""
|
"""Validates that only snapshot-related actions can be uploaded."""
|
||||||
from ereuse_devicehub.resources.event.models import EraseBasic, Test, Rate, Install, \
|
from ereuse_devicehub.resources.action.models import EraseBasic, Test, Rate, Install, \
|
||||||
Benchmark
|
Benchmark
|
||||||
for event in data['events_one']:
|
for action in data['actions_one']:
|
||||||
if not isinstance(event, (Install, EraseBasic, Rate, Test, Benchmark)):
|
if not isinstance(action, (Install, EraseBasic, Rate, Test, Benchmark)):
|
||||||
raise ValidationError('You cannot upload {}'.format(event), field_names=['events'])
|
raise ValidationError('You cannot upload {}'.format(action),
|
||||||
|
field_names=['actions'])
|
||||||
|
|
||||||
|
|
||||||
class Computer(Device):
|
class Computer(Device):
|
||||||
|
@ -109,7 +110,7 @@ class Computer(Device):
|
||||||
dump_only=True,
|
dump_only=True,
|
||||||
data_key='networkSpeeds',
|
data_key='networkSpeeds',
|
||||||
description=m.Computer.network_speeds.__doc__)
|
description=m.Computer.network_speeds.__doc__)
|
||||||
privacy = NestedOn('Event',
|
privacy = NestedOn('Action',
|
||||||
many=True,
|
many=True,
|
||||||
dump_only=True,
|
dump_only=True,
|
||||||
collection_class=set,
|
collection_class=set,
|
||||||
|
@ -229,7 +230,7 @@ class DataStorage(Component):
|
||||||
unit=UnitCodes.mbyte,
|
unit=UnitCodes.mbyte,
|
||||||
description=m.DataStorage.size.comment)
|
description=m.DataStorage.size.comment)
|
||||||
interface = EnumField(enums.DataStorageInterface)
|
interface = EnumField(enums.DataStorageInterface)
|
||||||
privacy = NestedOn('Event', dump_only=True)
|
privacy = NestedOn('Action', dump_only=True)
|
||||||
|
|
||||||
|
|
||||||
class HardDrive(DataStorage):
|
class HardDrive(DataStorage):
|
||||||
|
|
|
@ -7,10 +7,10 @@ from sqlalchemy.orm import aliased
|
||||||
|
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.resources import search
|
from ereuse_devicehub.resources import search
|
||||||
|
from ereuse_devicehub.resources.action.models import Action, ActionWithMultipleDevices, \
|
||||||
|
ActionWithOneDevice
|
||||||
from ereuse_devicehub.resources.agent.models import Organization
|
from ereuse_devicehub.resources.agent.models import Organization
|
||||||
from ereuse_devicehub.resources.device.models import Component, Computer, Device
|
from ereuse_devicehub.resources.device.models import Component, Computer, Device
|
||||||
from ereuse_devicehub.resources.event.models import Event, EventWithMultipleDevices, \
|
|
||||||
EventWithOneDevice
|
|
||||||
from ereuse_devicehub.resources.tag.model import Tag
|
from ereuse_devicehub.resources.tag.model import Tag
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,17 +42,17 @@ class DeviceSearch(db.Model):
|
||||||
@classmethod
|
@classmethod
|
||||||
def update_modified_devices(cls, session: db.Session):
|
def update_modified_devices(cls, session: db.Session):
|
||||||
"""Updates the documents of the devices that are part of a
|
"""Updates the documents of the devices that are part of a
|
||||||
modified event, or tag in the passed-in session.
|
modified action, or tag in the passed-in session.
|
||||||
|
|
||||||
This method is registered as a SQLAlchemy listener in the
|
This method is registered as a SQLAlchemy listener in the
|
||||||
Devicehub class.
|
Devicehub class.
|
||||||
"""
|
"""
|
||||||
devices_to_update = set()
|
devices_to_update = set()
|
||||||
for model in chain(session.new, session.dirty):
|
for model in chain(session.new, session.dirty):
|
||||||
if isinstance(model, Event):
|
if isinstance(model, Action):
|
||||||
if isinstance(model, EventWithMultipleDevices):
|
if isinstance(model, ActionWithMultipleDevices):
|
||||||
devices_to_update |= model.devices
|
devices_to_update |= model.devices
|
||||||
elif isinstance(model, EventWithOneDevice):
|
elif isinstance(model, ActionWithOneDevice):
|
||||||
devices_to_update.add(model.device)
|
devices_to_update.add(model.device)
|
||||||
if model.parent:
|
if model.parent:
|
||||||
devices_to_update.add(model.parent)
|
devices_to_update.add(model.parent)
|
||||||
|
|
|
@ -2,7 +2,7 @@ from enum import Enum
|
||||||
|
|
||||||
import inflection
|
import inflection
|
||||||
|
|
||||||
from ereuse_devicehub.resources.event import models as e
|
from ereuse_devicehub.resources.action import models as e
|
||||||
|
|
||||||
|
|
||||||
class State(Enum):
|
class State(Enum):
|
||||||
|
@ -11,8 +11,8 @@ class State(Enum):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def events(cls):
|
def actions(cls):
|
||||||
"""Events participating in this state."""
|
"""Actions participating in this state."""
|
||||||
return (s.value for s in cls)
|
return (s.value for s in cls)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
|
@ -11,9 +11,9 @@ from teal.db import ResourceNotFound
|
||||||
from teal.marshmallow import ValidationError
|
from teal.marshmallow import ValidationError
|
||||||
|
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
|
from ereuse_devicehub.resources.action.models import Remove
|
||||||
from ereuse_devicehub.resources.device.exceptions import NeedsId
|
from ereuse_devicehub.resources.device.exceptions import NeedsId
|
||||||
from ereuse_devicehub.resources.device.models import Component, Computer, Device
|
from ereuse_devicehub.resources.device.models import Component, Computer, Device
|
||||||
from ereuse_devicehub.resources.event.models import Remove
|
|
||||||
from ereuse_devicehub.resources.tag.model import Tag
|
from ereuse_devicehub.resources.tag.model import Tag
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class Sync:
|
||||||
|
|
||||||
:param device: The device to add / update to the database.
|
:param device: The device to add / update to the database.
|
||||||
:param components: Components that are inside of the device.
|
:param components: Components that are inside of the device.
|
||||||
This method performs Add and Remove events
|
This method performs Add and Remove actions
|
||||||
so the device ends up with these components.
|
so the device ends up with these components.
|
||||||
Components are added / updated accordingly.
|
Components are added / updated accordingly.
|
||||||
If this is empty, all components are removed.
|
If this is empty, all components are removed.
|
||||||
|
@ -55,7 +55,7 @@ class Sync:
|
||||||
2. A list of Add / Remove (not yet added to session).
|
2. A list of Add / Remove (not yet added to session).
|
||||||
"""
|
"""
|
||||||
db_device = self.execute_register(device)
|
db_device = self.execute_register(device)
|
||||||
db_components, events = OrderedSet(), OrderedSet()
|
db_components, actions = OrderedSet(), OrderedSet()
|
||||||
if components is not None: # We have component info (see above)
|
if components is not None: # We have component info (see above)
|
||||||
if not isinstance(db_device, Computer):
|
if not isinstance(db_device, Computer):
|
||||||
# Until a good reason is given, we synthetically forbid
|
# Until a good reason is given, we synthetically forbid
|
||||||
|
@ -71,9 +71,9 @@ class Sync:
|
||||||
if not is_new:
|
if not is_new:
|
||||||
not_new_components.add(db_component)
|
not_new_components.add(db_component)
|
||||||
# We only want to perform Add/Remove to not new components
|
# We only want to perform Add/Remove to not new components
|
||||||
events = self.add_remove(db_device, not_new_components)
|
actions = self.add_remove(db_device, not_new_components)
|
||||||
db_device.components = db_components
|
db_device.components = db_components
|
||||||
return db_device, events
|
return db_device, actions
|
||||||
|
|
||||||
def execute_register_component(self,
|
def execute_register_component(self,
|
||||||
component: Component,
|
component: Component,
|
||||||
|
@ -218,7 +218,7 @@ class Sync:
|
||||||
def add_remove(device: Computer,
|
def add_remove(device: Computer,
|
||||||
components: Set[Component]) -> OrderedSet:
|
components: Set[Component]) -> OrderedSet:
|
||||||
"""
|
"""
|
||||||
Generates the Add and Remove events (but doesn't add them to
|
Generates the Add and Remove actions (but doesn't add them to
|
||||||
session).
|
session).
|
||||||
|
|
||||||
:param device: A device which ``components`` attribute contains
|
:param device: A device which ``components`` attribute contains
|
||||||
|
@ -228,10 +228,10 @@ class Sync:
|
||||||
be Added. Some of them can already exist
|
be Added. Some of them can already exist
|
||||||
on the device, in which case they won't
|
on the device, in which case they won't
|
||||||
be re-added.
|
be re-added.
|
||||||
:return: A list of Add / Remove events.
|
:return: A list of Add / Remove actions.
|
||||||
"""
|
"""
|
||||||
# Note that we create the Remove events before the Add ones
|
# Note that we create the Remove actions before the Add ones
|
||||||
events = OrderedSet()
|
actions = OrderedSet()
|
||||||
old_components = set(device.components)
|
old_components = set(device.components)
|
||||||
|
|
||||||
adding = components - old_components
|
adding = components - old_components
|
||||||
|
@ -242,8 +242,8 @@ class Sync:
|
||||||
|
|
||||||
for parent, _components in groupby(sorted(adding, key=g_parent), key=g_parent):
|
for parent, _components in groupby(sorted(adding, key=g_parent), key=g_parent):
|
||||||
if parent.id != 0: # Is not Computer Identity
|
if parent.id != 0: # Is not Computer Identity
|
||||||
events.add(Remove(device=parent, components=OrderedSet(_components)))
|
actions.add(Remove(device=parent, components=OrderedSet(_components)))
|
||||||
return events
|
return actions
|
||||||
|
|
||||||
|
|
||||||
class MismatchBetweenTags(ValidationError):
|
class MismatchBetweenTags(ValidationError):
|
||||||
|
|
|
@ -194,21 +194,21 @@
|
||||||
<small>Latest one.</small>
|
<small>Latest one.</small>
|
||||||
</div>
|
</div>
|
||||||
<ol>
|
<ol>
|
||||||
{% for event in device.events|reverse %}
|
{% for action in device.actions|reverse %}
|
||||||
<li>
|
<li>
|
||||||
<strong>
|
<strong>
|
||||||
{{ event.type }}
|
{{ action.type }}
|
||||||
</strong>
|
</strong>
|
||||||
—
|
—
|
||||||
{{ event }}
|
{{ action }}
|
||||||
<br>
|
<br>
|
||||||
<div class="text-muted">
|
<div class="text-muted">
|
||||||
<small>
|
<small>
|
||||||
{{ event._date_str }}
|
{{ action._date_str }}
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
{% if event.certificate %}
|
{% if action.certificate %}
|
||||||
<a href="{{ event.certificate.to_text() }}">See the certificate</a>
|
<a href="{{ action.certificate.to_text() }}">See the certificate</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -13,9 +13,9 @@ from ereuse_devicehub import auth
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.query import SearchQueryParser, things_response
|
from ereuse_devicehub.query import SearchQueryParser, things_response
|
||||||
from ereuse_devicehub.resources import search
|
from ereuse_devicehub.resources import search
|
||||||
|
from ereuse_devicehub.resources.action import models as actions
|
||||||
from ereuse_devicehub.resources.device.models import Device, Manufacturer
|
from ereuse_devicehub.resources.device.models import Device, Manufacturer
|
||||||
from ereuse_devicehub.resources.device.search import DeviceSearch
|
from ereuse_devicehub.resources.device.search import DeviceSearch
|
||||||
from ereuse_devicehub.resources.event import models as events
|
|
||||||
from ereuse_devicehub.resources.lot.models import LotDeviceDescendants
|
from ereuse_devicehub.resources.lot.models import LotDeviceDescendants
|
||||||
from ereuse_devicehub.resources.tag.model import Tag
|
from ereuse_devicehub.resources.tag.model import Tag
|
||||||
|
|
||||||
|
@ -31,9 +31,9 @@ class OfType(f.Str):
|
||||||
|
|
||||||
|
|
||||||
class RateQ(query.Query):
|
class RateQ(query.Query):
|
||||||
rating = query.Between(events.Rate._rating, f.Float())
|
rating = query.Between(actions.Rate._rating, f.Float())
|
||||||
appearance = query.Between(events.Rate._appearance, f.Float())
|
appearance = query.Between(actions.Rate._appearance, f.Float())
|
||||||
functionality = query.Between(events.Rate._functionality, f.Float())
|
functionality = query.Between(actions.Rate._functionality, f.Float())
|
||||||
|
|
||||||
|
|
||||||
class TagQ(query.Query):
|
class TagQ(query.Query):
|
||||||
|
@ -52,8 +52,8 @@ class Filters(query.Query):
|
||||||
manufacturer = query.ILike(Device.manufacturer)
|
manufacturer = query.ILike(Device.manufacturer)
|
||||||
serialNumber = query.ILike(Device.serial_number)
|
serialNumber = query.ILike(Device.serial_number)
|
||||||
# todo test query for rating (and possibly other filters)
|
# todo test query for rating (and possibly other filters)
|
||||||
rating = query.Join((Device.id == events.EventWithOneDevice.device_id)
|
rating = query.Join((Device.id == actions.ActionWithOneDevice.device_id)
|
||||||
& (events.EventWithOneDevice.id == events.Rate.id),
|
& (actions.ActionWithOneDevice.id == actions.Rate.id),
|
||||||
RateQ)
|
RateQ)
|
||||||
tag = query.Join(Device.id == Tag.device_id, TagQ)
|
tag = query.Join(Device.id == Tag.device_id, TagQ)
|
||||||
# todo This part of the query is really slow
|
# todo This part of the query is really slow
|
||||||
|
|
|
@ -2,9 +2,9 @@ from collections import OrderedDict
|
||||||
|
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
|
|
||||||
from ereuse_devicehub.resources.device import models as d
|
from ereuse_devicehub.resources.action.models import BenchmarkDataStorage, RateComputer, \
|
||||||
from ereuse_devicehub.resources.event.models import BenchmarkDataStorage, RateComputer, \
|
|
||||||
TestDataStorage
|
TestDataStorage
|
||||||
|
from ereuse_devicehub.resources.device import models as d
|
||||||
|
|
||||||
|
|
||||||
class DeviceRow(OrderedDict):
|
class DeviceRow(OrderedDict):
|
||||||
|
@ -33,7 +33,7 @@ class DeviceRow(OrderedDict):
|
||||||
self['Serial Number'] = device.serial_number
|
self['Serial Number'] = device.serial_number
|
||||||
self['Model'] = device.model
|
self['Model'] = device.model
|
||||||
self['Manufacturer'] = device.manufacturer
|
self['Manufacturer'] = device.manufacturer
|
||||||
# self['State'] = device.last_event_of()
|
# self['State'] = device.last_action_of()
|
||||||
self['Registered in'] = format(device.created, '%c')
|
self['Registered in'] = format(device.created, '%c')
|
||||||
self['Price'] = device.price
|
self['Price'] = device.price
|
||||||
if isinstance(device, d.Computer):
|
if isinstance(device, d.Computer):
|
||||||
|
@ -94,17 +94,17 @@ class DeviceRow(OrderedDict):
|
||||||
self['{} {} Size (MB)'.format(type, i)] = component.size
|
self['{} {} Size (MB)'.format(type, i)] = component.size
|
||||||
self['{} {} Privacy'.format(type, i)] = component.privacy
|
self['{} {} Privacy'.format(type, i)] = component.privacy
|
||||||
try:
|
try:
|
||||||
self['{} {} Lifetime'.format(type, i)] = component.last_event_of(
|
self['{} {} Lifetime'.format(type, i)] = component.last_action_of(
|
||||||
TestDataStorage).lifetime
|
TestDataStorage).lifetime
|
||||||
except:
|
except:
|
||||||
self['{} {} Lifetime'.format(type, i)] = ''
|
self['{} {} Lifetime'.format(type, i)] = ''
|
||||||
try:
|
try:
|
||||||
self['{} {} Reading speed'.format(type, i)] = component.last_event_of(
|
self['{} {} Reading speed'.format(type, i)] = component.last_action_of(
|
||||||
BenchmarkDataStorage).read_speed
|
BenchmarkDataStorage).read_speed
|
||||||
except:
|
except:
|
||||||
self['{} {} Reading speed'.format(type, i)] = ''
|
self['{} {} Reading speed'.format(type, i)] = ''
|
||||||
try:
|
try:
|
||||||
self['{} {} Writing speed'.format(type, i)] = component.last_event_of(
|
self['{} {} Writing speed'.format(type, i)] = component.last_action_of(
|
||||||
BenchmarkDataStorage).write_speed
|
BenchmarkDataStorage).write_speed
|
||||||
except:
|
except:
|
||||||
self['{} {} Writing speed'.format(type, i)] = ''
|
self['{} {} Writing speed'.format(type, i)] = ''
|
||||||
|
|
|
@ -15,10 +15,10 @@ from teal.cache import cache
|
||||||
from teal.resource import Resource
|
from teal.resource import Resource
|
||||||
|
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
|
from ereuse_devicehub.resources.action import models as evs
|
||||||
from ereuse_devicehub.resources.device import models as devs
|
from ereuse_devicehub.resources.device import models as devs
|
||||||
from ereuse_devicehub.resources.device.views import DeviceView
|
from ereuse_devicehub.resources.device.views import DeviceView
|
||||||
from ereuse_devicehub.resources.documents.device_row import DeviceRow
|
from ereuse_devicehub.resources.documents.device_row import DeviceRow
|
||||||
from ereuse_devicehub.resources.event import models as evs
|
|
||||||
|
|
||||||
|
|
||||||
class Format(enum.Enum):
|
class Format(enum.Enum):
|
||||||
|
@ -47,7 +47,7 @@ class DocumentView(DeviceView):
|
||||||
flask.request,
|
flask.request,
|
||||||
locations=('querystring',))
|
locations=('querystring',))
|
||||||
if id:
|
if id:
|
||||||
# todo we assume we can pass both device id and event id
|
# todo we assume we can pass both device id and action id
|
||||||
# for certificates... how is it going to end up being?
|
# for certificates... how is it going to end up being?
|
||||||
try:
|
try:
|
||||||
id = uuid.UUID(id)
|
id = uuid.UUID(id)
|
||||||
|
@ -59,7 +59,7 @@ class DocumentView(DeviceView):
|
||||||
else:
|
else:
|
||||||
query = devs.Device.query.filter_by(id=id)
|
query = devs.Device.query.filter_by(id=id)
|
||||||
else:
|
else:
|
||||||
query = evs.Event.query.filter_by(id=id)
|
query = evs.Action.query.filter_by(id=id)
|
||||||
else:
|
else:
|
||||||
flask.current_app.auth.requires_auth(lambda: None)() # todo not nice
|
flask.current_app.auth.requires_auth(lambda: None)() # todo not nice
|
||||||
query = self.query(args)
|
query = self.query(args)
|
||||||
|
|
|
@ -141,18 +141,6 @@ class ImageMimeTypes(Enum):
|
||||||
png = 'image/png'
|
png = 'image/png'
|
||||||
|
|
||||||
|
|
||||||
@unique
|
|
||||||
class SnapshotExpectedEvents(Enum):
|
|
||||||
"""Events that Workbench can perform when processing a device."""
|
|
||||||
Benchmark = 'Benchmark'
|
|
||||||
TestDataStorage = 'TestDataStorage'
|
|
||||||
StressTest = 'StressTest'
|
|
||||||
EraseBasic = 'EraseBasic'
|
|
||||||
EraseSectors = 'EraseSectors'
|
|
||||||
SmartTest = 'SmartTest'
|
|
||||||
Install = 'Install'
|
|
||||||
|
|
||||||
|
|
||||||
BOX_RATE_5 = 1, 5
|
BOX_RATE_5 = 1, 5
|
||||||
BOX_RATE_3 = 1, 3
|
BOX_RATE_3 = 1, 3
|
||||||
|
|
||||||
|
@ -282,18 +270,18 @@ class BatteryTechnology(Enum):
|
||||||
|
|
||||||
|
|
||||||
class Severity(IntEnum):
|
class Severity(IntEnum):
|
||||||
"""A flag evaluating the event execution. Ex. failed events
|
"""A flag evaluating the action execution. Ex. failed actions
|
||||||
have the value `Severity.Error`. Devicehub uses 4 severity levels:
|
have the value `Severity.Error`. Devicehub uses 4 severity levels:
|
||||||
|
|
||||||
* Info: default neutral severity. The event succeeded.
|
* Info: default neutral severity. The action succeeded.
|
||||||
* Notice: The event succeeded but it is raising awareness.
|
* Notice: The action succeeded but it is raising awareness.
|
||||||
Notices are not usually that important but something
|
Notices are not usually that important but something
|
||||||
(good or bad) worth checking.
|
(good or bad) worth checking.
|
||||||
* Warning: The event succeeded but there is something important
|
* Warning: The action succeeded but there is something important
|
||||||
to check negatively affecting the event.
|
to check negatively affecting the action.
|
||||||
* Error: the event failed.
|
* Error: the action failed.
|
||||||
|
|
||||||
Devicehub specially raises user awareness when an event
|
Devicehub specially raises user awareness when an action
|
||||||
has a Severity of ``Warning`` or greater.
|
has a Severity of ``Warning`` or greater.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -350,7 +338,7 @@ class ErasureStandards(Enum):
|
||||||
2. A second step erasing with random data, verifying the erasure
|
2. A second step erasing with random data, verifying the erasure
|
||||||
success in each hard-drive sector.
|
success in each hard-drive sector.
|
||||||
|
|
||||||
And be an :class:`ereuse_devicehub.resources.event.models.EraseSectors`.
|
And be an :class:`ereuse_devicehub.resources.action.models.EraseSectors`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -359,12 +347,12 @@ class ErasureStandards(Enum):
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_data_storage(cls, erasure) -> Set['ErasureStandards']:
|
def from_data_storage(cls, erasure) -> Set['ErasureStandards']:
|
||||||
"""Returns a set of erasure standards."""
|
"""Returns a set of erasure standards."""
|
||||||
from ereuse_devicehub.resources.event import models as events
|
from ereuse_devicehub.resources.action import models as actions
|
||||||
standards = set()
|
standards = set()
|
||||||
if isinstance(erasure, events.EraseSectors):
|
if isinstance(erasure, actions.EraseSectors):
|
||||||
with suppress(ValueError):
|
with suppress(ValueError):
|
||||||
first_step, *other_steps = erasure.steps
|
first_step, *other_steps = erasure.steps
|
||||||
if isinstance(first_step, events.StepZero) \
|
if isinstance(first_step, actions.StepZero) \
|
||||||
and all(isinstance(step, events.StepRandom) for step in other_steps):
|
and all(isinstance(step, actions.StepRandom) for step in other_steps):
|
||||||
standards.add(cls.HMG_IS5)
|
standards.add(cls.HMG_IS5)
|
||||||
return standards
|
return standards
|
||||||
|
|
|
@ -58,7 +58,7 @@ class InventoryDef(Resource):
|
||||||
db.session.delete(inv)
|
db.session.delete(inv)
|
||||||
db.session.flush()
|
db.session.flush()
|
||||||
# Remove users that end-up without any inventory
|
# Remove users that end-up without any inventory
|
||||||
# todo this should be done in a trigger / event
|
# todo this should be done in a trigger / action
|
||||||
users = User.query \
|
users = User.query \
|
||||||
.filter(User.id.notin_(db.session.query(UserInventory.user_id).distinct()))
|
.filter(User.id.notin_(db.session.query(UserInventory.user_id).distinct()))
|
||||||
for user in users:
|
for user in users:
|
||||||
|
|
|
@ -81,7 +81,7 @@ class Lot(Thing):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def url(self) -> urlutils.URL:
|
def url(self) -> urlutils.URL:
|
||||||
"""The URL where to GET this event."""
|
"""The URL where to GET this action."""
|
||||||
return urlutils.URL(url_for_resource(Lot, item_id=self.id))
|
return urlutils.URL(url_for_resource(Lot, item_id=self.id))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -50,7 +50,7 @@ class LotView(View):
|
||||||
return Response(status=204)
|
return Response(status=204)
|
||||||
|
|
||||||
def one(self, id: uuid.UUID):
|
def one(self, id: uuid.UUID):
|
||||||
"""Gets one event."""
|
"""Gets one action."""
|
||||||
lot = Lot.query.filter_by(id=id).one() # type: Lot
|
lot = Lot.query.filter_by(id=id).one() # type: Lot
|
||||||
return self.schema.jsonify(lot)
|
return self.schema.jsonify(lot)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ components:
|
||||||
speed: 1.23
|
speed: 1.23
|
||||||
cores: 2
|
cores: 2
|
||||||
type: Processor
|
type: Processor
|
||||||
events:
|
actions:
|
||||||
- type: BenchmarkProcessor
|
- type: BenchmarkProcessor
|
||||||
rate: 1
|
rate: 1
|
||||||
elapsed: 166
|
elapsed: 166
|
||||||
|
|
|
@ -2,21 +2,21 @@
|
||||||
"closed": true,
|
"closed": true,
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Azurewave",
|
"manufacturer": "Azurewave",
|
||||||
"model": "USB 2.0 UVC VGA WebCam",
|
"model": "USB 2.0 UVC VGA WebCam",
|
||||||
"serialNumber": "0x0001",
|
"serialNumber": "0x0001",
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"interface": "DDR2",
|
"interface": "DDR2",
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
{
|
{
|
||||||
"address": 64,
|
"address": 64,
|
||||||
"cores": 1,
|
"cores": 1,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 165,
|
"elapsed": 165,
|
||||||
"rate": 164.8342,
|
"rate": 164.8342,
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
"type": "Processor"
|
"type": "Processor"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 16,
|
"elapsed": 16,
|
||||||
"readSpeed": 66.2,
|
"readSpeed": 66.2,
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
"type": "HardDrive"
|
"type": "HardDrive"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"manufacturer": "Qualcomm Atheros",
|
||||||
"model": "AR9285 Wireless Network Adapter",
|
"model": "AR9285 Wireless Network Adapter",
|
||||||
"serialNumber": "74:2f:68:8b:fd:c8",
|
"serialNumber": "74:2f:68:8b:fd:c8",
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
"wireless": true
|
"wireless": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"manufacturer": "Qualcomm Atheros",
|
||||||
"model": "AR8152 v2.0 Fast Ethernet",
|
"model": "AR8152 v2.0 Fast Ethernet",
|
||||||
"serialNumber": "14:da:e9:42:f6:7c",
|
"serialNumber": "14:da:e9:42:f6:7c",
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
"wireless": false
|
"wireless": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"model": "Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller",
|
"model": "Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller",
|
||||||
|
@ -90,7 +90,7 @@
|
||||||
"type": "GraphicCard"
|
"type": "GraphicCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "TestBios",
|
"type": "TestBios",
|
||||||
"accessRange": "A",
|
"accessRange": "A",
|
||||||
|
@ -109,7 +109,7 @@
|
||||||
],
|
],
|
||||||
"device": {
|
"device": {
|
||||||
"chassis": "Netbook",
|
"chassis": "Netbook",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 16,
|
"elapsed": 16,
|
||||||
"rate": 15.8978,
|
"rate": 15.8978,
|
||||||
|
@ -128,9 +128,6 @@
|
||||||
},
|
},
|
||||||
"elapsed": 6,
|
"elapsed": 6,
|
||||||
"endTime": "2018-10-14T21:22:14.777235+00:00",
|
"endTime": "2018-10-14T21:22:14.777235+00:00",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark"
|
|
||||||
],
|
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"uuid": "7dc4d19c-914e-4652-a381-d641325fb9c2",
|
"uuid": "7dc4d19c-914e-4652-a381-d641325fb9c2",
|
||||||
|
|
|
@ -9,26 +9,26 @@ device:
|
||||||
serialNumber: d1s
|
serialNumber: d1s
|
||||||
model: d1ml
|
model: d1ml
|
||||||
manufacturer: d1mr
|
manufacturer: d1mr
|
||||||
events:
|
actions:
|
||||||
- type: VisualTest
|
- type: VisualTest
|
||||||
appearanceRange: A
|
appearanceRange: A
|
||||||
functionalityRange: B
|
functionalityRange: B
|
||||||
components:
|
components:
|
||||||
- type: GraphicCard
|
- type: GraphicCard
|
||||||
serialNumber: gc1s
|
serialNumber: gc1s
|
||||||
model: gc1ml
|
model: gc1ml
|
||||||
manufacturer: gc1mr
|
manufacturer: gc1mr
|
||||||
- type: RamModule
|
- type: RamModule
|
||||||
serialNumber: rm1s
|
serialNumber: rm1s
|
||||||
model: rm1ml
|
model: rm1ml
|
||||||
manufacturer: rm1mr
|
manufacturer: rm1mr
|
||||||
speed: 1333
|
speed: 1333
|
||||||
- type: Processor
|
- type: Processor
|
||||||
serialNumber: p1s
|
serialNumber: p1s
|
||||||
model: p1ml
|
model: p1ml
|
||||||
manufacturer: p1mr
|
manufacturer: p1mr
|
||||||
speed: 1.6
|
speed: 1.6
|
||||||
events:
|
actions:
|
||||||
- type: BenchmarkProcessor
|
- type: BenchmarkProcessor
|
||||||
rate: 2410
|
rate: 2410
|
||||||
elapsed: 11
|
elapsed: 11
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": true,
|
"closed": true,
|
||||||
"endTime": "2018-07-19T15:48:40.635776+00:00",
|
"endTime": "2018-07-19T15:48:40.635776+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "Latitude E6440",
|
"model": "Latitude E6440",
|
||||||
"serialNumber": "FJBQVZ1",
|
"serialNumber": "FJBQVZ1",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Laptop",
|
"type": "Laptop",
|
||||||
"chassis": "Laptop"
|
"chassis": "Laptop"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i7-4600M CPU @ 2.90GHz",
|
"model": "Intel Core i7-4600M CPU @ 2.90GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 165,
|
"elapsed": 165,
|
||||||
"rate": 164.8342,
|
"rate": 164.8342,
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
"manufacturer": "Samsung",
|
"manufacturer": "Samsung",
|
||||||
"model": "M471B5173DB0-YK0",
|
"model": "M471B5173DB0-YK0",
|
||||||
"serialNumber": "732CD498",
|
"serialNumber": "732CD498",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "SODIMM",
|
"format": "SODIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
"manufacturer": "Samsung",
|
"manufacturer": "Samsung",
|
||||||
"model": "M471B5173DB0-YK0",
|
"model": "M471B5173DB0-YK0",
|
||||||
"serialNumber": "152DD498",
|
"serialNumber": "152DD498",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "SODIMM",
|
"format": "SODIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": "Crucial_CT525MX3",
|
"model": "Crucial_CT525MX3",
|
||||||
"serialNumber": "164014297BCC",
|
"serialNumber": "164014297BCC",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"readSpeed": 63.3,
|
"readSpeed": 63.3,
|
||||||
"type": "BenchmarkDataStorage",
|
"type": "BenchmarkDataStorage",
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "4th Gen Core Processor Integrated Graphics Controller",
|
"model": "4th Gen Core Processor Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Ethernet Connection I217-LM",
|
"model": "Ethernet Connection I217-LM",
|
||||||
"serialNumber": "ec:f4:bb:0b:18:90",
|
"serialNumber": "ec:f4:bb:0b:18:90",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -96,7 +96,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Centrino Advanced-N 6235",
|
"model": "Centrino Advanced-N 6235",
|
||||||
"serialNumber": "c4:d9:87:47:90:e1",
|
"serialNumber": "c4:d9:87:47:90:e1",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": true
|
"wireless": true
|
||||||
},
|
},
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": "da:b4:3a:25:88:6c",
|
"serialNumber": "da:b4:3a:25:88:6c",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": false
|
"wireless": false
|
||||||
},
|
},
|
||||||
|
@ -112,28 +112,28 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller",
|
"model": "Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "CNFCH52J48303+YF2",
|
"manufacturer": "CNFCH52J48303+YF2",
|
||||||
"model": "Laptop_Integrated_Webcam_HD",
|
"model": "Laptop_Integrated_Webcam_HD",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "0159N7",
|
"model": "0159N7",
|
||||||
"serialNumber": "/FJBQVZ1/CN1296342I009B/",
|
"serialNumber": "/FJBQVZ1/CN1296342I009B/",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 3,
|
"usb": 3,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
"closed": true,
|
"closed": true,
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Broadcom Inc. and subsidiaries",
|
"manufacturer": "Broadcom Inc. and subsidiaries",
|
||||||
"model": "NetLink BCM5786 Gigabit Ethernet PCI Express",
|
"model": "NetLink BCM5786 Gigabit Ethernet PCI Express",
|
||||||
"serialNumber": "00:1a:6b:5e:7f:10",
|
"serialNumber": "00:1a:6b:5e:7f:10",
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
"wireless": false
|
"wireless": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"interface": "DDR",
|
"interface": "DDR",
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
"type": "RamModule"
|
"type": "RamModule"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"interface": "DDR",
|
"interface": "DDR",
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"address": 64,
|
"address": 64,
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 33,
|
"elapsed": 33,
|
||||||
"rate": 32.9274,
|
"rate": 32.9274,
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
"type": "Processor"
|
"type": "Processor"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"model": "82946GZ/GL Integrated Graphics Controller",
|
"model": "82946GZ/GL Integrated Graphics Controller",
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
"type": "GraphicCard"
|
"type": "GraphicCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"type": "TestBios",
|
"type": "TestBios",
|
||||||
"accessRange": "E"
|
"accessRange": "E"
|
||||||
|
@ -88,7 +88,7 @@
|
||||||
],
|
],
|
||||||
"device": {
|
"device": {
|
||||||
"chassis": "Microtower",
|
"chassis": "Microtower",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"appearanceRange": "D",
|
"appearanceRange": "D",
|
||||||
"functionalityRange": "D",
|
"functionalityRange": "D",
|
||||||
|
@ -112,12 +112,6 @@
|
||||||
},
|
},
|
||||||
"elapsed": 338,
|
"elapsed": 338,
|
||||||
"endTime": "2019-02-13T11:57:31.378330+00:00",
|
"endTime": "2019-02-13T11:57:31.378330+00:00",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"TestDataStorage",
|
|
||||||
"StressTest",
|
|
||||||
"Install"
|
|
||||||
],
|
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"uuid": "d7904bd3-7d0f-4918-86b1-e21bfab738f9",
|
"uuid": "d7904bd3-7d0f-4918-86b1-e21bfab738f9",
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"manufacturer": 'bar',
|
"manufacturer": 'bar',
|
||||||
"model": 'baz',
|
"model": 'baz',
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
"elapsed": 7631,
|
"elapsed": 7631,
|
||||||
|
@ -13,10 +13,6 @@
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"uuid": "5387668a-8d21-4053-a1ac-36efb97fc3ea",
|
"uuid": "5387668a-8d21-4053-a1ac-36efb97fc3ea",
|
||||||
"expectedEvents": [
|
|
||||||
"TestDataStorage",
|
|
||||||
"EraseBasic"
|
|
||||||
],
|
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
|
@ -25,7 +21,7 @@
|
||||||
"address": 64,
|
"address": 64,
|
||||||
"model": "Intel Core i3-2100 CPU @ 3.10GHz",
|
"model": "Intel Core i3-2100 CPU @ 3.10GHz",
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 0,
|
"elapsed": 0,
|
||||||
"rate": 6665.7,
|
"rate": 6665.7,
|
||||||
|
@ -39,7 +35,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": null
|
"serialNumber": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -49,7 +45,7 @@
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"model": "9905403-038.A00LF",
|
"model": "9905403-038.A00LF",
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"interface": "DDR3",
|
"interface": "DDR3",
|
||||||
"speed": 1333.0
|
"speed": 1333.0
|
||||||
},
|
},
|
||||||
|
@ -57,7 +53,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"serialNumber": "f4:6d:04:12:9b:85",
|
"serialNumber": "f4:6d:04:12:9b:85",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -68,7 +64,7 @@
|
||||||
"manufacturer": "Western Digital",
|
"manufacturer": "Western Digital",
|
||||||
"model": "WDC WD3200AAJS-2",
|
"model": "WDC WD3200AAJS-2",
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"endTime": "2018-07-13T11:54:55.100581+00:00",
|
"endTime": "2018-07-13T11:54:55.100581+00:00",
|
||||||
"steps": [
|
"steps": [
|
||||||
|
@ -112,7 +108,7 @@
|
||||||
"manufacturer": "Western Digital",
|
"manufacturer": "Western Digital",
|
||||||
"model": "WDC WD3200AAJS-0",
|
"model": "WDC WD3200AAJS-0",
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"endTime": "2018-07-13T12:55:47.331586+00:00",
|
"endTime": "2018-07-13T12:55:47.331586+00:00",
|
||||||
"steps": [
|
"steps": [
|
||||||
|
@ -154,7 +150,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"memory": 256.0
|
"memory": 256.0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -163,7 +159,7 @@
|
||||||
"manufacturer": "ASUSTeK Computer INC.",
|
"manufacturer": "ASUSTeK Computer INC.",
|
||||||
"model": "P8H61-M LE",
|
"model": "P8H61-M LE",
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"slots": 2,
|
"slots": 2,
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -14,7 +14,7 @@ components:
|
||||||
serialNumber: c1s
|
serialNumber: c1s
|
||||||
model: c1ml
|
model: c1ml
|
||||||
manufacturer: c1mr
|
manufacturer: c1mr
|
||||||
events:
|
actions:
|
||||||
- type: EraseSectors
|
- type: EraseSectors
|
||||||
startTime: '2018-06-01T08:12:06+02:00'
|
startTime: '2018-06-01T08:12:06+02:00'
|
||||||
endTime: '2018-06-01T09:12:06+02:00'
|
endTime: '2018-06-01T09:12:06+02:00'
|
||||||
|
@ -35,7 +35,7 @@ components:
|
||||||
serialNumber: p1s
|
serialNumber: p1s
|
||||||
model: p1ml
|
model: p1ml
|
||||||
manufacturer: p1mr
|
manufacturer: p1mr
|
||||||
events:
|
actions:
|
||||||
- type: BenchmarkProcessor
|
- type: BenchmarkProcessor
|
||||||
elapsed: 0
|
elapsed: 0
|
||||||
rate: 6665.7
|
rate: 6665.7
|
||||||
|
|
|
@ -1,154 +1,154 @@
|
||||||
{
|
{
|
||||||
"closed": true,
|
"closed": true,
|
||||||
"components": [
|
"components": [
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"manufacturer": "Qualcomm Atheros",
|
||||||
|
"model": "QCA9565 / AR9565 Wireless Network Adapter",
|
||||||
|
"serialNumber": "ac:e0:10:c2:e3:ac",
|
||||||
|
"type": "NetworkAdapter",
|
||||||
|
"wireless": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
|
"model": "RTL810xE PCI Express Fast Ethernet controller",
|
||||||
|
"serialNumber": "30:8d:99:25:6c:d9",
|
||||||
|
"speed": 100,
|
||||||
|
"type": "NetworkAdapter",
|
||||||
|
"wireless": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"manufacturer": "Advanced Micro Devices, Inc. AMD/ATI",
|
||||||
|
"model": "Kabini HDMI/DP Audio",
|
||||||
|
"serialNumber": null,
|
||||||
|
"type": "SoundCard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"manufacturer": "Chicony Electronics Co.,Ltd.",
|
||||||
|
"model": "HP Webcam",
|
||||||
|
"serialNumber": "0x0001",
|
||||||
|
"type": "SoundCard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"manufacturer": "Advanced Micro Devices, Inc. AMD",
|
||||||
|
"model": "FCH Azalia Controller",
|
||||||
|
"serialNumber": null,
|
||||||
|
"type": "SoundCard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"format": "SODIMM",
|
||||||
|
"interface": "DDR3",
|
||||||
|
"manufacturer": "Hynix",
|
||||||
|
"model": "HMT451S6AFR8A-PB",
|
||||||
|
"serialNumber": "11743764",
|
||||||
|
"size": 4096,
|
||||||
|
"speed": 667.0,
|
||||||
|
"type": "RamModule"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": 64,
|
||||||
|
"cores": 2,
|
||||||
|
"actions": [
|
||||||
{
|
{
|
||||||
"events": [],
|
"elapsed": 0,
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"rate": 3992.32,
|
||||||
"model": "QCA9565 / AR9565 Wireless Network Adapter",
|
"type": "BenchmarkProcessor"
|
||||||
"serialNumber": "ac:e0:10:c2:e3:ac",
|
|
||||||
"type": "NetworkAdapter",
|
|
||||||
"wireless": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"elapsed": 65,
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"rate": 65.3007,
|
||||||
"model": "RTL810xE PCI Express Fast Ethernet controller",
|
"type": "BenchmarkProcessorSysbench"
|
||||||
"serialNumber": "30:8d:99:25:6c:d9",
|
|
||||||
"speed": 100,
|
|
||||||
"type": "NetworkAdapter",
|
|
||||||
"wireless": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"events": [],
|
|
||||||
"manufacturer": "Advanced Micro Devices, Inc. AMD/ATI",
|
|
||||||
"model": "Kabini HDMI/DP Audio",
|
|
||||||
"serialNumber": null,
|
|
||||||
"type": "SoundCard"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"events": [],
|
|
||||||
"manufacturer": "Chicony Electronics Co.,Ltd.",
|
|
||||||
"model": "HP Webcam",
|
|
||||||
"serialNumber": "0x0001",
|
|
||||||
"type": "SoundCard"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"events": [],
|
|
||||||
"manufacturer": "Advanced Micro Devices, Inc. AMD",
|
|
||||||
"model": "FCH Azalia Controller",
|
|
||||||
"serialNumber": null,
|
|
||||||
"type": "SoundCard"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"events": [],
|
|
||||||
"format": "SODIMM",
|
|
||||||
"interface": "DDR3",
|
|
||||||
"manufacturer": "Hynix",
|
|
||||||
"model": "HMT451S6AFR8A-PB",
|
|
||||||
"serialNumber": "11743764",
|
|
||||||
"size": 4096,
|
|
||||||
"speed": 667.0,
|
|
||||||
"type": "RamModule"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": 64,
|
|
||||||
"cores": 2,
|
|
||||||
"events": [
|
|
||||||
{
|
|
||||||
"elapsed": 0,
|
|
||||||
"rate": 3992.32,
|
|
||||||
"type": "BenchmarkProcessor"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"elapsed": 65,
|
|
||||||
"rate": 65.3007,
|
|
||||||
"type": "BenchmarkProcessorSysbench"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"manufacturer": "Advanced Micro Devices AMD",
|
|
||||||
"model": "AMD E1-2100 APU with Radeon HD Graphics",
|
|
||||||
"serialNumber": null,
|
|
||||||
"speed": 0.9,
|
|
||||||
"threads": 2,
|
|
||||||
"type": "Processor"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"events": [
|
|
||||||
{
|
|
||||||
"elapsed": 12,
|
|
||||||
"readSpeed": 90.0,
|
|
||||||
"type": "BenchmarkDataStorage",
|
|
||||||
"writeSpeed": 30.7
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"assessment": true,
|
|
||||||
"commandTimeout": 1341,
|
|
||||||
"currentPendingSectorCount": 0,
|
|
||||||
"elapsed": 113,
|
|
||||||
"length": "Short",
|
|
||||||
"lifetime": 1782,
|
|
||||||
"offlineUncorrectable": 0,
|
|
||||||
"powerCycleCount": 806,
|
|
||||||
"reallocatedSectorCount": 224,
|
|
||||||
"reportedUncorrectableErrors": 9961472,
|
|
||||||
"severity": "Info",
|
|
||||||
"status": "Completed without error",
|
|
||||||
"type": "TestDataStorage"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": 32,
|
|
||||||
"elapsed": 690,
|
|
||||||
"name": "LinuxMint-19-x86-es-2018-12.fsa",
|
|
||||||
"severity": "Info",
|
|
||||||
"type": "Install"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"interface": "ATA",
|
|
||||||
"manufacturer": null,
|
|
||||||
"model": "HGST HTS545050A7",
|
|
||||||
"serialNumber": "TE85134N34LNSN",
|
|
||||||
"size": 476940,
|
|
||||||
"type": "HardDrive"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"events": [],
|
|
||||||
"manufacturer": "Advanced Micro Devices, Inc. AMD/ATI",
|
|
||||||
"memory": 256.0,
|
|
||||||
"model": "Kabini Radeon HD 8210",
|
|
||||||
"serialNumber": null,
|
|
||||||
"type": "GraphicCard"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"events": [],
|
|
||||||
"firewire": 0,
|
|
||||||
"manufacturer": "Hewlett-Packard",
|
|
||||||
"model": "21F7",
|
|
||||||
"pcmcia": 0,
|
|
||||||
"serial": 1,
|
|
||||||
"serialNumber": "PEHERF41U8P9TV",
|
|
||||||
"slots": 0,
|
|
||||||
"type": "Motherboard",
|
|
||||||
"usb": 5
|
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"manufacturer": "Advanced Micro Devices AMD",
|
||||||
|
"model": "AMD E1-2100 APU with Radeon HD Graphics",
|
||||||
|
"serialNumber": null,
|
||||||
|
"speed": 0.9,
|
||||||
|
"threads": 2,
|
||||||
|
"type": "Processor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"elapsed": 12,
|
||||||
|
"readSpeed": 90.0,
|
||||||
|
"type": "BenchmarkDataStorage",
|
||||||
|
"writeSpeed": 30.7
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"assessment": true,
|
||||||
|
"commandTimeout": 1341,
|
||||||
|
"currentPendingSectorCount": 0,
|
||||||
|
"elapsed": 113,
|
||||||
|
"length": "Short",
|
||||||
|
"lifetime": 1782,
|
||||||
|
"offlineUncorrectable": 0,
|
||||||
|
"powerCycleCount": 806,
|
||||||
|
"reallocatedSectorCount": 224,
|
||||||
|
"reportedUncorrectableErrors": 9961472,
|
||||||
|
"severity": "Info",
|
||||||
|
"status": "Completed without error",
|
||||||
|
"type": "TestDataStorage"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": 32,
|
||||||
|
"elapsed": 690,
|
||||||
|
"name": "LinuxMint-19-x86-es-2018-12.fsa",
|
||||||
|
"severity": "Info",
|
||||||
|
"type": "Install"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"interface": "ATA",
|
||||||
|
"manufacturer": null,
|
||||||
|
"model": "HGST HTS545050A7",
|
||||||
|
"serialNumber": "TE85134N34LNSN",
|
||||||
|
"size": 476940,
|
||||||
|
"type": "HardDrive"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"manufacturer": "Advanced Micro Devices, Inc. AMD/ATI",
|
||||||
|
"memory": 256.0,
|
||||||
|
"model": "Kabini Radeon HD 8210",
|
||||||
|
"serialNumber": null,
|
||||||
|
"type": "GraphicCard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"firewire": 0,
|
||||||
|
"manufacturer": "Hewlett-Packard",
|
||||||
|
"model": "21F7",
|
||||||
|
"pcmcia": 0,
|
||||||
|
"serial": 1,
|
||||||
|
"serialNumber": "PEHERF41U8P9TV",
|
||||||
|
"slots": 0,
|
||||||
|
"type": "Motherboard",
|
||||||
|
"usb": 5
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"device": {
|
"device": {
|
||||||
"chassis": "Netbook",
|
"chassis": "Netbook",
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"appearanceRange": "A",
|
"appearanceRange": "A",
|
||||||
"functionalityRange": "A",
|
"functionalityRange": "A",
|
||||||
"type": "VisualTest"
|
"type": "VisualTest"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"elapsed": 300,
|
"elapsed": 300,
|
||||||
"severity": "Info",
|
"severity": "Info",
|
||||||
"type": "StressTest"
|
"type": "StressTest"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"elapsed": 6,
|
"elapsed": 6,
|
||||||
"rate": 5.8783,
|
"rate": 5.8783,
|
||||||
"type": "BenchmarkRamSysbench"
|
"type": "BenchmarkRamSysbench"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"model": "HP 255 G3 Notebook",
|
"model": "HP 255 G3 Notebook",
|
||||||
|
@ -157,12 +157,6 @@
|
||||||
},
|
},
|
||||||
"elapsed": 1194,
|
"elapsed": 1194,
|
||||||
"endTime": "2019-02-13T10:13:50.535387+00:00",
|
"endTime": "2019-02-13T10:13:50.535387+00:00",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"TestDataStorage",
|
|
||||||
"StressTest",
|
|
||||||
"Install"
|
|
||||||
],
|
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"type": "Snapshot",
|
"type": "Snapshot",
|
||||||
"uuid": "ca564895-567e-4ac2-9a0d-2d1402528687",
|
"uuid": "ca564895-567e-4ac2-9a0d-2d1402528687",
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
{
|
{
|
||||||
"version": "11.0a3",
|
"version": "11.0a3",
|
||||||
"expectedEvents": [
|
|
||||||
"Benchmark",
|
|
||||||
"TestDataStorage",
|
|
||||||
"StressTest"
|
|
||||||
],
|
|
||||||
"uuid": "16467238-64bb-48e0-9058-0cba687d7db0",
|
"uuid": "16467238-64bb-48e0-9058-0cba687d7db0",
|
||||||
"components": [
|
"components": [
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false,
|
"wireless": false,
|
||||||
|
@ -17,7 +13,7 @@
|
||||||
"model": "88E8056 PCI-E Gigabit Ethernet Controller"
|
"model": "88E8056 PCI-E Gigabit Ethernet Controller"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"rate": 4.8652,
|
"rate": 4.8652,
|
||||||
"elapsed": 5,
|
"elapsed": 5,
|
||||||
|
@ -39,21 +35,21 @@
|
||||||
"address": 64
|
"address": 64
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"manufacturer": "Advanced Micro Devices, Inc. AMD/ATI",
|
"manufacturer": "Advanced Micro Devices, Inc. AMD/ATI",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"model": "Barts HDMI Audio Radeon HD 6790/6850/6870 / 7720"
|
"model": "Barts HDMI Audio Radeon HD 6790/6850/6870 / 7720"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard",
|
"type": "SoundCard",
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"model": "82801JI HD Audio Controller"
|
"model": "82801JI HD Audio Controller"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": 256.0,
|
"memory": 256.0,
|
||||||
"manufacturer": "Advanced Micro Devices, Inc. AMD/ATI",
|
"manufacturer": "Advanced Micro Devices, Inc. AMD/ATI",
|
||||||
|
@ -61,7 +57,7 @@
|
||||||
"model": "Barts XT Radeon HD 6870"
|
"model": "Barts XT Radeon HD 6870"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"elapsed": 2,
|
"elapsed": 2,
|
||||||
"type": "BenchmarkDataStorage",
|
"type": "BenchmarkDataStorage",
|
||||||
|
@ -89,7 +85,7 @@
|
||||||
"size": 228936
|
"size": 228936
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"slots": 6,
|
"slots": 6,
|
||||||
"pcmcia": 0,
|
"pcmcia": 0,
|
||||||
|
@ -103,7 +99,7 @@
|
||||||
],
|
],
|
||||||
"elapsed": 7339,
|
"elapsed": 7339,
|
||||||
"device": {
|
"device": {
|
||||||
"events": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"rate": 16.5946,
|
"rate": 16.5946,
|
||||||
"elapsed": 17,
|
"elapsed": 17,
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -22,7 +22,7 @@ def test_api_docs(client: Client):
|
||||||
'/devices/',
|
'/devices/',
|
||||||
'/tags/',
|
'/tags/',
|
||||||
'/users/login/',
|
'/users/login/',
|
||||||
'/events/',
|
'/actions/',
|
||||||
'/lots/',
|
'/lots/',
|
||||||
'/manufacturers/',
|
'/manufacturers/',
|
||||||
'/lots/{id}/children',
|
'/lots/{id}/children',
|
||||||
|
|
|
@ -11,17 +11,17 @@ def test_unique_violation():
|
||||||
'uuid': UUID('f5efd26e-8754-46bc-87bf-fbccc39d60d9'),
|
'uuid': UUID('f5efd26e-8754-46bc-87bf-fbccc39d60d9'),
|
||||||
'version': '11.0',
|
'version': '11.0',
|
||||||
'software': 'Workbench', 'elapsed': datetime.timedelta(0, 4),
|
'software': 'Workbench', 'elapsed': datetime.timedelta(0, 4),
|
||||||
'expected_events': None,
|
'expected_actions': None,
|
||||||
'id': UUID('dbdef3d8-2cac-48cb-adb8-419bc3e59687')
|
'id': UUID('dbdef3d8-2cac-48cb-adb8-419bc3e59687')
|
||||||
}
|
}
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return """(psycopg2.IntegrityError) duplicate key value violates unique constraint "snapshot_uuid_key"
|
return """(psycopg2.IntegrityError) duplicate key value violates unique constraint "snapshot_uuid_key"
|
||||||
DETAIL: Key (uuid)=(f5efd26e-8754-46bc-87bf-fbccc39d60d9) already exists.
|
DETAIL: Key (uuid)=(f5efd26e-8754-46bc-87bf-fbccc39d60d9) already exists.
|
||||||
[SQL: 'INSERT INTO snapshot (uuid, version, software, elapsed, expected_events, id)
|
[SQL: 'INSERT INTO snapshot (uuid, version, software, elapsed, expected_actions, id)
|
||||||
VALUES (%(uuid)s, %(version)s, %(software)s, %(elapsed)s, CAST(%(expected_events)s
|
VALUES (%(uuid)s, %(version)s, %(software)s, %(elapsed)s, CAST(%(expected_actions)s
|
||||||
AS snapshotexpectedevents[]), %(id)s)'] [parameters: {'uuid': UUID('f5efd26e-8754-46bc-87bf-fbccc39d60d9'),
|
AS snapshotexpectedactions[]), %(id)s)'] [parameters: {'uuid': UUID('f5efd26e-8754-46bc-87bf-fbccc39d60d9'),
|
||||||
'version': '11.0', 'software': 'Workbench', 'elapsed': datetime.timedelta(0, 4), 'expected_events': None,
|
'version': '11.0', 'software': 'Workbench', 'elapsed': datetime.timedelta(0, 4), 'expected_actions': None,
|
||||||
'id': UUID('dbdef3d8-2cac-48cb-adb8-419bc3e59687')}] (Background on this error at: http://sqlalche.me/e/gkpj)"""
|
'id': UUID('dbdef3d8-2cac-48cb-adb8-419bc3e59687')}] (Background on this error at: http://sqlalche.me/e/gkpj)"""
|
||||||
|
|
||||||
u = UniqueViolation(IntegrityErrorMock())
|
u = UniqueViolation(IntegrityErrorMock())
|
||||||
|
|
|
@ -13,6 +13,8 @@ from teal.enums import Layouts
|
||||||
from ereuse_devicehub.client import Client, UserClient
|
from ereuse_devicehub.client import Client, UserClient
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.devicehub import Devicehub
|
from ereuse_devicehub.devicehub import Devicehub
|
||||||
|
from ereuse_devicehub.resources.action import models as m
|
||||||
|
from ereuse_devicehub.resources.action.models import Remove, TestConnectivity
|
||||||
from ereuse_devicehub.resources.agent.models import Person
|
from ereuse_devicehub.resources.agent.models import Person
|
||||||
from ereuse_devicehub.resources.device import models as d
|
from ereuse_devicehub.resources.device import models as d
|
||||||
from ereuse_devicehub.resources.device.exceptions import NeedsId
|
from ereuse_devicehub.resources.device.exceptions import NeedsId
|
||||||
|
@ -21,8 +23,6 @@ from ereuse_devicehub.resources.device.sync import MismatchBetweenTags, Mismatch
|
||||||
Sync
|
Sync
|
||||||
from ereuse_devicehub.resources.enums import ComputerChassis, DisplayTech, Severity, \
|
from ereuse_devicehub.resources.enums import ComputerChassis, DisplayTech, Severity, \
|
||||||
SnapshotSoftware
|
SnapshotSoftware
|
||||||
from ereuse_devicehub.resources.event import models as m
|
|
||||||
from ereuse_devicehub.resources.event.models import Remove, TestConnectivity
|
|
||||||
from ereuse_devicehub.resources.tag.model import Tag
|
from ereuse_devicehub.resources.tag.model import Tag
|
||||||
from ereuse_devicehub.resources.user import User
|
from ereuse_devicehub.resources.user import User
|
||||||
from tests import conftest
|
from tests import conftest
|
||||||
|
@ -169,13 +169,13 @@ def test_add_remove():
|
||||||
|
|
||||||
# Test:
|
# Test:
|
||||||
# pc has only c3
|
# pc has only c3
|
||||||
events = Sync.add_remove(device=pc, components={c3, c4})
|
actions = Sync.add_remove(device=pc, components={c3, c4})
|
||||||
db.session.add_all(events)
|
db.session.add_all(actions)
|
||||||
db.session.commit() # We enforce the appliance of order_by
|
db.session.commit() # We enforce the appliance of order_by
|
||||||
assert len(events) == 1
|
assert len(actions) == 1
|
||||||
assert isinstance(events[0], Remove)
|
assert isinstance(actions[0], Remove)
|
||||||
assert events[0].device == pc2
|
assert actions[0].device == pc2
|
||||||
assert events[0].components == OrderedSet([c3])
|
assert actions[0].components == OrderedSet([c3])
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures(conftest.app_context.__name__)
|
@pytest.mark.usefixtures(conftest.app_context.__name__)
|
||||||
|
@ -396,13 +396,13 @@ def test_get_device(app: Devicehub, user: UserClient):
|
||||||
author=User(email='bar@bar.com')))
|
author=User(email='bar@bar.com')))
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
pc, _ = user.get(res=d.Device, item=1)
|
pc, _ = user.get(res=d.Device, item=1)
|
||||||
assert len(pc['events']) == 1
|
assert len(pc['actions']) == 1
|
||||||
assert pc['events'][0]['type'] == 'TestConnectivity'
|
assert pc['actions'][0]['type'] == 'TestConnectivity'
|
||||||
assert pc['events'][0]['device'] == 1
|
assert pc['actions'][0]['device'] == 1
|
||||||
assert pc['events'][0]['severity'] == 'Info'
|
assert pc['actions'][0]['severity'] == 'Info'
|
||||||
assert UUID(pc['events'][0]['author'])
|
assert UUID(pc['actions'][0]['author'])
|
||||||
assert 'events_components' not in pc, 'events_components are internal use only'
|
assert 'actions_components' not in pc, 'actions_components are internal use only'
|
||||||
assert 'events_one' not in pc, 'they are internal use only'
|
assert 'actions_one' not in pc, 'they are internal use only'
|
||||||
assert 'author' not in pc
|
assert 'author' not in pc
|
||||||
assert tuple(c['id'] for c in pc['components']) == (2, 3)
|
assert tuple(c['id'] for c in pc['components']) == (2, 3)
|
||||||
assert pc['hid'] == 'desktop-p1ma-p1mo-p1s'
|
assert pc['hid'] == 'desktop-p1ma-p1mo-p1s'
|
||||||
|
|
|
@ -4,12 +4,12 @@ from teal.utils import compiled
|
||||||
from ereuse_devicehub.client import UserClient
|
from ereuse_devicehub.client import UserClient
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.devicehub import Devicehub
|
from ereuse_devicehub.devicehub import Devicehub
|
||||||
|
from ereuse_devicehub.resources.action.models import Snapshot
|
||||||
from ereuse_devicehub.resources.device.models import Desktop, Device, GraphicCard, Laptop, Server, \
|
from ereuse_devicehub.resources.device.models import Desktop, Device, GraphicCard, Laptop, Server, \
|
||||||
SolidStateDrive
|
SolidStateDrive
|
||||||
from ereuse_devicehub.resources.device.search import DeviceSearch
|
from ereuse_devicehub.resources.device.search import DeviceSearch
|
||||||
from ereuse_devicehub.resources.device.views import Filters, Sorting
|
from ereuse_devicehub.resources.device.views import Filters, Sorting
|
||||||
from ereuse_devicehub.resources.enums import ComputerChassis
|
from ereuse_devicehub.resources.enums import ComputerChassis
|
||||||
from ereuse_devicehub.resources.event.models import Snapshot
|
|
||||||
from ereuse_devicehub.resources.lot.models import Lot
|
from ereuse_devicehub.resources.lot.models import Lot
|
||||||
from tests import conftest
|
from tests import conftest
|
||||||
from tests.conftest import file
|
from tests.conftest import file
|
||||||
|
@ -179,7 +179,7 @@ def test_device_query(user: UserClient):
|
||||||
assert i['url'] == '/devices/'
|
assert i['url'] == '/devices/'
|
||||||
assert i['items'][0]['url'] == '/devices/1'
|
assert i['items'][0]['url'] == '/devices/1'
|
||||||
pc = next(d for d in i['items'] if d['type'] == 'Desktop')
|
pc = next(d for d in i['items'] if d['type'] == 'Desktop')
|
||||||
assert len(pc['events']) == 4
|
assert len(pc['actions']) == 4
|
||||||
assert len(pc['components']) == 3
|
assert len(pc['components']) == 3
|
||||||
assert not pc['tags']
|
assert not pc['tags']
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@ import teal.marshmallow
|
||||||
from ereuse_utils.test import ANY
|
from ereuse_utils.test import ANY
|
||||||
|
|
||||||
from ereuse_devicehub.client import Client, UserClient
|
from ereuse_devicehub.client import Client, UserClient
|
||||||
|
from ereuse_devicehub.resources.action import models as e
|
||||||
from ereuse_devicehub.resources.documents import documents as docs
|
from ereuse_devicehub.resources.documents import documents as docs
|
||||||
from ereuse_devicehub.resources.event import models as e
|
|
||||||
from tests.conftest import file
|
from tests.conftest import file
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ def test_erasure_certificate_public_one(user: UserClient, client: Client):
|
||||||
accept='application/pdf')
|
accept='application/pdf')
|
||||||
assert 'application/pdf' == response.content_type
|
assert 'application/pdf' == response.content_type
|
||||||
|
|
||||||
erasure = next(e for e in snapshot['events'] if e['type'] == 'EraseSectors')
|
erasure = next(e for e in snapshot['actions'] if e['type'] == 'EraseSectors')
|
||||||
|
|
||||||
doc, response = client.get(res=docs.DocumentDef.t,
|
doc, response = client.get(res=docs.DocumentDef.t,
|
||||||
item='erasures/{}'.format(erasure['id']),
|
item='erasures/{}'.format(erasure['id']),
|
||||||
|
|
|
@ -11,11 +11,11 @@ from teal.enums import Currency, Subdivision
|
||||||
from ereuse_devicehub.client import UserClient
|
from ereuse_devicehub.client import UserClient
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.resources import enums
|
from ereuse_devicehub.resources import enums
|
||||||
|
from ereuse_devicehub.resources.action import models
|
||||||
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, Severity, TestDataStorageLength
|
from ereuse_devicehub.resources.enums import ComputerChassis, Severity, TestDataStorageLength
|
||||||
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
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ def test_author():
|
||||||
"""
|
"""
|
||||||
user = create_user()
|
user = create_user()
|
||||||
g.user = user
|
g.user = user
|
||||||
e = models.EventWithOneDevice(device=Device())
|
e = models.ActionWithOneDevice(device=Device())
|
||||||
db.session.add(e)
|
db.session.add(e)
|
||||||
assert e.author is None
|
assert e.author is None
|
||||||
assert e.author_id is None
|
assert e.author_id is None
|
||||||
|
@ -51,13 +51,13 @@ def test_erase_basic():
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
db_erasure = models.EraseBasic.query.one()
|
db_erasure = models.EraseBasic.query.one()
|
||||||
assert erasure == db_erasure
|
assert erasure == db_erasure
|
||||||
assert next(iter(db_erasure.device.events)) == erasure
|
assert next(iter(db_erasure.device.actions)) == erasure
|
||||||
assert not erasure.standards, 'EraseBasic themselves do not have standards'
|
assert not erasure.standards, 'EraseBasic themselves do not have standards'
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures(conftest.auth_app_context.__name__)
|
@pytest.mark.usefixtures(conftest.auth_app_context.__name__)
|
||||||
def test_validate_device_data_storage():
|
def test_validate_device_data_storage():
|
||||||
"""Checks the validation for data-storage-only events works."""
|
"""Checks the validation for data-storage-only actions works."""
|
||||||
# We can't set a GraphicCard
|
# We can't set a GraphicCard
|
||||||
with pytest.raises(TypeError,
|
with pytest.raises(TypeError,
|
||||||
message='EraseBasic.device must be a DataStorage '
|
message='EraseBasic.device must be a DataStorage '
|
||||||
|
@ -133,7 +133,7 @@ def test_install():
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures(conftest.auth_app_context.__name__)
|
@pytest.mark.usefixtures(conftest.auth_app_context.__name__)
|
||||||
def test_update_components_event_one():
|
def test_update_components_action_one():
|
||||||
computer = Desktop(serial_number='sn1',
|
computer = Desktop(serial_number='sn1',
|
||||||
model='ml1',
|
model='ml1',
|
||||||
manufacturer='mr1',
|
manufacturer='mr1',
|
||||||
|
@ -141,27 +141,27 @@ def test_update_components_event_one():
|
||||||
hdd = HardDrive(serial_number='foo', manufacturer='bar', model='foo-bar')
|
hdd = HardDrive(serial_number='foo', manufacturer='bar', model='foo-bar')
|
||||||
computer.components.add(hdd)
|
computer.components.add(hdd)
|
||||||
|
|
||||||
# Add event
|
# Add action
|
||||||
test = models.StressTest(elapsed=timedelta(minutes=1))
|
test = models.StressTest(elapsed=timedelta(minutes=1))
|
||||||
computer.events_one.add(test)
|
computer.actions_one.add(test)
|
||||||
assert test.device == computer
|
assert test.device == computer
|
||||||
assert next(iter(test.components)) == hdd, 'Event has to have new components'
|
assert next(iter(test.components)) == hdd, 'Action has to have new components'
|
||||||
|
|
||||||
# Remove event
|
# Remove action
|
||||||
computer.events_one.clear()
|
computer.actions_one.clear()
|
||||||
assert not test.device
|
assert not test.device
|
||||||
assert not test.components, 'Event has to loose the components'
|
assert not test.components, 'Action has to loose the components'
|
||||||
|
|
||||||
# If we add a component to a device AFTER assigning the event
|
# If we add a component to a device AFTER assigning the action
|
||||||
# to the device, the event doesn't get the new component
|
# to the device, the action doesn't get the new component
|
||||||
computer.events_one.add(test)
|
computer.actions_one.add(test)
|
||||||
ram = RamModule()
|
ram = RamModule()
|
||||||
computer.components.add(ram)
|
computer.components.add(ram)
|
||||||
assert len(test.components) == 1
|
assert len(test.components) == 1
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures(conftest.auth_app_context.__name__)
|
@pytest.mark.usefixtures(conftest.auth_app_context.__name__)
|
||||||
def test_update_components_event_multiple():
|
def test_update_components_action_multiple():
|
||||||
computer = Desktop(serial_number='sn1',
|
computer = Desktop(serial_number='sn1',
|
||||||
model='ml1',
|
model='ml1',
|
||||||
manufacturer='mr1',
|
manufacturer='mr1',
|
||||||
|
@ -174,12 +174,12 @@ def test_update_components_event_multiple():
|
||||||
assert not ready.components
|
assert not ready.components
|
||||||
|
|
||||||
# Add
|
# Add
|
||||||
computer.events_multiple.add(ready)
|
computer.actions_multiple.add(ready)
|
||||||
assert ready.devices == OrderedSet([computer])
|
assert ready.devices == OrderedSet([computer])
|
||||||
assert next(iter(ready.components)) == hdd
|
assert next(iter(ready.components)) == hdd
|
||||||
|
|
||||||
# Remove
|
# Remove
|
||||||
computer.events_multiple.remove(ready)
|
computer.actions_multiple.remove(ready)
|
||||||
assert not ready.devices
|
assert not ready.devices
|
||||||
assert not ready.components
|
assert not ready.components
|
||||||
|
|
||||||
|
@ -209,22 +209,23 @@ def test_update_parent():
|
||||||
assert not benchmark.parent
|
assert not benchmark.parent
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('event_model_state', [
|
@pytest.mark.parametrize('action_model_state', [
|
||||||
(models.ToRepair, states.Physical.ToBeRepaired),
|
(models.ToRepair, states.Physical.ToBeRepaired),
|
||||||
(models.Repair, states.Physical.Repaired),
|
(models.Repair, states.Physical.Repaired),
|
||||||
(models.ToPrepare, states.Physical.Preparing),
|
(models.ToPrepare, states.Physical.Preparing),
|
||||||
(models.ReadyToUse, states.Physical.ReadyToBeUsed),
|
(models.ReadyToUse, states.Physical.ReadyToBeUsed),
|
||||||
(models.Prepare, states.Physical.Prepared)
|
(models.Prepare, states.Physical.Prepared)
|
||||||
])
|
])
|
||||||
def test_generic_event(event_model_state: Tuple[models.Event, states.Trading], user: UserClient):
|
def test_generic_action(action_model_state: Tuple[models.Action, states.Trading],
|
||||||
"""Tests POSTing all generic events."""
|
user: UserClient):
|
||||||
event_model, state = event_model_state
|
"""Tests POSTing all generic actions."""
|
||||||
|
action_model, state = action_model_state
|
||||||
snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot)
|
snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot)
|
||||||
event = {'type': event_model.t, 'devices': [snapshot['device']['id']]}
|
action = {'type': action_model.t, 'devices': [snapshot['device']['id']]}
|
||||||
event, _ = user.post(event, res=models.Event)
|
action, _ = user.post(action, res=models.Action)
|
||||||
assert event['devices'][0]['id'] == snapshot['device']['id']
|
assert action['devices'][0]['id'] == snapshot['device']['id']
|
||||||
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
||||||
assert device['events'][-1]['id'] == event['id']
|
assert device['actions'][-1]['id'] == action['id']
|
||||||
assert device['physical'] == state.name
|
assert device['physical'] == state.name
|
||||||
|
|
||||||
|
|
||||||
|
@ -245,7 +246,7 @@ def test_live():
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
client = UserClient(app, 'foo@foo.com', 'foo', response_wrapper=app.response_class)
|
client = UserClient(app, 'foo@foo.com', 'foo', response_wrapper=app.response_class)
|
||||||
client.login()
|
client.login()
|
||||||
live, _ = client.get(res=models.Event, item=str(db_live.id))
|
live, _ = client.get(res=models.Action, item=str(db_live.id))
|
||||||
assert live['ip'] == '79.147.10.10'
|
assert live['ip'] == '79.147.10.10'
|
||||||
assert live['subdivision'] == 'ES-CA'
|
assert live['subdivision'] == 'ES-CA'
|
||||||
assert live['country'] == 'ES'
|
assert live['country'] == 'ES'
|
||||||
|
@ -265,27 +266,27 @@ def test_reserve_and_cancel(user: UserClient):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('event_model_state', [
|
@pytest.mark.parametrize('action_model_state', [
|
||||||
(models.Sell, states.Trading.Sold),
|
(models.Sell, states.Trading.Sold),
|
||||||
(models.Donate, states.Trading.Donated),
|
(models.Donate, states.Trading.Donated),
|
||||||
(models.Rent, states.Trading.Renting),
|
(models.Rent, states.Trading.Renting),
|
||||||
(models.DisposeProduct, states.Trading.ProductDisposed)
|
(models.DisposeProduct, states.Trading.ProductDisposed)
|
||||||
])
|
])
|
||||||
def test_trade(event_model_state: Tuple[models.Event, states.Trading], user: UserClient):
|
def test_trade(action_model_state: Tuple[models.Action, states.Trading], user: UserClient):
|
||||||
"""Tests POSTing all Trade events."""
|
"""Tests POSTing all Trade actions."""
|
||||||
event_model, state = event_model_state
|
action_model, state = action_model_state
|
||||||
snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot)
|
snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot)
|
||||||
event = {
|
action = {
|
||||||
'type': event_model.t,
|
'type': action_model.t,
|
||||||
'devices': [snapshot['device']['id']],
|
'devices': [snapshot['device']['id']],
|
||||||
'to': user.user['individuals'][0]['id'],
|
'to': user.user['individuals'][0]['id'],
|
||||||
'shippingDate': '2018-06-29T12:28:54',
|
'shippingDate': '2018-06-29T12:28:54',
|
||||||
'invoiceNumber': 'ABC'
|
'invoiceNumber': 'ABC'
|
||||||
}
|
}
|
||||||
event, _ = user.post(event, res=models.Event)
|
action, _ = user.post(action, res=models.Action)
|
||||||
assert event['devices'][0]['id'] == snapshot['device']['id']
|
assert action['devices'][0]['id'] == snapshot['device']['id']
|
||||||
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
||||||
assert device['events'][-1]['id'] == event['id']
|
assert device['actions'][-1]['id'] == action['id']
|
||||||
assert device['trading'] == state.name
|
assert device['trading'] == state.name
|
||||||
|
|
||||||
|
|
||||||
|
@ -306,7 +307,7 @@ def test_price_custom():
|
||||||
|
|
||||||
client = UserClient(app, 'foo@foo.com', 'foo', response_wrapper=app.response_class)
|
client = UserClient(app, 'foo@foo.com', 'foo', response_wrapper=app.response_class)
|
||||||
client.login()
|
client.login()
|
||||||
p, _ = client.get(res=models.Event, item=str(price.id))
|
p, _ = client.get(res=models.Action, item=str(price.id))
|
||||||
assert p['device']['id'] == price.device.id == computer.id
|
assert p['device']['id'] == price.device.id == computer.id
|
||||||
assert p['price'] == 25.25
|
assert p['price'] == 25.25
|
||||||
assert p['currency'] == Currency.EUR.name == 'EUR'
|
assert p['currency'] == Currency.EUR.name == 'EUR'
|
||||||
|
@ -324,7 +325,7 @@ def test_price_custom_client(user: UserClient):
|
||||||
'price': 25,
|
'price': 25,
|
||||||
'currency': Currency.EUR.name,
|
'currency': Currency.EUR.name,
|
||||||
'device': snapshot['device']['id']
|
'device': snapshot['device']['id']
|
||||||
}, res=models.Event)
|
}, res=models.Action)
|
||||||
assert 25 == price['price']
|
assert 25 == price['price']
|
||||||
assert Currency.EUR.name == price['currency']
|
assert Currency.EUR.name == price['currency']
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,13 @@ import pytest
|
||||||
|
|
||||||
from ereuse_devicehub.client import UserClient
|
from ereuse_devicehub.client import UserClient
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
|
from ereuse_devicehub.resources.action.models import Action, BenchmarkDataStorage, \
|
||||||
|
BenchmarkProcessor, RateComputer, Snapshot, VisualTest
|
||||||
|
from ereuse_devicehub.resources.action.rate.workbench.v1_0 import CannotRate
|
||||||
from ereuse_devicehub.resources.device.models import Computer, Desktop, Device, HardDrive, \
|
from ereuse_devicehub.resources.device.models import Computer, Desktop, Device, HardDrive, \
|
||||||
Processor, RamModule
|
Processor, RamModule
|
||||||
from ereuse_devicehub.resources.enums import AppearanceRange, ComputerChassis, \
|
from ereuse_devicehub.resources.enums import AppearanceRange, ComputerChassis, \
|
||||||
FunctionalityRange
|
FunctionalityRange
|
||||||
from ereuse_devicehub.resources.event.models import BenchmarkDataStorage, BenchmarkProcessor, \
|
|
||||||
Event, RateComputer, Snapshot, VisualTest
|
|
||||||
from ereuse_devicehub.resources.event.rate.workbench.v1_0 import CannotRate
|
|
||||||
from tests import conftest
|
from tests import conftest
|
||||||
from tests.conftest import file
|
from tests.conftest import file
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ def test_manual_rate_after_workbench_rate(user: UserClient):
|
||||||
'device': device['id'],
|
'device': device['id'],
|
||||||
'appearanceRange': 'A',
|
'appearanceRange': 'A',
|
||||||
'functionalityRange': 'A'
|
'functionalityRange': 'A'
|
||||||
}, res=Event)
|
}, res=Action)
|
||||||
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
||||||
assert 'A' == device['rate']['appearanceRange']
|
assert 'A' == device['rate']['appearanceRange']
|
||||||
|
|
||||||
|
@ -57,9 +57,9 @@ def test_price_from_rate():
|
||||||
|
|
||||||
pc = Desktop(chassis=ComputerChassis.Tower)
|
pc = Desktop(chassis=ComputerChassis.Tower)
|
||||||
hdd = HardDrive(size=476940)
|
hdd = HardDrive(size=476940)
|
||||||
hdd.events_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8))
|
hdd.actions_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8))
|
||||||
cpu = Processor(cores=2, speed=3.4)
|
cpu = Processor(cores=2, speed=3.4)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=27136.44))
|
cpu.actions_one.add(BenchmarkProcessor(rate=27136.44))
|
||||||
pc.components |= {
|
pc.components |= {
|
||||||
hdd,
|
hdd,
|
||||||
RamModule(size=4096, speed=1600),
|
RamModule(size=4096, speed=1600),
|
||||||
|
@ -73,8 +73,8 @@ def test_price_from_rate():
|
||||||
device=pc)
|
device=pc)
|
||||||
rate, price = RateComputer.compute(pc)
|
rate, price = RateComputer.compute(pc)
|
||||||
|
|
||||||
# events = pc.events
|
# actions = pc.actions
|
||||||
# price = next(e for e in events if isinstance(e, EreusePrice))
|
# price = next(e for e in actions if isinstance(e, EreusePrice))
|
||||||
assert price.price == Decimal('92.2001')
|
assert price.price == Decimal('92.2001')
|
||||||
assert price.retailer.standard.amount == Decimal('40.9714')
|
assert price.retailer.standard.amount == Decimal('40.9714')
|
||||||
assert price.platform.standard.amount == Decimal('18.8434')
|
assert price.platform.standard.amount == Decimal('18.8434')
|
||||||
|
@ -111,8 +111,8 @@ def test_no_rate_if_no_visual_test(user: UserClient):
|
||||||
"""
|
"""
|
||||||
# Upload a basic snapshot
|
# Upload a basic snapshot
|
||||||
s = file('basic.snapshot')
|
s = file('basic.snapshot')
|
||||||
# Delete snapshot device events
|
# Delete snapshot device actions
|
||||||
del s['device']['events']
|
del s['device']['actions']
|
||||||
snapshot, _ = user.post(s, res=Snapshot)
|
snapshot, _ = user.post(s, res=Snapshot)
|
||||||
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
||||||
# How to assert CannotRate Exception
|
# How to assert CannotRate Exception
|
||||||
|
@ -135,6 +135,6 @@ def test_multiple_rates(user: UserClient):
|
||||||
ensuring that the tests / benchmarks...
|
ensuring that the tests / benchmarks...
|
||||||
from the first rate do not contaminate the second rate.
|
from the first rate do not contaminate the second rate.
|
||||||
|
|
||||||
This ensures that rates only takes the last version of events
|
This ensures that rates only takes the last version of actions
|
||||||
and components (in case device has new components, for example).
|
and components (in case device has new components, for example).
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -15,12 +15,12 @@ import math
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from ereuse_devicehub.resources.action.models import BenchmarkDataStorage, BenchmarkProcessor, \
|
||||||
|
VisualTest
|
||||||
|
from ereuse_devicehub.resources.action.rate.workbench.v1_0 import DataStorageRate, ProcessorRate, \
|
||||||
|
RamRate, RateAlgorithm
|
||||||
from ereuse_devicehub.resources.device.models import Desktop, HardDrive, Processor, RamModule
|
from ereuse_devicehub.resources.device.models import Desktop, HardDrive, Processor, RamModule
|
||||||
from ereuse_devicehub.resources.enums import AppearanceRange, ComputerChassis, FunctionalityRange
|
from ereuse_devicehub.resources.enums import AppearanceRange, ComputerChassis, FunctionalityRange
|
||||||
from ereuse_devicehub.resources.event.models import BenchmarkDataStorage, BenchmarkProcessor, \
|
|
||||||
VisualTest
|
|
||||||
from ereuse_devicehub.resources.event.rate.workbench.v1_0 import DataStorageRate, ProcessorRate, \
|
|
||||||
RamRate, RateAlgorithm
|
|
||||||
|
|
||||||
|
|
||||||
def test_rate_data_storage_rate():
|
def test_rate_data_storage_rate():
|
||||||
|
@ -30,14 +30,14 @@ def test_rate_data_storage_rate():
|
||||||
"""
|
"""
|
||||||
|
|
||||||
hdd_1969 = HardDrive(size=476940)
|
hdd_1969 = HardDrive(size=476940)
|
||||||
hdd_1969.events_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8))
|
hdd_1969.actions_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8))
|
||||||
|
|
||||||
data_storage_rate = DataStorageRate().compute([hdd_1969])
|
data_storage_rate = DataStorageRate().compute([hdd_1969])
|
||||||
|
|
||||||
assert math.isclose(data_storage_rate, 4.02, rel_tol=0.001)
|
assert math.isclose(data_storage_rate, 4.02, rel_tol=0.001)
|
||||||
|
|
||||||
hdd_3054 = HardDrive(size=476940)
|
hdd_3054 = HardDrive(size=476940)
|
||||||
hdd_3054.events_one.add(BenchmarkDataStorage(read_speed=158, write_speed=34.7))
|
hdd_3054.actions_one.add(BenchmarkDataStorage(read_speed=158, write_speed=34.7))
|
||||||
|
|
||||||
# calculate DataStorage Rate
|
# calculate DataStorage Rate
|
||||||
data_storage_rate = DataStorageRate().compute([hdd_3054])
|
data_storage_rate = DataStorageRate().compute([hdd_3054])
|
||||||
|
@ -45,14 +45,14 @@ def test_rate_data_storage_rate():
|
||||||
assert math.isclose(data_storage_rate, 4.07, rel_tol=0.001)
|
assert math.isclose(data_storage_rate, 4.07, rel_tol=0.001)
|
||||||
|
|
||||||
hdd_81 = HardDrive(size=76319)
|
hdd_81 = HardDrive(size=76319)
|
||||||
hdd_81.events_one.add(BenchmarkDataStorage(read_speed=72.2, write_speed=24.3))
|
hdd_81.actions_one.add(BenchmarkDataStorage(read_speed=72.2, write_speed=24.3))
|
||||||
|
|
||||||
data_storage_rate = DataStorageRate().compute([hdd_81])
|
data_storage_rate = DataStorageRate().compute([hdd_81])
|
||||||
|
|
||||||
assert math.isclose(data_storage_rate, 2.61, rel_tol=0.001)
|
assert math.isclose(data_storage_rate, 2.61, rel_tol=0.001)
|
||||||
|
|
||||||
hdd_1556 = HardDrive(size=152587)
|
hdd_1556 = HardDrive(size=152587)
|
||||||
hdd_1556.events_one.add(BenchmarkDataStorage(read_speed=78.1, write_speed=24.4))
|
hdd_1556.actions_one.add(BenchmarkDataStorage(read_speed=78.1, write_speed=24.4))
|
||||||
|
|
||||||
data_storage_rate = DataStorageRate().compute([hdd_1556])
|
data_storage_rate = DataStorageRate().compute([hdd_1556])
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ def test_rate_data_storage_size_is_null():
|
||||||
"""
|
"""
|
||||||
|
|
||||||
hdd_null = HardDrive(size=None)
|
hdd_null = HardDrive(size=None)
|
||||||
hdd_null.events_one.add(BenchmarkDataStorage(read_speed=0, write_speed=0))
|
hdd_null.actions_one.add(BenchmarkDataStorage(read_speed=0, write_speed=0))
|
||||||
|
|
||||||
data_storage_rate = DataStorageRate().compute([hdd_null])
|
data_storage_rate = DataStorageRate().compute([hdd_null])
|
||||||
assert data_storage_rate is None
|
assert data_storage_rate is None
|
||||||
|
@ -78,7 +78,7 @@ def test_rate_no_data_storage():
|
||||||
Test without data storage devices
|
Test without data storage devices
|
||||||
"""
|
"""
|
||||||
hdd_null = HardDrive()
|
hdd_null = HardDrive()
|
||||||
hdd_null.events_one.add(BenchmarkDataStorage(read_speed=0, write_speed=0))
|
hdd_null.actions_one.add(BenchmarkDataStorage(read_speed=0, write_speed=0))
|
||||||
data_storage_rate = DataStorageRate().compute([hdd_null])
|
data_storage_rate = DataStorageRate().compute([hdd_null])
|
||||||
assert data_storage_rate is None
|
assert data_storage_rate is None
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ def test_rate_processor_rate():
|
||||||
|
|
||||||
cpu = Processor(cores=1, speed=1.6)
|
cpu = Processor(cores=1, speed=1.6)
|
||||||
# add score processor benchmark
|
# add score processor benchmark
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=3192.34))
|
cpu.actions_one.add(BenchmarkProcessor(rate=3192.34))
|
||||||
|
|
||||||
processor_rate = ProcessorRate().compute(cpu)
|
processor_rate = ProcessorRate().compute(cpu)
|
||||||
|
|
||||||
|
@ -194,14 +194,14 @@ def test_rate_processor_rate_2cores():
|
||||||
|
|
||||||
cpu = Processor(cores=2, speed=3.4)
|
cpu = Processor(cores=2, speed=3.4)
|
||||||
# add score processor benchmark
|
# add score processor benchmark
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=27136.44))
|
cpu.actions_one.add(BenchmarkProcessor(rate=27136.44))
|
||||||
|
|
||||||
processor_rate = ProcessorRate().compute(cpu)
|
processor_rate = ProcessorRate().compute(cpu)
|
||||||
|
|
||||||
assert math.isclose(processor_rate, 3.95, rel_tol=0.001)
|
assert math.isclose(processor_rate, 3.95, rel_tol=0.001)
|
||||||
|
|
||||||
cpu = Processor(cores=2, speed=3.3)
|
cpu = Processor(cores=2, speed=3.3)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=26339.48))
|
cpu.actions_one.add(BenchmarkProcessor(rate=26339.48))
|
||||||
|
|
||||||
processor_rate = ProcessorRate().compute(cpu)
|
processor_rate = ProcessorRate().compute(cpu)
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ def test_rate_processor_with_null_cores():
|
||||||
Test with processor device have null number of cores
|
Test with processor device have null number of cores
|
||||||
"""
|
"""
|
||||||
cpu = Processor(cores=None, speed=3.3)
|
cpu = Processor(cores=None, speed=3.3)
|
||||||
cpu.events_one.add(BenchmarkProcessor())
|
cpu.actions_one.add(BenchmarkProcessor())
|
||||||
|
|
||||||
processor_rate = ProcessorRate().compute(cpu)
|
processor_rate = ProcessorRate().compute(cpu)
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ def test_rate_processor_with_null_speed():
|
||||||
Test with processor device have null speed value
|
Test with processor device have null speed value
|
||||||
"""
|
"""
|
||||||
cpu = Processor(cores=1, speed=None)
|
cpu = Processor(cores=1, speed=None)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=0))
|
cpu.actions_one.add(BenchmarkProcessor(rate=0))
|
||||||
|
|
||||||
processor_rate = ProcessorRate().compute(cpu)
|
processor_rate = ProcessorRate().compute(cpu)
|
||||||
|
|
||||||
|
@ -239,11 +239,11 @@ def test_rate_computer_rate():
|
||||||
price = 92.2
|
price = 92.2
|
||||||
# add components characteristics of pc with id = 1193
|
# add components characteristics of pc with id = 1193
|
||||||
hdd_1969 = HardDrive(size=476940)
|
hdd_1969 = HardDrive(size=476940)
|
||||||
hdd_1969.events_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8))
|
hdd_1969.actions_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8))
|
||||||
ram1 = RamModule(size=4096, speed=1600)
|
ram1 = RamModule(size=4096, speed=1600)
|
||||||
ram2 = RamModule(size=2048, speed=1067)
|
ram2 = RamModule(size=2048, speed=1067)
|
||||||
cpu = Processor(cores=2, speed=3.4)
|
cpu = Processor(cores=2, speed=3.4)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=27136.44))
|
cpu.actions_one.add(BenchmarkProcessor(rate=27136.44))
|
||||||
pc_1193.components.add(hdd_1969, ram1, ram2, cpu)
|
pc_1193.components.add(hdd_1969, ram1, ram2, cpu)
|
||||||
# add functionality and appearance range
|
# add functionality and appearance range
|
||||||
rate_pc_1193 = WorkbenchRate(appearance_range=AppearanceRange.A, functionality_range=FunctionalityRange.A)
|
rate_pc_1193 = WorkbenchRate(appearance_range=AppearanceRange.A, functionality_range=FunctionalityRange.A)
|
||||||
|
@ -256,10 +256,10 @@ def test_rate_computer_rate():
|
||||||
pc_1201 = Computer()
|
pc_1201 = Computer()
|
||||||
price = 69.6
|
price = 69.6
|
||||||
hdd_3054 = HardDrive(size=476940)
|
hdd_3054 = HardDrive(size=476940)
|
||||||
hdd_3054.events_one.add(BenchmarkDataStorage(read_speed=158, write_speed=34.7))
|
hdd_3054.actions_one.add(BenchmarkDataStorage(read_speed=158, write_speed=34.7))
|
||||||
ram1 = RamModule(size=2048, speed=1333)
|
ram1 = RamModule(size=2048, speed=1333)
|
||||||
cpu = Processor(cores=2, speed=3.3)
|
cpu = Processor(cores=2, speed=3.3)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=26339.48))
|
cpu.actions_one.add(BenchmarkProcessor(rate=26339.48))
|
||||||
pc_1201.components.add(hdd_3054, ram1, cpu)
|
pc_1201.components.add(hdd_3054, ram1, cpu)
|
||||||
# add functionality and appearance range
|
# add functionality and appearance range
|
||||||
rate_pc_1201 = WorkbenchRate(appearance_range=AppearanceRange.B, functionality_range=FunctionalityRange.A)
|
rate_pc_1201 = WorkbenchRate(appearance_range=AppearanceRange.B, functionality_range=FunctionalityRange.A)
|
||||||
|
@ -272,13 +272,13 @@ def test_rate_computer_rate():
|
||||||
pc_79 = Computer()
|
pc_79 = Computer()
|
||||||
price = VeryLow
|
price = VeryLow
|
||||||
hdd_81 = HardDrive(size=76319)
|
hdd_81 = HardDrive(size=76319)
|
||||||
hdd_81.events_one.add(BenchmarkDataStorage(read_speed=72.2, write_speed=24.3))
|
hdd_81.actions_one.add(BenchmarkDataStorage(read_speed=72.2, write_speed=24.3))
|
||||||
ram1 = RamModule(size=512, speed=667)
|
ram1 = RamModule(size=512, speed=667)
|
||||||
ram2 = RamModule(size=512, speed=800)
|
ram2 = RamModule(size=512, speed=800)
|
||||||
ram3 = RamModule(size=512, speed=667)
|
ram3 = RamModule(size=512, speed=667)
|
||||||
ram4 = RamModule(size=512, speed=533)
|
ram4 = RamModule(size=512, speed=533)
|
||||||
cpu = Processor(cores=1, speed=1.6)
|
cpu = Processor(cores=1, speed=1.6)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=3192.34))
|
cpu.actions_one.add(BenchmarkProcessor(rate=3192.34))
|
||||||
pc_79.components.add(hdd_81, ram1, ram2, ram3, ram4, cpu)
|
pc_79.components.add(hdd_81, ram1, ram2, ram3, ram4, cpu)
|
||||||
# add functionality and appearance range
|
# add functionality and appearance range
|
||||||
rate_pc_79 = WorkbenchRate(appearance_range=AppearanceRange.C, functionality_range=FunctionalityRange.A)
|
rate_pc_79 = WorkbenchRate(appearance_range=AppearanceRange.C, functionality_range=FunctionalityRange.A)
|
||||||
|
@ -291,10 +291,10 @@ def test_rate_computer_rate():
|
||||||
pc_798 = Computer()
|
pc_798 = Computer()
|
||||||
price = 50
|
price = 50
|
||||||
hdd_1556 = HardDrive(size=152587)
|
hdd_1556 = HardDrive(size=152587)
|
||||||
hdd_1556.events_one.add(BenchmarkDataStorage(read_speed=78.1, write_speed=24.4))
|
hdd_1556.actions_one.add(BenchmarkDataStorage(read_speed=78.1, write_speed=24.4))
|
||||||
ram0 = RamModule(size=0, speed=None)
|
ram0 = RamModule(size=0, speed=None)
|
||||||
cpu = Processor(cores=2, speed=2.5)
|
cpu = Processor(cores=2, speed=2.5)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=9974.3))
|
cpu.actions_one.add(BenchmarkProcessor(rate=9974.3))
|
||||||
pc_798.components.add(hdd_1556, ram0, cpu)
|
pc_798.components.add(hdd_1556, ram0, cpu)
|
||||||
# add functionality and appearance range
|
# add functionality and appearance range
|
||||||
rate_pc_798 = WorkbenchRate(appearance_range=AppearanceRange.B, functionality_range=FunctionalityRange.A)
|
rate_pc_798 = WorkbenchRate(appearance_range=AppearanceRange.B, functionality_range=FunctionalityRange.A)
|
||||||
|
@ -308,9 +308,9 @@ def test_rate_computer_rate():
|
||||||
# Create a new Computer with components characteristics of pc with id = 1193
|
# Create a new Computer with components characteristics of pc with id = 1193
|
||||||
pc_test = Desktop(chassis=ComputerChassis.Tower)
|
pc_test = Desktop(chassis=ComputerChassis.Tower)
|
||||||
data_storage = HardDrive(size=476940)
|
data_storage = HardDrive(size=476940)
|
||||||
data_storage.events_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8))
|
data_storage.actions_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8))
|
||||||
cpu = Processor(cores=2, speed=3.4)
|
cpu = Processor(cores=2, speed=3.4)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=27136.44))
|
cpu.actions_one.add(BenchmarkProcessor(rate=27136.44))
|
||||||
pc_test.components |= {
|
pc_test.components |= {
|
||||||
data_storage,
|
data_storage,
|
||||||
RamModule(size=4096, speed=1600),
|
RamModule(size=4096, speed=1600),
|
||||||
|
@ -336,9 +336,9 @@ def test_rate_computer_rate():
|
||||||
# Create a new Computer with components characteristics of pc with id = 1201
|
# Create a new Computer with components characteristics of pc with id = 1201
|
||||||
pc_test = Desktop(chassis=ComputerChassis.Tower)
|
pc_test = Desktop(chassis=ComputerChassis.Tower)
|
||||||
data_storage = HardDrive(size=476940)
|
data_storage = HardDrive(size=476940)
|
||||||
data_storage.events_one.add(BenchmarkDataStorage(read_speed=158, write_speed=34.7))
|
data_storage.actions_one.add(BenchmarkDataStorage(read_speed=158, write_speed=34.7))
|
||||||
cpu = Processor(cores=2, speed=3.3)
|
cpu = Processor(cores=2, speed=3.3)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=26339.48))
|
cpu.actions_one.add(BenchmarkProcessor(rate=26339.48))
|
||||||
pc_test.components |= {
|
pc_test.components |= {
|
||||||
data_storage,
|
data_storage,
|
||||||
RamModule(size=2048, speed=1333),
|
RamModule(size=2048, speed=1333),
|
||||||
|
@ -363,9 +363,9 @@ def test_rate_computer_rate():
|
||||||
# Create a new Computer with components characteristics of pc with id = 79
|
# Create a new Computer with components characteristics of pc with id = 79
|
||||||
pc_test = Desktop(chassis=ComputerChassis.Tower)
|
pc_test = Desktop(chassis=ComputerChassis.Tower)
|
||||||
data_storage = HardDrive(size=76319)
|
data_storage = HardDrive(size=76319)
|
||||||
data_storage.events_one.add(BenchmarkDataStorage(read_speed=72.2, write_speed=24.3))
|
data_storage.actions_one.add(BenchmarkDataStorage(read_speed=72.2, write_speed=24.3))
|
||||||
cpu = Processor(cores=1, speed=1.6)
|
cpu = Processor(cores=1, speed=1.6)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=3192.34))
|
cpu.actions_one.add(BenchmarkProcessor(rate=3192.34))
|
||||||
pc_test.components |= {
|
pc_test.components |= {
|
||||||
data_storage,
|
data_storage,
|
||||||
RamModule(size=512, speed=667),
|
RamModule(size=512, speed=667),
|
||||||
|
@ -392,9 +392,9 @@ def test_rate_computer_rate():
|
||||||
# Create a new Computer with components characteristics of pc with id = 798
|
# Create a new Computer with components characteristics of pc with id = 798
|
||||||
pc_test = Desktop(chassis=ComputerChassis.Tower)
|
pc_test = Desktop(chassis=ComputerChassis.Tower)
|
||||||
data_storage = HardDrive(size=152587)
|
data_storage = HardDrive(size=152587)
|
||||||
data_storage.events_one.add(BenchmarkDataStorage(read_speed=78.1, write_speed=24.4))
|
data_storage.actions_one.add(BenchmarkDataStorage(read_speed=78.1, write_speed=24.4))
|
||||||
cpu = Processor(cores=2, speed=2.5)
|
cpu = Processor(cores=2, speed=2.5)
|
||||||
cpu.events_one.add(BenchmarkProcessor(rate=9974.3))
|
cpu.actions_one.add(BenchmarkProcessor(rate=9974.3))
|
||||||
pc_test.components |= {
|
pc_test.components |= {
|
||||||
data_storage,
|
data_storage,
|
||||||
RamModule(size=0, speed=None),
|
RamModule(size=0, speed=None),
|
||||||
|
|
|
@ -6,8 +6,8 @@ from pathlib import Path
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from ereuse_devicehub.client import UserClient
|
from ereuse_devicehub.client import UserClient
|
||||||
|
from ereuse_devicehub.resources.action.models import Snapshot
|
||||||
from ereuse_devicehub.resources.documents import documents
|
from ereuse_devicehub.resources.documents import documents
|
||||||
from ereuse_devicehub.resources.event.models import Snapshot
|
|
||||||
from tests.conftest import file
|
from tests.conftest import file
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,14 +11,14 @@ from teal.marshmallow import ValidationError
|
||||||
from ereuse_devicehub.client import UserClient
|
from ereuse_devicehub.client import UserClient
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.devicehub import Devicehub
|
from ereuse_devicehub.devicehub import Devicehub
|
||||||
|
from ereuse_devicehub.resources.action.models import Action, BenchmarkDataStorage, \
|
||||||
|
BenchmarkProcessor, EraseSectors, RateComputer, Snapshot, SnapshotRequest, VisualTest
|
||||||
from ereuse_devicehub.resources.device import models as m
|
from ereuse_devicehub.resources.device import models as m
|
||||||
from ereuse_devicehub.resources.device.exceptions import NeedsId
|
from ereuse_devicehub.resources.device.exceptions import NeedsId
|
||||||
from ereuse_devicehub.resources.device.models import SolidStateDrive
|
from ereuse_devicehub.resources.device.models import SolidStateDrive
|
||||||
from ereuse_devicehub.resources.device.sync import MismatchBetweenProperties, \
|
from ereuse_devicehub.resources.device.sync import MismatchBetweenProperties, \
|
||||||
MismatchBetweenTagsAndHid
|
MismatchBetweenTagsAndHid
|
||||||
from ereuse_devicehub.resources.enums import ComputerChassis, SnapshotSoftware
|
from ereuse_devicehub.resources.enums import ComputerChassis, SnapshotSoftware
|
||||||
from ereuse_devicehub.resources.event.models import BenchmarkDataStorage, BenchmarkProcessor, \
|
|
||||||
EraseSectors, Event, RateComputer, Snapshot, SnapshotRequest, VisualTest
|
|
||||||
from ereuse_devicehub.resources.tag import Tag
|
from ereuse_devicehub.resources.tag import Tag
|
||||||
from ereuse_devicehub.resources.user.models import User
|
from ereuse_devicehub.resources.user.models import User
|
||||||
from tests.conftest import file
|
from tests.conftest import file
|
||||||
|
@ -42,7 +42,7 @@ def test_snapshot_model():
|
||||||
db.session.add(snapshot)
|
db.session.add(snapshot)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
device = m.Desktop.query.one() # type: m.Desktop
|
device = m.Desktop.query.one() # type: m.Desktop
|
||||||
e1 = device.events[0]
|
e1 = device.actions[0]
|
||||||
assert isinstance(e1, Snapshot), 'Creation order must be preserved: 1. snapshot, 2. WR'
|
assert isinstance(e1, Snapshot), 'Creation order must be preserved: 1. snapshot, 2. WR'
|
||||||
db.session.delete(device)
|
db.session.delete(device)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
@ -66,9 +66,9 @@ def test_snapshot_post(user: UserClient):
|
||||||
Tests the post snapshot endpoint (validation, etc), data correctness,
|
Tests the post snapshot endpoint (validation, etc), data correctness,
|
||||||
and relationship correctness.
|
and relationship correctness.
|
||||||
"""
|
"""
|
||||||
# TODO add all event_types to check, how to add correctly??
|
# TODO add all action_types to check, how to add correctly??
|
||||||
snapshot = snapshot_and_check(user, file('basic.snapshot'),
|
snapshot = snapshot_and_check(user, file('basic.snapshot'),
|
||||||
event_types=(
|
action_types=(
|
||||||
BenchmarkProcessor.t,
|
BenchmarkProcessor.t,
|
||||||
VisualTest.t,
|
VisualTest.t,
|
||||||
RateComputer.t
|
RateComputer.t
|
||||||
|
@ -79,7 +79,7 @@ def test_snapshot_post(user: UserClient):
|
||||||
assert snapshot['uuid'] == 'f5efd26e-8754-46bc-87bf-fbccc39d60d9'
|
assert snapshot['uuid'] == 'f5efd26e-8754-46bc-87bf-fbccc39d60d9'
|
||||||
assert snapshot['elapsed'] == 4
|
assert snapshot['elapsed'] == 4
|
||||||
assert snapshot['author']['id'] == user.user['id']
|
assert snapshot['author']['id'] == user.user['id']
|
||||||
assert 'events' not in snapshot['device']
|
assert 'actions' not in snapshot['device']
|
||||||
assert 'author' not in snapshot['device']
|
assert 'author' not in snapshot['device']
|
||||||
device, _ = user.get(res=m.Device, item=snapshot['device']['id'])
|
device, _ = user.get(res=m.Device, item=snapshot['device']['id'])
|
||||||
key = itemgetter('serialNumber')
|
key = itemgetter('serialNumber')
|
||||||
|
@ -89,8 +89,8 @@ def test_snapshot_post(user: UserClient):
|
||||||
|
|
||||||
assert {c['type'] for c in snapshot['components']} == {m.GraphicCard.t, m.RamModule.t,
|
assert {c['type'] for c in snapshot['components']} == {m.GraphicCard.t, m.RamModule.t,
|
||||||
m.Processor.t}
|
m.Processor.t}
|
||||||
rate = next(e for e in snapshot['events'] if e['type'] == RateComputer.t)
|
rate = next(e for e in snapshot['actions'] if e['type'] == RateComputer.t)
|
||||||
rate, _ = user.get(res=Event, item=rate['id'])
|
rate, _ = user.get(res=Action, item=rate['id'])
|
||||||
assert rate['device']['id'] == snapshot['device']['id']
|
assert rate['device']['id'] == snapshot['device']['id']
|
||||||
rate['components'].sort(key=key)
|
rate['components'].sort(key=key)
|
||||||
assert rate['components'] == snapshot['components']
|
assert rate['components'] == snapshot['components']
|
||||||
|
@ -103,13 +103,13 @@ def test_snapshot_component_add_remove(user: UserClient):
|
||||||
All computers generate HID.
|
All computers generate HID.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_events_info(events: List[dict]) -> tuple:
|
def get_actions_info(actions: List[dict]) -> tuple:
|
||||||
return tuple(
|
return tuple(
|
||||||
(
|
(
|
||||||
e['type'],
|
e['type'],
|
||||||
[c['serialNumber'] for c in e['components']]
|
[c['serialNumber'] for c in e['components']]
|
||||||
)
|
)
|
||||||
for e in user.get_many(res=Event, resources=events, key='id')
|
for e in user.get_many(res=Action, resources=actions, key='id')
|
||||||
)
|
)
|
||||||
|
|
||||||
# We add the first device (2 times). The distribution of components
|
# We add the first device (2 times). The distribution of components
|
||||||
|
@ -118,7 +118,7 @@ def test_snapshot_component_add_remove(user: UserClient):
|
||||||
s1 = file('1-device-with-components.snapshot')
|
s1 = file('1-device-with-components.snapshot')
|
||||||
snapshot1 = snapshot_and_check(user,
|
snapshot1 = snapshot_and_check(user,
|
||||||
s1,
|
s1,
|
||||||
event_types=(BenchmarkProcessor.t,),
|
action_types=(BenchmarkProcessor.t,),
|
||||||
perform_second_snapshot=False)
|
perform_second_snapshot=False)
|
||||||
pc1_id = snapshot1['device']['id']
|
pc1_id = snapshot1['device']['id']
|
||||||
pc1, _ = user.get(res=m.Device, item=pc1_id)
|
pc1, _ = user.get(res=m.Device, item=pc1_id)
|
||||||
|
@ -126,22 +126,22 @@ def test_snapshot_component_add_remove(user: UserClient):
|
||||||
assert tuple(c['serialNumber'] for c in pc1['components']) == ('p1c1s', 'p1c2s', 'p1c3s')
|
assert tuple(c['serialNumber'] for c in pc1['components']) == ('p1c1s', 'p1c2s', 'p1c3s')
|
||||||
# Components contain parent
|
# Components contain parent
|
||||||
assert all(c['parent'] == pc1_id for c in pc1['components'])
|
assert all(c['parent'] == pc1_id for c in pc1['components'])
|
||||||
# pc has two events: Snapshot and the BenchmarkProcessor
|
# pc has two actions: Snapshot and the BenchmarkProcessor
|
||||||
# TODO change assert to len(pc1['events']) == 2 cause we add BenchmarkProcessor event
|
# TODO change assert to len(pc1['actions']) == 2 cause we add BenchmarkProcessor action
|
||||||
assert len(pc1['events']) == 2
|
assert len(pc1['actions']) == 2
|
||||||
# TODO pc1['events'][0]['type'] == BenchmarkProcessor.t
|
# TODO pc1['actions'][0]['type'] == BenchmarkProcessor.t
|
||||||
assert pc1['events'][1]['type'] == Snapshot.t
|
assert pc1['actions'][1]['type'] == Snapshot.t
|
||||||
# p1c1s has Snapshot
|
# p1c1s has Snapshot
|
||||||
p1c1s, _ = user.get(res=m.Device, item=pc1['components'][0]['id'])
|
p1c1s, _ = user.get(res=m.Device, item=pc1['components'][0]['id'])
|
||||||
assert tuple(e['type'] for e in p1c1s['events']) == ('Snapshot',)
|
assert tuple(e['type'] for e in p1c1s['actions']) == ('Snapshot',)
|
||||||
|
|
||||||
# We register a new device
|
# We register a new device
|
||||||
# It has the processor of the first one (p1c2s)
|
# It has the processor of the first one (p1c2s)
|
||||||
# PC 1: p1c1s, p1c3s. PC 2: p2c1s, p1c2s
|
# PC 1: p1c1s, p1c3s. PC 2: p2c1s, p1c2s
|
||||||
# Events PC1: Snapshot, Remove. PC2: Snapshot
|
# Actions PC1: Snapshot, Remove. PC2: Snapshot
|
||||||
s2 = file('2-second-device-with-components-of-first.snapshot')
|
s2 = file('2-second-device-with-components-of-first.snapshot')
|
||||||
# num_events = 2 = Remove, Add
|
# num_actions = 2 = Remove, Add
|
||||||
snapshot2 = snapshot_and_check(user, s2, event_types=('Remove',),
|
snapshot2 = snapshot_and_check(user, s2, action_types=('Remove',),
|
||||||
perform_second_snapshot=False)
|
perform_second_snapshot=False)
|
||||||
pc2_id = snapshot2['device']['id']
|
pc2_id = snapshot2['device']['id']
|
||||||
pc1, _ = user.get(res=m.Device, item=pc1_id)
|
pc1, _ = user.get(res=m.Device, item=pc1_id)
|
||||||
|
@ -149,14 +149,14 @@ def test_snapshot_component_add_remove(user: UserClient):
|
||||||
# PC1
|
# PC1
|
||||||
assert tuple(c['serialNumber'] for c in pc1['components']) == ('p1c1s', 'p1c3s')
|
assert tuple(c['serialNumber'] for c in pc1['components']) == ('p1c1s', 'p1c3s')
|
||||||
assert all(c['parent'] == pc1_id for c in pc1['components'])
|
assert all(c['parent'] == pc1_id for c in pc1['components'])
|
||||||
assert tuple(e['type'] for e in pc1['events']) == ('BenchmarkProcessor', 'Snapshot', 'Remove')
|
assert tuple(e['type'] for e in pc1['actions']) == ('BenchmarkProcessor', 'Snapshot', 'Remove')
|
||||||
# PC2
|
# PC2
|
||||||
assert tuple(c['serialNumber'] for c in pc2['components']) == ('p1c2s', 'p2c1s')
|
assert tuple(c['serialNumber'] for c in pc2['components']) == ('p1c2s', 'p2c1s')
|
||||||
assert all(c['parent'] == pc2_id for c in pc2['components'])
|
assert all(c['parent'] == pc2_id for c in pc2['components'])
|
||||||
assert tuple(e['type'] for e in pc2['events']) == ('Snapshot',)
|
assert tuple(e['type'] for e in pc2['actions']) == ('Snapshot',)
|
||||||
# p1c2s has two Snapshots, a Remove and an Add
|
# p1c2s has two Snapshots, a Remove and an Add
|
||||||
p1c2s, _ = user.get(res=m.Device, item=pc2['components'][0]['id'])
|
p1c2s, _ = user.get(res=m.Device, item=pc2['components'][0]['id'])
|
||||||
assert tuple(e['type'] for e in p1c2s['events']) == (
|
assert tuple(e['type'] for e in p1c2s['actions']) == (
|
||||||
'BenchmarkProcessor', 'Snapshot', 'Snapshot', 'Remove'
|
'BenchmarkProcessor', 'Snapshot', 'Snapshot', 'Remove'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ def test_snapshot_component_add_remove(user: UserClient):
|
||||||
# PC1
|
# PC1
|
||||||
assert {c['serialNumber'] for c in pc1['components']} == {'p1c2s', 'p1c3s'}
|
assert {c['serialNumber'] for c in pc1['components']} == {'p1c2s', 'p1c3s'}
|
||||||
assert all(c['parent'] == pc1_id for c in pc1['components'])
|
assert all(c['parent'] == pc1_id for c in pc1['components'])
|
||||||
assert tuple(get_events_info(pc1['events'])) == (
|
assert tuple(get_actions_info(pc1['actions'])) == (
|
||||||
# id, type, components, snapshot
|
# id, type, components, snapshot
|
||||||
('BenchmarkProcessor', []), # first BenchmarkProcessor
|
('BenchmarkProcessor', []), # first BenchmarkProcessor
|
||||||
('Snapshot', ['p1c1s', 'p1c2s', 'p1c3s']), # first Snapshot1
|
('Snapshot', ['p1c1s', 'p1c2s', 'p1c3s']), # first Snapshot1
|
||||||
|
@ -181,13 +181,13 @@ def test_snapshot_component_add_remove(user: UserClient):
|
||||||
# PC2
|
# PC2
|
||||||
assert tuple(c['serialNumber'] for c in pc2['components']) == ('p2c1s',)
|
assert tuple(c['serialNumber'] for c in pc2['components']) == ('p2c1s',)
|
||||||
assert all(c['parent'] == pc2_id for c in pc2['components'])
|
assert all(c['parent'] == pc2_id for c in pc2['components'])
|
||||||
assert tuple(e['type'] for e in pc2['events']) == (
|
assert tuple(e['type'] for e in pc2['actions']) == (
|
||||||
'Snapshot', # Second Snapshot
|
'Snapshot', # Second Snapshot
|
||||||
'Remove' # the processor we added in 2.
|
'Remove' # the processor we added in 2.
|
||||||
)
|
)
|
||||||
# p1c2s has Snapshot, Remove and Add
|
# p1c2s has Snapshot, Remove and Add
|
||||||
p1c2s, _ = user.get(res=m.Device, item=pc1['components'][0]['id'])
|
p1c2s, _ = user.get(res=m.Device, item=pc1['components'][0]['id'])
|
||||||
assert tuple(get_events_info(p1c2s['events'])) == (
|
assert tuple(get_actions_info(p1c2s['actions'])) == (
|
||||||
('BenchmarkProcessor', []), # first BenchmarkProcessor
|
('BenchmarkProcessor', []), # first BenchmarkProcessor
|
||||||
('Snapshot', ['p1c1s', 'p1c2s', 'p1c3s']), # First Snapshot to PC1
|
('Snapshot', ['p1c1s', 'p1c2s', 'p1c3s']), # First Snapshot to PC1
|
||||||
('Snapshot', ['p1c2s', 'p2c1s']), # Second Snapshot to PC2
|
('Snapshot', ['p1c2s', 'p2c1s']), # Second Snapshot to PC2
|
||||||
|
@ -206,7 +206,7 @@ def test_snapshot_component_add_remove(user: UserClient):
|
||||||
assert {c['serialNumber'] for c in pc1['components']} == {'p1c3s', 'p1c4s'}
|
assert {c['serialNumber'] for c in pc1['components']} == {'p1c3s', 'p1c4s'}
|
||||||
assert all(c['parent'] == pc1_id for c in pc1['components'])
|
assert all(c['parent'] == pc1_id for c in pc1['components'])
|
||||||
# This last Snapshot only
|
# This last Snapshot only
|
||||||
assert get_events_info(pc1['events'])[-1] == ('Snapshot', ['p1c3s', 'p1c4s'])
|
assert get_actions_info(pc1['actions'])[-1] == ('Snapshot', ['p1c3s', 'p1c4s'])
|
||||||
# PC2
|
# PC2
|
||||||
# We haven't changed PC2
|
# We haven't changed PC2
|
||||||
assert tuple(c['serialNumber'] for c in pc2['components']) == ('p2c1s',)
|
assert tuple(c['serialNumber'] for c in pc2['components']) == ('p2c1s',)
|
||||||
|
@ -247,7 +247,7 @@ def test_snapshot_tag_inner_tag(tag_id: str, user: UserClient, app: Devicehub):
|
||||||
b['device']['tags'] = [{'type': 'Tag', 'id': tag_id}]
|
b['device']['tags'] = [{'type': 'Tag', 'id': tag_id}]
|
||||||
|
|
||||||
snapshot_and_check(user, b,
|
snapshot_and_check(user, b,
|
||||||
event_types=(RateComputer.t, BenchmarkProcessor.t, VisualTest.t))
|
action_types=(RateComputer.t, BenchmarkProcessor.t, VisualTest.t))
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
tag = Tag.query.one() # type: Tag
|
tag = Tag.query.one() # type: Tag
|
||||||
assert tag.device_id == 1, 'Tag should be linked to the first device'
|
assert tag.device_id == 1, 'Tag should be linked to the first device'
|
||||||
|
@ -313,19 +313,19 @@ def test_erase_privacy_standards_endtime_sort(user: UserClient):
|
||||||
erasures have always custom endTime value set.
|
erasures have always custom endTime value set.
|
||||||
"""
|
"""
|
||||||
s = file('erase-sectors.snapshot')
|
s = file('erase-sectors.snapshot')
|
||||||
assert s['components'][0]['events'][0]['endTime'] == '2018-06-01T09:12:06+02:00'
|
assert s['components'][0]['actions'][0]['endTime'] == '2018-06-01T09:12:06+02:00'
|
||||||
snapshot = snapshot_and_check(user, s, event_types=(
|
snapshot = snapshot_and_check(user, s, action_types=(
|
||||||
EraseSectors.t,
|
EraseSectors.t,
|
||||||
BenchmarkDataStorage.t,
|
BenchmarkDataStorage.t,
|
||||||
BenchmarkProcessor.t
|
BenchmarkProcessor.t
|
||||||
), perform_second_snapshot=False)
|
), perform_second_snapshot=False)
|
||||||
# Perform a new snapshot changing the erasure time, as if
|
# Perform a new snapshot changing the erasure time, as if
|
||||||
# it is a new erasure performed after.
|
# it is a new erasure performed after.
|
||||||
erase = next(e for e in snapshot['events'] if e['type'] == EraseSectors.t)
|
erase = next(e for e in snapshot['actions'] if e['type'] == EraseSectors.t)
|
||||||
assert erase['endTime'] == '2018-06-01T07:12:06+00:00'
|
assert erase['endTime'] == '2018-06-01T07:12:06+00:00'
|
||||||
s['uuid'] = uuid4()
|
s['uuid'] = uuid4()
|
||||||
s['components'][0]['events'][0]['endTime'] = '2018-06-01T07:14:00+00:00'
|
s['components'][0]['actions'][0]['endTime'] = '2018-06-01T07:14:00+00:00'
|
||||||
snapshot = snapshot_and_check(user, s, event_types=(
|
snapshot = snapshot_and_check(user, s, action_types=(
|
||||||
EraseSectors.t,
|
EraseSectors.t,
|
||||||
BenchmarkDataStorage.t,
|
BenchmarkDataStorage.t,
|
||||||
BenchmarkProcessor.t
|
BenchmarkProcessor.t
|
||||||
|
@ -333,17 +333,17 @@ def test_erase_privacy_standards_endtime_sort(user: UserClient):
|
||||||
|
|
||||||
# The actual test
|
# The actual test
|
||||||
storage = next(e for e in snapshot['components'] if e['type'] == SolidStateDrive.t)
|
storage = next(e for e in snapshot['components'] if e['type'] == SolidStateDrive.t)
|
||||||
storage, _ = user.get(res=m.Device, item=storage['id']) # Let's get storage events too
|
storage, _ = user.get(res=m.Device, item=storage['id']) # Let's get storage actions too
|
||||||
# order: endTime ascending
|
# order: endTime ascending
|
||||||
# erasure1/2 have an user defined time and others events endTime = created
|
# erasure1/2 have an user defined time and others actions endTime = created
|
||||||
erasure1, erasure2, benchmark_hdd1, _snapshot1, benchmark_hdd2, _snapshot2 = storage['events']
|
erasure1, erasure2, benchmark_hdd1, _snapshot1, benchmark_hdd2, _snapshot2 = storage['actions']
|
||||||
assert erasure1['type'] == erasure2['type'] == 'EraseSectors'
|
assert erasure1['type'] == erasure2['type'] == 'EraseSectors'
|
||||||
assert benchmark_hdd1['type'] == benchmark_hdd2['type'] == 'BenchmarkDataStorage'
|
assert benchmark_hdd1['type'] == benchmark_hdd2['type'] == 'BenchmarkDataStorage'
|
||||||
assert _snapshot1['type'] == _snapshot2['type'] == 'Snapshot'
|
assert _snapshot1['type'] == _snapshot2['type'] == 'Snapshot'
|
||||||
get_snapshot, _ = user.get(res=Event, item=_snapshot2['id'])
|
get_snapshot, _ = user.get(res=Action, item=_snapshot2['id'])
|
||||||
assert get_snapshot['events'][0]['endTime'] == '2018-06-01T07:14:00+00:00'
|
assert get_snapshot['actions'][0]['endTime'] == '2018-06-01T07:14:00+00:00'
|
||||||
assert snapshot == get_snapshot
|
assert snapshot == get_snapshot
|
||||||
erasure, _ = user.get(res=Event, item=erasure1['id'])
|
erasure, _ = user.get(res=Action, item=erasure1['id'])
|
||||||
assert len(erasure['steps']) == 2
|
assert len(erasure['steps']) == 2
|
||||||
assert erasure['steps'][0]['startTime'] == '2018-06-01T06:15:00+00:00'
|
assert erasure['steps'][0]['startTime'] == '2018-06-01T06:15:00+00:00'
|
||||||
assert erasure['steps'][0]['endTime'] == '2018-06-01T07:16:00+00:00'
|
assert erasure['steps'][0]['endTime'] == '2018-06-01T07:16:00+00:00'
|
||||||
|
@ -364,7 +364,7 @@ def test_erase_privacy_standards_endtime_sort(user: UserClient):
|
||||||
|
|
||||||
# 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]['severity'] = 'Error'
|
s['components'][0]['actions'][0]['severity'] = 'Error'
|
||||||
snapshot, _ = user.post(s, res=Snapshot)
|
snapshot, _ = user.post(s, res=Snapshot)
|
||||||
storage, _ = user.get(res=m.Device, item=storage['id'])
|
storage, _ = user.get(res=m.Device, item=storage['id'])
|
||||||
assert storage['hid'] == 'solidstatedrive-c1mr-c1ml-c1s'
|
assert storage['hid'] == 'solidstatedrive-c1mr-c1ml-c1s'
|
||||||
|
@ -378,7 +378,7 @@ def test_test_data_storage(user: UserClient):
|
||||||
s = file('erase-sectors-2-hdd.snapshot')
|
s = file('erase-sectors-2-hdd.snapshot')
|
||||||
snapshot, _ = user.post(res=Snapshot, data=s)
|
snapshot, _ = user.post(res=Snapshot, data=s)
|
||||||
incidence_test = next(
|
incidence_test = next(
|
||||||
ev for ev in snapshot['events']
|
ev for ev in snapshot['actions']
|
||||||
if ev.get('reallocatedSectorCount', None) == 15
|
if ev.get('reallocatedSectorCount', None) == 15
|
||||||
)
|
)
|
||||||
assert incidence_test['severity'] == 'Error'
|
assert incidence_test['severity'] == 'Error'
|
||||||
|
@ -388,14 +388,14 @@ def test_test_data_storage(user: UserClient):
|
||||||
@pytest.mark.xfail(reason='Not implemented yet, new rate is need it')
|
@pytest.mark.xfail(reason='Not implemented yet, new rate is need it')
|
||||||
def test_snapshot_computer_monitor(user: UserClient):
|
def test_snapshot_computer_monitor(user: UserClient):
|
||||||
s = file('computer-monitor.snapshot')
|
s = file('computer-monitor.snapshot')
|
||||||
snapshot_and_check(user, s, event_types=('ManualRate',))
|
snapshot_and_check(user, s, action_types=('ManualRate',))
|
||||||
# todo check that ManualRate has generated an AggregateRate
|
# todo check that ManualRate has generated an AggregateRate
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.xfail(reason='Not implemented yet, new rate is need it')
|
@pytest.mark.xfail(reason='Not implemented yet, new rate is need it')
|
||||||
def test_snapshot_mobile_smartphone_imei_manual_rate(user: UserClient):
|
def test_snapshot_mobile_smartphone_imei_manual_rate(user: UserClient):
|
||||||
s = file('smartphone.snapshot')
|
s = file('smartphone.snapshot')
|
||||||
snapshot = snapshot_and_check(user, s, event_types=('VisualTest',))
|
snapshot = snapshot_and_check(user, s, action_types=('VisualTest',))
|
||||||
mobile, _ = user.get(res=m.Device, item=snapshot['device']['id'])
|
mobile, _ = user.get(res=m.Device, item=snapshot['device']['id'])
|
||||||
assert mobile['imei'] == 3568680000414120
|
assert mobile['imei'] == 3568680000414120
|
||||||
# todo check that manual rate has been created
|
# todo check that manual rate has been created
|
||||||
|
@ -443,32 +443,32 @@ def assert_similar_components(components1: List[dict], components2: List[dict]):
|
||||||
|
|
||||||
def snapshot_and_check(user: UserClient,
|
def snapshot_and_check(user: UserClient,
|
||||||
input_snapshot: dict,
|
input_snapshot: dict,
|
||||||
event_types: Tuple[str, ...] = tuple(),
|
action_types: Tuple[str, ...] = tuple(),
|
||||||
perform_second_snapshot=True) -> dict:
|
perform_second_snapshot=True) -> dict:
|
||||||
"""
|
"""
|
||||||
Performs a Snapshot and then checks if the result is ok:
|
Performs a Snapshot and then checks if the result is ok:
|
||||||
|
|
||||||
- There have been performed the types of events and in the same
|
- There have been performed the types of actions and in the same
|
||||||
order as described in the passed-in ``event_types``.
|
order as described in the passed-in ``action_types``.
|
||||||
- The inputted devices are similar to the resulted ones.
|
- The inputted devices are similar to the resulted ones.
|
||||||
- There is no Remove event after the first Add.
|
- There is no Remove action after the first Add.
|
||||||
- All input components are now inside the parent device.
|
- All input components are now inside the parent device.
|
||||||
|
|
||||||
Optionally, it can perform a second Snapshot which should
|
Optionally, it can perform a second Snapshot which should
|
||||||
perform an exact result, except for the events.
|
perform an exact result, except for the actions.
|
||||||
|
|
||||||
:return: The last resulting snapshot.
|
:return: The last resulting snapshot.
|
||||||
"""
|
"""
|
||||||
snapshot, _ = user.post(res=Snapshot, data=input_snapshot)
|
snapshot, _ = user.post(res=Snapshot, data=input_snapshot)
|
||||||
assert all(e['type'] in event_types for e in snapshot['events'])
|
assert all(e['type'] in action_types for e in snapshot['actions'])
|
||||||
assert len(snapshot['events']) == len(event_types)
|
assert len(snapshot['actions']) == len(action_types)
|
||||||
# Ensure there is no Remove event after the first Add
|
# Ensure there is no Remove action after the first Add
|
||||||
found_add = False
|
found_add = False
|
||||||
for event in snapshot['events']:
|
for action in snapshot['actions']:
|
||||||
if event['type'] == 'Add':
|
if action['type'] == 'Add':
|
||||||
found_add = True
|
found_add = True
|
||||||
if found_add:
|
if found_add:
|
||||||
assert event['type'] != 'Receive', 'All Remove events must be before the Add ones'
|
assert action['type'] != 'Receive', 'All Remove actions must be before the Add ones'
|
||||||
assert input_snapshot['device']
|
assert input_snapshot['device']
|
||||||
assert_similar_device(input_snapshot['device'], snapshot['device'])
|
assert_similar_device(input_snapshot['device'], snapshot['device'])
|
||||||
if input_snapshot.get('components', None):
|
if input_snapshot.get('components', None):
|
||||||
|
@ -478,7 +478,8 @@ def snapshot_and_check(user: UserClient,
|
||||||
if perform_second_snapshot:
|
if perform_second_snapshot:
|
||||||
if 'uuid' in input_snapshot:
|
if 'uuid' in input_snapshot:
|
||||||
input_snapshot['uuid'] = uuid4()
|
input_snapshot['uuid'] = uuid4()
|
||||||
return snapshot_and_check(user, input_snapshot, event_types, perform_second_snapshot=False)
|
return snapshot_and_check(user, input_snapshot, action_types,
|
||||||
|
perform_second_snapshot=False)
|
||||||
else:
|
else:
|
||||||
return snapshot
|
return snapshot
|
||||||
|
|
||||||
|
@ -487,7 +488,7 @@ def snapshot_and_check(user: UserClient,
|
||||||
@pytest.mark.xfail(reason='Not implemented yet, new rate is need it')
|
@pytest.mark.xfail(reason='Not implemented yet, new rate is need it')
|
||||||
def test_snapshot_keyboard(user: UserClient):
|
def test_snapshot_keyboard(user: UserClient):
|
||||||
s = file('keyboard.snapshot')
|
s = file('keyboard.snapshot')
|
||||||
snapshot = snapshot_and_check(user, s, event_types=('ManualRate',))
|
snapshot = snapshot_and_check(user, s, action_types=('ManualRate',))
|
||||||
keyboard = snapshot['device']
|
keyboard = snapshot['device']
|
||||||
assert keyboard['layout'] == 'ES'
|
assert keyboard['layout'] == 'ES'
|
||||||
|
|
||||||
|
|
|
@ -11,10 +11,10 @@ from teal.marshmallow import ValidationError
|
||||||
from ereuse_devicehub.client import UserClient
|
from ereuse_devicehub.client import UserClient
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.devicehub import Devicehub
|
from ereuse_devicehub.devicehub import Devicehub
|
||||||
|
from ereuse_devicehub.resources.action.models import Snapshot
|
||||||
from ereuse_devicehub.resources.agent.models import Organization
|
from ereuse_devicehub.resources.agent.models import Organization
|
||||||
from ereuse_devicehub.resources.device.models import Desktop, Device
|
from ereuse_devicehub.resources.device.models import Desktop, Device
|
||||||
from ereuse_devicehub.resources.enums import ComputerChassis
|
from ereuse_devicehub.resources.enums import ComputerChassis
|
||||||
from ereuse_devicehub.resources.event.models import Snapshot
|
|
||||||
from ereuse_devicehub.resources.tag import Tag
|
from ereuse_devicehub.resources.tag import Tag
|
||||||
from ereuse_devicehub.resources.tag.view import CannotCreateETag, LinkedToAnotherDevice, \
|
from ereuse_devicehub.resources.tag.view import CannotCreateETag, LinkedToAnotherDevice, \
|
||||||
TagNotLinked
|
TagNotLinked
|
||||||
|
|
|
@ -8,34 +8,33 @@ import pathlib
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from ereuse_devicehub.client import UserClient
|
from ereuse_devicehub.client import UserClient
|
||||||
|
from ereuse_devicehub.resources.action import models as em
|
||||||
from ereuse_devicehub.resources.device.exceptions import NeedsId
|
from ereuse_devicehub.resources.device.exceptions import NeedsId
|
||||||
from ereuse_devicehub.resources.device.models import Device
|
from ereuse_devicehub.resources.device.models import Device
|
||||||
from ereuse_devicehub.resources.event import models as em
|
|
||||||
from ereuse_devicehub.resources.tag.model import Tag
|
from ereuse_devicehub.resources.tag.model import Tag
|
||||||
from tests.conftest import file
|
from tests.conftest import file
|
||||||
|
|
||||||
|
|
||||||
def test_workbench_server_condensed(user: UserClient):
|
def test_workbench_server_condensed(user: UserClient):
|
||||||
"""
|
"""
|
||||||
As :def:`.test_workbench_server_phases` but all the events
|
As :def:`.test_workbench_server_phases` but all the actions
|
||||||
condensed in only one big ``Snapshot`` file, as described
|
condensed in only one big ``Snapshot`` file, as described
|
||||||
in the docs.
|
in the docs.
|
||||||
"""
|
"""
|
||||||
s = file('workbench-server-1.snapshot')
|
s = file('workbench-server-1.snapshot')
|
||||||
del s['expectedEvents']
|
s['device']['actions'].append(file('workbench-server-2.stress-test'))
|
||||||
s['device']['events'].append(file('workbench-server-2.stress-test'))
|
s['components'][4]['actions'].extend((
|
||||||
s['components'][4]['events'].extend((
|
|
||||||
file('workbench-server-3.erase'),
|
file('workbench-server-3.erase'),
|
||||||
file('workbench-server-4.install')
|
file('workbench-server-4.install')
|
||||||
))
|
))
|
||||||
s['components'][5]['events'].append(file('workbench-server-3.erase'))
|
s['components'][5]['actions'].append(file('workbench-server-3.erase'))
|
||||||
# Create tags
|
# Create tags
|
||||||
for t in s['device']['tags']:
|
for t in s['device']['tags']:
|
||||||
user.post({'id': t['id']}, res=Tag)
|
user.post({'id': t['id']}, res=Tag)
|
||||||
|
|
||||||
snapshot, _ = user.post(res=em.Snapshot, data=s)
|
snapshot, _ = user.post(res=em.Snapshot, data=s)
|
||||||
events = snapshot['events']
|
actions = snapshot['actions']
|
||||||
assert {(event['type'], event['device']) for event in events} == {
|
assert {(action['type'], action['device']) for action in actions} == {
|
||||||
('BenchmarkProcessorSysbench', 5),
|
('BenchmarkProcessorSysbench', 5),
|
||||||
('StressTest', 1),
|
('StressTest', 1),
|
||||||
('EraseSectors', 6),
|
('EraseSectors', 6),
|
||||||
|
@ -63,9 +62,9 @@ def test_workbench_server_condensed(user: UserClient):
|
||||||
assert device['rate']['severity'] == 'Info'
|
assert device['rate']['severity'] == 'Info'
|
||||||
assert device['rate']['rating'] == 0
|
assert device['rate']['rating'] == 0
|
||||||
assert device['rate']['type'] == 'RateComputer'
|
assert device['rate']['type'] == 'RateComputer'
|
||||||
assert device['events'][2]['type'] == 'VisualTest'
|
assert device['actions'][2]['type'] == 'VisualTest'
|
||||||
assert device['events'][2]['appearanceRange'] == 'A'
|
assert device['actions'][2]['appearanceRange'] == 'A'
|
||||||
assert device['events'][2]['functionalityRange'] == 'B'
|
assert device['actions'][2]['functionalityRange'] == 'B'
|
||||||
assert device['tags'][0]['id'] == 'tag1'
|
assert device['tags'][0]['id'] == 'tag1'
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,12 +73,12 @@ def test_workbench_server_phases(user: UserClient):
|
||||||
"""
|
"""
|
||||||
Tests the phases described in the docs section `Snapshots from
|
Tests the phases described in the docs section `Snapshots from
|
||||||
Workbench <http://devicehub.ereuse.org/
|
Workbench <http://devicehub.ereuse.org/
|
||||||
events.html#snapshots-from-workbench>`_.
|
actions.html#snapshots-from-workbench>`_.
|
||||||
"""
|
"""
|
||||||
# 1. Snapshot with sync / rate / benchmarks / test data storage
|
# 1. Snapshot with sync / rate / benchmarks / test data storage
|
||||||
s = file('workbench-server-1.snapshot')
|
s = file('workbench-server-1.snapshot')
|
||||||
snapshot, _ = user.post(res=em.Snapshot, data=s)
|
snapshot, _ = user.post(res=em.Snapshot, data=s)
|
||||||
assert not snapshot['closed'], 'Snapshot must be waiting for the new events'
|
assert not snapshot['closed'], 'Snapshot must be waiting for the new actions'
|
||||||
|
|
||||||
# 2. stress test
|
# 2. stress test
|
||||||
st = file('workbench-server-2.stress-test')
|
st = file('workbench-server-2.stress-test')
|
||||||
|
@ -102,39 +101,39 @@ def test_workbench_server_phases(user: UserClient):
|
||||||
i['snapshot'], i['device'] = snapshot['id'], ssd_id
|
i['snapshot'], i['device'] = snapshot['id'], ssd_id
|
||||||
install, _ = user.post(res=em.Install, data=i)
|
install, _ = user.post(res=em.Install, data=i)
|
||||||
|
|
||||||
# Check events have been appended in Snapshot and devices
|
# Check actions have been appended in Snapshot and devices
|
||||||
# and that Snapshot is closed
|
# and that Snapshot is closed
|
||||||
snapshot, _ = user.get(res=em.Snapshot, item=snapshot['id'])
|
snapshot, _ = user.get(res=em.Snapshot, item=snapshot['id'])
|
||||||
events = snapshot['events']
|
actions = snapshot['actions']
|
||||||
assert len(events) == 9
|
assert len(actions) == 9
|
||||||
assert events[0]['type'] == 'Rate'
|
assert actions[0]['type'] == 'Rate'
|
||||||
assert events[0]['device'] == 1
|
assert actions[0]['device'] == 1
|
||||||
assert events[0]['closed']
|
assert actions[0]['closed']
|
||||||
assert events[0]['type'] == 'RateComputer'
|
assert actions[0]['type'] == 'RateComputer'
|
||||||
assert events[0]['device'] == 1
|
assert actions[0]['device'] == 1
|
||||||
assert events[1]['type'] == 'BenchmarkProcessor'
|
assert actions[1]['type'] == 'BenchmarkProcessor'
|
||||||
assert events[1]['device'] == 5
|
assert actions[1]['device'] == 5
|
||||||
assert events[2]['type'] == 'BenchmarkProcessorSysbench'
|
assert actions[2]['type'] == 'BenchmarkProcessorSysbench'
|
||||||
assert events[2]['device'] == 5
|
assert actions[2]['device'] == 5
|
||||||
assert events[3]['type'] == 'BenchmarkDataStorage'
|
assert actions[3]['type'] == 'BenchmarkDataStorage'
|
||||||
assert events[3]['device'] == 6
|
assert actions[3]['device'] == 6
|
||||||
assert events[4]['type'] == 'TestDataStorage'
|
assert actions[4]['type'] == 'TestDataStorage'
|
||||||
assert events[4]['device'] == 6
|
assert actions[4]['device'] == 6
|
||||||
assert events[4]['type'] == 'BenchmarkDataStorage'
|
assert actions[4]['type'] == 'BenchmarkDataStorage'
|
||||||
assert events[4]['device'] == 7
|
assert actions[4]['device'] == 7
|
||||||
assert events[5]['type'] == 'StressTest'
|
assert actions[5]['type'] == 'StressTest'
|
||||||
assert events[5]['device'] == 1
|
assert actions[5]['device'] == 1
|
||||||
assert events[6]['type'] == 'EraseSectors'
|
assert actions[6]['type'] == 'EraseSectors'
|
||||||
assert events[6]['device'] == 6
|
assert actions[6]['device'] == 6
|
||||||
assert events[7]['type'] == 'EraseSectors'
|
assert actions[7]['type'] == 'EraseSectors'
|
||||||
assert events[7]['device'] == 7
|
assert actions[7]['device'] == 7
|
||||||
assert events[8]['type'] == 'Install'
|
assert actions[8]['type'] == 'Install'
|
||||||
assert events[8]['device'] == 6
|
assert actions[8]['device'] == 6
|
||||||
assert snapshot['closed']
|
assert snapshot['closed']
|
||||||
assert snapshot['severity'] == 'Info'
|
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['actions']) == 10 # todo shall I add child actions?
|
||||||
|
|
||||||
|
|
||||||
def test_real_hp_11(user: UserClient):
|
def test_real_hp_11(user: UserClient):
|
||||||
|
@ -143,7 +142,7 @@ def test_real_hp_11(user: UserClient):
|
||||||
pc = snapshot['device']
|
pc = snapshot['device']
|
||||||
assert pc['hid'] == 'desktop-hewlett-packard-hp_compaq_8100_elite_sff-czc0408yjg'
|
assert pc['hid'] == 'desktop-hewlett-packard-hp_compaq_8100_elite_sff-czc0408yjg'
|
||||||
assert pc['chassis'] == 'Tower'
|
assert pc['chassis'] == 'Tower'
|
||||||
assert set(e['type'] for e in snapshot['events']) == {
|
assert set(e['type'] for e in snapshot['actions']) == {
|
||||||
'EreusePrice',
|
'EreusePrice',
|
||||||
'RateComputer',
|
'RateComputer',
|
||||||
'BenchmarkDataStorage',
|
'BenchmarkDataStorage',
|
||||||
|
@ -155,7 +154,7 @@ def test_real_hp_11(user: UserClient):
|
||||||
'TestBios',
|
'TestBios',
|
||||||
'VisualTest'
|
'VisualTest'
|
||||||
}
|
}
|
||||||
assert len(list(e['type'] for e in snapshot['events'])) == 10
|
assert len(list(e['type'] for e in snapshot['actions'])) == 10
|
||||||
assert pc['networkSpeeds'] == [1000, None], 'Device has no WiFi'
|
assert pc['networkSpeeds'] == [1000, None], 'Device has no WiFi'
|
||||||
assert pc['processorModel'] == 'intel core i3 cpu 530 @ 2.93ghz'
|
assert pc['processorModel'] == 'intel core i3 cpu 530 @ 2.93ghz'
|
||||||
assert pc['ramSize'] == 8192
|
assert pc['ramSize'] == 8192
|
||||||
|
@ -171,7 +170,7 @@ def test_real_toshiba_11(user: UserClient):
|
||||||
def test_snapshot_real_eee_1001pxd_with_rate(user: UserClient):
|
def test_snapshot_real_eee_1001pxd_with_rate(user: UserClient):
|
||||||
"""
|
"""
|
||||||
Checks the values of the device, components,
|
Checks the values of the device, components,
|
||||||
events and their relationships of a real pc.
|
actions and their relationships of a real pc.
|
||||||
"""
|
"""
|
||||||
s = file('real-eee-1001pxd.snapshot.11')
|
s = file('real-eee-1001pxd.snapshot.11')
|
||||||
snapshot, _ = user.post(res=em.Snapshot, data=s)
|
snapshot, _ = user.post(res=em.Snapshot, data=s)
|
||||||
|
@ -186,8 +185,8 @@ def test_snapshot_real_eee_1001pxd_with_rate(user: UserClient):
|
||||||
assert pc['networkSpeeds'] == [100, 0], 'Although it has WiFi we do not know the speed'
|
assert pc['networkSpeeds'] == [100, 0], 'Although it has WiFi we do not know the speed'
|
||||||
assert pc['rate']
|
assert pc['rate']
|
||||||
rate = pc['rate']
|
rate = pc['rate']
|
||||||
# assert pc['events'][0]['appearanceRange'] == 'A'
|
# assert pc['actions'][0]['appearanceRange'] == 'A'
|
||||||
# assert pc['events'][0]['functionalityRange'] == 'B'
|
# assert pc['actions'][0]['functionalityRange'] == 'B'
|
||||||
# TODO add appearance and functionality Range in device[rate]
|
# TODO add appearance and functionality Range in device[rate]
|
||||||
|
|
||||||
assert rate['processorRange'] == 'VERY_LOW'
|
assert rate['processorRange'] == 'VERY_LOW'
|
||||||
|
@ -197,7 +196,7 @@ def test_snapshot_real_eee_1001pxd_with_rate(user: UserClient):
|
||||||
# TODO add camelCase instead of snake_case
|
# TODO add camelCase instead of snake_case
|
||||||
assert rate['dataStorage'] == 3.76
|
assert rate['dataStorage'] == 3.76
|
||||||
assert rate['type'] == 'RateComputer'
|
assert rate['type'] == 'RateComputer'
|
||||||
# TODO change pc[events] TestBios instead of rate[biosRange]
|
# TODO change pc[actions] TestBios instead of rate[biosRange]
|
||||||
# assert rate['biosRange'] == 'C'
|
# assert rate['biosRange'] == 'C'
|
||||||
assert rate['appearance'] == 0, 'appearance B equals 0 points'
|
assert rate['appearance'] == 0, 'appearance B equals 0 points'
|
||||||
# todo fix gets correctly functionality rates values not equals to 0.
|
# todo fix gets correctly functionality rates values not equals to 0.
|
||||||
|
@ -223,32 +222,32 @@ def test_snapshot_real_eee_1001pxd_with_rate(user: UserClient):
|
||||||
assert 'hid' not in cpu
|
assert 'hid' not in cpu
|
||||||
assert pc['processorModel'] == cpu['model'] == 'intel atom cpu n455 @ 1.66ghz'
|
assert pc['processorModel'] == cpu['model'] == 'intel atom cpu n455 @ 1.66ghz'
|
||||||
cpu, _ = user.get(res=Device, item=cpu['id'])
|
cpu, _ = user.get(res=Device, item=cpu['id'])
|
||||||
events = cpu['events']
|
actions = cpu['actions']
|
||||||
sysbench = next(e for e in events if e['type'] == em.BenchmarkProcessorSysbench.t)
|
sysbench = next(e for e in actions if e['type'] == em.BenchmarkProcessorSysbench.t)
|
||||||
assert sysbench['elapsed'] == 164
|
assert sysbench['elapsed'] == 164
|
||||||
assert math.isclose(sysbench['rate'], 164, rel_tol=0.001)
|
assert math.isclose(sysbench['rate'], 164, rel_tol=0.001)
|
||||||
assert sysbench['snapshot'] == snapshot['id']
|
assert sysbench['snapshot'] == snapshot['id']
|
||||||
assert sysbench['device'] == cpu['id']
|
assert sysbench['device'] == cpu['id']
|
||||||
assert sysbench['parent'] == pc['id']
|
assert sysbench['parent'] == pc['id']
|
||||||
benchmark_cpu = next(e for e in events if e['type'] == em.BenchmarkProcessor.t)
|
benchmark_cpu = next(e for e in actions if e['type'] == em.BenchmarkProcessor.t)
|
||||||
assert math.isclose(benchmark_cpu['rate'], 6666, rel_tol=0.001)
|
assert math.isclose(benchmark_cpu['rate'], 6666, rel_tol=0.001)
|
||||||
assert benchmark_cpu['elapsed'] == 0
|
assert benchmark_cpu['elapsed'] == 0
|
||||||
event_types = tuple(e['type'] for e in events)
|
action_types = tuple(e['type'] for e in actions)
|
||||||
assert em.BenchmarkRamSysbench.t in event_types
|
assert em.BenchmarkRamSysbench.t in action_types
|
||||||
assert em.StressTest.t in event_types
|
assert em.StressTest.t in action_types
|
||||||
assert em.Snapshot.t in event_types
|
assert em.Snapshot.t in action_types
|
||||||
assert len(events) == 7
|
assert len(actions) == 7
|
||||||
gpu = components[3]
|
gpu = components[3]
|
||||||
assert gpu['model'] == 'atom processor d4xx/d5xx/n4xx/n5xx integrated graphics controller'
|
assert gpu['model'] == 'atom processor d4xx/d5xx/n4xx/n5xx integrated graphics controller'
|
||||||
assert gpu['manufacturer'] == 'intel corporation'
|
assert gpu['manufacturer'] == 'intel corporation'
|
||||||
assert gpu['memory'] == 256
|
assert gpu['memory'] == 256
|
||||||
gpu, _ = user.get(res=Device, item=gpu['id'])
|
gpu, _ = user.get(res=Device, item=gpu['id'])
|
||||||
event_types = tuple(e['type'] for e in gpu['events'])
|
action_types = tuple(e['type'] for e in gpu['actions'])
|
||||||
assert em.BenchmarkRamSysbench.t in event_types
|
assert em.BenchmarkRamSysbench.t in action_types
|
||||||
assert em.StressTest.t in event_types
|
assert em.StressTest.t in action_types
|
||||||
assert em.Snapshot.t in event_types
|
assert em.Snapshot.t in action_types
|
||||||
# todo why?? change event types 3 to 5
|
# todo why?? change action types 3 to 5
|
||||||
assert len(event_types) == 5
|
assert len(action_types) == 5
|
||||||
sound = components[4]
|
sound = components[4]
|
||||||
assert sound['model'] == 'nm10/ich7 family high definition audio controller'
|
assert sound['model'] == 'nm10/ich7 family high definition audio controller'
|
||||||
sound = components[5]
|
sound = components[5]
|
||||||
|
@ -263,16 +262,16 @@ def test_snapshot_real_eee_1001pxd_with_rate(user: UserClient):
|
||||||
assert hdd['interface'] == 'ATA'
|
assert hdd['interface'] == 'ATA'
|
||||||
assert hdd['size'] == 238475
|
assert hdd['size'] == 238475
|
||||||
hdd, _ = user.get(res=Device, item=hdd['id'])
|
hdd, _ = user.get(res=Device, item=hdd['id'])
|
||||||
event_types = tuple(e['type'] for e in hdd['events'])
|
action_types = tuple(e['type'] for e in hdd['actions'])
|
||||||
assert em.BenchmarkRamSysbench.t in event_types
|
assert em.BenchmarkRamSysbench.t in action_types
|
||||||
assert em.StressTest.t in event_types
|
assert em.StressTest.t in action_types
|
||||||
assert em.BenchmarkDataStorage.t in event_types
|
assert em.BenchmarkDataStorage.t in action_types
|
||||||
assert em.TestDataStorage.t in event_types
|
assert em.TestDataStorage.t in action_types
|
||||||
assert em.EraseBasic.t in event_types
|
assert em.EraseBasic.t in action_types
|
||||||
assert em.Snapshot.t in event_types
|
assert em.Snapshot.t in action_types
|
||||||
# todo why?? change event types 6 to 8
|
# todo why?? change action types 6 to 8
|
||||||
assert len(event_types) == 8
|
assert len(action_types) == 8
|
||||||
erase = next(e for e in hdd['events'] if e['type'] == em.EraseBasic.t)
|
erase = next(e for e in hdd['actions'] if e['type'] == em.EraseBasic.t)
|
||||||
assert erase['endTime']
|
assert erase['endTime']
|
||||||
assert erase['startTime']
|
assert erase['startTime']
|
||||||
assert erase['severity'] == 'Info'
|
assert erase['severity'] == 'Info'
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Acer",
|
"manufacturer": "Acer",
|
||||||
"model": "Aspire 5737Z",
|
"model": "Aspire 5737Z",
|
||||||
"serialNumber": "LXAZ70X0669112B8DB1601",
|
"serialNumber": "LXAZ70X0669112B8DB1601",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Laptop",
|
"type": "Laptop",
|
||||||
"chassis": "Netbook"
|
"chassis": "Netbook"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 Duo CPU T6400 @ 2.00GHz",
|
"model": "Intel Core2 Duo CPU T6400 @ 2.00GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 2.0,
|
"speed": 2.0,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Western Digital",
|
"manufacturer": "Western Digital",
|
||||||
"model": "WDC WD5000BEVT-2",
|
"model": "WDC WD5000BEVT-2",
|
||||||
"serialNumber": "WD-WXN209S36759",
|
"serialNumber": "WD-WXN209S36759",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 476940,
|
"size": 476940,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -39,7 +38,7 @@
|
||||||
"manufacturer": "NVIDIA Corporation",
|
"manufacturer": "NVIDIA Corporation",
|
||||||
"model": "C79 GeForce 9400M G",
|
"model": "C79 GeForce 9400M G",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -47,7 +46,7 @@
|
||||||
"manufacturer": "Broadcom Inc. and subsidiaries",
|
"manufacturer": "Broadcom Inc. and subsidiaries",
|
||||||
"model": "NetXtreme BCM5764M Gigabit Ethernet PCIe",
|
"model": "NetXtreme BCM5764M Gigabit Ethernet PCIe",
|
||||||
"serialNumber": "00:23:5a:5f:6b:8d",
|
"serialNumber": "00:23:5a:5f:6b:8d",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -56,7 +55,7 @@
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"manufacturer": "Qualcomm Atheros",
|
||||||
"model": "AR928X Wireless Network Adapter",
|
"model": "AR928X Wireless Network Adapter",
|
||||||
"serialNumber": "00:24:2b:d3:dd:19",
|
"serialNumber": "00:24:2b:d3:dd:19",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": true
|
"wireless": true
|
||||||
},
|
},
|
||||||
|
@ -64,21 +63,21 @@
|
||||||
"manufacturer": "Chicony Electronics Co., Ltd.",
|
"manufacturer": "Chicony Electronics Co., Ltd.",
|
||||||
"model": "CNF7017",
|
"model": "CNF7017",
|
||||||
"serialNumber": "SN0001",
|
"serialNumber": "SN0001",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "NVIDIA Corporation",
|
"manufacturer": "NVIDIA Corporation",
|
||||||
"model": "MCP79 High Definition Audio",
|
"model": "MCP79 High Definition Audio",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 4,
|
"usb": 4,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "ASUS",
|
"manufacturer": "ASUS",
|
||||||
"model": "All Series",
|
"model": "All Series",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i5-4440 CPU @ 3.10GHz",
|
"model": "Intel Core i5-4440 CPU @ 3.10GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 3.299993,
|
"speed": 3.299993,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Kingston",
|
"manufacturer": "Kingston",
|
||||||
"model": "99U5584-003.A00LF",
|
"model": "99U5584-003.A00LF",
|
||||||
"serialNumber": "290E5155",
|
"serialNumber": "290E5155",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Western Digital",
|
"manufacturer": "Western Digital",
|
||||||
"model": "WDC WD5000AAKX-0",
|
"model": "WDC WD5000AAKX-0",
|
||||||
"serialNumber": "WD-WMC2E8912230",
|
"serialNumber": "WD-WMC2E8912230",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 476940,
|
"size": 476940,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller",
|
"model": "Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "40:16:7e:64:11:7f",
|
"serialNumber": "40:16:7e:64:11:7f",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -67,14 +66,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "ASUSTeK COMPUTER INC.",
|
"manufacturer": "ASUSTeK COMPUTER INC.",
|
||||||
"model": "H81M-K",
|
"model": "H81M-K",
|
||||||
"serialNumber": "140322933901299",
|
"serialNumber": "140322933901299",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 3,
|
"usb": 3,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "ASUS",
|
"manufacturer": "ASUS",
|
||||||
"model": "All Series",
|
"model": "All Series",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i5-4440 CPU @ 3.10GHz",
|
"model": "Intel Core i5-4440 CPU @ 3.10GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.4710990000000002,
|
"speed": 1.4710990000000002,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Kingston",
|
"manufacturer": "Kingston",
|
||||||
"model": "9905584-017.A00LF",
|
"model": "9905584-017.A00LF",
|
||||||
"serialNumber": "9D341297",
|
"serialNumber": "9D341297",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Western Digital",
|
"manufacturer": "Western Digital",
|
||||||
"model": "WDC WD5000AAKX-0",
|
"model": "WDC WD5000AAKX-0",
|
||||||
"serialNumber": "WD-WCC2EVE36697",
|
"serialNumber": "WD-WCC2EVE36697",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 476940,
|
"size": 476940,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller",
|
"model": "Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "e0:3f:49:1a:cf:8d",
|
"serialNumber": "e0:3f:49:1a:cf:8d",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -67,14 +66,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "ASUSTeK COMPUTER INC.",
|
"manufacturer": "ASUSTeK COMPUTER INC.",
|
||||||
"model": "H81M-K",
|
"model": "H81M-K",
|
||||||
"serialNumber": "131219772601126",
|
"serialNumber": "131219772601126",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 3,
|
"usb": 3,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Celeron CPU N3050 @ 1.60GHz",
|
"model": "Intel Celeron CPU N3050 @ 1.60GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 0.47998,
|
"speed": 0.47998,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Kingston",
|
"manufacturer": "Kingston",
|
||||||
"model": "99U5469-044.A00LF",
|
"model": "99U5469-044.A00LF",
|
||||||
"serialNumber": "17220285",
|
"serialNumber": "17220285",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "SODIMM",
|
"format": "SODIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Toshiba",
|
"manufacturer": "Toshiba",
|
||||||
"model": "THNSNS12",
|
"model": "THNSNS12",
|
||||||
"serialNumber": "Y2IS101GT4BY",
|
"serialNumber": "Y2IS101GT4BY",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 122104,
|
"size": 122104,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller",
|
"model": "Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Wireless 3165",
|
"model": "Wireless 3165",
|
||||||
"serialNumber": "34:02:86:5b:47:b2",
|
"serialNumber": "34:02:86:5b:47:b2",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": true
|
"wireless": true
|
||||||
},
|
},
|
||||||
|
@ -66,7 +65,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "b8:ae:ed:76:91:83",
|
"serialNumber": "b8:ae:ed:76:91:83",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -75,14 +74,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series High Definition Audio Controller",
|
"model": "Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "NUC5CPYB",
|
"model": "NUC5CPYB",
|
||||||
"serialNumber": "GEPY523011FH",
|
"serialNumber": "GEPY523011FH",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 1,
|
"usb": 1,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 CPU 6600 @ 2.40GHz",
|
"model": "Intel Core2 CPU 6600 @ 2.40GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 2.394,
|
"speed": 2.394,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -29,7 +28,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
|
@ -40,7 +39,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": "SAMSUNG HD250HJ",
|
"model": "SAMSUNG HD250HJ",
|
||||||
"serialNumber": "S0URJDQP811025",
|
"serialNumber": "S0URJDQP811025",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 238475,
|
"size": 238475,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -49,7 +48,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82G965 Integrated Graphics Controller",
|
"model": "82G965 Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -57,7 +56,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "00:1b:fc:30:75:09",
|
"serialNumber": "00:1b:fc:30:75:09",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -66,14 +65,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801H HD Audio Controller",
|
"model": "82801H HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "ASUSTeK Computer INC.",
|
"manufacturer": "ASUSTeK Computer INC.",
|
||||||
"model": "P5B-VM",
|
"model": "P5B-VM",
|
||||||
"serialNumber": "MB-1234567890",
|
"serialNumber": "MB-1234567890",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 7,
|
"usb": 7,
|
||||||
"firewire": 1,
|
"firewire": 1,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "ASUS",
|
"manufacturer": "ASUS",
|
||||||
"model": "All Series",
|
"model": "All Series",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i5-4440 CPU @ 3.10GHz",
|
"model": "Intel Core i5-4440 CPU @ 3.10GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 3.1001890000000003,
|
"speed": 3.1001890000000003,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Kingston",
|
"manufacturer": "Kingston",
|
||||||
"model": "9905584-017.A00LF",
|
"model": "9905584-017.A00LF",
|
||||||
"serialNumber": "9D341297",
|
"serialNumber": "9D341297",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Western Digital",
|
"manufacturer": "Western Digital",
|
||||||
"model": "WDC WD5000AAKX-0",
|
"model": "WDC WD5000AAKX-0",
|
||||||
"serialNumber": "WD-WCC2EVE36697",
|
"serialNumber": "WD-WCC2EVE36697",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 476940,
|
"size": 476940,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller",
|
"model": "Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "e0:3f:49:1a:cf:8d",
|
"serialNumber": "e0:3f:49:1a:cf:8d",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -67,14 +66,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "ASUSTeK COMPUTER INC.",
|
"manufacturer": "ASUSTeK COMPUTER INC.",
|
||||||
"model": "H81M-K",
|
"model": "H81M-K",
|
||||||
"serialNumber": "131219772601126",
|
"serialNumber": "131219772601126",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 3,
|
"usb": 3,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "Latitude E5530 non-vPro",
|
"model": "Latitude E5530 non-vPro",
|
||||||
"serialNumber": "D8FTRY1",
|
"serialNumber": "D8FTRY1",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Laptop",
|
"type": "Laptop",
|
||||||
"chassis": "Laptop"
|
"chassis": "Laptop"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i5-3340M CPU @ 2.70GHz",
|
"model": "Intel Core i5-3340M CPU @ 2.70GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.204321,
|
"speed": 1.204321,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Micron",
|
"manufacturer": "Micron",
|
||||||
"model": "8KTF51264HZ-1G6E1",
|
"model": "8KTF51264HZ-1G6E1",
|
||||||
"serialNumber": "E88F671D",
|
"serialNumber": "E88F671D",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "SODIMM",
|
"format": "SODIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Micron",
|
"manufacturer": "Micron",
|
||||||
"model": "8KTF51264HZ-1G6E1",
|
"model": "8KTF51264HZ-1G6E1",
|
||||||
"serialNumber": "E88F671E",
|
"serialNumber": "E88F671E",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "SODIMM",
|
"format": "SODIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": "HGST HTS725050A7",
|
"model": "HGST HTS725050A7",
|
||||||
"serialNumber": "TF755AWHKL0LHM",
|
"serialNumber": "TF755AWHKL0LHM",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 476940,
|
"size": 476940,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -61,7 +60,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "3rd Gen Core processor Graphics Controller",
|
"model": "3rd Gen Core processor Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -69,7 +68,7 @@
|
||||||
"manufacturer": "Broadcom Limited",
|
"manufacturer": "Broadcom Limited",
|
||||||
"model": "BCM43228 802.11a/b/g/n",
|
"model": "BCM43228 802.11a/b/g/n",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": false
|
"wireless": false
|
||||||
},
|
},
|
||||||
|
@ -77,7 +76,7 @@
|
||||||
"manufacturer": "Broadcom Limited",
|
"manufacturer": "Broadcom Limited",
|
||||||
"model": "NetXtreme BCM5761 Gigabit Ethernet PCIe",
|
"model": "NetXtreme BCM5761 Gigabit Ethernet PCIe",
|
||||||
"serialNumber": "f0:1f:af:41:3f:18",
|
"serialNumber": "f0:1f:af:41:3f:18",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -86,21 +85,21 @@
|
||||||
"manufacturer": "CN0Y4TWT7248737FA56RA01",
|
"manufacturer": "CN0Y4TWT7248737FA56RA01",
|
||||||
"model": "Laptop_Integrated_Webcam_E4HD",
|
"model": "Laptop_Integrated_Webcam_E4HD",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "7 Series/C216 Chipset Family High Definition Audio Controller",
|
"model": "7 Series/C216 Chipset Family High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "0VP63H",
|
"model": "0VP63H",
|
||||||
"serialNumber": "/D8FTRY1/CN1296139I001F/",
|
"serialNumber": "/D8FTRY1/CN1296139I001F/",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 3,
|
"usb": 3,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 CPU 6600 @ 2.40GHz",
|
"model": "Intel Core2 CPU 6600 @ 2.40GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 2.394,
|
"speed": 2.394,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -29,7 +28,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
|
@ -40,7 +39,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
|
@ -51,7 +50,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
|
@ -62,7 +61,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": "SAMSUNG HD250HJ",
|
"model": "SAMSUNG HD250HJ",
|
||||||
"serialNumber": "S0URJDQP811025",
|
"serialNumber": "S0URJDQP811025",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 238475,
|
"size": 238475,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -71,7 +70,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82G965 Integrated Graphics Controller",
|
"model": "82G965 Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -79,7 +78,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "00:1b:fc:30:75:09",
|
"serialNumber": "00:1b:fc:30:75:09",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -88,14 +87,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801H HD Audio Controller",
|
"model": "82801H HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "ASUSTeK Computer INC.",
|
"manufacturer": "ASUSTeK Computer INC.",
|
||||||
"model": "P5B-VM",
|
"model": "P5B-VM",
|
||||||
"serialNumber": "MB-1234567890",
|
"serialNumber": "MB-1234567890",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 7,
|
"usb": 7,
|
||||||
"firewire": 1,
|
"firewire": 1,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "ASUS",
|
"manufacturer": "ASUS",
|
||||||
"model": "All Series",
|
"model": "All Series",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i5-4440 CPU @ 3.10GHz",
|
"model": "Intel Core i5-4440 CPU @ 3.10GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 2.200311,
|
"speed": 2.200311,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Kingston",
|
"manufacturer": "Kingston",
|
||||||
"model": "99U5584-003.A00LF",
|
"model": "99U5584-003.A00LF",
|
||||||
"serialNumber": "8618F309",
|
"serialNumber": "8618F309",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Western Digital",
|
"manufacturer": "Western Digital",
|
||||||
"model": "WDC WD5000AAKX-6",
|
"model": "WDC WD5000AAKX-6",
|
||||||
"serialNumber": "WD-WCC2ETY84203",
|
"serialNumber": "WD-WCC2ETY84203",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 476940,
|
"size": 476940,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller",
|
"model": "Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "e0:3f:49:1a:d0:44",
|
"serialNumber": "e0:3f:49:1a:d0:44",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -67,14 +66,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
"model": "8 Series/C220 Series Chipset High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "ASUSTeK COMPUTER INC.",
|
"manufacturer": "ASUSTeK COMPUTER INC.",
|
||||||
"model": "H81M-K",
|
"model": "H81M-K",
|
||||||
"serialNumber": "131219772601195",
|
"serialNumber": "131219772601195",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 3,
|
"usb": 3,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "ASUSTeK Computer INC.",
|
"manufacturer": "ASUSTeK Computer INC.",
|
||||||
"model": "1000H",
|
"model": "1000H",
|
||||||
"serialNumber": "8BOAAQ191999",
|
"serialNumber": "8BOAAQ191999",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Laptop",
|
"type": "Laptop",
|
||||||
"chassis": "Netbook"
|
"chassis": "Netbook"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Atom CPU N270 @ 1.60GHz",
|
"model": "Intel Atom CPU N270 @ 1.60GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.6,
|
"speed": 1.6,
|
||||||
"address": 32,
|
"address": 32,
|
||||||
|
@ -29,7 +28,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -39,7 +38,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": "TS32GSSD370S",
|
"model": "TS32GSSD370S",
|
||||||
"serialNumber": "C304332411",
|
"serialNumber": "C304332411",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 30533,
|
"size": 30533,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -48,7 +47,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Mobile 945GSE Express Integrated Graphics Controller",
|
"model": "Mobile 945GSE Express Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -56,7 +55,7 @@
|
||||||
"manufacturer": "Qualcomm Atheros",
|
"manufacturer": "Qualcomm Atheros",
|
||||||
"model": "AR8121/AR8113/AR8114 Gigabit or Fast Ethernet",
|
"model": "AR8121/AR8113/AR8114 Gigabit or Fast Ethernet",
|
||||||
"serialNumber": "00:23:54:8d:be:66",
|
"serialNumber": "00:23:54:8d:be:66",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 100,
|
"speed": 100,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -65,7 +64,7 @@
|
||||||
"manufacturer": "Ralink corp.",
|
"manufacturer": "Ralink corp.",
|
||||||
"model": "RT2790 Wireless 802.11n 1T/2R PCIe",
|
"model": "RT2790 Wireless 802.11n 1T/2R PCIe",
|
||||||
"serialNumber": "00:15:af:dc:44:eb",
|
"serialNumber": "00:15:af:dc:44:eb",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": true
|
"wireless": true
|
||||||
},
|
},
|
||||||
|
@ -73,21 +72,21 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
"model": "NM10/ICH7 Family High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Chicony Electronics Co., Ltd.",
|
"manufacturer": "Chicony Electronics Co., Ltd.",
|
||||||
"model": "CNF7129",
|
"model": "CNF7129",
|
||||||
"serialNumber": "SN0001",
|
"serialNumber": "SN0001",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "ASUSTeK Computer INC.",
|
"manufacturer": "ASUSTeK Computer INC.",
|
||||||
"model": "1000H",
|
"model": "1000H",
|
||||||
"serialNumber": "Eee0123456789",
|
"serialNumber": "Eee0123456789",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 5,
|
"usb": 5,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"model": "HP Compaq dc7900 Small Form Factor",
|
"model": "HP Compaq dc7900 Small Form Factor",
|
||||||
"serialNumber": "CZC901381R",
|
"serialNumber": "CZC901381R",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 3.0,
|
"speed": 3.0,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "JEDEC ID:AD 00 00 00 00 00 00 00",
|
"manufacturer": "JEDEC ID:AD 00 00 00 00 00 00 00",
|
||||||
"model": "HYMP125U64CP8-S6",
|
"model": "HYMP125U64CP8-S6",
|
||||||
"serialNumber": "01200000",
|
"serialNumber": "01200000",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"model": "ST3160815AS",
|
"model": "ST3160815AS",
|
||||||
"serialNumber": "6RX7AWEZ",
|
"serialNumber": "6RX7AWEZ",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 152627,
|
"size": 152627,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "4 Series Chipset Integrated Graphics Controller",
|
"model": "4 Series Chipset Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82567LM-3 Gigabit Network Connection",
|
"model": "82567LM-3 Gigabit Network Connection",
|
||||||
"serialNumber": "00:23:7d:49:5e:31",
|
"serialNumber": "00:23:7d:49:5e:31",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -67,7 +66,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8169 PCI Gigabit Ethernet Controller",
|
"model": "RTL8169 PCI Gigabit Ethernet Controller",
|
||||||
"serialNumber": "00:b0:c2:02:ab:b7",
|
"serialNumber": "00:b0:c2:02:ab:b7",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -76,14 +75,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801JD/DO HD Audio Controller",
|
"model": "82801JD/DO HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"model": "3031h",
|
"model": "3031h",
|
||||||
"serialNumber": "CZC901381R",
|
"serialNumber": "CZC901381R",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 8,
|
"usb": 8,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"model": "HP Compaq 8100 Elite SFF",
|
"model": "HP Compaq 8100 Elite SFF",
|
||||||
"serialNumber": "CZC0408YPV",
|
"serialNumber": "CZC0408YPV",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i3 CPU 530 @ 2.93GHz",
|
"model": "Intel Core i3 CPU 530 @ 2.93GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 2.9330000000000003,
|
"speed": 2.9330000000000003,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
"model": "16JTF25664AZ-1G4F",
|
"model": "16JTF25664AZ-1G4F",
|
||||||
"serialNumber": "92072F30",
|
"serialNumber": "92072F30",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
"model": "16JTF25664AZ-1G4F",
|
"model": "16JTF25664AZ-1G4F",
|
||||||
"serialNumber": "A4482E29",
|
"serialNumber": "A4482E29",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
"model": "16JTF25664AZ-1G4F",
|
"model": "16JTF25664AZ-1G4F",
|
||||||
"serialNumber": "939E2E29",
|
"serialNumber": "939E2E29",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -63,7 +62,7 @@
|
||||||
"manufacturer": "JEDEC ID:80 2C",
|
"manufacturer": "JEDEC ID:80 2C",
|
||||||
"model": "16JTF25664AZ-1G4F",
|
"model": "16JTF25664AZ-1G4F",
|
||||||
"serialNumber": "48FD2E30",
|
"serialNumber": "48FD2E30",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -74,7 +73,7 @@
|
||||||
"manufacturer": "Western Digital",
|
"manufacturer": "Western Digital",
|
||||||
"model": "WDC WD3200AAJS-6",
|
"model": "WDC WD3200AAJS-6",
|
||||||
"serialNumber": "WD-WCAV2U856544",
|
"serialNumber": "WD-WCAV2U856544",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 305245,
|
"size": 305245,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -83,7 +82,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Core Processor Integrated Graphics Controller",
|
"model": "Core Processor Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -91,7 +90,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82578DM Gigabit Network Connection",
|
"model": "82578DM Gigabit Network Connection",
|
||||||
"serialNumber": "6c:62:6d:81:4d:ae",
|
"serialNumber": "6c:62:6d:81:4d:ae",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -100,14 +99,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"model": "304Ah",
|
"model": "304Ah",
|
||||||
"serialNumber": "CZC0408YPV",
|
"serialNumber": "CZC0408YPV",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"model": "Pavilion dv4000",
|
"model": "Pavilion dv4000",
|
||||||
"serialNumber": "2CE5270ZWC",
|
"serialNumber": "2CE5270ZWC",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Laptop",
|
"type": "Laptop",
|
||||||
"chassis": "Netbook"
|
"chassis": "Netbook"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Pentium M processor 1.60GHz",
|
"model": "Intel Pentium M processor 1.60GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.6,
|
"speed": 1.6,
|
||||||
"address": 32,
|
"address": 32,
|
||||||
|
@ -29,7 +28,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 512,
|
"size": 512,
|
||||||
|
@ -39,7 +38,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 512,
|
"size": 512,
|
||||||
|
@ -49,7 +48,7 @@
|
||||||
"manufacturer": "Fujitsu",
|
"manufacturer": "Fujitsu",
|
||||||
"model": "MHT2080A",
|
"model": "MHT2080A",
|
||||||
"serialNumber": "NN4FT561BDC2",
|
"serialNumber": "NN4FT561BDC2",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 76319,
|
"size": 76319,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Mobile 915GM/GMS/910GML Express Graphics Controller",
|
"model": "Mobile 915GM/GMS/910GML Express Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -66,7 +65,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "PRO/Wireless 2200BG Calexico2 Network Connection",
|
"model": "PRO/Wireless 2200BG Calexico2 Network Connection",
|
||||||
"serialNumber": "00:12:f0:c7:68:51",
|
"serialNumber": "00:12:f0:c7:68:51",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": true
|
"wireless": true
|
||||||
},
|
},
|
||||||
|
@ -74,7 +73,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL-8100/8101L/8139 PCI Fast Ethernet Adapter",
|
"model": "RTL-8100/8101L/8139 PCI Fast Ethernet Adapter",
|
||||||
"serialNumber": "00:0a:e4:d4:71:82",
|
"serialNumber": "00:0a:e4:d4:71:82",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 100,
|
"speed": 100,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -83,14 +82,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801FB/FBM/FR/FW/FRW AC'97 Audio Controller",
|
"model": "82801FB/FBM/FR/FW/FRW AC'97 Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"model": "09BC",
|
"model": "09BC",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 5,
|
"usb": 5,
|
||||||
"firewire": 1,
|
"firewire": 1,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": "7220W3T",
|
"model": "7220W3T",
|
||||||
"serialNumber": "S4R6062",
|
"serialNumber": "S4R6062",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 3.0,
|
"speed": 3.0,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"model": "ST3250318AS",
|
"model": "ST3250318AS",
|
||||||
"serialNumber": "6VY54ZKX",
|
"serialNumber": "6VY54ZKX",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 238475,
|
"size": 238475,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -61,7 +60,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "4 Series Chipset Integrated Graphics Controller",
|
"model": "4 Series Chipset Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -69,7 +68,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82567LM-3 Gigabit Network Connection",
|
"model": "82567LM-3 Gigabit Network Connection",
|
||||||
"serialNumber": "00:24:7e:02:19:d7",
|
"serialNumber": "00:24:7e:02:19:d7",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -78,14 +77,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801JD/DO HD Audio Controller",
|
"model": "82801JD/DO HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": "LENOVO",
|
"model": "LENOVO",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 8,
|
"usb": 8,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": "7220W3T",
|
"model": "7220W3T",
|
||||||
"serialNumber": "S4R6460",
|
"serialNumber": "S4R6460",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 3.0,
|
"speed": 3.0,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": "SAMSUNG HD251HJ",
|
"model": "SAMSUNG HD251HJ",
|
||||||
"serialNumber": "S1L6J9BZ103714",
|
"serialNumber": "S1L6J9BZ103714",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 238475,
|
"size": 238475,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -61,7 +60,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "4 Series Chipset Integrated Graphics Controller",
|
"model": "4 Series Chipset Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -69,7 +68,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82567LM-3 Gigabit Network Connection",
|
"model": "82567LM-3 Gigabit Network Connection",
|
||||||
"serialNumber": "00:24:7e:02:15:1a",
|
"serialNumber": "00:24:7e:02:15:1a",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -78,14 +77,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801JD/DO HD Audio Controller",
|
"model": "82801JD/DO HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": "LENOVO",
|
"model": "LENOVO",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 8,
|
"usb": 8,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": "3493BAG",
|
"model": "3493BAG",
|
||||||
"serialNumber": "PB357N0",
|
"serialNumber": "PB357N0",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Pentium CPU G645 @ 2.90GHz",
|
"model": "Intel Pentium CPU G645 @ 2.90GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.674792,
|
"speed": 1.674792,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Micron",
|
"manufacturer": "Micron",
|
||||||
"model": "16JTF25664AZ-1G4F1",
|
"model": "16JTF25664AZ-1G4F1",
|
||||||
"serialNumber": "292E48DA",
|
"serialNumber": "292E48DA",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"model": "ST250DM000-1BD14",
|
"model": "ST250DM000-1BD14",
|
||||||
"serialNumber": "Z2AYPLNP",
|
"serialNumber": "Z2AYPLNP",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 238475,
|
"size": 238475,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "d4:3d:7e:41:c4:c4",
|
"serialNumber": "d4:3d:7e:41:c4:c4",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -67,14 +66,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": "7220W3T",
|
"model": "7220W3T",
|
||||||
"serialNumber": "S4WV119",
|
"serialNumber": "S4WV119",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 3.0,
|
"speed": 3.0,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"model": "ST3250318AS",
|
"model": "ST3250318AS",
|
||||||
"serialNumber": "6VY52H7X",
|
"serialNumber": "6VY52H7X",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 238475,
|
"size": 238475,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -61,7 +60,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "4 Series Chipset Integrated Graphics Controller",
|
"model": "4 Series Chipset Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -69,7 +68,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82567LM-3 Gigabit Network Connection",
|
"model": "82567LM-3 Gigabit Network Connection",
|
||||||
"serialNumber": "1c:6f:65:03:fd:c4",
|
"serialNumber": "1c:6f:65:03:fd:c4",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -78,14 +77,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801JD/DO HD Audio Controller",
|
"model": "82801JD/DO HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": "LENOVO",
|
"model": "LENOVO",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 8,
|
"usb": 8,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "NEC Computers SAS",
|
"manufacturer": "NEC Computers SAS",
|
||||||
"model": "Powermate MLxxx",
|
"model": "Powermate MLxxx",
|
||||||
"serialNumber": "SN 123456789ABC",
|
"serialNumber": "SN 123456789ABC",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 3.0,
|
"speed": 3.0,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Samsung",
|
"manufacturer": "Samsung",
|
||||||
"model": "M3 78T2863QZS-CE6",
|
"model": "M3 78T2863QZS-CE6",
|
||||||
"serialNumber": "253C8F0C",
|
"serialNumber": "253C8F0C",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Samsung",
|
"manufacturer": "Samsung",
|
||||||
"model": "M3 78T2863QZS-CE6",
|
"model": "M3 78T2863QZS-CE6",
|
||||||
"serialNumber": "253C8DE7",
|
"serialNumber": "253C8DE7",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
"manufacturer": "Hitachi",
|
"manufacturer": "Hitachi",
|
||||||
"model": "HDT72103",
|
"model": "HDT72103",
|
||||||
"serialNumber": "STA2L7MV39LL6D",
|
"serialNumber": "STA2L7MV39LL6D",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 305245,
|
"size": 305245,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -61,7 +60,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82Q35 Express Integrated Graphics Controller",
|
"model": "82Q35 Express Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -69,7 +68,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82566DM-2 Gigabit Network Connection",
|
"model": "82566DM-2 Gigabit Network Connection",
|
||||||
"serialNumber": "00:24:21:7a:90:02",
|
"serialNumber": "00:24:21:7a:90:02",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -78,14 +77,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801I HD Audio Controller",
|
"model": "82801I HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Micro-Star International Co Ltd",
|
"manufacturer": "Micro-Star International Co Ltd",
|
||||||
"model": "MS-7377",
|
"model": "MS-7377",
|
||||||
"serialNumber": "9516777584",
|
"serialNumber": "9516777584",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 8,
|
"usb": 8,
|
||||||
"firewire": 1,
|
"firewire": 1,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i3-2100 CPU @ 3.10GHz",
|
"model": "Intel Core i3-2100 CPU @ 3.10GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.6862300000000001,
|
"speed": 1.6862300000000001,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Kingston",
|
"manufacturer": "Kingston",
|
||||||
"model": "9905403-038.A00LF",
|
"model": "9905403-038.A00LF",
|
||||||
"serialNumber": "8F17943",
|
"serialNumber": "8F17943",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 4096,
|
"size": 4096,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"model": "ST3500413AS",
|
"model": "ST3500413AS",
|
||||||
"serialNumber": "Z2A3HR7N",
|
"serialNumber": "Z2A3HR7N",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 476940,
|
"size": 476940,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "f4:6d:04:12:9b:85",
|
"serialNumber": "f4:6d:04:12:9b:85",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -67,14 +66,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "ASUSTeK Computer INC.",
|
"manufacturer": "ASUSTeK Computer INC.",
|
||||||
"model": "P8H61-M LE",
|
"model": "P8H61-M LE",
|
||||||
"serialNumber": "109192430003459",
|
"serialNumber": "109192430003459",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "OptiPlex 745",
|
"model": "OptiPlex 745",
|
||||||
"serialNumber": "HQ5583J",
|
"serialNumber": "HQ5583J",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 CPU 6400 @ 2.13GHz",
|
"model": "Intel Core2 CPU 6400 @ 2.13GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 2.133,
|
"speed": 2.133,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Infineon",
|
"manufacturer": "Infineon",
|
||||||
"model": "64T128020HU3SB",
|
"model": "64T128020HU3SB",
|
||||||
"serialNumber": "07129114",
|
"serialNumber": "07129114",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Infineon",
|
"manufacturer": "Infineon",
|
||||||
"model": "64T128020HU3SB",
|
"model": "64T128020HU3SB",
|
||||||
"serialNumber": "07127E11",
|
"serialNumber": "07127E11",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 1024,
|
"size": 1024,
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
"manufacturer": "Western Digital",
|
"manufacturer": "Western Digital",
|
||||||
"model": "WDC WD3200AAKS-7",
|
"model": "WDC WD3200AAKS-7",
|
||||||
"serialNumber": "WD-WMAV2W580992",
|
"serialNumber": "WD-WMAV2W580992",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 305245,
|
"size": 305245,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -61,7 +60,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82Q963/Q965 Integrated Graphics Controller",
|
"model": "82Q963/Q965 Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -69,7 +68,7 @@
|
||||||
"manufacturer": "Broadcom Limited",
|
"manufacturer": "Broadcom Limited",
|
||||||
"model": "NetXtreme BCM5754 Gigabit Ethernet PCI Express",
|
"model": "NetXtreme BCM5754 Gigabit Ethernet PCI Express",
|
||||||
"serialNumber": "00:1a:a0:e0:60:62",
|
"serialNumber": "00:1a:a0:e0:60:62",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -78,14 +77,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801H HD Audio Controller",
|
"model": "82801H HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "0HP962",
|
"model": "0HP962",
|
||||||
"serialNumber": "..CN137407AJ02SW.",
|
"serialNumber": "..CN137407AJ02SW.",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 7,
|
"usb": 7,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "OptiPlex GX520",
|
"model": "OptiPlex GX520",
|
||||||
"serialNumber": "6G0772J",
|
"serialNumber": "6G0772J",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Pentium 4 CPU 3.00GHz",
|
"model": "Intel Pentium 4 CPU 3.00GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 3.0,
|
"speed": 3.0,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -29,7 +28,7 @@
|
||||||
"manufacturer": "Nanya Technology",
|
"manufacturer": "Nanya Technology",
|
||||||
"model": "NT512T64U88A0BY-37",
|
"model": "NT512T64U88A0BY-37",
|
||||||
"serialNumber": "197312A4",
|
"serialNumber": "197312A4",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 512,
|
"size": 512,
|
||||||
|
@ -40,7 +39,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 512,
|
"size": 512,
|
||||||
|
@ -51,7 +50,7 @@
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"model": "ST3808110AS",
|
"model": "ST3808110AS",
|
||||||
"serialNumber": "5LR30DTZ",
|
"serialNumber": "5LR30DTZ",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 76293,
|
"size": 76293,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -60,7 +59,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82945G/GZ Integrated Graphics Controller",
|
"model": "82945G/GZ Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -68,7 +67,7 @@
|
||||||
"manufacturer": "Broadcom Limited",
|
"manufacturer": "Broadcom Limited",
|
||||||
"model": "NetXtreme BCM5751 Gigabit Ethernet PCI Express",
|
"model": "NetXtreme BCM5751 Gigabit Ethernet PCI Express",
|
||||||
"serialNumber": "00:13:72:78:53:12",
|
"serialNumber": "00:13:72:78:53:12",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -77,14 +76,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801G AC'97 Audio Controller",
|
"model": "82801G AC'97 Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "0UG982",
|
"model": "0UG982",
|
||||||
"serialNumber": "..CN1374063201S5.",
|
"serialNumber": "..CN1374063201S5.",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 5,
|
"usb": 5,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"model": "HP Compaq dc7900 Small Form Factor",
|
"model": "HP Compaq dc7900 Small Form Factor",
|
||||||
"serialNumber": "CZC901381R",
|
"serialNumber": "CZC901381R",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
"model": "Intel Core2 Duo CPU E8400 @ 3.00GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 3.0,
|
"speed": 3.0,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "JEDEC ID:AD 00 00 00 00 00 00 00",
|
"manufacturer": "JEDEC ID:AD 00 00 00 00 00 00 00",
|
||||||
"model": "HYMP125U64CP8-S6",
|
"model": "HYMP125U64CP8-S6",
|
||||||
"serialNumber": "01200000",
|
"serialNumber": "01200000",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"model": "ST3160815AS",
|
"model": "ST3160815AS",
|
||||||
"serialNumber": "6RX7AWEZ",
|
"serialNumber": "6RX7AWEZ",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 152627,
|
"size": 152627,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "4 Series Chipset Integrated Graphics Controller",
|
"model": "4 Series Chipset Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82567LM-3 Gigabit Network Connection",
|
"model": "82567LM-3 Gigabit Network Connection",
|
||||||
"serialNumber": "00:23:7d:49:5e:31",
|
"serialNumber": "00:23:7d:49:5e:31",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -67,7 +66,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8169 PCI Gigabit Ethernet Controller",
|
"model": "RTL8169 PCI Gigabit Ethernet Controller",
|
||||||
"serialNumber": "00:b0:c2:02:ab:b7",
|
"serialNumber": "00:b0:c2:02:ab:b7",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -76,14 +75,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801JD/DO HD Audio Controller",
|
"model": "82801JD/DO HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Hewlett-Packard",
|
"manufacturer": "Hewlett-Packard",
|
||||||
"model": "3031h",
|
"model": "3031h",
|
||||||
"serialNumber": "CZC901381R",
|
"serialNumber": "CZC901381R",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 8,
|
"usb": 8,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "TOSHIBA",
|
"manufacturer": "TOSHIBA",
|
||||||
"model": "PORTEGE R700",
|
"model": "PORTEGE R700",
|
||||||
"serialNumber": "YA059622H",
|
"serialNumber": "YA059622H",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Laptop",
|
"type": "Laptop",
|
||||||
"chassis": "Netbook"
|
"chassis": "Netbook"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i5 CPU M 560 @ 2.67GHz",
|
"model": "Intel Core i5 CPU M 560 @ 2.67GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.199,
|
"speed": 1.199,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -29,7 +28,7 @@
|
||||||
"manufacturer": "Samsung",
|
"manufacturer": "Samsung",
|
||||||
"model": "M471B5773CHS-CH9",
|
"model": "M471B5773CHS-CH9",
|
||||||
"serialNumber": "67900CDD",
|
"serialNumber": "67900CDD",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "SODIMM",
|
"format": "SODIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -40,7 +39,7 @@
|
||||||
"manufacturer": "Hitachi",
|
"manufacturer": "Hitachi",
|
||||||
"model": "HTS54505",
|
"model": "HTS54505",
|
||||||
"serialNumber": "101022PBN40317KS46YE",
|
"serialNumber": "101022PBN40317KS46YE",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 476940,
|
"size": 476940,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -49,7 +48,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Core Processor Integrated Graphics Controller",
|
"model": "Core Processor Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -57,7 +56,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82577LM Gigabit Network Connection",
|
"model": "82577LM Gigabit Network Connection",
|
||||||
"serialNumber": "00:23:18:02:0d:94",
|
"serialNumber": "00:23:18:02:0d:94",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -66,7 +65,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Centrino Advanced-N 6200",
|
"model": "Centrino Advanced-N 6200",
|
||||||
"serialNumber": "00:27:10:cd:5e:44",
|
"serialNumber": "00:27:10:cd:5e:44",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": true
|
"wireless": true
|
||||||
},
|
},
|
||||||
|
@ -74,7 +73,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": "02:80:37:ec:02:00",
|
"serialNumber": "02:80:37:ec:02:00",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": false
|
"wireless": false
|
||||||
},
|
},
|
||||||
|
@ -82,21 +81,21 @@
|
||||||
"manufacturer": "Realtek",
|
"manufacturer": "Realtek",
|
||||||
"model": "2SF001",
|
"model": "2SF001",
|
||||||
"serialNumber": "0x0001",
|
"serialNumber": "0x0001",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
"model": "5 Series/3400 Series Chipset High Definition Audio",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "TOSHIBA",
|
"manufacturer": "TOSHIBA",
|
||||||
"model": "Portable PC",
|
"model": "Portable PC",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "innotek GmbH",
|
"manufacturer": "innotek GmbH",
|
||||||
"model": "VirtualBox",
|
"model": "VirtualBox",
|
||||||
"serialNumber": "0",
|
"serialNumber": "0",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Computer",
|
"type": "Computer",
|
||||||
"chassis": "Virtual"
|
"chassis": "Virtual"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": "VBOX HARDDISK",
|
"model": "VBOX HARDDISK",
|
||||||
"serialNumber": "VBd9783eb3-8ef7f22a",
|
"serialNumber": "VBd9783eb3-8ef7f22a",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 76856,
|
"size": 76856,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -28,7 +27,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82540EM Gigabit Ethernet Controller",
|
"model": "82540EM Gigabit Ethernet Controller",
|
||||||
"serialNumber": "08:00:27:43:d0:65",
|
"serialNumber": "08:00:27:43:d0:65",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -37,7 +36,7 @@
|
||||||
"manufacturer": "Oracle Corporation",
|
"manufacturer": "Oracle Corporation",
|
||||||
"model": "VirtualBox",
|
"model": "VirtualBox",
|
||||||
"serialNumber": "0",
|
"serialNumber": "0",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 1,
|
"usb": 1,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "innotek GmbH",
|
"manufacturer": "innotek GmbH",
|
||||||
"model": "VirtualBox",
|
"model": "VirtualBox",
|
||||||
"serialNumber": "0",
|
"serialNumber": "0",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Computer",
|
"type": "Computer",
|
||||||
"chassis": "Virtual"
|
"chassis": "Virtual"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82540EM Gigabit Ethernet Controller",
|
"model": "82540EM Gigabit Ethernet Controller",
|
||||||
"serialNumber": "08:00:27:53:cb:af",
|
"serialNumber": "08:00:27:53:cb:af",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -28,14 +27,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801AA AC'97 Audio Controller",
|
"model": "82801AA AC'97 Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Oracle Corporation",
|
"manufacturer": "Oracle Corporation",
|
||||||
"model": "VirtualBox",
|
"model": "VirtualBox",
|
||||||
"serialNumber": "0",
|
"serialNumber": "0",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "innotek GmbH",
|
"manufacturer": "innotek GmbH",
|
||||||
"model": "VirtualBox",
|
"model": "VirtualBox",
|
||||||
"serialNumber": "0",
|
"serialNumber": "0",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Computer",
|
"type": "Computer",
|
||||||
"chassis": "Virtual"
|
"chassis": "Virtual"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82540EM Gigabit Ethernet Controller",
|
"model": "82540EM Gigabit Ethernet Controller",
|
||||||
"serialNumber": "08:00:27:53:cb:af",
|
"serialNumber": "08:00:27:53:cb:af",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -28,14 +27,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801AA AC'97 Audio Controller",
|
"model": "82801AA AC'97 Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Oracle Corporation",
|
"manufacturer": "Oracle Corporation",
|
||||||
"model": "VirtualBox",
|
"model": "VirtualBox",
|
||||||
"serialNumber": "0",
|
"serialNumber": "0",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "Vostro 260",
|
"model": "Vostro 260",
|
||||||
"serialNumber": "1Q63F5J",
|
"serialNumber": "1Q63F5J",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i3-2120 CPU @ 3.30GHz",
|
"model": "Intel Core i3-2120 CPU @ 3.30GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.6709470000000002,
|
"speed": 1.6709470000000002,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Micron",
|
"manufacturer": "Micron",
|
||||||
"model": "8JTF25664AZ-1G4M1",
|
"model": "8JTF25664AZ-1G4M1",
|
||||||
"serialNumber": "E192532D",
|
"serialNumber": "E192532D",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": "Micron",
|
"manufacturer": "Micron",
|
||||||
"model": "8JTF25664AZ-1G4M1",
|
"model": "8JTF25664AZ-1G4M1",
|
||||||
"serialNumber": "E192532C",
|
"serialNumber": "E192532C",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
"manufacturer": "Seagate",
|
"manufacturer": "Seagate",
|
||||||
"model": "ST500DM002-1BD14",
|
"model": "ST500DM002-1BD14",
|
||||||
"serialNumber": "Z2AYS308",
|
"serialNumber": "Z2AYS308",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "HardDrive",
|
"type": "HardDrive",
|
||||||
"size": 476940,
|
"size": 476940,
|
||||||
"interface": null
|
"interface": null
|
||||||
|
@ -61,7 +60,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
"model": "2nd Generation Core Processor Family Integrated Graphics Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -69,7 +68,7 @@
|
||||||
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
"manufacturer": "Realtek Semiconductor Co., Ltd.",
|
||||||
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
"model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller",
|
||||||
"serialNumber": "d4:be:d9:ec:2d:ea",
|
"serialNumber": "d4:be:d9:ec:2d:ea",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -78,14 +77,14 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
"model": "6 Series/C200 Series Chipset Family High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Dell Inc.",
|
"manufacturer": "Dell Inc.",
|
||||||
"model": "0GDG8Y",
|
"model": "0GDG8Y",
|
||||||
"serialNumber": "..CN70163257067Z.",
|
"serialNumber": "..CN70163257067Z.",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 2,
|
"usb": 2,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": "415522G",
|
"model": "415522G",
|
||||||
"serialNumber": "S4T6208",
|
"serialNumber": "S4T6208",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Desktop",
|
"type": "Desktop",
|
||||||
"chassis": "Tower"
|
"chassis": "Tower"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Xeon CPU E5520 @ 2.27GHz",
|
"model": "Intel Xeon CPU E5520 @ 2.27GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 1.729,
|
"speed": 1.729,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -52,7 +51,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -63,7 +62,7 @@
|
||||||
"manufacturer": null,
|
"manufacturer": null,
|
||||||
"model": null,
|
"model": null,
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "DIMM",
|
"format": "DIMM",
|
||||||
"size": 2048,
|
"size": 2048,
|
||||||
|
@ -74,7 +73,7 @@
|
||||||
"manufacturer": "NVIDIA Corporation",
|
"manufacturer": "NVIDIA Corporation",
|
||||||
"model": "GT200GL Quadro FX 3800",
|
"model": "GT200GL Quadro FX 3800",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -82,7 +81,7 @@
|
||||||
"manufacturer": "NVIDIA Corporation",
|
"manufacturer": "NVIDIA Corporation",
|
||||||
"model": "GF100GL Quadro 4000",
|
"model": "GF100GL Quadro 4000",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -90,7 +89,7 @@
|
||||||
"manufacturer": "Broadcom Limited",
|
"manufacturer": "Broadcom Limited",
|
||||||
"model": "NetXtreme BCM5755 Gigabit Ethernet PCI Express",
|
"model": "NetXtreme BCM5755 Gigabit Ethernet PCI Express",
|
||||||
"serialNumber": "00:27:13:53:ec:62",
|
"serialNumber": "00:27:13:53:ec:62",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -99,7 +98,7 @@
|
||||||
"manufacturer": "Broadcom Limited",
|
"manufacturer": "Broadcom Limited",
|
||||||
"model": "NetXtreme BCM5754 Gigabit Ethernet PCI Express",
|
"model": "NetXtreme BCM5754 Gigabit Ethernet PCI Express",
|
||||||
"serialNumber": "00:27:13:53:ec:63",
|
"serialNumber": "00:27:13:53:ec:63",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"speed": 1000,
|
"speed": 1000,
|
||||||
"wireless": false
|
"wireless": false
|
||||||
|
@ -108,21 +107,21 @@
|
||||||
"manufacturer": "NVIDIA Corporation",
|
"manufacturer": "NVIDIA Corporation",
|
||||||
"model": "GF100 High Definition Audio Controller",
|
"model": "GF100 High Definition Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "82801JI HD Audio Controller",
|
"model": "82801JI HD Audio Controller",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "LENOVO",
|
"manufacturer": "LENOVO",
|
||||||
"model": "LENOVO",
|
"model": "LENOVO",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 8,
|
"usb": 8,
|
||||||
"firewire": 1,
|
"firewire": 1,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
"uuid": "00000000-0000-0000-0000-000000000000",
|
"uuid": "00000000-0000-0000-0000-000000000000",
|
||||||
"software": "Workbench",
|
"software": "Workbench",
|
||||||
"version": "11.0a1",
|
"version": "11.0a1",
|
||||||
"expectedEvents": [],
|
|
||||||
"closed": false,
|
"closed": false,
|
||||||
"endTime": "2000-01-01 00:00:00+00:00",
|
"endTime": "2000-01-01 00:00:00+00:00",
|
||||||
"device": {
|
"device": {
|
||||||
"manufacturer": "Timi",
|
"manufacturer": "Timi",
|
||||||
"model": "TM1613",
|
"model": "TM1613",
|
||||||
"serialNumber": "13138/00064437",
|
"serialNumber": "13138/00064437",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Laptop",
|
"type": "Laptop",
|
||||||
"chassis": "Netbook"
|
"chassis": "Netbook"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +18,7 @@
|
||||||
"manufacturer": "Intel Corp.",
|
"manufacturer": "Intel Corp.",
|
||||||
"model": "Intel Core i5-6200U CPU @ 2.30GHz",
|
"model": "Intel Core i5-6200U CPU @ 2.30GHz",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Processor",
|
"type": "Processor",
|
||||||
"speed": 2.684156,
|
"speed": 2.684156,
|
||||||
"address": 64,
|
"address": 64,
|
||||||
|
@ -30,7 +29,7 @@
|
||||||
"manufacturer": "Samsung",
|
"manufacturer": "Samsung",
|
||||||
"model": "M471A1K43BB0-CPB",
|
"model": "M471A1K43BB0-CPB",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "RamModule",
|
"type": "RamModule",
|
||||||
"format": "SODIMM",
|
"format": "SODIMM",
|
||||||
"size": 8192,
|
"size": 8192,
|
||||||
|
@ -40,7 +39,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Sky Lake Integrated Graphics",
|
"model": "Sky Lake Integrated Graphics",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -48,7 +47,7 @@
|
||||||
"manufacturer": "NVIDIA Corporation",
|
"manufacturer": "NVIDIA Corporation",
|
||||||
"model": "NVIDIA Corporation",
|
"model": "NVIDIA Corporation",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "GraphicCard",
|
"type": "GraphicCard",
|
||||||
"memory": null
|
"memory": null
|
||||||
},
|
},
|
||||||
|
@ -56,7 +55,7 @@
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Wireless 8260",
|
"model": "Wireless 8260",
|
||||||
"serialNumber": "a0:c5:89:41:a8:a7",
|
"serialNumber": "a0:c5:89:41:a8:a7",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "NetworkAdapter",
|
"type": "NetworkAdapter",
|
||||||
"wireless": true
|
"wireless": true
|
||||||
},
|
},
|
||||||
|
@ -64,21 +63,21 @@
|
||||||
"manufacturer": "SunplusIT Inc",
|
"manufacturer": "SunplusIT Inc",
|
||||||
"model": "XiaoMi USB 2.0 Webcam",
|
"model": "XiaoMi USB 2.0 Webcam",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Intel Corporation",
|
"manufacturer": "Intel Corporation",
|
||||||
"model": "Intel Corporation",
|
"model": "Intel Corporation",
|
||||||
"serialNumber": null,
|
"serialNumber": null,
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "SoundCard"
|
"type": "SoundCard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"manufacturer": "Timi",
|
"manufacturer": "Timi",
|
||||||
"model": "TM1613",
|
"model": "TM1613",
|
||||||
"serialNumber": "MMG5S000000226B1P02YK",
|
"serialNumber": "MMG5S000000226B1P02YK",
|
||||||
"events": [],
|
"actions": [],
|
||||||
"type": "Motherboard",
|
"type": "Motherboard",
|
||||||
"usb": 1,
|
"usb": 1,
|
||||||
"firewire": 0,
|
"firewire": 0,
|
||||||
|
|
Reference in a new issue