-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstart.py
69 lines (53 loc) · 2.03 KB
/
start.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import asyncio
import json
from loguru import logger
from pytonapi import AsyncTonapi
from pytoniq import LiteBalancer, LiteClient
from client import TonCenterClient
from monitor import TransactionsMonitor
filename = "monitors.json"
async def start_monitor(monitor_params: dict):
"""Parse config and start monitoring with given parameters."""
provider = monitor_params["provider"]
wallets_path = monitor_params["wallets"]
if provider == "liteserver":
config_path = monitor_params["config"]
config = json.loads(open(config_path).read())
client = LiteBalancer.from_config(config, timeout=15)
elif provider == "toncenter":
api_url = monitor_params["toncenter_api_url"]
api_key = monitor_params["toncenter_api_key"]
client = TonCenterClient(api_url, api_key)
else: # provider == "tonapi":
api_key = monitor_params["tonapi_key"]
is_testnet = monitor_params.get("testnet", False)
client = AsyncTonapi(api_key, is_testnet=is_testnet, max_retries=10)
dbname = provider
if "dbname" in monitor_params:
dbname = monitor_params["dbname"]
to_send = None
if "to_send" in monitor_params:
to_send = int(monitor_params["to_send"])
monitor = TransactionsMonitor(client, wallets_path, dbname, to_send=to_send)
await monitor.start_worker()
async def start_all():
with open(filename, "r") as f:
data = json.load(f)
# if server run - log to file.
# otherwise it'll write to console
if not data.get("cli", False):
print("Starting delivery monitor in server mode with logging to monitor.log.")
logger.remove()
logger.add(
f"monitor.log",
level="INFO",
rotation="1 GB",
compression="zip",
)
tasks = []
for monitor_params in data["monitors"]:
if monitor_params.get("enabled", False):
tasks.append(start_monitor(monitor_params))
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(start_all())