|
3 | 3 | from core.scheduler import * |
4 | 4 | from core.exceptions import ClusterIdNotSetError, ClusterSecretNotSetError |
5 | 5 | from core.storages import getStorages, LocalStorage |
6 | | -from core.classes import FileInfo, FileList, AgentConfiguration |
| 6 | +from core.classes import FileInfo, FileList, AgentConfiguration, Counters |
7 | 7 | from core.router import Router |
8 | 8 | from core.client import WebSocketClient |
9 | 9 | from core.i18n import locale |
|
15 | 15 | import aiohttp |
16 | 16 | import asyncio |
17 | 17 | import hmac |
| 18 | +import datetime |
18 | 19 | import hashlib |
19 | 20 | import ssl |
20 | 21 | import sys |
@@ -314,11 +315,59 @@ async def callback(data: List[Any]): |
314 | 315 | return |
315 | 316 |
|
316 | 317 | self.enabled = True |
317 | | - logger.tsuccess("cluster.success.enable.enabled", id=self.id, port=Config.get("cluster.public_port")) |
| 318 | + logger.tsuccess( |
| 319 | + "cluster.success.enable.enabled", |
| 320 | + id=self.id, |
| 321 | + port=Config.get("cluster.public_port"), |
| 322 | + ) |
318 | 323 |
|
319 | 324 | except Exception as e: |
320 | 325 | logger.terror("cluster.error.enable.exception", e=e) |
321 | 326 |
|
| 327 | + async def keepAlive(self) -> bool: |
| 328 | + if not self.enabled: |
| 329 | + logger.terror("cluster.error.keepalive.cluster_not_enabled") |
| 330 | + if not self.socket: |
| 331 | + logger.terror("cluster.error.keepalive.socket_not_setup") |
| 332 | + |
| 333 | + future = asyncio.Future() |
| 334 | + |
| 335 | + async def callback(data: List[Any]): |
| 336 | + future.set_result(data) |
| 337 | + |
| 338 | + counter = self.router.counters |
| 339 | + |
| 340 | + try: |
| 341 | + await self.socket.socket.emit( |
| 342 | + "keep-alive", |
| 343 | + data={ |
| 344 | + "time": datetime.datetime.now(datetime.UTC) |
| 345 | + **counter, |
| 346 | + }, |
| 347 | + callback=callback, |
| 348 | + ) |
| 349 | + |
| 350 | + response = await future |
| 351 | + error, date = ( |
| 352 | + (response + [None, None])[:2] |
| 353 | + if isinstance(response, list) |
| 354 | + else (None, None) |
| 355 | + ) |
| 356 | + |
| 357 | + if error: |
| 358 | + logger.terror("cluster.error.keep_alive.error", e=error) |
| 359 | + return False |
| 360 | + |
| 361 | + logger.tsuccess("cluster.success.keep_alive.success", hits=humanize.intcomma(counter.hits), bytes=humanize.naturalsize(counter.bytes, binary=True)) |
| 362 | + |
| 363 | + self.router.counters.bytes -= counter.bytes |
| 364 | + self.router.counters.hits -= counter.hits |
| 365 | + |
| 366 | + return bool(date) |
| 367 | + |
| 368 | + except Exception as e: |
| 369 | + logger.terror("cluster.error.keep_alive.error", e=e) |
| 370 | + |
322 | 371 | async def disable(self) -> None: |
323 | 372 | if not self.socket or not self.enabled: |
324 | 373 | return |
|
0 commit comments