5162 Commits
Author SHA1 Message Date
Robert Chacón ef4fdb6bbf Merge pull request #1184 from LibreQoE/fix/v2.2-pr1183-directionality-hardened
fix(uisp): harden v2.2 full2 orientation for mutual AP references
2026-10-24 16:07:53 -06:00
rchac 4c643dc62f fix(uisp_integration): harden full2 directionality for mutual AP references
Based on PR #1183 (trendal), locally hardened for the v2.2 line.

A mutual `apDevice` reference is not evidence of orientation: UISP also
fills it on the AP end of PtP/bridge links. Trust the reference only when
one end is positively labelled as AP/station, and decline both-AP,
both-station or unlabelled mutual references so the result does not depend
on argument order.

Adds 9 regression tests (13 directionality tests total).

Credit: PR #1183 (trendal).
Backport target: public v2.2 line (develop).
2026-10-24 15:58:30 -06:00
Robert Chacón 8af9910191 Merge pull request #1179 from LibreQoE/ci/path-filtered-tests
CI: gate Python and Rust jobs on changed paths
2026-10-15 18:13:48 -06:00
Herbert Wolverson 4577b9b5b1 CI: gate Python and Rust jobs on changed paths
Both workflows ran their full pipelines on every push, including
docs-only and opposite-language changes, which wasted runner time and
reported failures unrelated to the change under test.

Add a shared detect-changes workflow that diffs the pushed or PR range
against per-group patterns and exposes a matched output. The heavy jobs
run only when their group changed, or when detection itself fails, so a
broken detector cannot silently skip checks. Tag pushes and unknown
events fall back to running everything.

Include .github/scripts/test-changed-files.sh, a manual harness for the
detection logic that follows the repo's existing shell self-tests.
2026-10-14 14:42:41 -05:00
Robert Chacón 2a6a9a1ac4 Merge pull request #1168 from trendal/patch-1
Fix recent_rtt_data shift loop overwriting RTT history
2026-10-07 18:04:01 -06:00
Robert Chacón 79dba2ad3e Merge pull request #1170 from LibreQoE/feat/byte_counters
Feat: Add optional cumulative byte counters for nodes and circuits
2026-10-07 18:03:41 -06:00
Herbert Wolverson 49024d065c Docs: tighten byte counters API wording
Uses active phrasing in the Spanish API note and aligns the English wording with the configuration page.
2026-10-07 13:43:48 -05:00
Herbert Wolverson 18cde06b35 Fix: index the device catalog once per byte counter refresh
Builds a circuit-hash index from the combined catalog before refreshing descriptors, so dynamic and removed circuits cannot trigger per-circuit fallback scans while the counter lock is held. Clarifies the module documentation and fixes the Spanish parent-node wording.
2026-10-07 13:35:08 -05:00
Herbert Wolverson 3f00f10593 Fix: refresh byte counter identity for configured circuits
Live circuits now follow renames and re-parenting because descriptors refresh from the catalog on each snapshot, while circuits removed from configuration keep their last-known descriptor and continue contributing to their last known parent. Documents the tracker-side lock constraint, releases the throughput table lock before the counter merge, adds a first-miss descriptor recovery test, and applies rustfmt to the new hunk.
2026-10-07 13:20:03 -05:00
Herbert Wolverson 2a022c0e06 Fix: resolve byte counter parents through the canonical topology lookup
Reuses ParentNodeLookup so node attribution follows the same id, name, and attachment-alias precedence as the rest of the runtime, and prefers the published effective parent when capturing circuit identity. Adds an alias-resolution test and clarifies the snapshot lock-order comment.
2026-10-07 13:00:57 -05:00
Herbert Wolverson b19bf9ec14 Fix: keep byte counter identity across configuration changes
Captures circuit identity and parent when a counter first receives traffic, so circuits removed from configuration keep contributing to their last known parent instead of dropping out of node totals. Resolves parent nodes by stable id before name, fills descriptors at read time, skips zero-byte deltas, and documents the counter lock ordering. Expands tests for the absent config section, disabled snapshots, root-attached circuits, id-preferred node resolution, and stable circuit ordering.
2026-10-07 12:49:28 -05:00
Herbert Wolverson 94ed100fea Docs: document byte counters configuration and API endpoint
Documents the optional [byte_counters] section, counter reset semantics, subtree-inclusive node totals, and the GET /byte_counters endpoint in English and Spanish.
2026-10-07 12:29:26 -05:00
Herbert Wolverson ff59654991 Feat: accumulate and expose cumulative circuit byte counters
When [byte_counters] enabled = true, the one-second throughput tracker batches each circuit's actual-byte deltas into a cumulative counter map. Node totals are rolled up through the runtime network tree when the bus is queried, so node values include descendants. Counters are in-memory and reset when lqosd restarts.
2026-10-07 12:29:22 -05:00
Herbert Wolverson d52e3a6dbb Feat: add byte counters bus request and response
Adds GetByteCounters with cumulative per-node and per-circuit byte counter payloads. The request is read-only, so it fails fast on timeout and needs no daemon-side mutation.
2026-10-07 12:29:22 -05:00
Herbert Wolverson 433914842a Feat: add optional byte_counters configuration section
Adds a [byte_counters] section that is absent by default, so existing configuration files keep working unchanged. The section will gate cumulative per-circuit and per-node byte counter collection in lqosd.
2026-10-07 12:29:18 -05:00
Trendal Toews 1dd5b88405 Fix recent_rtt_data shift loop overwriting RTT history
The forward loop (for i in 1..60) copies slot 0 into all 59 older slots, so median_latency() always returns the previous sample instead of a 60-sample median. Iterating in reverse preserves the history and drops the oldest sample.
2026-10-06 23:59:17 -07:00
Robert Chacón 61a83dcd14 Merge pull request #1166 from LibreQoE/fix/atomic-runtime-state-writes
Make runtime/generated writes atomic; tolerate torn network.json
2026-10-03 20:59:46 -06:00
Robert Chacón d73fd7ebee Merge pull request #1167 from LibreQoE/fix_find_bandwidth_mins
Fix node minimum bandwidth accumulating across siblings
2026-10-03 20:59:24 -06:00
Herbert Wolverson ea7374901a Fix node minimum bandwidth accumulating across siblings
findBandwidthMins() reused one minDownload/minUpload counter for both each node's own minimum and the running sibling total, so every sibling after the first inherited the circuit minimums of the siblings before it. Those inflated minimums are written to queuingStructure.json and become HTB rates, which can guarantee child nodes more bandwidth than their parent supplies.

Reset the counters per node and keep a separate running total for the parent. Also fix the no-minimum-key fallback, which used minUpload for the download minimum.

The function is hoisted to module level so the behavior can be unit tested, with regression coverage for sibling accumulation and order, nested roll-up, and the download fallback.
2026-10-03 11:56:51 -05:00
Herbert Wolverson b14a6870e0 Add shared atomic writes and tolerate torn network.json
Consolidate the atomic writer into src/atomic_io.py and route the
remaining runtime/generated writes through it so an interrupted write
cannot leave a truncated file. Preserve destination ownership and
permissions across the rename, and treat an unreadable or non-object
network.json as a validation failure instead of crashing the scheduler.
2026-09-15 14:47:22 -05:00
Robert Chacón 654499a5a3 Update conf.py 2026-09-08 12:58:18 -06:00
Robert Chacón ebed074024 Merge pull request #1164 from LibreQoE/fix_powercode_1
Fix Powercode id type mismatches and add site/AP topology support
2026-09-08 12:50:03 -06:00
rchac 08aa228366 Fix Powercode id type mismatches and add site/AP topology support
The Powercode preseem API returns customer and equipment ids as ints
while service ids come back as strings, so the service lookup in
createShaper() never matched and zero customers were imported. All ids
are now normalized to strings before use.

The integration now also pulls the list_sites endpoint and builds the
network hierarchy from it: sites are added as site nodes, site
infrastructure equipment that has subscribers attached (APs, routers,
backhauls) becomes AP nodes, and customers are parented onto the AP
their equipment references, falling back to a sibling device's AP and
then to the root. Display names are trimmed and de-duplicated so the
topology compiler's exact-match parent name validation passes.
2026-09-08 18:49:06 +00:00
Robert Chacón 0bd7a6075e Update update.md 2026-09-07 03:41:56 -06:00
Robert Chacón dd56833705 Merge pull request #1162 from LibreQoE/fix_1157_caddy
Fix API Docs behind managed Caddy HTTPS
2026-09-04 14:23:21 -06:00
Herbert Wolverson 87f0d595d7 Fix API docs routing behind managed Caddy HTTPS 2026-09-04 15:17:23 -05:00
Robert Chacón 6c2601a9a8 Merge pull request #1161 from LibreQoE/fix_309
Atomic writes for runtime state files and a scheduler-safe lastRun.txt reader
2026-09-03 08:12:50 -06:00
rchac 1d0e0bc610 changes 2026-09-03 07:57:47 -06:00
rchac bc9ca515c3 changes 2026-08-27 15:00:57 +00:00
Robert Chacón e772b84c35 Update integrations-reference.md 2026-08-25 16:21:29 -06:00
Robert Chacón 750560a14d Update conf.py 2026-08-18 09:41:21 -06:00
Robert Chacón e6f4e1903b Merge pull request #1143 from LibreQoE/chore/warn_tsc
Warn when expensive clocksource is active
2026-08-18 09:33:53 -06:00
Robert Chacón 842654065d Merge pull request #1140 from stepbrobd/map
Clamp cpu_map to host's possible CPU count
2026-08-18 09:33:10 -06:00
Robert Chacón bf1e3517a2 Update conf.py 2026-08-18 08:58:27 -06:00
Robert Chacón c33b3b3035 Update VERSION_STRING 2026-08-18 08:54:31 -06:00
Herbert Wolverson db932928c7 Warn when expensive clocksource is active 2026-08-14 20:14:32 -05:00
Robert Chacón c710d4b8ef Merge pull request #1141 from LibreQoE/revert-818-meatball-sub
Revert "Add XDP interface compatibility shim"
2026-08-11 07:53:16 -06:00
Robert Chacón 0908d3e634 Revert "Add XDP interface compatibility shim" 2026-08-11 07:53:03 -06:00
Robert Chacón a262c53b97 Merge pull request #818 from LibreQoE/meatball-sub
Add XDP interface compatibility shim
2026-08-10 17:08:52 -06:00
Herbert Wolverson e939ff5a87 Feat: add compatibility shim to first-run setup 2026-08-10 17:43:10 -05:00
Herbert Wolverson f7d53d8cc6 Feat: add XDP interface compatibility shim 2026-08-10 17:02:09 -05:00
Robert Chacón 482c856dd7 Merge pull request #1139 from LibreQoE/fix/bakery-license-cache-startup
Gate Bakery startup on local license-cache initialization
2026-08-07 10:44:54 -06:00
Yifei Sun 96a83e223a Clamp cpu_map to host's possible CPU count 2026-08-06 20:17:50 +02:00
Herbert Wolverson 94b3c82679 Gate Bakery startup on local license-cache initialization
Keep queued Bakery commands intact while lqosd checks local .keys state, releasing the gate for both successful and non-fatal cache outcomes without tying startup to Insight network availability.
2026-08-06 10:13:45 -05:00
Robert Chacón 5d0f94fd2d Merge pull request #1138 from LibreQoE/fix/htb-lazy-full-reload
Fix HTB-lazy full reload queue growth
2026-08-01 07:34:36 -06:00
Herbert Wolverson b89fe5d33a Fix HTB-lazy full reload queue growth 2026-07-31 12:54:54 -05:00
Herbert Wolverson bbb4acff71 Merge remote-tracking branch 'refs/remotes/origin/develop' into develop 2026-07-31 10:15:56 -05:00
Herbert Wolverson 8bea1e358d Docs: Explain DOCSIS modem headroom 2026-07-30 20:20:10 -05:00
Robert Chacón fb30c88d2a Merge pull request #1137 from LibreQoE/fix/lazy-queue-memory-preflight-warning
Allow lazy queue memory preflight warnings
2026-07-30 09:58:28 -06:00
Herbert Wolverson ddf78a0f16 Fix lazy queue memory preflight warnings 2026-07-30 09:59:57 -05:00