Add rattail purge-tempmon
command
for getting rid of all those old temperature readings, since they're mostly just useful in real-time..
This commit is contained in:
parent
450f63434b
commit
9f21244ede
|
@ -26,7 +26,16 @@ Tempmon commands
|
||||||
|
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
import logging
|
||||||
|
|
||||||
from rattail import commands
|
from rattail import commands
|
||||||
|
from rattail.time import localtime, make_utc
|
||||||
|
|
||||||
|
from rattail_tempmon.db import Session as TempmonSession, model as tempmon
|
||||||
|
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class ExportHotCooler(commands.ImportSubcommand):
|
class ExportHotCooler(commands.ImportSubcommand):
|
||||||
|
@ -38,6 +47,46 @@ class ExportHotCooler(commands.ImportSubcommand):
|
||||||
handler_spec = 'rattail_tempmon.hotcooler.importing.tempmon:FromTempmonToHotCooler'
|
handler_spec = 'rattail_tempmon.hotcooler.importing.tempmon:FromTempmonToHotCooler'
|
||||||
|
|
||||||
|
|
||||||
|
class PurgeTempmon(commands.Subcommand):
|
||||||
|
"""
|
||||||
|
Purge stale data from Tempmon database
|
||||||
|
"""
|
||||||
|
name = 'purge-tempmon'
|
||||||
|
description = __doc__.strip()
|
||||||
|
|
||||||
|
def add_parser_args(self, parser):
|
||||||
|
parser.add_argument('--keep', metavar='DAYS', required=True, type=int,
|
||||||
|
help="Number of days for which data should be kept.")
|
||||||
|
parser.add_argument('--dry-run', action='store_true',
|
||||||
|
help="Go through the full motions and allow logging etc. to "
|
||||||
|
"occur, but rollback (abort) the transaction at the end.")
|
||||||
|
|
||||||
|
def run(self, args):
|
||||||
|
cutoff = localtime(self.config).date() - datetime.timedelta(days=args.keep)
|
||||||
|
cutoff = localtime(self.config, datetime.datetime.combine(cutoff, datetime.time(0)))
|
||||||
|
session = TempmonSession()
|
||||||
|
|
||||||
|
readings = session.query(tempmon.Reading)\
|
||||||
|
.filter(tempmon.Reading.taken < make_utc(cutoff))
|
||||||
|
count = readings.count()
|
||||||
|
|
||||||
|
def purge(reading, i):
|
||||||
|
session.delete(reading)
|
||||||
|
if i % 200 == 0:
|
||||||
|
session.flush()
|
||||||
|
|
||||||
|
self.progress_loop(purge, readings, count=count, message="Purging stale readings")
|
||||||
|
log.info("deleted {} stale readings".format(count))
|
||||||
|
|
||||||
|
if args.dry_run:
|
||||||
|
session.rollback()
|
||||||
|
log.info("dry run, so transaction was rolled back")
|
||||||
|
else:
|
||||||
|
session.commit()
|
||||||
|
log.info("transaction was committed")
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
|
||||||
class TempmonClient(commands.Subcommand):
|
class TempmonClient(commands.Subcommand):
|
||||||
"""
|
"""
|
||||||
Manage the tempmon-client daemon
|
Manage the tempmon-client daemon
|
||||||
|
|
1
setup.py
1
setup.py
|
@ -99,6 +99,7 @@ setup(
|
||||||
entry_points = {
|
entry_points = {
|
||||||
'rattail.commands': [
|
'rattail.commands': [
|
||||||
'export-hotcooler = rattail_tempmon.commands:ExportHotCooler',
|
'export-hotcooler = rattail_tempmon.commands:ExportHotCooler',
|
||||||
|
'purge-tempmon = rattail_tempmon.commands:PurgeTempmon',
|
||||||
'tempmon-client = rattail_tempmon.commands:TempmonClient',
|
'tempmon-client = rattail_tempmon.commands:TempmonClient',
|
||||||
'tempmon-server = rattail_tempmon.commands:TempmonServer',
|
'tempmon-server = rattail_tempmon.commands:TempmonServer',
|
||||||
],
|
],
|
||||||
|
|
Loading…
Reference in a new issue