2021-01-25 22:20:28 -06:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
import argparse
|
|
|
|
import logging
|
2021-09-30 19:26:35 -05:00
|
|
|
import os
|
2021-01-25 22:20:28 -06:00
|
|
|
import shlex
|
|
|
|
import subprocess
|
2021-01-28 12:28:40 -06:00
|
|
|
from pathlib import Path
|
2021-01-25 22:20:28 -06:00
|
|
|
|
|
|
|
|
|
|
|
LOG_FORMAT = '%(asctime)s - %(levelname)s - %(message)s'
|
|
|
|
LOG_DATE = '%d/%m/%Y %H:%M:%S'
|
|
|
|
logging.addLevelName(logging.ERROR, '\033[1;41mERROR\033[1;0m')
|
|
|
|
logging.addLevelName(logging.DEBUG, '\x1b[33mDEBUG\033[1;0m')
|
|
|
|
logging.addLevelName(logging.INFO, '\x1b[32mINFO\033[1;0m')
|
|
|
|
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, datefmt=LOG_DATE)
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
PATH_SISTEMA = '/opt/empresa-libre'
|
2021-01-28 12:28:40 -06:00
|
|
|
PATH_BK = f'{Path.home()}/compartido/bkdb'
|
2021-01-25 22:20:28 -06:00
|
|
|
|
|
|
|
|
|
|
|
def _call(args):
|
|
|
|
cmd = shlex.split(args)
|
|
|
|
result = subprocess.run(cmd, stdout=subprocess.PIPE).stdout.decode()
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
2021-09-30 19:26:35 -05:00
|
|
|
def _join(*paths):
|
|
|
|
return os.path.join(*paths)
|
|
|
|
|
|
|
|
|
2021-01-25 22:20:28 -06:00
|
|
|
def _actualizar():
|
|
|
|
confirm = input('¿Estas seguro de actualizar (escribe si) ? ')
|
|
|
|
if confirm != 'si':
|
|
|
|
msg = 'Proceso de actualización cancelado'
|
|
|
|
log.info(msg)
|
|
|
|
return
|
|
|
|
|
|
|
|
args = f'git -C {PATH_SISTEMA} pull origin master'
|
|
|
|
_call(args)
|
|
|
|
|
|
|
|
msg = 'Sistema actualizado correctamente'
|
|
|
|
log.info(msg)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
2021-01-28 12:28:40 -06:00
|
|
|
def _backup():
|
|
|
|
cmd = f'mkdir -p {PATH_BK}'
|
|
|
|
_call(cmd)
|
|
|
|
|
|
|
|
msg = 'Respaldando bases de datos...'
|
|
|
|
log.info(msg)
|
|
|
|
|
|
|
|
db_exclude = ('', 'postgres', 'template1', 'template0')
|
|
|
|
args = 'psql -U postgres -t -c "select datname from pg_database"'
|
|
|
|
result = _call(args).split('\n')
|
|
|
|
clients = sorted([e.strip() for e in result if not e.strip() in db_exclude])
|
|
|
|
|
|
|
|
cmd = 'pg_dump -U postgres -Fc {} -f "{}"'
|
|
|
|
t = len(clients)
|
|
|
|
for i, f in enumerate(clients):
|
|
|
|
msg = f'\t{i+1:02} de {t} - BD: {f}'
|
|
|
|
log.info(msg)
|
|
|
|
|
|
|
|
path = _join(PATH_BK, f'{f}.bk')
|
|
|
|
_call(cmd.format(f, path))
|
2021-01-28 13:48:27 -06:00
|
|
|
log.info('\t\tRespaldada localmente...')
|
2021-01-28 12:28:40 -06:00
|
|
|
|
|
|
|
msg = 'Base de datos respaldadas...'
|
|
|
|
log.info(msg)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
2021-01-25 22:20:28 -06:00
|
|
|
def main(args):
|
|
|
|
|
|
|
|
if args.actualizar:
|
|
|
|
_actualizar()
|
|
|
|
return
|
|
|
|
|
2021-01-28 12:28:40 -06:00
|
|
|
if args.backup:
|
|
|
|
_backup()
|
|
|
|
return
|
|
|
|
|
2021-01-25 22:20:28 -06:00
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
def _process_command_line_arguments():
|
|
|
|
parser = argparse.ArgumentParser(
|
|
|
|
description='Empresa Libre Util')
|
|
|
|
parser.add_argument('-a', '--actualizar', dest='actualizar',
|
|
|
|
action='store_true', default=False, required=False)
|
2021-01-28 12:28:40 -06:00
|
|
|
parser.add_argument('-b', '--backup', dest='backup',
|
|
|
|
action='store_true', default=False, required=False)
|
2021-01-25 22:20:28 -06:00
|
|
|
return parser.parse_args()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
args = _process_command_line_arguments()
|
|
|
|
main(args)
|