Esempio n. 1
0
def set_live_promotions(links, weights, which=("cass", "permacache")):
    if "permacache" in which:
        timer = g.stats.get_timer("promote.set_live.permacache")
        timer.start()
        g.permacache.set(promotion_key(), (links, weights))
        timer.stop()
    if "cass" in which:
        timer = g.stats.get_timer("promote.set_live.cass")
        timer.start()

        # First, figure out which subreddits have had ads recently
        today = promo_datetime_now()
        yesterday = today - timedelta(days=1)
        tomorrow = today + timedelta(days=1)
        promo_weights = PromotionWeights.get_campaigns(yesterday, tomorrow)
        subreddit_names = set(p.sr_name for p in promo_weights)
        subreddits = Subreddit._by_name(subreddit_names).values()
        # Set the default for those subreddits to no ads
        all_weights = {sr._id: [] for sr in subreddits}

        # Mix in the currently live ads
        all_weights.update(weights)
        if '' in all_weights:
            all_weights[LiveAdWeights.FRONT_PAGE] = all_weights.pop('')

        LiveAdWeights.set_all_from_weights(all_weights)
        timer.stop()
Esempio n. 2
0
def get_live_promotions(srids, from_permacache=True):
    if not from_permacache:
        timer = g.stats.get_timer("promote.get_live.cass")
        timer.start()
        links = set()
        weights = LiveAdWeights.get(srids)
        for promos in weights.itervalues():
            links.update(link_fn for link_fn, weight, campaign_fn in promos)
        timer.stop()
    else:
        timer = g.stats.get_timer("promote.get_live.permacache")
        timer.start()
        links, weights = g.permacache.get(promotion_key()) or (set(), {})
        timer.stop()
    return links, weights