"""Configuration and marshaling of ActivityDetectorFeed statuses.""" import datetime from flask_restful import fields from flask_restful import marshal_with from flask_restful import Resource from feed_status import config from feed_status.models import activity_detector_feed from feed_status.models import feed_monitor from feed_status.util import generate_default_date_dict_range activity_detector_feed_status_fields = { 'data': fields.List( fields.Nested( { 'delivery_date': fields.String, 'feed_id': fields.String(attribute='feed_id'), 'feed_name': fields.String(attribute='feed_name'), 'metrics': fields.Raw, 'status_history': fields.Raw(attribute='status_history'), })), 'dates': fields.List(fields.String) } class ActivityDetectorFeedStatus(Resource): """Provides response for /activity_detector//status.""" @marshal_with(activity_detector_feed_status_fields) def get(self, feed_id, date=None): """Marshal specific OutgoingFeed status. Args: feed_id (str): specific feed of interest. Returns: dict: json payload for feed status. """ days_count = config.DASHBOARD_DISPLAYED_DAYS if date: to_date = datetime.date.fromisoformat(date) else: to_date = datetime.date.today() delta = datetime.timedelta(days=days_count) from_date = to_date - delta ad_feeds = activity_detector_feed.get_active_feeds() for feed in ad_feeds: feed.status_history \ = activity_detector_feed.get_activity_detector_feed_history( feed, from_date, to_date, ) feed.metrics = feed_monitor.get_metric_status( feed, feed.status_history, ) dates = generate_default_date_dict_range(from_date, to_date) dates = list(dates.keys()) return { 'data': ad_feeds, 'dates': dates }