TgToFileSystem/start.py

56 lines
2.1 KiB
Python

import asyncio
import os
import sys
import yaml
import logging
import uvicorn
from uvicorn.config import LOGGING_CONFIG
import configParse
from backend import backendapp
if not os.path.exists(os.path.dirname(__file__) + '/logs'):
os.mkdir(os.path.dirname(__file__) + '/logs')
with open('logging_config.yaml', 'r') as f:
logging.config.dictConfig(yaml.safe_load(f.read()))
for handler in logging.getLogger().handlers:
if isinstance(handler, logging.handlers.TimedRotatingFileHandler):
handler.suffix = "%Y-%m-%d"
LOGGING_CONFIG["formatters"]["default"]["fmt"] = "[%(levelname)s] %(asctime)s [uvicorn.default]:%(message)s"
LOGGING_CONFIG["formatters"]["access"]["fmt"] = '[%(levelname)s]%(asctime)s [uvicorn.access]:%(client_addr)s - "%(request_line)s" %(status_code)s'
LOGGING_CONFIG["handlers"]["timed_rotating_file"] = {
"class": "logging.handlers.TimedRotatingFileHandler",
"filename": "logs/app.log",
"when": "midnight",
"interval": 1,
"backupCount": 7,
"level": "INFO",
"formatter": "default",
"encoding": "utf-8",
}
LOGGING_CONFIG["loggers"]["uvicorn"]["handlers"].append("timed_rotating_file")
LOGGING_CONFIG["loggers"]["uvicorn.access"]["handlers"].append("timed_rotating_file")
logger = logging.getLogger(__file__.split("/")[-1])
if __name__ == "__main__":
param = configParse.get_TgToFileSystemParameter()
async def run_web_server():
cmd = f"streamlit run {os.getcwd()}/frontend/home.py --server.port {param.web.port}"
proc = await asyncio.create_subprocess_shell(cmd, stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE)
stdout, stderr = await proc.communicate()
logger.info(f'[{cmd!r} exited with {proc.returncode}]')
if stdout:
logger.info(f'[stdout]\n{stdout.decode()}')
if stderr:
logger.info(f'[stderr]\n{stderr.decode()}')
if param.web.enable:
ret = os.fork()
if ret == 0:
asyncio.get_event_loop().run_until_complete(run_web_server())
sys.exit(0)
uvicorn.run(backendapp, host="0.0.0.0", port=param.base.port)