diff --git a/frontend/remote_api.py b/frontend/remote_api.py index 9fdc565..137e443 100644 --- a/frontend/remote_api.py +++ b/frontend/remote_api.py @@ -1,7 +1,6 @@ import sys import os import json -import logging import traceback from urllib.parse import quote @@ -22,7 +21,7 @@ def login_client_by_qr_code_url() -> str: request_url = background_server_url + login_api_route response = requests.get(request_url) if response.status_code != 200: - logging.warning(f"Could not login, err:{response.status_code}, {response.content.decode('utf-8')}") + print(f"Could not login, err:{response.status_code}, {response.content.decode('utf-8')}") return None url_info = json.loads(response.content.decode("utf-8")) return url_info.get("url") @@ -35,7 +34,7 @@ def get_backend_client_status(flag: bool = False) -> dict[str, any]: request_url = f"{background_server_url}{status_api_route}?flag={flag}" response = requests.get(request_url) if response.status_code != 200: - logging.warning(f"get_status, backend is running? err:{response.status_code}, {response.content.decode('utf-8')}") + print(f"get_status, backend is running? err:{response.status_code}, {response.content.decode('utf-8')}") return None return json.loads(response.content.decode("utf-8")) @@ -45,7 +44,7 @@ def get_white_list_chat_dict() -> dict[str, any]: try: return backend_status["clist"] except Exception as err: - logging.warning(f"{err=},{traceback.format_exc()}") + print(f"{err=},{traceback.format_exc()}") return {} @@ -67,7 +66,7 @@ def search_database_by_keyword(keyword: str, chat_list: list[int], offset: int, response = requests.post(request_url, data=json.dumps(req_body)) if response.status_code != 200: - logging.warning(f"search_database_by_keyword err:{response.status_code}, {response.content.decode('utf-8')}") + print(f"search_database_by_keyword err:{response.status_code}, {response.content.decode('utf-8')}") return None search_res = json.loads(response.content.decode("utf-8")) return search_res @@ -81,7 +80,7 @@ def convert_tg_link_to_proxy_link(link: str) -> str: request_url = background_server_url + link_convert_api_route + f"?link={link}" response = requests.get(request_url) if response.status_code != 200: - logging.warning(f"link convert fail: {response.status_code}, {response.content.decode('utf-8')}") + print(f"link convert fail: {response.status_code}, {response.content.decode('utf-8')}") return "" response_js = json.loads(response.content.decode("utf-8")) return response_js["url"] diff --git a/frontend/search.py b/frontend/search.py index 96f5e69..f4c414c 100644 --- a/frontend/search.py +++ b/frontend/search.py @@ -1,6 +1,5 @@ import sys import os -import logging import traceback import streamlit as st @@ -26,13 +25,13 @@ def loop(): st.query_params.search_res_limit = "10" @st.experimental_fragment - def search_container(): + def search_container(keyword, res_limit, isorder): if "chat_dict" not in st.session_state: wait_client_ready = st.empty() wait_client_ready.status("Server Initializing") st.session_state.chat_dict = api.get_white_list_chat_dict() wait_client_ready.empty() - st.query_params.search_key = st.text_input("**搜索🔎**", value=st.query_params.search_key) + st.query_params.search_key = st.text_input("**搜索🔎**", value=keyword) chat_list = [] for _, chat_info in st.session_state.chat_dict.items(): chat_list.append(chat_info["title"]) @@ -40,17 +39,20 @@ def loop(): columns = st.columns([4, 4, 1]) with columns[0]: st.query_params.search_res_limit = str( - st.number_input( - "**每页结果**", min_value=1, max_value=100, value=int(st.query_params.search_res_limit), format="%d" - ) + st.number_input("**每页结果**", min_value=1, max_value=100, value=res_limit, format="%d") ) with columns[1]: st.session_state.chat_select_list = st.multiselect("**Search in**", chat_list, default=chat_list) with columns[2]: st.text("排序") - st.query_params.is_order = st.toggle("顺序", value=utils.strtobool(st.query_params.is_order)) + st.query_params.is_order = st.toggle("顺序", value=isorder) - search_container() + search_limit_container = st.container() + with search_limit_container: + keyword = st.query_params.search_key + res_limit = int(st.query_params.search_res_limit) + isorder = utils.strtobool(st.query_params.is_order) + search_container(keyword, res_limit, isorder) search_clicked = st.button("Search", type="primary", use_container_width=True) if not st.session_state.force_skip and ( @@ -77,7 +79,7 @@ def loop(): if chat_info["title"] in st.session_state.chat_select_list: search_chat_id_list.append(int(chat_id)) except Exception as err: - logging.warning(f"{err=},{traceback.format_exc()}") + print(f"{err=},{traceback.format_exc()}") search_res = api.search_database_by_keyword( st.query_params.search_key, search_chat_id_list, offset_index, search_limit, is_order ) @@ -165,8 +167,8 @@ def loop(): download_url = v["download_url"] download_url += f"?sign={sign_token}" except Exception as err: - msg_ctx = f"{err=}\r\n\r\n" + msg_ctx - logging.warning(f"{err=},{traceback.format_exc()}") + msg_ctx = f"Not a filelike~\r\n\r\n" + msg_ctx + print(f"Not a filelike {err=},{traceback.format_exc()}") url_list.append(download_url) media_file_res_container(i, msg_ctx, file_name, file_size, download_url, src_link, mime_type) page_switch_render() diff --git a/start.py b/start.py index 9e3a9d2..4c761cf 100644 --- a/start.py +++ b/start.py @@ -10,13 +10,15 @@ 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: +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())) 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["formatters"]["access"][ + "fmt" +] = '[%(levelname)s] %(asctime)s [uvicorn.access]:%(client_addr)s - "%(request_line)s" %(status_code)s' LOGGING_CONFIG["handlers"]["timed_rotating_api_file"] = { "class": "logging.handlers.TimedRotatingFileHandler", "filename": "logs/app.log", @@ -32,23 +34,32 @@ LOGGING_CONFIG["loggers"]["uvicorn.access"]["handlers"].append("timed_rotating_a logger = logging.getLogger(__file__.split("/")[-1]) +for handle in logger.handlers: + if isinstance(handle, logging.handlers.TimedRotatingFileHandler): + handle.suffix = "%Y-%m-%d.log" + 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, cwd=f"{os.path.dirname(__file__)}/frontend", stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.PIPE) - async def loop_get_cli_pipe(p, suffix = ""): + proc = await asyncio.create_subprocess_shell( + cmd, cwd=f"{os.path.dirname(__file__)}/frontend", stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + + async def loop_get_cli_pipe(p, suffix=""): while True: stdp = await p.readline() if stdp: logger.info(f"[web:{suffix}]{stdp.decode()[:-1]}") else: break + stdout_task = asyncio.create_task(loop_get_cli_pipe(proc.stdout, "out")) stderr_task = asyncio.create_task(loop_get_cli_pipe(proc.stderr, "err")) await asyncio.gather(*[stdout_task, stderr_task]) - logger.info(f'[{cmd!r} exited with {proc.returncode}]') + logger.info(f"[{cmd!r} exited with {proc.returncode}]") + if param.web.enable: ret = os.fork() if ret == 0: