aboutsummaryrefslogtreecommitdiffstats
path: root/python/globeop_monitor.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/globeop_monitor.py')
-rw-r--r--python/globeop_monitor.py62
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)