refactor valkey into objects with health check
This commit is contained in:
51
ws_aster.py
51
ws_aster.py
@@ -17,6 +17,7 @@ import os
|
||||
from dotenv import load_dotenv
|
||||
import modules.db as db
|
||||
import modules.aster_db as aster_db
|
||||
import sys
|
||||
|
||||
### Allow only ipv4 ###
|
||||
def allowed_gai_family():
|
||||
@@ -37,9 +38,10 @@ load_dotenv()
|
||||
LOG_FILEPATH: str = f'{os.getenv(key="LOGS_PATH")}/Fund_Rate_Aster.log'
|
||||
|
||||
### CONSTANTS ###
|
||||
SYMBOL: str = 'ETHUSDT'
|
||||
SYMBOL: str = 'ENAUSDT'
|
||||
|
||||
STREAM_MARKPRICE: str = f'{SYMBOL.lower()}@markPrice@1s'
|
||||
STREAM_MARKPRICE: str = '!markPrice@arr@1s'
|
||||
# STREAM_MARKPRICE: str = f'{SYMBOL.lower()}@markPrice@1s'
|
||||
STREAM_BOOKTICKER: str = f'{SYMBOL.lower()}@bookTicker'
|
||||
STREAM_TRADES: str = f'{SYMBOL.lower()}@aggTrade'
|
||||
|
||||
@@ -83,17 +85,23 @@ async def ws_stream():
|
||||
async for message in websocket:
|
||||
### Update Symbol if Algo Outputs Change ###
|
||||
if ALLOW_SYMBOL_CHG:
|
||||
best_symbol_by_exchange: dict = json.loads(s=VAL_KEY.get(name='fr_algo_working_symbol')) # ty:ignore[invalid-argument-type]
|
||||
fr_algo_working_symbol = VAL_KEY.get(name='fr_algo_working_symbol')
|
||||
if not fr_algo_working_symbol:
|
||||
logging.critical(f'fr_algo_working_symbol is empty - killing: {fr_algo_working_symbol}')
|
||||
sys.exit(1)
|
||||
|
||||
best_symbol_by_exchange: dict = json.loads(fr_algo_working_symbol) # ty:ignore[invalid-argument-type]
|
||||
|
||||
best_symbol: str = best_symbol_by_exchange['ASTER']['symbol']
|
||||
if best_symbol != SYMBOL:
|
||||
logging.info(f'Symbol Change: {SYMBOL} -> {best_symbol}')
|
||||
SYMBOL = best_symbol
|
||||
await unsubscribe_streams(websocket = websocket, streams=[STREAM_MARKPRICE,STREAM_BOOKTICKER,STREAM_TRADES])
|
||||
await unsubscribe_streams(websocket = websocket, streams=[STREAM_BOOKTICKER,STREAM_TRADES])
|
||||
|
||||
STREAM_MARKPRICE = f'{SYMBOL.lower()}@markPrice@1s'
|
||||
# STREAM_MARKPRICE = f'{SYMBOL.lower()}@markPrice@1s'
|
||||
STREAM_BOOKTICKER = f'{SYMBOL.lower()}@bookTicker'
|
||||
STREAM_TRADES = f'{SYMBOL.lower()}@aggTrade'
|
||||
await subscribe_streams(websocket = websocket, streams=[STREAM_MARKPRICE,STREAM_BOOKTICKER,STREAM_TRADES])
|
||||
await subscribe_streams(websocket = websocket, streams=[STREAM_BOOKTICKER,STREAM_TRADES])
|
||||
continue
|
||||
|
||||
ts_arrival = round(datetime.now().timestamp()*1000)
|
||||
@@ -104,18 +112,25 @@ async def ws_stream():
|
||||
if channel is not None:
|
||||
match channel:
|
||||
case c if c == STREAM_MARKPRICE:
|
||||
# print(f'MP: {data}')
|
||||
VAL_KEY_OBJ = json.dumps({
|
||||
'timestamp_arrival': ts_arrival,
|
||||
'timestamp_msg': data['data']['E'],
|
||||
'symbol': data['data']['s'],
|
||||
'mark_price': data['data']['p'],
|
||||
'index_price': data['data']['i'],
|
||||
'estimated_settle_price': data['data']['P'],
|
||||
'funding_rate': data['data']['r'],
|
||||
'next_funding_time_ts_ms': data['data']['T'],
|
||||
})
|
||||
VAL_KEY.set(VK_FUND_RATE, VAL_KEY_OBJ)
|
||||
if data.get('data'):
|
||||
VAL_KEY.set('fund_rate_aster_all', json.dumps(data['data']))
|
||||
else:
|
||||
logging.warning(f'Data["data"] is None: {data}')
|
||||
single_ticker_fr = [d for d in data['data'] if d.get('s')==SYMBOL]
|
||||
if single_ticker_fr:
|
||||
d = single_ticker_fr[0]
|
||||
VAL_KEY_OBJ = json.dumps({
|
||||
'timestamp_arrival': ts_arrival,
|
||||
'timestamp_msg': d['E'],
|
||||
'symbol': d['s'],
|
||||
'mark_price': d['p'],
|
||||
'index_price': d['i'],
|
||||
'estimated_settle_price': d['P'],
|
||||
'funding_rate': d['r'],
|
||||
'next_funding_time_ts_ms': d['T'],
|
||||
})
|
||||
VAL_KEY.set(VK_FUND_RATE, VAL_KEY_OBJ)
|
||||
# print(f'MP: {d}')
|
||||
continue
|
||||
case c if c == STREAM_BOOKTICKER:
|
||||
# print(f'BT: {data}')
|
||||
|
||||
Reference in New Issue
Block a user