diff options
Diffstat (limited to 'python/globeop_monitor.py')
| -rw-r--r-- | python/globeop_monitor.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/python/globeop_monitor.py b/python/globeop_monitor.py new file mode 100644 index 00000000..0c3ff512 --- /dev/null +++ b/python/globeop_monitor.py @@ -0,0 +1,62 @@ +import datetime +import logging +from serenitas.analytics.dates import prev_business_day +from serenitas.utils.db import dbconn +from serenitas.utils.exchange import ExchangeMessage +from report_ops.utils import GFSMonitor, CDXQuoteMonitor + + +def check_gfs(date, fund, conn): + with conn.cursor() as c: + c.execute( + "SELECT endqty as amount, invccy as currency, periodenddate as date, port as portfolio FROM valuation_reports vr WHERE fund=%s AND abs(endqty) > 50000 AND port ='GFS_HELPER_BUSINESS_UNIT' AND periodenddate =%s;", + ( + fund, + date, + ), + ) + for row in c: + GFSMonitor.stage(row._asdict()) + GFSMonitor.email(fund) + GFSMonitor._insert_queue.clear() + + +def check_cleared_cds(date, fund, conn): + with conn.cursor() as c: + c.execute( + "SELECT *, abs(serenitas_quote-globeop_quote) AS difference FROM compare_globeop_quotes(%s, %s)", + (date, fund), + ) + for row in c: + d = row._asdict() + match d["index"]: + case "IG": + if d["difference"] > 0.05: + CDXQuoteMonitor.stage(d) + case "HY": + if d["difference"] > 0.10: + CDXQuoteMonitor.stage(d) + CDXQuoteMonitor.email(fund) + CDXQuoteMonitor._insert_queue.clear() + + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser() + parser.add_argument( + "cob", + nargs="?", + type=datetime.date.fromisoformat, + default=prev_business_day(datetime.date.today()), + help="working date", + ) + args = parser.parse_args() + logger = logging.getLogger(__name__) + conn = dbconn("dawndb") + for fund in ( + "SERCGMAST", + "BOWDST", + ): + check_gfs(args.cob, fund, conn) + check_cleared_cds(args.cob, fund, conn) |
