Introduces a per-day quota derived from the monthly limit using a
configurable peak-days multiplier (default 3):
dailyThreshold = monthlyThreshold * peakDays * DAY_MS / monthDurationMs
A tenant with a 10M/month transport quota is allowed up to ~1M messages
per day (3× daily fair-share). Exceeding the daily limit disables the
feature for that day; it auto-recovers at the next day boundary without
affecting the monthly cumulative counter.
Changes:
- SchedulerUtils: add getStartOfCurrentDay()
- DefaultTenantProfileConfiguration: add dailyPeakDays field (default 3)
- BaseApiUsageState: add currentDayValues map, currentDayTs tracking,
setDay() reset, setDaily/getDaily accessors, daily fields in
StatsCalculationResult
- TenantApiUsageState: add getDailyThreshold / getDailyWarnThreshold,
enforce both monthly and daily thresholds in checkStateUpdatedDueToThreshold
- DefaultTbApiUsageStateService: detect day rollover, write Daily timeseries
entries, restore daily values from timeseries on startup
- TenantApiUsageStateDailyTest: 6 unit tests covering threshold formula,
unlimited passthrough, warn fraction, and peakDays configurability
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>