diff options
Diffstat (limited to 'python/globeop_monitor.py')
| -rw-r--r-- | python/globeop_monitor.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/python/globeop_monitor.py b/python/globeop_monitor.py index cdd0dbb2..ae7fea86 100644 --- a/python/globeop_monitor.py +++ b/python/globeop_monitor.py @@ -1,8 +1,12 @@ import datetime import logging +from dataclasses import replace from serenitas.analytics.dates import prev_business_day from serenitas.utils.db import dbconn +from serenitas.ops.trade_dataclasses import WireDeal +from serenitas.ops.funds import Service from report_ops.utils import GFSMonitor, check_cleared_cds +from collateral.common import CASH_STRATEGY_MAPPING, STRATEGY_CASH_MAPPING def check_gfs(date, fund, conn): @@ -20,6 +24,42 @@ def check_gfs(date, fund, conn): GFSMonitor._staging_queue.clear() +def reallocate_strategy_cash(date, fund, conn): + service = Service[fund] + with conn.cursor() as c: + c.execute( + "SELECT 1 FROM wires WHERE trade_date=%s AND fund=%s AND author='auto'", + ( + date, + fund, + ), + ) + if c.fetchone(): + return + c.execute( + "SELECT * FROM list_orphaned_cash(%s, %s) WHERE abs(amount) > 1", + ( + date, + fund, + ), + ) + for row in c: + if row.folder not in CASH_STRATEGY_MAPPING: + obj = WireDeal(**row._asdict()) + offset = replace( + obj, folder=STRATEGY_CASH_MAPPING[obj.folder], amount=-obj.amount + ) + obj.stage() + offset.stage() + if not WireDeal._insert_queue: + return + for wire in WireDeal.commit(returning=True): + service.push_trade(wire, "NEW") + buf, dest = service.build_buffer("wire") + service.upload(buf, dest.name) + service().clear() + + if __name__ == "__main__": import argparse @@ -40,3 +80,5 @@ if __name__ == "__main__": ): check_gfs(args.cob, fund, conn) check_cleared_cds(args.cob, fund, conn) + for fund in ("BOWDST",): + reallocate_strategy_cash(args.cob, fund, conn) |
