"""Configuration and marshaling of OutgoingFeed 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 feed_monitor from feed_status.models import outgoing_feed from feed_status.util import generate_default_date_dict_range outgoing_feed_status_history_fields = { 'data': fields.Nested({ 'feed_id': fields.String(attribute='feed_id'), 'feed_name': fields.String(attribute='feed_name'), 'delivery_date': fields.String(attribute='delivery_date'), 'status': fields.String(), 'time_sent': fields.DateTime( attribute='time_sent', dt_format='iso8601'), 'error_message': fields.String(attribute='error_message'), 'last_modified_utc': fields.DateTime( attribute='last_modified_utc', dt_format='iso8601')}) } outgoing_feed_status_fields = { 'data': fields.List( fields.Nested( { '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 OutgoingFeedStatus(Resource): """Provides response for /outgoing_feed//status.""" @marshal_with(outgoing_feed_status_fields) def get(self, feed_name, date=None): """Marshal specific OutgoingFeed status. Args: feed_name (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 outgoing_feeds = outgoing_feed.get_active_feeds() for feed in outgoing_feeds: feed.status_history = outgoing_feed.get_outgoing_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': outgoing_feeds, 'dates': dates }