diff --git a/xiaomusic/analytics.py b/xiaomusic/analytics.py index 979ddf1..a5ba7c1 100644 --- a/xiaomusic/analytics.py +++ b/xiaomusic/analytics.py @@ -69,32 +69,35 @@ class Analytics: return None async def post_to_umami(self, event): - url = "https://umami.hanxi.cc/api/send" - user_agent = self._get_user_agent() - event.set_event_param(name="useragent", value=user_agent) - data = { - "payload": { - "hostname": self.config.hostname, - "language": "zh-CN", - "referrer": "", - "screen": "430x932", - "title": "后端统计", - "url": "/backend", - "website": "7bfb0890-4115-4260-8892-b391513e7e99", - "name": event.get_event_name(), - "data": event.get_event_params(), - }, - "type": "event", - } - - async with aiohttp.ClientSession() as session: - headers = { - "User-Agent": user_agent, + try: + url = "https://umami.hanxi.cc/api/send" + user_agent = self._get_user_agent() + event.set_event_param(name="useragent", value=user_agent) + data = { + "payload": { + "hostname": self.config.hostname, + "language": "zh-CN", + "referrer": "", + "screen": "430x932", + "title": "后端统计", + "url": "/backend", + "website": "7bfb0890-4115-4260-8892-b391513e7e99", + "name": event.get_event_name(), + "data": event.get_event_params(), + }, + "type": "event", } - # self.log.info(f"headers {headers}, {data}") - async with session.post(url, json=data, headers=headers) as response: - self.log.info(f"umami Status: {response.status}") - await response.text() + + async with aiohttp.ClientSession() as session: + headers = { + "User-Agent": user_agent, + } + # self.log.info(f"headers {headers}, {data}") + async with session.post(url, json=data, headers=headers) as response: + self.log.info(f"umami Status: {response.status}") + await response.text() + except Exception as e: + self.log.exception(f"Execption {e}") def _get_user_agent(self): try: diff --git a/xiaomusic/httpserver.py b/xiaomusic/httpserver.py index 3b66d35..6075a60 100644 --- a/xiaomusic/httpserver.py +++ b/xiaomusic/httpserver.py @@ -45,6 +45,7 @@ from xiaomusic.utils import ( remove_common_prefix, remove_id3_tags, try_add_access_control_param, + update_version, ) xiaomusic = None @@ -571,6 +572,13 @@ async def playlistdelmusic(data: PlayListMusicObj, Verifcation=Depends(verificat return {"ret": "Del failed, may be playlist not exist."} +# 更新版本 +@app.post("/updateversion") +async def updateversion(version: str = "", Verifcation=Depends(verification)): + ret = update_version(version) + return {"ret": ret} + + async def file_iterator(file_path, start, end): async with aiofiles.open(file_path, mode="rb") as file: await file.seek(start) diff --git a/xiaomusic/utils.py b/xiaomusic/utils.py index 413f140..af5ebe8 100644 --- a/xiaomusic/utils.py +++ b/xiaomusic/utils.py @@ -1010,3 +1010,28 @@ def not_in_dirs(filename, ignore_absolute_dirs): return False # 文件在排除目录中 return True # 文件不在排除目录中 + + +def is_docker(): + return os.path.exists("/app/.dockerenv") + + +def restart_xiaomusic(): + if not is_docker(): + ret = "xiaomusic 重启只能在 docker 中进行" + log.info(ret) + return False, ret + try: + # 重启 xiaomusic 程序 + subprocess.run(["supervisorctl", "restart", "xiaomusic"], check=True) + log.info("xiaomusic 重启成功") + except subprocess.CalledProcessError as e: + log.info(f"xiaomusic 重启失败: {e}") + return False, "xiaomusic 重启失败" + return True + + +def update_version(version): + ok, ret = restart_xiaomusic() + if not ok: + return ret