Commit Graph
974 Commits
Author SHA1 Message Date
JingleManSweep b751cf68b8 Merge pull request #367 from ipnet-mesh/fix/map-data-pagination
fix(web): paginate /map/data node and profile fetches
v0.17.3
2026-08-29 13:33:20 +01:00
Louis King 9b6a16d862 fix(web): paginate /map/data node and profile fetches
The map endpoint fetched a single limit=500 page (the API's hard max,
sorted last_seen desc), so networks with more than 500 nodes silently
hid stale/offline nodes from the unfiltered map — including adopted
infrastructure, which still appeared under the adopted_by filter
because that filter narrows the query before the limit applies.

Follow offset/total pagination via a new _fetch_all_pages helper (40
pages / 20k nodes safety cap, partial results on later-page failure)
for both /api/v1/nodes and /api/v1/user/profiles, and report the
API-reported total in debug.total_nodes.
2026-08-29 13:01:16 +01:00
JingleManSweep c9d5e86953 Merge pull request #365 from ipnet-mesh/renovate/anomalyco-opencode-1.x
chore(deps): update anomalyco/opencode action to v1.18.25
2026-08-29 11:39:51 +01:00
renovate[bot] 524b2f0445 chore(deps): update anomalyco/opencode action to v1.18.25 2026-08-29 10:37:00 +00:00
JingleManSweep 95e99a2278 Merge pull request #363 from ipnet-mesh/renovate/tanstack-query-monorepo
chore(deps): update dependency @tanstack/react-query to v5.102.8
2026-08-29 11:36:09 +01:00
JingleManSweep 972898cff5 Merge branch 'main' into renovate/tanstack-query-monorepo 2026-08-29 11:33:38 +01:00
JingleManSweep 191ccd07d1 Merge pull request #357 from ipnet-mesh/renovate/leaflet-1.x-lockfile
chore(deps): update dependency @types/leaflet to v1.9.22
2026-08-29 11:33:23 +01:00
renovate[bot] b1f71baf63 chore(deps): update dependency @tanstack/react-query to v5.102.8 2026-08-29 10:31:11 +00:00
renovate[bot] b2fd54cb83 chore(deps): update dependency @types/leaflet to v1.9.22 2026-08-29 10:31:04 +00:00
JingleManSweep b30f1231ec Merge pull request #355 from ipnet-mesh/renovate/vite-8.x-lockfile
chore(deps): update dependency vite to v8.2.2
2026-08-29 11:30:06 +01:00
renovate[bot] ae2caee41c chore(deps): update dependency vite to v8.2.2 2026-08-29 10:27:44 +00:00
JingleManSweep 2dd99f7f92 Merge pull request #364 from hardtofindg/hardtofindg-patch-1
docs: align README Python version
2026-08-29 11:26:30 +01:00
JingleManSweep 18cebeb5ea Merge branch 'main' into hardtofindg-patch-1 2026-08-29 11:19:42 +01:00
JingleManSweep 933ad756f2 Merge pull request #354 from ipnet-mesh/renovate/vitejs-plugin-react-6.x-lockfile
chore(deps): update dependency @vitejs/plugin-react to v6.1.1
2026-08-29 11:17:44 +01:00
renovate[bot] 24337a5374 chore(deps): update dependency @vitejs/plugin-react to v6.1.1 2026-08-29 10:14:58 +00:00
JingleManSweep 806b378261 Merge pull request #358 from ipnet-mesh/renovate/testing-library-monorepo
chore(deps): update testing-library monorepo
2026-08-29 11:13:35 +01:00
renovate[bot] b972a5def2 chore(deps): update testing-library monorepo 2026-08-29 10:11:13 +00:00
JingleManSweep 1e871d5c51 Merge pull request #366 from ipnet-mesh/renovate/react-router-monorepo
chore(deps): update dependency react-router to v8.3.1
2026-08-29 11:10:01 +01:00
renovate[bot] 64df1b3297 chore(deps): update dependency react-router to v8.3.1 2026-08-29 10:07:48 +00:00
JingleManSweep b74855ee01 Merge branch 'main' into hardtofindg-patch-1 2026-08-29 11:07:18 +01:00
JingleManSweep 8400fc524f Merge pull request #353 from ipnet-mesh/renovate/jsdom-30.x
chore(deps): update dependency jsdom to v30
2026-08-29 11:06:27 +01:00
JingleManSweep ceb4f2be52 Merge branch 'main' into renovate/jsdom-30.x 2026-08-29 11:03:57 +01:00
JingleManSweep e3bb6752a3 Merge branch 'main' into hardtofindg-patch-1 2026-08-29 11:03:29 +01:00
JingleManSweep 604ff06cb9 Merge pull request #356 from ipnet-mesh/renovate/react-monorepo
chore(deps): update react monorepo to v19.2.18
2026-08-29 11:02:48 +01:00
JingleManSweep 2afffedaf0 Merge branch 'main' into hardtofindg-patch-1 2026-08-29 11:02:00 +01:00
renovate[bot] 91bbd4e3f9 chore(deps): update react monorepo to v19.2.18 2026-08-29 09:58:14 +00:00
JingleManSweep 1a082edbb8 Merge branch 'main' into renovate/jsdom-30.x 2026-08-29 10:57:18 +01:00
JingleManSweep 08f74f1522 Merge pull request #351 from ipnet-mesh/renovate/daisyui-5.x-lockfile
chore(deps): update dependency daisyui to v5.7.22
2026-08-29 10:57:02 +01:00
renovate[bot] 737054f932 chore(deps): update dependency jsdom to v30 2026-08-25 23:06:17 +00:00
renovate[bot] 1d8a2b8cfa chore(deps): update dependency daisyui to v5.7.22 2026-08-25 23:05:24 +00:00
JingleManSweep 872cbedd6b Merge pull request #359 from ipnet-mesh/renovate/vitest-monorepo
chore(deps): update dependency vitest to v4.1.11
2026-08-26 00:04:01 +01:00
hardtofindg fad3ad373b docs: align README Python version 2026-08-26 02:02:36 +03:00
JingleManSweep e0e9c6e781 Merge branch 'main' into renovate/vitest-monorepo 2026-08-26 00:01:45 +01:00
JingleManSweep fcbd780105 Merge pull request #362 from ipnet-mesh/renovate/react-i18next-17.x-lockfile
chore(deps): update dependency react-i18next to v17.0.12
2026-08-25 23:59:12 +01:00
renovate[bot] 70c2b8b77f chore(deps): update dependency react-i18next to v17.0.12 2026-08-25 22:56:29 +00:00
JingleManSweep df0a34a5c6 Merge branch 'main' into renovate/vitest-monorepo 2026-08-25 23:55:32 +01:00
JingleManSweep 8bbb38e554 Merge pull request #352 from ipnet-mesh/renovate/anomalyco-opencode-1.x
chore(deps): update anomalyco/opencode action to v1.18.23
2026-08-25 23:55:17 +01:00
renovate[bot] 4ed9dfd5f8 chore(deps): update anomalyco/opencode action to v1.18.23 2026-08-25 22:53:03 +00:00
JingleManSweep de62572dd2 Merge branch 'main' into renovate/vitest-monorepo 2026-08-25 23:52:41 +01:00
JingleManSweep 553b4060e9 Merge pull request #360 from ipnet-mesh/renovate/i18next-26.x-lockfile
chore(deps): update dependency i18next to v26.4.0
2026-08-25 23:51:25 +01:00
renovate[bot] c56d63062a chore(deps): update dependency i18next to v26.4.0 2026-08-25 22:48:33 +00:00
renovate[bot] 12dc981f71 chore(deps): update dependency vitest to v4.1.11 2026-08-25 22:48:06 +00:00
JingleManSweep b6e53c6cee Merge pull request #361 from ipnet-mesh/fix/mqtt-zombie-connection-hardening
fix(collector): survive broker dropping MQTT connections without FIN
2026-08-25 23:46:33 +01:00
Louis King 9913ffdecb fix(collector): survive broker dropping MQTT connections without FIN
The meshcore-mqtt-broker destroys subscriber connections (keep-alive
timeout) without sending FIN/RST, leaving a half-open socket that paho
never sees as disconnected: the collector stays "healthy" but silently
stops ingesting forever.

