#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Copyright (c) KylinSoft Co., Ltd. [2024].All rights reserved. 
import os, sys
import signal
import syslog
import argparse
import signal
import errno

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("--start",  dest="start",  action="store_true", help="start  daemon")
    parser.add_argument("--reload", dest="reload", action="store_true", help="reload daemon")
    parser.add_argument("--stop",   dest="stop",   action="store_true", help="stop   daemon")
    return parser.parse_args()

def get_pid():
    try:
        with open("/var/run/csma-daemon.pid", 'r') as f:
            return int(f.read())
    except:
        pass
    return None

BIN = "/usr/bin/csma-daemon"

def check_daemon():
    uid = os.getuid()
    if os.access(BIN, os.F_OK) == False:
        syslog.syslog(syslog.LOG_ERR, u"监测服务 uid(%d) 未找到监测服务程序。" % (uid))
        sys.exit(errno.ENOENT)
    if os.access(BIN, os.X_OK) == False:
        syslog.syslog(syslog.LOG_ERR, u"监测服务 uid(%d) 监测服务程序缺少或没有执行权限。" % (uid))
        sys.exit(errno.EPERM)

def _start():
    pid = os.fork()
    if pid == 0:
        os.execl(BIN, BIN, '--start')
    elif pid > 0: 
        p, s = os.wait()
        if s != 0:
            uid = os.getuid()
            syslog.syslog(syslog.LOG_ERR, u"监测服务 uid(%d) 异常退出(%d)" % (uid, s))
    else:
        syslog.syslog(syslog.LOG_ERR, u"监测服务 uid(%d) 启动监测服务 失败。" % (uid))

def _reload():
    pid = get_pid();
    if pid:
        os.kill(pid, signal.SIGUSR1);

def _stop():
    pid = get_pid()
    if pid:
        os.kill(pid, signal.SIGQUIT)

def main(args):
    syslog.openlog('csma', syslog.LOG_NOWAIT|syslog.LOG_NDELAY|syslog.LOG_PID, syslog.LOG_USER)
    check_daemon()
    if args.start:
        _start()
    elif args.reload:
        _reload()
    elif args.stop:
        _stop()
    else:
        _start()

if __name__ == '__main__':
    args = parse_args()
    main(args)
