1
0
mirror of https://github.com/mbirth/tcl_ota_check.git synced 2024-11-14 00:06:46 +00:00
tcl_ota_check/tcllib/dumpmgr.py

61 lines
1.9 KiB
Python
Raw Normal View History

2018-02-03 20:40:17 +00:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
2018-02-03 20:40:17 +00:00
# pylint: disable=C0111,C0326,C0103
2018-02-03 21:25:26 +00:00
"""Tools to manage dumps of API requests."""
import errno
import glob
import os
import random
import time
from math import floor
2018-02-03 20:24:36 +00:00
from . import ansi
2018-02-03 20:24:36 +00:00
2018-02-03 12:46:17 +00:00
class DumpMgrMixin:
2018-02-03 21:25:26 +00:00
"""A mixin component for XML dump management."""
2018-02-03 01:37:55 +00:00
def __init__(self):
2018-02-03 21:25:26 +00:00
"""Populate dump file name."""
2018-02-03 01:37:55 +00:00
self.last_dump_filename = None
@staticmethod
def get_timestamp_random():
"""Generate timestamp + random part to avoid collisions."""
millis = floor(time.time() * 1000)
tail = "{:06d}".format(random.randint(0, 999999))
return "{}_{}".format(str(millis), tail)
def write_dump(self, data):
2018-02-03 21:25:26 +00:00
"""Write dump to file."""
outfile = os.path.normpath("logs/{}.xml".format(self.get_timestamp_random()))
if not os.path.exists(os.path.dirname(outfile)):
try:
os.makedirs(os.path.dirname(outfile))
2018-02-03 20:24:36 +00:00
except OSError as err:
if err.errno != errno.EEXIST:
raise
2018-02-03 20:24:36 +00:00
with open(outfile, "w", encoding="utf-8") as fhandle:
fhandle.write(data)
self.last_dump_filename = outfile
def delete_last_dump(self):
2018-02-03 21:25:26 +00:00
"""Delete last dump."""
if self.last_dump_filename:
os.unlink(self.last_dump_filename)
self.last_dump_filename = None
@staticmethod
def write_info_if_dumps_found():
2018-02-03 21:25:26 +00:00
"""Notify user to upload dumps if present."""
# To disable this info, uncomment the following line.
2018-02-03 20:24:36 +00:00
# return
files = glob.glob(os.path.normpath("logs/*.xml"))
2018-02-03 20:24:36 +00:00
if files:
print()
print("{}There are {} logs collected in the logs/ directory.{} Please consider uploading".format(ansi.YELLOW, len(files), ansi.RESET))
print("them to https://tclota.birth-online.de/ by running {}./upload_logs.py{}.".format(ansi.CYAN, ansi.RESET))