#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Author  : fangnan
@Time    : 2020-09-11 10:02
"""
import sys
import threading
import time
import traceback

sys.path.append("/")  # 解决潜在的路径依赖问题
sys.path.append("../../")  # 解决潜在的路径依赖问题
sys.path.append("../../../")  # 解决潜在的路径依赖问题
sys.path.append("../../../../")  # 解决潜在的路径依赖问题

from base.utils import config
from pathlib import Path

try:
    config.APP_ID = str(Path(__file__)).split("/")[-3]
except:
    config.APP_ID = "aic_app"

from base.utils.log import logger
from aic_search_spider.driver_spider import runserve


# class DaemonThread(multiprocessing.Process):
class DaemonThread(threading.Thread):
    stateTag = 0
    model = None

    def run(self):
        while True:
            try:
                self.stateTag = 2
                runserve()
            finally:
                self.stateTag = 0


if __name__ == "__main__":
    # 启动服务
    daemon_thread = None
    for i in range(1):
        daemon_thread = DaemonThread()
        daemon_thread.start()
    stateTagOld = 0
    stateTagOld_time = int(time.time())

    TIMEOUT_DICT = {0: 10, 1: 60 * 10, 2: 60 * 60}  # 每个状态的最长时间，单位秒
    while True:
        try:
            now_time = int(time.time())
            if (now_time - stateTagOld_time) % 60 == 0:
                logger.info(f"【标记位日志】执行检查,当前进程的标志位信息{daemon_thread.stateTag},持续时间{now_time - stateTagOld_time}")
            if stateTagOld == daemon_thread.stateTag:
                # 如果相同查看持续时间,超过该时间就停止服务重启
                if now_time - stateTagOld_time > TIMEOUT_DICT.get(daemon_thread.stateTag, 60 * 60 * 24):
                    logger.error("停止服务!使用进程指令kill掉所有python进程")
                    import os

                    ret_text_list = os.popen("ps -ef|grep python")
                    pid_list = []
                    for line in ret_text_list:
                        cmd_list = line.split()
                        pid_num = cmd_list[1]
                        os.system("kill -9 %s" % pid_num)
                    raise Exception("进程已被删除！！")
            else:
                logger.warning(f"【标记位变更】执行检查,当前进程的标志位信息{daemon_thread.stateTag},持续时间{now_time - stateTagOld_time}")

                stateTagOld = daemon_thread.stateTag
                stateTagOld_time = now_time
        except:
            traceback.print_exc()
        finally:
            time.sleep(0.5)
