from sqlalchemy import ( Column, Date, DateTime, String, sql, Integer) from feed_status.connectors import mysql from feed_status.models.orm import feed_sender_status from feed_status import util class FeedHistory(mysql.ArtRelationsBaseModel): __tablename__ = 'feed_history' id = Column(Integer, primary_key=True) feed_name = Column(String(200)) delivery_date = Column(Date()) status = Column(String(200)) time_sent = Column(DateTime()) error_message = Column(String(10000)) s3_full_path = Column(String(2000)) last_modified_utc = Column(DateTime()) class OutgoingFeed(object): def __init__(self, feed_id, feed_name, status_source_db, update_freq): self.feed_id = feed_id self.feed_name = feed_name self.update_freq = update_freq self.status_source_db = status_source_db # todo: move to table active_feeds = [ OutgoingFeed(feed_id='AmazonSamisSmart', feed_name='AmazonSamisSmart', status_source_db='etl_logger', update_freq=1), OutgoingFeed(feed_id='PreFinancial', feed_name='PreFinancial', status_source_db='etl_logger', update_freq=1), OutgoingFeed(feed_id='Rentrak', feed_name='Rentrak', status_source_db='etl_logger', update_freq=1), OutgoingFeed(feed_id='spotify_samis_smart', feed_name='spotify_samis_smart', status_source_db='feed_status', update_freq=1), OutgoingFeed(feed_id='iTunesSamisSmart', feed_name='iTunesSamisSmart', status_source_db='feed_status', update_freq=1), OutgoingFeed(feed_id='Apple Music Samis Smart', feed_name='Apple Music Samis Smart', status_source_db='feed_status', update_freq=1), OutgoingFeed(feed_id='Apple Music Streams Samis Smart', feed_name='Apple Music Streams Samis Smart', status_source_db='feed_status', update_freq=1), OutgoingFeed(feed_id='proper_new_releases_tracks', feed_name='proper_new_releases_tracks', status_source_db='feed_status', update_freq=1), OutgoingFeed(feed_id='proper_changed_releases', feed_name='proper_changed_releases', status_source_db='feed_status', update_freq=1), ] def get_active_feeds(): return active_feeds def get_feed_history_details(feed_name, date): session = mysql.art_relations_session() feed_history_details_query = session.query( FeedHistory).\ filter( FeedHistory.feed_name == feed_name, FeedHistory.delivery_date == date) feed_status = feed_history_details_query.all() return feed_status def get_outgoing_feed_history(feed, from_date, to_date): session = mysql.art_relations_session() status = util.generate_default_date_dict(60, 0) if feed.status_source_db == 'etl_logger': feed_history_list_query = session.query( FeedHistory).\ filter( FeedHistory.feed_name == feed.feed_name, FeedHistory.delivery_date >= from_date, FeedHistory.delivery_date <= to_date) feed_history_list = feed_history_list_query.all() session.close() for feed_history in feed_history_list: status[str(feed_history.delivery_date)] = feed_history.status elif feed.status_source_db == 'feed_status': feed_history_list = feed_sender_status.get_ingestion_history( feed.feed_name, str(from_date), str(to_date)) for feed_history in feed_history_list: status[feed_history['date']] = feed_history['status'].lower() return status