adding metrics for documents
This commit is contained in:
parent
17f8aebb94
commit
0eed8330ce
|
@ -49,6 +49,7 @@ from ereuse_devicehub.resources.enums import AppearanceRange, BatteryHealth, Bio
|
||||||
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
|
||||||
from ereuse_devicehub.resources.tradedocument.models import TradeDocument
|
from ereuse_devicehub.resources.tradedocument.models import TradeDocument
|
||||||
|
from ereuse_devicehub.resources.device.metrics import TradeMetrics
|
||||||
|
|
||||||
|
|
||||||
class JoinedTableMixin:
|
class JoinedTableMixin:
|
||||||
|
@ -1633,6 +1634,16 @@ class Trade(JoinedTableMixin, ActionWithMultipleTradeDocuments):
|
||||||
cascade=CASCADE_OWN),
|
cascade=CASCADE_OWN),
|
||||||
primaryjoin='Trade.lot_id == Lot.id')
|
primaryjoin='Trade.lot_id == Lot.id')
|
||||||
|
|
||||||
|
def get_metrics(self):
|
||||||
|
"""
|
||||||
|
This method get a list of values for calculate a metrics from a spreadsheet
|
||||||
|
"""
|
||||||
|
metrics = []
|
||||||
|
for doc in self.documents:
|
||||||
|
m = TradeMetrics(document=doc, Trade=self)
|
||||||
|
metrics.append(m.get_metrics())
|
||||||
|
return metrics
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return '<{0.t} {0.id} executed by {0.author}>'.format(self)
|
return '<{0.t} {0.id} executed by {0.author}>'.format(self)
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
|
|
||||||
class Metrics:
|
class MetricsMix:
|
||||||
"""we want get the data metrics of one device"""
|
"""we want get the data metrics of one device"""
|
||||||
|
|
||||||
def __init__(self, device):
|
def __init__(self, *args, **kwargs):
|
||||||
self.hid = device.hid
|
|
||||||
self.devicehub_id = device.devicehub_id
|
|
||||||
self.actions = copy.copy(device.actions)
|
self.actions = copy.copy(device.actions)
|
||||||
self.actions.sort(key=lambda x: x.created)
|
self.actions.sort(key=lambda x: x.created)
|
||||||
self.rows = []
|
self.rows = []
|
||||||
|
@ -44,6 +42,22 @@ class Metrics:
|
||||||
'start': self.act.created,
|
'start': self.act.created,
|
||||||
'usageTimeAllocate': 0}
|
'usageTimeAllocate': 0}
|
||||||
|
|
||||||
|
def get_metrics(self):
|
||||||
|
"""
|
||||||
|
This method get a list of values for calculate a metrics from a spreadsheet
|
||||||
|
"""
|
||||||
|
return self.rows
|
||||||
|
|
||||||
|
|
||||||
|
class Metrics(MetricsMix):
|
||||||
|
"""we want get the data metrics of one device"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
device = kwargs.pop('device')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.hid = device.hid
|
||||||
|
self.devicehub_id = device.devicehub_id
|
||||||
|
|
||||||
def get_action_status(self):
|
def get_action_status(self):
|
||||||
"""
|
"""
|
||||||
Mark the status of one device.
|
Mark the status of one device.
|
||||||
|
@ -176,3 +190,14 @@ class Metrics:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
return self.rows
|
return self.rows
|
||||||
|
|
||||||
|
|
||||||
|
class TradeMetrics(MetricsMix):
|
||||||
|
"""we want get the data metrics of one device"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
document = kwargs.pop('document')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.hid = document.hash
|
||||||
|
self.devicehub_id = ''
|
||||||
|
|
||||||
|
|
|
@ -506,7 +506,7 @@ class Device(Thing):
|
||||||
"""
|
"""
|
||||||
This method get a list of values for calculate a metrics from a spreadsheet
|
This method get a list of values for calculate a metrics from a spreadsheet
|
||||||
"""
|
"""
|
||||||
metrics = Metrics(self)
|
metrics = Metrics(device=self)
|
||||||
return metrics.get_metrics()
|
return metrics.get_metrics()
|
||||||
|
|
||||||
def __lt__(self, other):
|
def __lt__(self, other):
|
||||||
|
|
|
@ -159,13 +159,31 @@ class ActionsDocumentView(DeviceView):
|
||||||
data = StringIO()
|
data = StringIO()
|
||||||
cw = csv.writer(data, delimiter=';', lineterminator="\n", quotechar='"')
|
cw = csv.writer(data, delimiter=';', lineterminator="\n", quotechar='"')
|
||||||
first = True
|
first = True
|
||||||
|
devs_id = []
|
||||||
for device in query:
|
for device in query:
|
||||||
|
devs_id.append(device.id)
|
||||||
for allocate in device.get_metrics():
|
for allocate in device.get_metrics():
|
||||||
d = ActionRow(allocate)
|
d = ActionRow(allocate)
|
||||||
if first:
|
if first:
|
||||||
cw.writerow(d.keys())
|
cw.writerow(d.keys())
|
||||||
first = False
|
first = False
|
||||||
cw.writerow(d.values())
|
cw.writerow(d.values())
|
||||||
|
from ereuse_devicehub.resources.action.models import Trade
|
||||||
|
from ereuse_devicehub.resources.device.models import Device
|
||||||
|
# import pdb; pdb.set_trace()
|
||||||
|
query_trade = Trade.query.filter(Trade.devices.any(Device.id.in_(devs_id))).all()
|
||||||
|
doc_metrics = []
|
||||||
|
|
||||||
|
for trade in query_trade:
|
||||||
|
doc_metrics.extend(trade.get_metrics())
|
||||||
|
|
||||||
|
for data_row in doc_metrics:
|
||||||
|
row = ActionRow(data_row)
|
||||||
|
if first:
|
||||||
|
cw.writerow(row.keys())
|
||||||
|
first = False
|
||||||
|
cw.writerow(row.values())
|
||||||
|
|
||||||
bfile = data.getvalue().encode('utf-8')
|
bfile = data.getvalue().encode('utf-8')
|
||||||
output = make_response(bfile)
|
output = make_response(bfile)
|
||||||
insert_hash(bfile)
|
insert_hash(bfile)
|
||||||
|
|
|
@ -160,7 +160,7 @@ def test_complet_metrics(user: UserClient, user2: UserClient):
|
||||||
res=Lot,
|
res=Lot,
|
||||||
item='{}/devices'.format(lot['id']),
|
item='{}/devices'.format(lot['id']),
|
||||||
query=devices)
|
query=devices)
|
||||||
import pdb; pdb.set_trace()
|
# import pdb; pdb.set_trace()
|
||||||
# request_post = {
|
# request_post = {
|
||||||
# 'type': 'Trade',
|
# 'type': 'Trade',
|
||||||
# 'devices': [span1['device']['id'], snap2['device']['id']],
|
# 'devices': [span1['device']['id'], snap2['device']['id']],
|
||||||
|
|
Reference in a new issue