- Enable TCP keepalive (idle 60s / intvl 30s / count 3) on every
  connect, unwrapping paho's _WebsocketWrapper to reach the raw socket;
  kernel now fails zombie sockets so paho reconnects and resubscribes
- Verify SUBACKs via on_subscribe; log broker refusals (0x80) as ERROR
- Resubscribe with the registered QoS instead of paho's QoS 0 default
- Drop the optimistic _mqtt_connected flag; health now reports
  mqtt.is_connected, driven by real CONNACK/disconnect callbacks
2026-08-25 23:39:59 +01:00
JingleManSweep 9c1d3e5210 Merge pull request #349 from ipnet-mesh/renovate/daisyui-5.x-lockfile
chore(deps): update dependency daisyui to v5.7.3
v0.17.2
2026-07-25 14:59:06 +01:00
renovate[bot] df02cf0601 chore(deps): update dependency daisyui to v5.7.3 2026-07-25 13:55:36 +00:00
JingleManSweep 10a38502eb Merge pull request #350 from ipnet-mesh/fix/dashboard-packet-retention-window
fix(dashboard): make packet displays retention-aware
2026-07-25 14:54:42 +01:00
Louis King 993ba7b5b6 docs: sync retention/evaluator defaults to #348 values
PR #348 changed several defaults but left a handful of docs, the
docker-compose fallback, example seed files, and code docstrings stale:

