-
Notifications
You must be signed in to change notification settings - Fork 52
/
Copy pathelectrumx_server
executable file
·60 lines (50 loc) · 1.75 KB
/
electrumx_server
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
#!/usr/bin/env python3
#
# Copyright (c) 2016-2018, Neil Booth
#
# All rights reserved.
#
# See the file "LICENCE" for information about the copyright
# and warranty status of this software.
"""Script to kick off the server."""
import asyncio
import logging
import logging.handlers
import os
import sys
from dotenv import load_dotenv
from electrumx.lib.util import CompactFormatter, make_logger
from electrumx.server.controller import Controller
from electrumx.server.env import Env
load_dotenv()
def main():
"""Set up logging and run the server."""
log_fmt = Env.default("LOG_FORMAT", "%(levelname)s:%(name)s:%(message)s")
log_level = Env.default("LOG_LEVEL", "INFO").upper()
log_path = Env.default("LOG_PATH", None)
if log_path:
exist = os.path.exists(log_path)
if not exist:
os.makedirs(log_path)
handler = logging.handlers.WatchedFileHandler(log_path + "/electrumx.log")
else:
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(CompactFormatter(log_fmt))
logger = make_logger("electrumx", handler=handler, level=log_level)
logger.info("ElectrumX server starting")
try:
if sys.version_info < (3, 10):
raise RuntimeError("ElectrumX requires Python 3.10 or greater")
env = Env()
logger.info(f"logging level: {env.log_level}")
logger.setLevel(env.log_level)
controller = Controller(env)
asyncio.run(controller.run())
except KeyboardInterrupt:
logger.info("ElectrumX server terminated by keyboard interrupt")
except Exception as e:
logger.exception(f"ElectrumX server terminated abnormally: {e}")
else:
logger.info("ElectrumX server terminated normally")
if __name__ == "__main__":
main()