trade_history should paginate through results

this avoids huge results
This commit is contained in:
Matthias
2021-04-18 16:05:28 +02:00
parent b230558294
commit bd92ce938c
5 changed files with 20 additions and 11 deletions

View File

@@ -199,6 +199,7 @@ class OpenTradeSchema(TradeSchema):
class TradeResponse(BaseModel):
trades: List[TradeSchema]
trades_count: int
total_trades: int
class ForceBuyResponse(BaseModel):

View File

@@ -85,8 +85,8 @@ def status(rpc: RPC = Depends(get_rpc)):
# Using the responsemodel here will cause a ~100% increase in response time (from 1s to 2s)
# on big databases. Correct response model: response_model=TradeResponse,
@router.get('/trades', tags=['info', 'trading'])
def trades(limit: int = 0, rpc: RPC = Depends(get_rpc)):
return rpc._rpc_trade_history(limit)
def trades(limit: int = 500, offset: int = 0, rpc: RPC = Depends(get_rpc)):
return rpc._rpc_trade_history(min(limit, 500), offset=offset, order_by_id=True)
@router.get('/trade/{tradeid}', response_model=OpenTradeSchema, tags=['info', 'trading'])

View File

@@ -300,11 +300,12 @@ class RPC:
'data': data
}
def _rpc_trade_history(self, limit: int) -> Dict:
def _rpc_trade_history(self, limit: int, offset: int = 0, order_by_id: bool = False) -> Dict:
""" Returns the X last trades """
if limit > 0:
order_by = Trade.id if order_by_id else Trade.close_date.desc()
if limit:
trades = Trade.get_trades([Trade.is_open.is_(False)]).order_by(
Trade.close_date.desc()).limit(limit)
order_by).limit(limit).offset(offset)
else:
trades = Trade.get_trades([Trade.is_open.is_(False)]).order_by(
Trade.close_date.desc()).all()
@@ -313,7 +314,8 @@ class RPC:
return {
"trades": output,
"trades_count": len(output)
"trades_count": len(output),
"total_trades": Trade.get_trades([Trade.is_open.is_(False)]).count(),
}
def _rpc_stats(self) -> Dict[str, Any]: