FUP Counters
The FUP Counters page is the operational view of your Fair Usage Policy. It shows, in real time, which subscribers have been throttled by QuotaSync, which are about to be, and how the population is distributed across the six daily and six monthly FUP tiers defined on each Service.
QuotaSync runs every 30 seconds. Every time a subscriber’s daily_download_used + daily_upload_used crosses a threshold, the row’s fup_level is incremented and RADIUS pushes the new throttled rate via CoA. This page reads fup_level and monthly_fup_level columns directly, so it’s effectively the live picture.
How to get here
Section titled “How to get here”Sidebar → FUP Counters. Direct URL: /fup.
Requires fup.view. The reset operations require fup.reset.
Layout
Section titled “Layout”| Section | What it shows |
|---|---|
| Stat row | Total subscribers, Active FUP (fup_level > 0), Daily quota exceeded, Monthly quota exceeded, Unlimited (services with quota = 0) |
| FUP distribution | Bar chart: how many subscribers in each tier (0, 1, 2, 3, 4, 5, 6) |
| Quota table | Per-subscriber row with daily and monthly bars |
| Filter bar | Search, FUP status filter, Quota status filter |
| Action column | Reset FUP, Open subscriber |
Stat cards
Section titled “Stat cards”| Card | Definition |
|---|---|
| Total Subscribers | COUNT(*) from subscribers in scope |
| Active FUP | WHERE fup_level > 0 — currently throttled by daily FUP |
| Daily Quota Exceeded | JOIN services WHERE daily_quota > 0 AND daily_quota_used >= daily_quota |
| Monthly Quota Exceeded | Same for monthly |
| Unlimited | WHERE services.daily_quota = 0 AND services.monthly_quota = 0 |
Each card is clickable as a filter shortcut.
FUP distribution chart
Section titled “FUP distribution chart”A horizontal bar chart, one bar per FUP level 0–6, showing the subscriber count in each. A healthy ISP has the vast majority in tier 0 (full speed). Sustained populations in tiers 4–6 mean either:
- Your daily quota is too small for what customers are paying.
- A handful of heavy users (peer-to-peer, IP cameras, surveillance backhauls) are recurring offenders.
Per-subscriber quota table
Section titled “Per-subscriber quota table”One row per subscriber, sortable by fup_level DESC, monthly_quota_used DESC by default — heaviest offenders first.
| Column | Notes |
|---|---|
| Username | Click to open subscriber detail. |
| Full Name | From subscribers.full_name. |
| Service | From services.name. |
| Reseller | From resellers.name. |
| Daily Used / Quota | daily_quota_used / services.daily_quota. Bar shows percentage. |
| Monthly Used / Quota | Same for monthly. |
| FUP Level | Current daily tier (0–6). Badge coloured by severity. |
| Online | Green dot if is_online = true. |
| Last Quota Reset | last_quota_reset timestamp. |
Bar colours follow standard ISP convention:
- 0–60% — green
- 60–80% — yellow (approaching tier)
- 80–100% — orange (about to throttle)
- ≥ 100% — red (throttled)
Filters
Section titled “Filters”FUP status
Section titled “FUP status”| Value | Filter |
|---|---|
| Active | fup_level > 0 |
| Normal | fup_level = 0 |
Quota status
Section titled “Quota status”| Value | Filter |
|---|---|
| Daily exceeded | daily_quota_used >= daily_quota |
| Monthly exceeded | monthly_quota_used >= monthly_quota |
| Warning (80%+) | Daily OR monthly used ≥ 80% of quota |
| Unlimited | Service has no quota |
Search
Section titled “Search”Username or full_name ILIKE match.
Reset operations
Section titled “Reset operations”Per-subscriber Reset FUP
Section titled “Per-subscriber Reset FUP”Each row has a Reset FUP button. The handler:
- Sets
fup_level = 0. - Zeros
daily_quota_used,daily_download_used,daily_upload_used. - Updates
last_daily_reset = now(). - Restores Mikrotik-Rate-Limit in
radreplyto the service’s full speed. - Sends CoA Update with the new rate (or falls back to MikroTik API).
The subscriber feels the speed-up within 30 seconds. Monthly counters are not touched — only Renew resets monthly.
Bulk Reset FUP
Section titled “Bulk Reset FUP”From Subscribers → filter by FUP tier → Select All → Reset FUP.
Daily auto-reset
Section titled “Daily auto-reset”The DailyQuotaResetService runs once a day at the configured Daily Quota Reset Time (Settings → RADIUS, default 00:05 in the system timezone). It runs:
UPDATE subscribers SET daily_quota_used = 0, daily_download_used = 0, daily_upload_used = 0, fup_level = 0, last_daily_reset = NOW()WHERE deleted_at IS NULL;If the API container restarts at exactly that minute the reset can be missed — the service window is 2 minutes wide. If you find subscribers stuck in tier 6 the next morning, check docker logs proxpanel-api | grep DailyQuotaResetService.
Monthly reset (Renew)
Section titled “Monthly reset (Renew)”Monthly counters reset only on subscriber Renew. The fields zeroed:
monthly_fup_level, monthly_download_used, monthly_upload_used,monthly_quota_used, cdn_monthly_download_used, cdn_monthly_upload_used,cdn_monthly_fup_levellast_monthly_reset = now() is set so reports can attribute usage to the right billing period.
How FUP is enforced
Section titled “How FUP is enforced”QuotaSync cycle (every 30 s):
- Read every online subscriber + their service.
- For each, query the NAS via
/ppp activefor=bytes-in=and=bytes-out=(per-session counters that reset on reconnect). - Compute
delta = current_bytes - last_session_*. - Sanity cap (v1.0.388) — if delta > 1 GB per 30 s cycle, log
SUSPICIOUS DELTA, re-baseline, skip this cycle. Prevents the v1.0.387 inflated-counter bug from reoccurring. - Apply Free Hours discount if in the time window.
- Add to
daily_*_used,monthly_*_used. - Evaluate tier crossings. If a new tier is reached, write the new
Mikrotik-Rate-Limittoradreplyand CoA-push it to the NAS.
Soft-FUP services keep burst configuration alive even at the throttled rate so brief clicks still feel snappy.
Common workflows
Section titled “Common workflows”Reset everyone in tier 6 (end of “rough day”)
Section titled “Reset everyone in tier 6 (end of “rough day”)”- From Subscribers, click the FUP 6 stat counter.
- Select All → Reset FUP.
- All filtered subscribers return to tier 0 with full Mikrotik-Rate-Limit. Speeds update via CoA in 30 seconds.
Find the top 10 monthly-quota users
Section titled “Find the top 10 monthly-quota users”- Open this page.
- Click the Monthly Used column header to sort descending.
- The top of the list is your bandwidth hogs. Cross-reference with the Sharing Detection page to see if any of them are sharing accounts.
Diagnose a subscriber who says “I’m always throttled”
Section titled “Diagnose a subscriber who says “I’m always throttled””- Search their username.
- Look at the daily and monthly bars.
- Open the subscriber → Usage tab → daily breakdown chart. Identify the day they hit the threshold.
- If the chart shows unexpectedly high usage (10× normal), they may have inherited counters from another user — check
last_session_*columns and force a re-baseline by changing their service and back.
Permissions
Section titled “Permissions”| Permission | Effect |
|---|---|
fup.view | Page loads. |
fup.reset | Reset FUP button on each row + bulk reset enabled. |
subscribers.view_all | Reseller sees system-wide quota stats, not just their own. |
Related pages
Section titled “Related pages”- Services & Plans — defines the daily and monthly FUP tier thresholds and speeds.
- Subscribers — filter by FUP tier from the stat bar.
- Subscriber Detail Page — Usage tab shows per-subscriber daily history.
- Bandwidth Rules — time-based speed changes layered on top of FUP throttling.
- Sharing Detection — TTL analysis to find heavy users sharing one account.