1
0

Improved error recovery

This commit is contained in:
Jon Michael Aanes 2024-09-04 19:48:29 +02:00
parent 9709c9b68a
commit 48a821a8d4
Signed by: Jmaa
SSH Key Fingerprint: SHA256:Ab0GfHGCblESJx7JRE4fj4bFy/KRpeLhi41y4pF3sNA
2 changed files with 73 additions and 52 deletions

View File

@ -216,6 +216,7 @@ def run_auto_sell(
all_executed_orders: list[fin_depo.data.TradeOrderDetails] = [] all_executed_orders: list[fin_depo.data.TradeOrderDetails] = []
total_sleep_duration = datetime.timedelta(seconds=0) total_sleep_duration = datetime.timedelta(seconds=0)
try:
while True: while True:
# Check that account has tokens. # Check that account has tokens.
input_amount_available = config.seller.get_depo().get_amount_of_asset( input_amount_available = config.seller.get_depo().get_amount_of_asset(
@ -237,7 +238,9 @@ def run_auto_sell(
ROUND_TO_WHOLE, ROUND_TO_WHOLE,
rounding=ROUND_DOWN, rounding=ROUND_DOWN,
) )
logger.info('Attempting to sell %s %s', amount_to_sell, config.input_asset) logger.info(
'Attempting to sell %s %s', amount_to_sell, config.input_asset,
)
order_details = config.seller.place_market_order( order_details = config.seller.place_market_order(
config.input_asset, config.input_asset,
@ -260,6 +263,16 @@ def run_auto_sell(
total_sleep_duration += time_to_sleep total_sleep_duration += time_to_sleep
del input_amount_available del input_amount_available
except KeyboardInterrupt:
logger.warning('Manual interrupt')
except RuntimeError:
logger.exception(
'A unexpected and serious error occured. The program will be winding down',
)
logger.fatal('Please send the above error message to: mailto:jonjmaa@gmail.com')
logger.fatal(
'He will attempt to diagnosticate the problem, and help with recovery',
)
time_end = datetime.datetime.now(tz=datetime.UTC) time_end = datetime.datetime.now(tz=datetime.UTC)
@ -288,41 +301,45 @@ def log_estimates(config: AutoSellConfig):
current_balance / config.input_amount_range[0], current_balance / config.input_amount_range[0],
) )
minisleep = 0.1
logger.info('')
logger.info('Welcome to crypto seller!') logger.info('Welcome to crypto seller!')
config.sleep(1) config.sleep(3)
logger.info('') logger.info('')
config.sleep(1) config.sleep(minisleep)
logger.info('I, the great crypto seller, your humble servant, will') logger.info('I, the great crypto seller, your humble servant, will')
config.sleep(minisleep)
logger.info('now analyse your configuration and divine some estimates!') logger.info('now analyse your configuration and divine some estimates!')
config.sleep(1) config.sleep(3)
logger.info('') logger.info('')
config.sleep(1) config.sleep(minisleep)
logger.info( logger.info(
'- Current balance: %s %s', '- Current balance: %s %s',
current_balance, current_balance,
config.input_asset.raw_short_name(), config.input_asset.raw_short_name(),
) )
config.sleep(1) config.sleep(minisleep)
logger.info('- Average sleep: %s seconds', average_sleep) logger.info('- Average sleep: %s seconds', average_sleep)
config.sleep(1) config.sleep(minisleep)
logger.info( logger.info(
'- Average amount: %s %s', '- Average amount: %s %s',
average_amount, average_amount,
config.input_asset.raw_short_name(), config.input_asset.raw_short_name(),
) )
config.sleep(1) config.sleep(minisleep)
logger.info('- Expected counts: %s', expected_num_sell_offs) logger.info('- Expected counts: %s', expected_num_sell_offs)
config.sleep(1) config.sleep(minisleep)
logger.info('- Expected time: %s', expected_duration) logger.info('- Expected time: %s', expected_duration)
config.sleep(1) config.sleep(minisleep)
logger.info('- Fastest time: %s', fastest_duration) logger.info('- Fastest time: %s', fastest_duration)
config.sleep(1) config.sleep(minisleep)
logger.info('- Slowest time: %s', slowest_duration) logger.info('- Slowest time: %s', slowest_duration)
config.sleep(1) config.sleep(minisleep)
logger.info('') logger.info('')
config.sleep(1) config.sleep(minisleep)
logger.info('Do you still want to proceed?') logger.info('Do you still want to proceed?')
config.sleep(1) config.sleep(minisleep)
logger.info('If not, press CTRL+C within the next 10 seconds...') logger.info('If not, press CTRL+C within the next 10 seconds...')
config.sleep(10) config.sleep(10)
logger.info('') logger.info('')

View File

@ -3,6 +3,7 @@ import datetime
import json import json
import logging import logging
import logging.handlers import logging.handlers
import sys
import time import time
from decimal import Decimal from decimal import Decimal
from pathlib import Path from pathlib import Path
@ -136,7 +137,10 @@ def main():
auto_sell_config = load_config(args.config_file) auto_sell_config = load_config(args.config_file)
# Display estimates # Display estimates
try:
log_estimates(auto_sell_config) log_estimates(auto_sell_config)
except KeyboardInterrupt:
sys.exit(1)
# Run auto sell # Run auto sell
results = run_auto_sell( results = run_auto_sell(