public void Test_DesiredBannerHitsForTimeslot_TheNumberOfHitsReturnedIsProportionalToTheTrafficShape() { using (new Context<Clock>(() => Common.Time.Clock, (c) => Common.Time.Clock = c, new ShiftedClock(DateTime.Today.AddMinutes(1)))) using (new Context<TrafficShape>(() => Static.TrafficShape, (t) => Static.TrafficShape = t, new ConstantTrafficShape())) using (new Context<bool>(() => Common.Settings.SpreadBannerHits, (b) => Common.Settings.SpreadBannerHits = b, false)) { int numberOfHitsPerTimeSlot = 100; Banner banner = new Banner() { Position = Banner.Positions.Leaderboard, FirstDay = Time.Today, LastDay = Time.Today, TotalRequiredImpressions = Convert.ToInt32(numberOfHitsPerTimeSlot / Timeslot.Duration.TotalDays), }; banner.Update(); Type t = banner.TotalHitsCounter.GetType(); FieldInfo fi = t.GetField("value", BindingFlags.NonPublic | BindingFlags.Instance); fi.SetValue(banner.TotalHitsCounter, 0u); BannerDataHolder bdh = new BannerDataHolder(banner); BannerTimeslotInfoWithDesiredHits bannerTimeslotInfo = new BannerTimeslotInfoWithDesiredHits(bdh, Timeslots.GetCurrentTimeslot()); Assert.AreEqual(numberOfHitsPerTimeSlot * Server.ServiceMultiplier, bannerTimeslotInfo.DesiredHits); } }
void AddBannner(BannerDataHolder banner, Timeslot currentTimeslot, int i) { BannerTimeslotInfoWithDesiredHits info = new BannerTimeslotInfoWithDesiredHits(banner, currentTimeslot); info.Considerations.Increment(); long actualHits = info.ActualHits.Value; long targetHits = (long)Math.Ceiling(getTargetHits(info) * Server.ServiceMultiplier); long remainingHits = (actualHits < targetHits) ? (targetHits - actualHits) : 0; if (remainingHits == 0) { if (Common.Settings.SpreadBannerHits) { info.NotifyAllHitsServed(); #region REMOVED DUE TO BANNER SERVER BUG //IndicesOfBannersThatHaveReachedTheirLimits.Add(i); #endregion } } else { Banners.Add(banner); BannerTimeslotInfos.Add(info); TotalRemainingImpressionsForTheCurrentTimeSlot += remainingHits; ActualHitsList.Add(actualHits); RequiredHitsList.Add(targetHits); } }
protected void AddBannner(BannerDataHolder banner) { Banners.Add(banner); TotalRemainingImpressionsForTheCurrentTimeSlot += 1; ActualHitsList.Add(0); RequiredHitsList.Add(1); }
bool BannerHasBeenShownToAParticularIdentityTooManyTimesToday(BannerDataHolder bdh, Identity id) { if (bdh.FrequencyCapPerIdentifierPerDay > -1) { long numberOfTimesBannerHasBeenShownToUser = Timeslots.Today.BannerHitsForIdentity(bdh.K, id.Guid).Value; if (numberOfTimesBannerHasBeenShownToUser >= bdh.FrequencyCapPerIdentifierPerDay) { return true; } } return false; }
private static void LogBannerHit(Identity id, BannerDataHolder bdh) { Banner b = new Banner(bdh.K); b.RegisterHit(id); }