Quota settings: per-month on project level; per-smaller on installation level

and make it configurable on in the templates & docker
This commit is contained in:
Klaas van Schelven
2026-01-07 15:41:58 +01:00
parent 618934cec6
commit b618575e83
4 changed files with 18 additions and 2 deletions

View File

@@ -59,6 +59,10 @@ DEFAULTS = {
# of 50/s (ingestion) on low-grade hardware that I measured. # of 50/s (ingestion) on low-grade hardware that I measured.
"MAX_EVENTS_PER_PROJECT_PER_5_MINUTES": 1_000, "MAX_EVENTS_PER_PROJECT_PER_5_MINUTES": 1_000,
"MAX_EVENTS_PER_PROJECT_PER_HOUR": 5_000, "MAX_EVENTS_PER_PROJECT_PER_HOUR": 5_000,
"MAX_EVENTS_PER_PROJECT_PER_MONTH": 1_000_000,
"MAX_EVENTS_PER_5_MINUTES": 1_000,
"MAX_EVENTS_PER_HOUR": 5_000,
"MAX_EVENTS_PER_MONTH": 1_000_000, "MAX_EVENTS_PER_MONTH": 1_000_000,
"MAX_EMAILS_PER_MONTH": None, # None means "no limit"; for non-None values, the quota is per calendar month "MAX_EMAILS_PER_MONTH": None, # None means "no limit"; for non-None values, the quota is per calendar month

View File

@@ -163,10 +163,15 @@ BUGSINK = {
"MAX_ENVELOPE_COMPRESSED_SIZE": int(os.getenv("MAX_ENVELOPE_COMPRESSED_SIZE", 20 * _MEBIBYTE)), "MAX_ENVELOPE_COMPRESSED_SIZE": int(os.getenv("MAX_ENVELOPE_COMPRESSED_SIZE", 20 * _MEBIBYTE)),
# Bugsink-specific limits: # Bugsink-specific limits:
# The default values are 1_000 and 5_000 respectively; which corresponds to ~6% and ~2.7% of the total capacity of # The default values are 1_000, 5_000, 1M respectively; which corresponds to ~6%, ~2.7%, .8% of the total capacity
# 50 requests/s (ingestion) on low-grade hardware that I measured, and with 50% of the default value for retention. # of 50/s (ingestion) on low-grade hardware that I measured.
"MAX_EVENTS_PER_PROJECT_PER_5_MINUTES": int(os.getenv("MAX_EVENTS_PER_PROJECT_PER_5_MINUTES", 1_000)), "MAX_EVENTS_PER_PROJECT_PER_5_MINUTES": int(os.getenv("MAX_EVENTS_PER_PROJECT_PER_5_MINUTES", 1_000)),
"MAX_EVENTS_PER_PROJECT_PER_HOUR": int(os.getenv("MAX_EVENTS_PER_PROJECT_PER_HOUR", 5_000)), "MAX_EVENTS_PER_PROJECT_PER_HOUR": int(os.getenv("MAX_EVENTS_PER_PROJECT_PER_HOUR", 5_000)),
"MAX_EVENTS_PER_PROJECT_PER_MONTH": int(os.getenv("MAX_EVENTS_PER_PROJECT_PER_MONTH", 1_000_000)),
"MAX_EVENTS_PER_5_MINUTES": int(os.getenv("MAX_EVENTS_PER_5_MINUTES", 1_000)),
"MAX_EVENTS_PER_HOUR": int(os.getenv("MAX_EVENTS_PER_HOUR", 5_000)),
"MAX_EVENTS_PER_MONTH": int(os.getenv("MAX_EVENTS_PER_MONTH", 1_000_000)),
# Settings that help with debugging and development ("why isn't Bugsink doing what I expect?") # Settings that help with debugging and development ("why isn't Bugsink doing what I expect?")
"VALIDATE_ON_DIGEST": os.getenv("VALIDATE_ON_DIGEST", "none").lower(), # other legal values are "warn" and "strict" "VALIDATE_ON_DIGEST": os.getenv("VALIDATE_ON_DIGEST", "none").lower(), # other legal values are "warn" and "strict"

View File

@@ -105,6 +105,10 @@ BUGSINK = {
# set MAX_EVENTS* very high to be able to do serious performance testing (which I do often in my dev environment) # set MAX_EVENTS* very high to be able to do serious performance testing (which I do often in my dev environment)
"MAX_EVENTS_PER_PROJECT_PER_5_MINUTES": 1_000_000, "MAX_EVENTS_PER_PROJECT_PER_5_MINUTES": 1_000_000,
"MAX_EVENTS_PER_PROJECT_PER_HOUR": 50_000_000, "MAX_EVENTS_PER_PROJECT_PER_HOUR": 50_000_000,
"MAX_EVENTS_PER_PROJECT_PER_MONTH": 1_000_000_000,
"MAX_EVENTS_PER_5_MINUTES": 1_000_000,
"MAX_EVENTS_PER_HOUR": 50_000_000,
"MAX_EVENTS_PER_MONTH": 1_000_000_000, "MAX_EVENTS_PER_MONTH": 1_000_000_000,
"MAX_EMAILS_PER_MONTH": 10, # for development: a thing to tune if you want to the the quota system "MAX_EMAILS_PER_MONTH": 10, # for development: a thing to tune if you want to the the quota system

View File

@@ -62,11 +62,14 @@ HTTP_501_NOT_IMPLEMENTED = 501
QUOTA_THRESHOLDS = { QUOTA_THRESHOLDS = {
"Installation": [ "Installation": [
("minute", 5, "MAX_EVENTS_PER_5_MINUTES"),
("hour", 1, "MAX_EVENTS_PER_HOUR",),
("month", 1, "MAX_EVENTS_PER_MONTH"), ("month", 1, "MAX_EVENTS_PER_MONTH"),
], ],
"Project": [ "Project": [
("minute", 5, "MAX_EVENTS_PER_PROJECT_PER_5_MINUTES"), ("minute", 5, "MAX_EVENTS_PER_PROJECT_PER_5_MINUTES"),
("hour", 1, "MAX_EVENTS_PER_PROJECT_PER_HOUR",), ("hour", 1, "MAX_EVENTS_PER_PROJECT_PER_HOUR",),
("month", 1, "MAX_EVENTS_PER_PROJECT_PER_MONTH"),
], ],
} }