diff --git a/ereuse_devicehub/commands/reports.py b/ereuse_devicehub/commands/reports.py deleted file mode 100644 index ae8bd501..00000000 --- a/ereuse_devicehub/commands/reports.py +++ /dev/null @@ -1,96 +0,0 @@ -import csv - -# import click_spinner -# import ereuse_utils.cli -from io import StringIO - -from ereuse_devicehub.resources.action import models as evs -from ereuse_devicehub.resources.device.models import Placeholder -from ereuse_devicehub.resources.documents.device_row import InternalStatsRow - -# import click - - -class Report: - def __init__(self, app) -> None: - super().__init__() - self.app = app - short_help = 'Creates reports devices and users.' - self.app.cli.command('report', short_help=short_help)(self.run) - - def run(self): - stats = InternalStatsView() - stats.print() - - -class InternalStatsView: - def print(self): - query = evs.Action.query.filter( - evs.Action.type.in_( - ( - 'Snapshot', - 'Live', - 'Allocate', - 'Deallocate', - 'EraseBasic', - 'EraseSectors', - ) - ) - ) - return self.generate_post_csv(query) - - def generate_post_csv(self, query): - data = StringIO() - cw = csv.writer(data, delimiter=';', lineterminator="\n", quotechar='"') - cw.writerow(InternalStatsRow('', "2000-1", [], []).keys()) - - for row in self.get_rows(query): - cw.writerow(row) - - return print(data.getvalue()) - - def get_rows(self, query): - d = {} - dd = {} - disks = [] - for ac in query: - create = '{}-{}'.format(ac.created.year, ac.created.month) - user = ac.author.email - - if user not in d: - d[user] = {} - dd[user] = {} - if create not in d[user]: - d[user][create] = [] - dd[user][create] = None - d[user][create].append(ac) - - for user, createds in d.items(): - for create, actions in createds.items(): - r = InternalStatsRow(user, create, actions, disks) - dd[user][create] = r - - return self.get_placeholders(dd) - - def get_placeholders(self, dd): - - for p in Placeholder.query.all(): - create = '{}-{}'.format(p.created.year, p.created.month) - user = p.owner.email - - if user not in dd: - dd[user] = {} - - if create not in dd[user]: - dd[user][create] = None - - if not dd[user][create]: - dd[user][create] = InternalStatsRow(user, create, [], []) - - dd[user][create]['Placeholders'] += 1 - - rows = [] - for user, createds in dd.items(): - for create, row in createds.items(): - rows.append(row.values()) - return rows diff --git a/ereuse_devicehub/devicehub.py b/ereuse_devicehub/devicehub.py index 5fec2cbe..c82f2fd1 100644 --- a/ereuse_devicehub/devicehub.py +++ b/ereuse_devicehub/devicehub.py @@ -15,7 +15,7 @@ from teal.teal import Teal from ereuse_devicehub.auth import Auth from ereuse_devicehub.client import Client, UserClient -from ereuse_devicehub.commands.reports import Report +# from ereuse_devicehub.commands.reports import Report from ereuse_devicehub.commands.users import GetToken from ereuse_devicehub.config import DevicehubConfig from ereuse_devicehub.db import db @@ -29,7 +29,7 @@ from ereuse_devicehub.templating import Environment class Devicehub(Teal): test_client_class = Client Dummy = Dummy - Report = Report + # Report = Report jinja_environment = Environment def __init__( @@ -70,7 +70,7 @@ class Devicehub(Teal): self.id = inventory """The Inventory ID of this instance. In Teal is the app.schema.""" self.dummy = Dummy(self) - self.report = Report(self) + # self.report = Report(self) self.get_token = GetToken(self) @self.cli.group( diff --git a/ereuse_devicehub/resources/documents/device_row.py b/ereuse_devicehub/resources/documents/device_row.py index b29c60b4..2e13d327 100644 --- a/ereuse_devicehub/resources/documents/device_row.py +++ b/ereuse_devicehub/resources/documents/device_row.py @@ -614,104 +614,3 @@ class ActionRow(OrderedDict): self['Type'] = allocate['type'] self['LiveCreate'] = allocate['liveCreate'] self['UsageTimeHdd'] = allocate['usageTimeHdd'] - - -class InternalStatsRow(OrderedDict): - def __init__(self, user, create, actions, disks): - super().__init__() - # General information about all internal stats - # user, quart, month, year: - # Snapshot (Registers) - # Snapshots (Update) - # Snapshots (All) - # Drives Erasure - # Drives Erasure Uniques - # Placeholders - # Allocate - # Deallocate - # Live - self.actions = actions - year, month = create.split('-') - self.disks = disks - - self['User'] = user - self['Year'] = year - self['Quarter'] = self.quarter(month) - self['Month'] = month - self['Snapshot (Registers)'] = 0 - self['Snapshot (Update)'] = 0 - self['Snapshot (All)'] = 0 - self['Drives Erasure'] = 0 - self['Drives Erasure Uniques'] = 0 - self['Placeholders'] = 0 - self['Allocates'] = 0 - self['Deallocates'] = 0 - self['Lives'] = 0 - - self.count_actions() - - def count_actions(self): - for ac in self.actions: - self.is_snapshot( - self.is_deallocate(self.is_live(self.is_allocate(self.is_erase(ac)))) - ) - - def is_allocate(self, ac): - if ac.type == 'Allocate': - self['Allocates'] += 1 - return ac - - def is_erase(self, ac): - if ac.type in ['EraseBasic', 'EraseSectors']: - self['Drives Erasure'] += 1 - if ac.device in self.disks: - return ac - self['Drives Erasure Uniques'] += 1 - self.disks.append(ac.device) - return ac - - def is_live(self, ac): - if ac.type == 'Live': - self['Lives'] += 1 - return ac - - def is_deallocate(self, ac): - if ac.type == 'Deallocate': - self['Deallocates'] += 1 - return ac - - def is_snapshot(self, ac): - if not ac.type == 'Snapshot': - return - self['Snapshot (All)'] += 1 - - canary = False - for _ac in ac.device.actions: - if not _ac.type == 'Snapshot': - continue - - if _ac.created < ac.created: - canary = True - break - - if canary: - self['Snapshot (Update)'] += 1 - else: - self['Snapshot (Registers)'] += 1 - - def quarter(self, month): - q = { - 1: 'Q1', - 2: 'Q1', - 3: 'Q1', - 4: 'Q2', - 5: 'Q2', - 6: 'Q2', - 7: 'Q3', - 8: 'Q3', - 9: 'Q3', - 10: 'Q4', - 11: 'Q4', - 12: 'Q4', - } - return q[int(month)] diff --git a/ereuse_devicehub/resources/documents/documents.py b/ereuse_devicehub/resources/documents/documents.py index ca66308f..37ec5914 100644 --- a/ereuse_devicehub/resources/documents/documents.py +++ b/ereuse_devicehub/resources/documents/documents.py @@ -30,7 +30,6 @@ from ereuse_devicehub.resources.device.views import DeviceView from ereuse_devicehub.resources.documents.device_row import ( ActionRow, DeviceRow, - InternalStatsRow, StockRow, ) from ereuse_devicehub.resources.enums import SessionType @@ -345,42 +344,6 @@ class StampsView(View): result=result) -class InternalStatsView(DeviceView): - @cache(datetime.timedelta(minutes=1)) - def find(self, args: dict): - if not g.user.email == app.config['EMAIL_ADMIN']: - return jsonify('') - query = evs.Action.query.filter( - evs.Action.type.in_(('Snapshot', 'Live', 'Allocate', 'Deallocate'))) - return self.generate_post_csv(query) - - def generate_post_csv(self, query): - d = {} - for ac in query: - create = '{}-{}'.format(ac.created.year, ac.created.month) - user = ac.author.email - - if user not in d: - d[user] = {} - if create not in d[user]: - d[user][create] = [] - d[user][create].append(ac) - - data = StringIO() - cw = csv.writer(data, delimiter=';', lineterminator="\n", quotechar='"') - cw.writerow(InternalStatsRow('', "2000-1", []).keys()) - for user, createds in d.items(): - for create, actions in createds.items(): - cw.writerow(InternalStatsRow(user, create, actions).values()) - - bfile = data.getvalue().encode('utf-8') - output = make_response(bfile) - insert_hash(bfile) - output.headers['Content-Disposition'] = 'attachment; filename=internal-stats.csv' - output.headers['Content-type'] = 'text/csv' - return output - - class WbConfDocumentView(DeviceView): def get(self, wbtype: str): if not wbtype.lower() in ['usodyrate', 'usodywipe']: @@ -473,12 +436,6 @@ class DocumentDef(Resource): stamps_view = StampsView.as_view('StampsView', definition=self, auth=app.auth) self.add_url_rule('/stamps/', defaults={}, view_func=stamps_view, methods={'GET', 'POST'}) - # internalstats_view = InternalStatsView.as_view( - # 'InternalStatsView', definition=self, auth=app.auth) - # internalstats_view = app.auth.requires_auth(internalstats_view) - # self.add_url_rule('/internalstats/', defaults=d, view_func=internalstats_view, - # methods=get) - actions_view = ActionsDocumentView.as_view('ActionsDocumentView', definition=self, auth=app.auth)