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)