Merge pull request #328 from eReuse/feature/exports-placeholder

Feature/exports placeholder
This commit is contained in:
cayop 2022-08-10 10:48:23 +02:00 committed by GitHub
commit 1988260c05
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 268 additions and 110 deletions

View File

@ -4,18 +4,13 @@ from collections import OrderedDict
from flask import url_for
from ereuse_devicehub.resources.action import models as da
from ereuse_devicehub.resources.action.models import (
BenchmarkDataStorage,
RateComputer,
TestDataStorage,
)
from ereuse_devicehub.resources.action.models import RateComputer
from ereuse_devicehub.resources.device import models as d
from ereuse_devicehub.resources.device import states
from ereuse_devicehub.resources.enums import Severity
class DeviceRow(OrderedDict):
class BaseDeviceRow(OrderedDict):
NUMS = {
d.Display.t: 1,
d.Processor.t: 2,
@ -37,9 +32,242 @@ class DeviceRow(OrderedDict):
d.SoundCard.t,
]
def __init__(self) -> None:
super().__init__()
self['DHID'] = ''
self['DocumentID'] = ''
self['Public Link'] = ''
self['Lots'] = ''
self['Tag 1 Type'] = ''
self['Tag 1 ID'] = ''
self['Tag 1 Organization'] = ''
self['Tag 2 Type'] = ''
self['Tag 2 ID'] = ''
self['Tag 2 Organization'] = ''
self['Tag 3 Type'] = ''
self['Tag 3 ID'] = ''
self['Tag 3 Organization'] = ''
self['Device Hardware ID'] = ''
self['Device Type'] = ''
self['Device Chassis'] = ''
self['Device Serial Number'] = ''
self['Device Model'] = ''
self['Device Manufacturer'] = ''
self['Registered in'] = ''
self['Registered (process)'] = ''
self['Updated in (software)'] = ''
self['Updated in (web)'] = ''
self['Physical state'] = ''
self['Allocate state'] = ''
self['Lifecycle state'] = ''
self['Processor'] = ''
self['RAM (MB)'] = ''
self['Data Storage Size (MB)'] = ''
self['Processor 1'] = ''
self['Processor 1 Manufacturer'] = ''
self['Processor 1 Model'] = ''
self['Processor 1 Serial Number'] = ''
self['Processor 1 Number of cores'] = ''
self['Processor 1 Speed (GHz)'] = ''
self['Benchmark Processor 1 (points)'] = ''
self['Benchmark ProcessorSysbench Processor 1 (points)'] = ''
self['Processor 2'] = ''
self['Processor 2 Manufacturer'] = ''
self['Processor 2 Model'] = ''
self['Processor 2 Serial Number'] = ''
self['Processor 2 Number of cores'] = ''
self['Processor 2 Speed (GHz)'] = ''
self['Benchmark Processor 2 (points)'] = ''
self['Benchmark ProcessorSysbench Processor 2 (points)'] = ''
self['RamModule 1'] = ''
self['RamModule 1 Manufacturer'] = ''
self['RamModule 1 Model'] = ''
self['RamModule 1 Serial Number'] = ''
self['RamModule 1 Size (MB)'] = ''
self['RamModule 1 Speed (MHz)'] = ''
self['RamModule 2'] = ''
self['RamModule 2 Manufacturer'] = ''
self['RamModule 2 Model'] = ''
self['RamModule 2 Serial Number'] = ''
self['RamModule 2 Size (MB)'] = ''
self['RamModule 2 Speed (MHz)'] = ''
self['RamModule 3'] = ''
self['RamModule 3 Manufacturer'] = ''
self['RamModule 3 Model'] = ''
self['RamModule 3 Serial Number'] = ''
self['RamModule 3 Size (MB)'] = ''
self['RamModule 3 Speed (MHz)'] = ''
self['RamModule 4'] = ''
self['RamModule 4 Manufacturer'] = ''
self['RamModule 4 Model'] = ''
self['RamModule 4 Serial Number'] = ''
self['RamModule 4 Size (MB)'] = ''
self['RamModule 4 Speed (MHz)'] = ''
self['DataStorage 1'] = ''
self['DataStorage 1 Manufacturer'] = ''
self['DataStorage 1 Model'] = ''
self['DataStorage 1 Serial Number'] = ''
self['DataStorage 1 Size (MB)'] = ''
self['Erasure DataStorage 1'] = ''
self['Erasure DataStorage 1 Serial Number'] = ''
self['Erasure DataStorage 1 Size (MB)'] = ''
self['Erasure DataStorage 1 Software'] = ''
self['Erasure DataStorage 1 Result'] = ''
self['Erasure DataStorage 1 Certificate URL'] = ''
self['Erasure DataStorage 1 Type'] = ''
self['Erasure DataStorage 1 Method'] = ''
self['Erasure DataStorage 1 Elapsed (hours)'] = ''
self['Erasure DataStorage 1 Date'] = ''
self['Erasure DataStorage 1 Steps'] = ''
self['Erasure DataStorage 1 Steps Start Time'] = ''
self['Erasure DataStorage 1 Steps End Time'] = ''
self['Benchmark DataStorage 1 Read Speed (MB/s)'] = ''
self['Benchmark DataStorage 1 Writing speed (MB/s)'] = ''
self['Test DataStorage 1 Software'] = ''
self['Test DataStorage 1 Type'] = ''
self['Test DataStorage 1 Result'] = ''
self['Test DataStorage 1 Power cycle count'] = ''
self['Test DataStorage 1 Lifetime (days)'] = ''
self['Test DataStorage 1 Power on hours'] = ''
self['DataStorage 2'] = ''
self['DataStorage 2 Manufacturer'] = ''
self['DataStorage 2 Model'] = ''
self['DataStorage 2 Serial Number'] = ''
self['DataStorage 2 Size (MB)'] = ''
self['Erasure DataStorage 2'] = ''
self['Erasure DataStorage 2 Serial Number'] = ''
self['Erasure DataStorage 2 Size (MB)'] = ''
self['Erasure DataStorage 2 Software'] = ''
self['Erasure DataStorage 2 Result'] = ''
self['Erasure DataStorage 2 Certificate URL'] = ''
self['Erasure DataStorage 2 Type'] = ''
self['Erasure DataStorage 2 Method'] = ''
self['Erasure DataStorage 2 Elapsed (hours)'] = ''
self['Erasure DataStorage 2 Date'] = ''
self['Erasure DataStorage 2 Steps'] = ''
self['Erasure DataStorage 2 Steps Start Time'] = ''
self['Erasure DataStorage 2 Steps End Time'] = ''
self['Benchmark DataStorage 2 Read Speed (MB/s)'] = ''
self['Benchmark DataStorage 2 Writing speed (MB/s)'] = ''
self['Test DataStorage 2 Software'] = ''
self['Test DataStorage 2 Type'] = ''
self['Test DataStorage 2 Result'] = ''
self['Test DataStorage 2 Power cycle count'] = ''
self['Test DataStorage 2 Lifetime (days)'] = ''
self['Test DataStorage 2 Power on hours'] = ''
self['DataStorage 3'] = ''
self['DataStorage 3 Manufacturer'] = ''
self['DataStorage 3 Model'] = ''
self['DataStorage 3 Serial Number'] = ''
self['DataStorage 3 Size (MB)'] = ''
self['Erasure DataStorage 3'] = ''
self['Erasure DataStorage 3 Serial Number'] = ''
self['Erasure DataStorage 3 Size (MB)'] = ''
self['Erasure DataStorage 3 Software'] = ''
self['Erasure DataStorage 3 Result'] = ''
self['Erasure DataStorage 3 Certificate URL'] = ''
self['Erasure DataStorage 3 Type'] = ''
self['Erasure DataStorage 3 Method'] = ''
self['Erasure DataStorage 3 Elapsed (hours)'] = ''
self['Erasure DataStorage 3 Date'] = ''
self['Erasure DataStorage 3 Steps'] = ''
self['Erasure DataStorage 3 Steps Start Time'] = ''
self['Erasure DataStorage 3 Steps End Time'] = ''
self['Benchmark DataStorage 3 Read Speed (MB/s)'] = ''
self['Benchmark DataStorage 3 Writing speed (MB/s)'] = ''
self['Test DataStorage 3 Software'] = ''
self['Test DataStorage 3 Type'] = ''
self['Test DataStorage 3 Result'] = ''
self['Test DataStorage 3 Power cycle count'] = ''
self['Test DataStorage 3 Lifetime (days)'] = ''
self['Test DataStorage 3 Power on hours'] = ''
self['DataStorage 4'] = ''
self['DataStorage 4 Manufacturer'] = ''
self['DataStorage 4 Model'] = ''
self['DataStorage 4 Serial Number'] = ''
self['DataStorage 4 Size (MB)'] = ''
self['Erasure DataStorage 4'] = ''
self['Erasure DataStorage 4 Serial Number'] = ''
self['Erasure DataStorage 4 Size (MB)'] = ''
self['Erasure DataStorage 4 Software'] = ''
self['Erasure DataStorage 4 Result'] = ''
self['Erasure DataStorage 4 Certificate URL'] = ''
self['Erasure DataStorage 4 Type'] = ''
self['Erasure DataStorage 4 Method'] = ''
self['Erasure DataStorage 4 Elapsed (hours)'] = ''
self['Erasure DataStorage 4 Date'] = ''
self['Erasure DataStorage 4 Steps'] = ''
self['Erasure DataStorage 4 Steps Start Time'] = ''
self['Erasure DataStorage 4 Steps End Time'] = ''
self['Benchmark DataStorage 4 Read Speed (MB/s)'] = ''
self['Benchmark DataStorage 4 Writing speed (MB/s)'] = ''
self['Test DataStorage 4 Software'] = ''
self['Test DataStorage 4 Type'] = ''
self['Test DataStorage 4 Result'] = ''
self['Test DataStorage 4 Power cycle count'] = ''
self['Test DataStorage 4 Lifetime (days)'] = ''
self['Test DataStorage 4 Power on hours'] = ''
self['Motherboard 1'] = ''
self['Motherboard 1 Manufacturer'] = ''
self['Motherboard 1 Model'] = ''
self['Motherboard 1 Serial Number'] = ''
self['Display 1'] = ''
self['Display 1 Manufacturer'] = ''
self['Display 1 Model'] = ''
self['Display 1 Serial Number'] = ''
self['GraphicCard 1'] = ''
self['GraphicCard 1 Manufacturer'] = ''
self['GraphicCard 1 Model'] = ''
self['GraphicCard 1 Serial Number'] = ''
self['GraphicCard 1 Memory (MB)'] = ''
self['GraphicCard 2'] = ''
self['GraphicCard 2 Manufacturer'] = ''
self['GraphicCard 2 Model'] = ''
self['GraphicCard 2 Serial Number'] = ''
self['GraphicCard 2 Memory (MB)'] = ''
self['NetworkAdapter 1'] = ''
self['NetworkAdapter 1 Manufacturer'] = ''
self['NetworkAdapter 1 Model'] = ''
self['NetworkAdapter 1 Serial Number'] = ''
self['NetworkAdapter 2'] = ''
self['NetworkAdapter 2 Manufacturer'] = ''
self['NetworkAdapter 2 Model'] = ''
self['NetworkAdapter 2 Serial Number'] = ''
self['SoundCard 1'] = ''
self['SoundCard 1 Manufacturer'] = ''
self['SoundCard 1 Model'] = ''
self['SoundCard 1 Serial Number'] = ''
self['SoundCard 2'] = ''
self['SoundCard 2 Manufacturer'] = ''
self['SoundCard 2 Model'] = ''
self['SoundCard 2 Serial Number'] = ''
self['Device Rate'] = ''
self['Device Range'] = ''
self['Processor Rate'] = ''
self['Processor Range'] = ''
self['RAM Rate'] = ''
self['RAM Range'] = ''
self['Data Storage Rate'] = ''
self['Data Storage Range'] = ''
self['Benchmark RamSysbench (points)'] = ''
# Placeholder
self['PHID'] = ''
self['Is Abstract'] = ''
self['Pallet'] = ''
self['id Supplier'] = ''
self['Real Info'] = ''
self['Real Components'] = ''
self['Real Type'] = ''
self['Real Serial Number'] = ''
self['Real Model'] = ''
self['Real Manufacturer'] = ''
class DeviceRow(BaseDeviceRow):
def __init__(self, device: d.Device, document_ids: dict) -> None:
super().__init__()
self.device = device
self.placeholder = device.binding or device.placeholder
self.device = self.placeholder.binding or self.placeholder.device
self.document_id = document_ids.get(device.id, '')
snapshot = get_action(device, 'Snapshot')
software = ''
@ -54,9 +282,6 @@ class DeviceRow(OrderedDict):
url=url_for('Device.main', _external=True), id=device.devicehub_id
)
self['Lots'] = ', '.join([x.name for x in self.device.lots])
self['Tag 1 Type'] = self['Tag 1 ID'] = self['Tag 1 Organization'] = ''
self['Tag 2 Type'] = self['Tag 2 ID'] = self['Tag 2 Organization'] = ''
self['Tag 3 Type'] = self['Tag 3 ID'] = self['Tag 3 Organization'] = ''
for i, tag in zip(range(1, 3), device.tags):
self['Tag {} Type'.format(i)] = 'unamed' if tag.provider else 'named'
self['Tag {} ID'.format(i)] = tag.id
@ -64,7 +289,6 @@ class DeviceRow(OrderedDict):
self['Device Hardware ID'] = device.hid
self['Device Type'] = device.t
self['Device Chassis'] = ''
if isinstance(device, d.Computer) and not device.placeholder:
self['Device Chassis'] = device.chassis.name
self['Device Serial Number'] = none2str(device.serial_number)
@ -73,20 +297,18 @@ class DeviceRow(OrderedDict):
self['Registered in'] = format(device.created, '%c')
self['Registered (process)'] = software
self['Updated in (software)'] = device.updated
self['Updated in (web)'] = ''
self['Physical state'] = ''
if device.physical_status:
self['Physical state'] = device.physical_status.type
self['Allocate state'] = ''
if device.allocated_status:
self['Allocate state'] = device.allocated_status.type
try:
self['Lifecycle state'] = device.last_action_of(*states.Status.actions()).t
except LookupError:
self['Lifecycle state'] = ''
pass
if isinstance(device, d.Computer):
self['Processor'] = none2str(device.processor_model)
self['RAM (MB)'] = none2str(device.ram_size)
@ -109,21 +331,12 @@ class DeviceRow(OrderedDict):
self['RAM Range'] = rate.ram_range.name
self['Data Storage Rate'] = rate.data_storage
self['Data Storage Range'] = rate.data_storage_range.name
else:
self['Device Rate'] = ''
self['Device Range'] = ''
self['Processor Rate'] = ''
self['Processor Range'] = ''
self['RAM Rate'] = ''
self['RAM Range'] = ''
self['Data Storage Rate'] = ''
self['Data Storage Range'] = ''
benchram = get_action(device, 'BenchmarkRamSysbench')
if benchram:
self['Benchmark RamSysbench (points)'] = none2str(benchram.rate)
else:
self['Benchmark RamSysbench (points)'] = ''
self.get_placeholder_datas()
def components(self):
"""Function to get all components information of a device."""
@ -151,11 +364,7 @@ class DeviceRow(OrderedDict):
"""
# Basic fields for all components
self['{} {}'.format(ctype, i)] = format(component) if component else ''
if component is None:
self['{} {} Manufacturer'.format(ctype, i)] = ''
self['{} {} Model'.format(ctype, i)] = ''
self['{} {} Serial Number'.format(ctype, i)] = ''
else:
if component:
self['{} {} Manufacturer'.format(ctype, i)] = none2str(
component.manufacturer
)
@ -179,34 +388,24 @@ class DeviceRow(OrderedDict):
def get_processor(self, ctype, i, component):
"""Particular fields for component Processor."""
if component is None:
self['{} {} Number of cores'.format(ctype, i)] = ''
self['{} {} Speed (GHz)'.format(ctype, i)] = ''
self['Benchmark {} {} (points)'.format(ctype, i)] = ''
self['Benchmark ProcessorSysbench {} {} (points)'.format(ctype, i)] = ''
return
self['{} {} Number of cores'.format(ctype, i)] = none2str(component.cores)
self['{} {} Speed (GHz)'.format(ctype, i)] = none2str(component.speed)
benchmark = get_action(component, 'BenchmarkProcessor')
if not benchmark:
self['Benchmark {} {} (points)'.format(ctype, i)] = ''
else:
if benchmark:
self['Benchmark {} {} (points)'.format(ctype, i)] = benchmark.rate
sysbench = get_action(component, 'BenchmarkProcessorSysbench')
if not sysbench:
self['Benchmark ProcessorSysbench {} {} (points)'.format(ctype, i)] = ''
return
self[
'Benchmark ProcessorSysbench {} {} (points)'.format(ctype, i)
] = sysbench.rate
if sysbench:
self[
'Benchmark ProcessorSysbench {} {} (points)'.format(ctype, i)
] = sysbench.rate
def get_ram(self, ctype, i, component):
"""Particular fields for component Ram Module."""
if component is None:
self['{} {} Size (MB)'.format(ctype, i)] = ''
self['{} {} Speed (MHz)'.format(ctype, i)] = ''
return
self['{} {} Size (MB)'.format(ctype, i)] = none2str(component.size)
@ -218,32 +417,9 @@ class DeviceRow(OrderedDict):
"""
if component is None:
self['{} {} Size (MB)'.format(ctype, i)] = ''
self['Erasure {} {}'.format(ctype, i)] = ''
self['Erasure {} {} Serial Number'.format(ctype, i)] = ''
self['Erasure {} {} Size (MB)'.format(ctype, i)] = ''
self['Erasure {} {} Software'.format(ctype, i)] = ''
self['Erasure {} {} Result'.format(ctype, i)] = ''
self['Erasure {} {} Certificate URL'.format(ctype, i)] = ''
self['Erasure {} {} Type'.format(ctype, i)] = ''
self['Erasure {} {} Method'.format(ctype, i)] = ''
self['Erasure {} {} Elapsed (hours)'.format(ctype, i)] = ''
self['Erasure {} {} Date'.format(ctype, i)] = ''
self['Erasure {} {} Steps'.format(ctype, i)] = ''
self['Erasure {} {} Steps Start Time'.format(ctype, i)] = ''
self['Erasure {} {} Steps End Time'.format(ctype, i)] = ''
self['Benchmark {} {} Read Speed (MB/s)'.format(ctype, i)] = ''
self['Benchmark {} {} Writing speed (MB/s)'.format(ctype, i)] = ''
self['Test {} {} Software'.format(ctype, i)] = ''
self['Test {} {} Type'.format(ctype, i)] = ''
self['Test {} {} Result'.format(ctype, i)] = ''
self['Test {} {} Power cycle count'.format(ctype, i)] = ''
self['Test {} {} Lifetime (days)'.format(ctype, i)] = ''
self['Test {} {} Power on hours'.format(ctype, i)] = ''
return
snapshot = get_action(component, 'Snapshot')
software = ''
if snapshot:
software = "{software} {version}".format(
software=snapshot.software.name, version=snapshot.version
@ -263,16 +439,6 @@ class DeviceRow(OrderedDict):
serial_number = none2str(component.serial_number)
self['Erasure {} {} Serial Number'.format(ctype, i)] = serial_number
self['Erasure {} {} Size (MB)'.format(ctype, i)] = none2str(component.size)
self['Erasure {} {} Software'.format(ctype, i)] = ''
self['Erasure {} {} Result'.format(ctype, i)] = ''
self['Erasure {} {} Certificate URL'.format(ctype, i)] = ''
self['Erasure {} {} Type'.format(ctype, i)] = ''
self['Erasure {} {} Method'.format(ctype, i)] = ''
self['Erasure {} {} Elapsed (hours)'.format(ctype, i)] = ''
self['Erasure {} {} Date'.format(ctype, i)] = ''
self['Erasure {} {} Steps'.format(ctype, i)] = ''
self['Erasure {} {} Steps Start Time'.format(ctype, i)] = ''
self['Erasure {} {} Steps End Time'.format(ctype, i)] = ''
elif hasattr(erasure, 'type') and erasure.type == 'DataWipe':
self['Erasure {} {}'.format(ctype, i)] = none2str(component.hid)
serial_number = none2str(component.serial_number)
@ -283,13 +449,6 @@ class DeviceRow(OrderedDict):
self['Erasure {} {} Certificate URL'.format(ctype, i)] = (
erasure.document.url and erasure.document.url.to_text() or ''
)
self['Erasure {} {} Type'.format(ctype, i)] = ''
self['Erasure {} {} Method'.format(ctype, i)] = ''
self['Erasure {} {} Elapsed (hours)'.format(ctype, i)] = ''
self['Erasure {} {} Date'.format(ctype, i)] = ''
self['Erasure {} {} Steps'.format(ctype, i)] = ''
self['Erasure {} {} Steps Start Time'.format(ctype, i)] = ''
self['Erasure {} {} Steps End Time'.format(ctype, i)] = ''
else:
self['Erasure {} {}'.format(ctype, i)] = none2str(component.hid)
serial_number = none2str(component.serial_number)
@ -299,7 +458,6 @@ class DeviceRow(OrderedDict):
result = get_result(erasure)
self['Erasure {} {} Result'.format(ctype, i)] = result
self['Erasure {} {} Certificate URL'.format(ctype, i)] = ''
self['Erasure {} {} Type'.format(ctype, i)] = erasure.type
self['Erasure {} {} Method'.format(ctype, i)] = erasure.method
self['Erasure {} {} Elapsed (hours)'.format(ctype, i)] = format(
@ -314,10 +472,7 @@ class DeviceRow(OrderedDict):
self['Erasure {} {} Steps End Time'.format(ctype, i)] = steps_end_time
benchmark = get_action(component, 'BenchmarkDataStorage')
if not benchmark:
self['Benchmark {} {} Read Speed (MB/s)'.format(ctype, i)] = ''
self['Benchmark {} {} Writing speed (MB/s)'.format(ctype, i)] = ''
else:
if benchmark:
self['Benchmark {} {} Read Speed (MB/s)'.format(ctype, i)] = none2str(
benchmark.read_speed
)
@ -327,12 +482,6 @@ class DeviceRow(OrderedDict):
test_storage = get_action(component, 'TestDataStorage')
if not test_storage:
self['Test {} {} Software'.format(ctype, i)] = ''
self['Test {} {} Type'.format(ctype, i)] = ''
self['Test {} {} Result'.format(ctype, i)] = ''
self['Test {} {} Power cycle count'.format(ctype, i)] = ''
self['Test {} {} Lifetime (days)'.format(ctype, i)] = ''
self['Test {} {} Power on hours'.format(ctype, i)] = ''
return
self['Test {} {} Software'.format(ctype, i)] = software
@ -350,11 +499,21 @@ class DeviceRow(OrderedDict):
def get_graphic_card(self, ctype, i, component):
"""Particular fields for component GraphicCard."""
if component is None:
self['{} {} Memory (MB)'.format(ctype, i)] = ''
return
if component:
self['{} {} Memory (MB)'.format(ctype, i)] = none2str(component.memory)
self['{} {} Memory (MB)'.format(ctype, i)] = none2str(component.memory)
def get_placeholder_datas(self):
# Placeholder
self['PHID'] = none2str(self.placeholder.phid)
self['Is Abstract'] = none2str(self.device.is_abstract())
self['Pallet'] = none2str(self.placeholder.pallet)
self['id Supplier'] = none2str(self.placeholder.id_device_supplier)
self['Real Info'] = none2str(self.placeholder.info)
self['Real Components'] = none2str(self.placeholder.components)
self['Real Type'] = none2str(self.placeholder.device.type)
self['Real Manufacturer'] = none2str(self.placeholder.device.manufacturer)
self['Real Model'] = none2str(self.placeholder.device.model)
self['Real Serial Number'] = none2str(self.placeholder.device.serial_number)
class StockRow(OrderedDict):
@ -535,4 +694,3 @@ class InternalStatsRow(OrderedDict):
12: 'Q4',
}
return q[int(month)]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long