Add timing

This commit is contained in:
daniele 2023-04-15 21:53:16 +02:00
parent bd74cf0e14
commit 3e5e3cb066
Signed by: fuxino
GPG Key ID: 981A2B2A3BBF5514

View File

@ -3,17 +3,68 @@
# Import libraries # Import libraries
from dotenv import load_dotenv from dotenv import load_dotenv
import os import os
from functools import wraps
from shutil import rmtree from shutil import rmtree
import argparse import argparse
import configparser import configparser
import logging import logging
from logging import StreamHandler from logging import StreamHandler
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
from timeit import default_timer
from subprocess import Popen, PIPE, STDOUT from subprocess import Popen, PIPE, STDOUT
from datetime import datetime from datetime import datetime
from tempfile import mkstemp from tempfile import mkstemp
load_dotenv()
euid = os.geteuid()
if euid == 0:
user = os.getenv("SUDO_USER")
homedir = os.path.expanduser(f'~{user}')
else:
homedir = os.getenv('HOME')
logging.getLogger().setLevel(logging.DEBUG)
logger = logging.getLogger(os.path.basename(__file__))
c_handler = StreamHandler()
try:
f_handler = RotatingFileHandler(f'{homedir}/.simple_backup/simple_backup.log', maxBytes=1024000, backupCount=5)
except Exception:
f_handler = None
c_handler.setLevel(logging.INFO)
c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
c_handler.setFormatter(c_format)
logger.addHandler(c_handler)
if f_handler:
f_handler.setLevel(logging.INFO)
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
f_handler.setFormatter(f_format)
logger.addHandler(f_handler)
def timing(_logger):
def decorater_timing(func):
@wraps(func)
def wrapper_timing(*args, **kwargs):
start = default_timer()
value = func(*args, **kwargs)
end = default_timer()
_logger.info(f'Elapsed time: {end - start:.3f} seconds')
return value
return wrapper_timing
return decorater_timing
class MyFormatter(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter): class MyFormatter(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
pass pass
@ -47,7 +98,7 @@ class Backup:
self.inputs.append(i_new) self.inputs.append(i_new)
except Exception: except Exception:
logger.warning(f'Input {i} is a link and cannot be read. Skipping') logger.warning(f'Input {i} is a link and cannot be read. Skipping')
self.inpts.remove(i) self.inputs.remove(i)
if not os.path.isdir(self.output): if not os.path.isdir(self.output):
logger.critical('Output path for backup does not exist') logger.critical('Output path for backup does not exist')
@ -97,6 +148,7 @@ class Backup:
logger.error('Previous backup could not be read') logger.error('Previous backup could not be read')
# Function to read configuration file # Function to read configuration file
@timing(logger)
def run(self): def run(self):
logger.info('Starting backup...') logger.info('Starting backup...')
@ -160,36 +212,6 @@ class Backup:
logger.warning('Some errors occurred (check log for details)') logger.warning('Some errors occurred (check log for details)')
load_dotenv()
euid = os.geteuid()
if euid == 0:
user = os.getenv("SUDO_USER")
homedir = os.path.expanduser(f'~{user}')
else:
homedir = os.getenv('HOME')
logging.getLogger().setLevel(logging.DEBUG)
logger = logging.getLogger(os.path.basename(__file__))
c_handler = StreamHandler()
try:
f_handler = RotatingFileHandler(f'{homedir}/.simple_backup/simple_backup.log', maxBytes=1024000, backupCount=5)
except Exception:
f_handler = None
c_handler.setLevel(logging.INFO)
c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
c_handler.setFormatter(c_format)
logger.addHandler(c_handler)
if f_handler:
f_handler.setLevel(logging.INFO)
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
f_handler.setFormatter(f_format)
logger.addHandler(f_handler)
def _parse_arguments(): def _parse_arguments():
parser = argparse.ArgumentParser(prog='simple_backup', parser = argparse.ArgumentParser(prog='simple_backup',
description='A simple backup script written in Python that uses rsync to copy files', description='A simple backup script written in Python that uses rsync to copy files',