Page MenuHomePhabricator

Better "Maximum impressions" any individual will see
Open, Needs TriagePublic

Description

From the CentralNotice technical improvements (Feb 2024) document:

Would be useful if we could add even more neat rules to this, perhaps configure multiple on a campaign level?

  • Maximum impressions overall (current setting)
  • Maximum impressions per day _____
  • Maximum impressions per session (all pageviews in some window, e.g. 1 hour)

This is tracked in Asana as "Add more rules to max impressions".

Event Timeline

Notes from brainstorming session between @Ejegg and myself (26 Feb 2026) on various goals under T417064 including this one:

Goal 3 - Better max diet:

  • How it works today:
    • Allocation data is geo, device, campaign priority, weight
    • Then campaign has mixins for banner history and banner diet.
    • Then there is a "campaign fallback" we introduced.
    • "Impression diet" mixin does not depend on bannerHistoryLogger today. We may need to if we introduce per-day/per-session, because bannerHistoryLogger is where we store the needed timestamps.
    • Mixins
      • History, when enabled:
        • Starts storing and sending back to server at sample rate.
        • Exposes a function that Fundraising banners call on-click to ensure we flush it just in time.
        • BUG-TO-BE: Multiple campaigns different cutOff, might be pruning other campaigns stuff? Needs to limit log time checks to its own entries.
  • Approach:
    • Factor out banner log store from bannerHistoryLogger mixin, so that both "Baner history logger" and "Impression diet" mixins can use it.
    • Annotate log with diet-ID.

Change #1264185 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/extensions/CentralNotice@master] BannerHistoryLogger: Remove unused `waitLogNoSendBeacon` mixin param

https://gerrit.wikimedia.org/r/1264185

Change #1264185 merged by jenkins-bot:

[mediawiki/extensions/CentralNotice@master] BannerHistoryLogger: Remove unused `waitLogNoSendBeacon` mixin param

https://gerrit.wikimedia.org/r/1264185

Change #1273811 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/extensions/CentralNotice@master] bannerHistoryLogger,impressionDiet: Minor code readability cleanup

https://gerrit.wikimedia.org/r/1273811

Change #1273812 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/extensions/CentralNotice@master] impressionDiet: Remove 2016 schema migration (cookie to kvStore)

https://gerrit.wikimedia.org/r/1273812

Change #1273813 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/extensions/CentralNotice@master] impressionDiet: Remove 2018 waitSeenCount migration and add zeros fallback

https://gerrit.wikimedia.org/r/1273813

Change #1273814 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/extensions/CentralNotice@master] impressionDiet: Implement new "dailyLimit" parameter

https://gerrit.wikimedia.org/r/1273814

Change #1275401 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/extensions/CentralNotice@master] impressionDiet: Add unit tests for impressionDietHandler

https://gerrit.wikimedia.org/r/1275401

Change #1273811 merged by jenkins-bot:

[mediawiki/extensions/CentralNotice@master] bannerHistoryLogger,impressionDiet: Minor code readability cleanup

https://gerrit.wikimedia.org/r/1273811

Change #1273812 merged by jenkins-bot:

[mediawiki/extensions/CentralNotice@master] impressionDiet: Remove 2016 schema migration (cookie to kvStore)

https://gerrit.wikimedia.org/r/1273812

Change #1273813 merged by jenkins-bot:

[mediawiki/extensions/CentralNotice@master] impressionDiet: Remove 2018 waitSeenCount migration and add zeros fallback

https://gerrit.wikimedia.org/r/1273813

Change #1275401 merged by jenkins-bot:

[mediawiki/extensions/CentralNotice@master] impressionDiet: Add unit tests for impressionDietHandler

https://gerrit.wikimedia.org/r/1275401

Change #1273814 merged by jenkins-bot:

[mediawiki/extensions/CentralNotice@master] impressionDiet: Implement new "dailyLimit" parameter

https://gerrit.wikimedia.org/r/1273814