Skip to content

Commit abba2c7

Browse files
committed
fix: 修复点小问题
1 parent 2ed8af9 commit abba2c7

File tree

3 files changed

+60
-7
lines changed

3 files changed

+60
-7
lines changed

core/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
{
3636
"type": "local",
3737
"path": "./bmclapi",
38-
"width": 0
38+
"weight": 0
3939
}
4040
],
4141
"database": {
@@ -170,7 +170,7 @@ def rank_clusters_url(self):
170170

171171
const = Const()
172172

173-
VERSION = "3.3.1"
173+
VERSION = "3.3.2"
174174
API_VERSION = "1.13.1"
175175
USER_AGENT = f"openbmclapi/{API_VERSION} python-openbmclapi/{VERSION}"
176176
PYTHON_VERSION = ".".join(map(str, (sys.version_info.major, sys.version_info.minor, sys.version_info.micro)))

core/web.py

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,23 @@
66
from pathlib import Path
77
import ssl
88
import time
9-
from typing import Any, Optional
9+
from typing import Any, Optional, Callable
1010
from aiohttp import web
1111
from aiohttp.web_urldispatcher import SystemRoute
1212

13-
from core import config, units, utils
13+
from core import config, scheduler, units, utils
1414
from .logger import logger
1515

1616
from cryptography import x509
1717
from cryptography.x509.oid import NameOID
1818

1919

20+
@dataclass
21+
class CheckServer:
22+
port: int
23+
start_handle: Callable
24+
client: Optional[ssl.SSLContext] = None
25+
2026
@dataclass
2127
class PrivateSSLServer:
2228
server: asyncio.Server
@@ -158,8 +164,6 @@ async def start_tcp_site():
158164
site = web.TCPSite(runner, '0.0.0.0', port)
159165
await site.start()
160166

161-
print(site)
162-
163167
async def init():
164168
global runner, site
165169

@@ -172,6 +176,12 @@ async def init():
172176

173177
await start_public_server()
174178

179+
scheduler.run_repeat_later(
180+
check_server,
181+
60,
182+
10
183+
)
184+
175185
async def forward_data(reader: asyncio.StreamReader, writer: asyncio.StreamWriter):
176186
while not writer.is_closing():
177187
data = await reader.read(IO_BUFFER)
@@ -354,5 +364,47 @@ def get_certificate_domains(
354364
]
355365
return results
356366

367+
async def check_server():
368+
servers: list[CheckServer] = []
369+
if site is not None:
370+
servers.append(CheckServer(site._port, start_private_server))
371+
if public_server is not None:
372+
servers.append(CheckServer(public_server.sockets[0].getsockname()[1], start_public_server))
373+
if privates:
374+
for server in privates.values():
375+
servers.append(CheckServer(server.server.sockets[0].getsockname()[1], start_private_server, server.key))
376+
377+
logger.tdebug("web.debug.check_server", servers=len(servers))
378+
results = await asyncio.gather(*[asyncio.create_task(_check_server(server)) for server in servers])
379+
for server, result in zip(servers, results):
380+
if result:
381+
continue
382+
await server.start_handle()
383+
logger.twarning("web.warning.server_down", port=server.port)
384+
385+
386+
async def _check_server(
387+
server: CheckServer
388+
):
389+
try:
390+
r, w = await asyncio.wait_for(
391+
asyncio.open_connection(
392+
'127.0.0.1',
393+
server.port,
394+
ssl=server.client
395+
),
396+
timeout=5
397+
)
398+
w.close()
399+
try:
400+
await asyncio.wait_for(w.wait_closed(), timeout=10)
401+
except:
402+
...
403+
return True
404+
except:
405+
logger.ttraceback("web.traceback.check_server", port=server.port)
406+
return False
407+
357408
async def unload():
358-
...
409+
await app.cleanup()
410+
await app.shutdown()

i18n/zh_cn.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"web.success.public_port": "当前 Web 服务器在 [${port}] 端口上开启",
2020
"web.error.any": "Web 服务器出错 ${e}",
2121
"web.debug.request_info": "${host} | ${time} | ${address} | ${method} ${status} | ${real_path} - ${user_agent}",
22+
"web.debug.check_server": "一共有 [${servers}] 个服务器准备检查",
2223
"cluster.error.socketio.request_cert": "节点 [${cluster}] 请求证书失败,原因 [${err}]",
2324
"cluster.debug.public_host": "已在 [${host}:${port}] 上开放,节点地址 [https://${domain}:${port}]",
2425
"cluster.error.socketio": "节点 [${cluster}] 发送 [${type}] 时出错,原因 [${err}]",

0 commit comments

Comments
 (0)