- docker-compose.yml: RAW_PACKET_RETENTION_DAYS fallback 7->2 (the
  :-7 override was the most consequential — operators without the env
  var set got 7 days, contradicting the code default and .env.example)
- docs/configuration.md: route-history backfill now references the
  300 s evaluator cadence (was 60 s)
- docs/seeding.md + example/seed/routes.yaml: window_hours 48/24 -> 6
  (matches the new default; both exceeded the 12 h max)
- routes.py docstring: evaluator tick 60 s -> 300 s
- subscriber.py: raw_packet_retention_days signature defaults 7 -> 2
  (overridden at runtime by effective_raw_packet_retention_days, but
  kept consistent with the authoritative config default)
2026-07-25 14:52:06 +01:00
Louis King 7802a00db3 fix(dashboard): make packet displays retention-aware
PR #348 lowered the RAW_PACKET_RETENTION_DAYS default 7->2, but the
dashboard packet count, activity chart, and breakdown chart still
advertised "Last 7 days" — a label that lied once only 2 days of data
remained. Make every raw-packet-derived window track the effective
retention so labels stay honest:

- get_dashboard_stats: packets_7d window = min(7, retention); expose
  packets_window_days on DashboardStats so the UI renders the real window
- packet-activity / packet-breakdown: clamp days = min(days, 90, retention)
  so responses never advertise days whose data has been purged
- Home StatCard + Dashboard chart subtitles: dynamic "Last N days" /
  "Per day (last N days)" via new time.last_n_days / time.per_day_last_n_days
  i18n keys ({{n}} interpolation, matching routes_over_last_n_days)
- ActivitySeries.days made optional (type shared across activity charts);
  PacketBreakdown.days added (backend always serializes it)

Messages/ads 7-day displays are unchanged — those draw on event data
which retains the full 30-day DATA_RETENTION_DAYS window.

Tests: autouse retention fixture (->90) on the three packet test classes
so existing days-handling tests stay valid; added retention-clamp tests
proving the window tracks retention=2 and relaxes to 7 at retention>=7.
2026-07-25 14:39:33 +01:00
JingleManSweep 153ba14ea0 Merge pull request #348 from ipnet-mesh/perf/route-evaluator-remediation
perf(routes): cut evaluator scan cost via window/retention/index/sweep
2026-07-25 13:21:30 +01:00