06/12 Add features: 1. Vendor/Contractor assignment 2. Period-over-period comparison 3. Trend Alerts (cron)
This commit is contained in:
@@ -265,4 +265,44 @@ def cleanup_tokens():
|
||||
db.session.commit()
|
||||
|
||||
logger.info('TOKEN CLEANUP | deleted=%s expired/revoked rows', deleted)
|
||||
return jsonify({'ok': True, 'deleted': deleted})
|
||||
return jsonify({'ok': True, 'deleted': deleted})
|
||||
|
||||
|
||||
# ── Score trend alert trigger (called by cron) ────────────────────────────────
|
||||
|
||||
@bp.route('/check-score-trends', methods=['POST'])
|
||||
@csrf.exempt
|
||||
def check_score_trends():
|
||||
"""Scan facility score trends and dispatch alerts for significant drops.
|
||||
|
||||
Compares each active facility's avg inspection score for the last 30 days
|
||||
against the prior 30-day period. Alerts fire when the drop exceeds the
|
||||
configured threshold (default: 5 percentage points).
|
||||
|
||||
Protected by the same DIGEST_SECRET token used by the other cron endpoints.
|
||||
|
||||
Recommended cron schedule — once per day is sufficient:
|
||||
|
||||
0 8 * * * curl -s -X POST https://yourdomain.com/notifications/check-score-trends \\
|
||||
-d "token=YOUR_DIGEST_SECRET"
|
||||
|
||||
Optional param:
|
||||
threshold=<float> Override the default 5.0-point drop threshold.
|
||||
"""
|
||||
token = request.form.get('token') or request.args.get('token')
|
||||
expected = current_app.config.get('DIGEST_SECRET')
|
||||
|
||||
if not expected or token != expected:
|
||||
logger.warning('SCORE TREND CHECK REJECTED | bad or missing token')
|
||||
abort(403)
|
||||
|
||||
threshold = request.form.get('threshold', type=float) or None
|
||||
|
||||
from app.utils.sla import send_score_alerts
|
||||
kwargs = {}
|
||||
if threshold is not None:
|
||||
kwargs['threshold'] = threshold
|
||||
sent = send_score_alerts(**kwargs)
|
||||
|
||||
logger.info('SCORE TREND CHECK TRIGGERED | alerts_sent=%s', sent)
|
||||
return jsonify({'ok': True, 'alerts_sent': sent})
|
||||
Reference in New Issue
Block a user