sync.py 1.86 KB
import sys
import os
from configparser import ConfigParser
from argparse import ArgumentParser
from datetime import (
    datetime,
    date,
    timedelta,
    )
from opensipkd.iso8583.bjb.scripts.common import get_module_object
from .logger import setup_logging


def is_live(pid):
    try:
        os.kill(pid, 0)
    except OSError:
        return
    return True


def read_pid_file(filename):
    try:
        with open(filename) as f:
            s = f.read()
        s = s.split()
        s = s[0]
        return int(s)
    except IOError:
        return
    except ValueError:
        return
    except IndexError:
        return


def write_pid_file(filename):
    pid = os.getpid()
    with open(filename, 'w') as f:
        f.write(str(pid))
    return pid


def make_pid_file(filename):
    pid = read_pid_file(filename)
    if pid and is_live(pid):
        print(f'PID saya {pid} masih aktif.')
        return
    return write_pid_file(filename)


def get_parser():
    pars = ArgumentParser()
    pars.add_argument('conf')
    pars.add_argument('--update-from-date')
    return pars


def get_option(argv):
    pars = get_parser()
    return pars.parse_args(argv)


def main(argv=sys.argv[1:]):
    option = get_option(argv)
    conf = ConfigParser()
    conf.read(option.conf)
    cf = dict(conf.items('main'))
    if not make_pid_file(cf['pid_file']):
        return
    setup_logging(option.conf)
    if option.update_from_date:
        try:
            days_ago = int(option.update_from_date)
            cf['tgl_awal'] = date.today() + timedelta(days_ago)
        except ValueError:
            t = option.update_from_date.split(',')
            cf['tgl_awal'] = datetime.strptime(t[0], '%d-%m-%Y')
            if t[1:]:
                cf['tgl_akhir'] = datetime.strptime(t[1], '%d-%m-%Y')
    module = get_module_object(conf.get('main', 'module'))
    app = module.App(cf)
    app.run()