add signal handler for SIGINT, SIGTERM and SIGABRT
This commit is contained in:
parent
0c33e917d5
commit
4139b0b0c7
@ -6,6 +6,7 @@ import time
|
|||||||
import traceback
|
import traceback
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Dict, Optional
|
from typing import Dict, Optional
|
||||||
|
from signal import signal, SIGINT, SIGABRT, SIGTERM
|
||||||
|
|
||||||
from jsonschema import validate
|
from jsonschema import validate
|
||||||
|
|
||||||
@ -223,6 +224,23 @@ def init(config: dict, db_url: Optional[str] = None) -> None:
|
|||||||
else:
|
else:
|
||||||
update_state(State.STOPPED)
|
update_state(State.STOPPED)
|
||||||
|
|
||||||
|
# Register signal handlers
|
||||||
|
for sig in (SIGINT, SIGTERM, SIGABRT):
|
||||||
|
signal(sig, cleanup)
|
||||||
|
|
||||||
|
|
||||||
|
def cleanup(*args, **kwargs) -> None:
|
||||||
|
"""
|
||||||
|
Cleanup the application state und finish all pending tasks
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
telegram.send_msg('*Status:* `Stopping trader...`')
|
||||||
|
logger.info('Stopping trader and cleaning up modules...')
|
||||||
|
update_state(State.STOPPED)
|
||||||
|
persistence.cleanup()
|
||||||
|
telegram.cleanup()
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
|
||||||
def app(config: dict) -> None:
|
def app(config: dict) -> None:
|
||||||
"""
|
"""
|
||||||
@ -251,10 +269,10 @@ def app(config: dict) -> None:
|
|||||||
time.sleep(exchange.EXCHANGE.sleep_time)
|
time.sleep(exchange.EXCHANGE.sleep_time)
|
||||||
old_state = new_state
|
old_state = new_state
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
telegram.send_msg('*Status:* Got RuntimeError: ```\n{}\n```'.format(traceback.format_exc()))
|
telegram.send_msg(
|
||||||
|
'*Status:* Got RuntimeError:\n```\n{}\n```'.format(traceback.format_exc())
|
||||||
|
)
|
||||||
logger.exception('RuntimeError. Trader stopped!')
|
logger.exception('RuntimeError. Trader stopped!')
|
||||||
finally:
|
|
||||||
telegram.send_msg('*Status:* `Trader has stopped`')
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
@ -37,6 +37,14 @@ def init(config: dict, db_url: Optional[str] = None) -> None:
|
|||||||
Base.metadata.create_all(engine)
|
Base.metadata.create_all(engine)
|
||||||
|
|
||||||
|
|
||||||
|
def cleanup() -> None:
|
||||||
|
"""
|
||||||
|
Flushes all pending operations to disk.
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
Trade.session.flush()
|
||||||
|
|
||||||
|
|
||||||
class Trade(Base):
|
class Trade(Base):
|
||||||
__tablename__ = 'trades'
|
__tablename__ = 'trades'
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ logging.getLogger('requests.packages.urllib3').setLevel(logging.INFO)
|
|||||||
logging.getLogger('telegram').setLevel(logging.INFO)
|
logging.getLogger('telegram').setLevel(logging.INFO)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
_updater = None
|
_updater: Updater = None
|
||||||
_CONF = {}
|
_CONF = {}
|
||||||
|
|
||||||
|
|
||||||
@ -61,6 +61,14 @@ def init(config: dict) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def cleanup() -> None:
|
||||||
|
"""
|
||||||
|
Stops all running telegram threads.
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
_updater.stop()
|
||||||
|
|
||||||
|
|
||||||
def authorized_only(command_handler: Callable[[Bot, Update], None]) -> Callable[..., Any]:
|
def authorized_only(command_handler: Callable[[Bot, Update], None]) -> Callable[..., Any]:
|
||||||
"""
|
"""
|
||||||
Decorator to check if the message comes from the correct chat_id
|
Decorator to check if the message comes from the correct chat_id
|
||||||
|
Loading…
Reference in New Issue
Block a user