6719 Commits
Author SHA1 Message Date
Jokob @NetAlertX f3620ab63f Merge pull request #1783 from netalertx/next_release
BE: SQL refactor presence
2026-09-12 08:03:45 +10:00
jokob-sk 38d5f5093c BE: conditional device import support, notification supression support during scan #1721 2026-09-12 07:58:57 +10:00
jokob-sk 660bddf878 BE: conditional device import support, notification supression support during scan #1721 2026-09-12 07:51:03 +10:00
jokob-sk 58930d3d1d BE: conditional device import support, notification supression support during scan #1721 2026-09-11 08:31:52 +10:00
jokob-sk 37bf86a805 BE: conditional device import support, notification supression support during scan #1721 2026-09-11 08:26:16 +10:00
jokob-sk 6dab348de2 BE: conditional device import support, notification supression support during scan #1721 2026-09-11 08:01:41 +10:00
jokob-sk dd4fc057c8 BE: SQL refactor presence 2026-09-10 22:11:46 +10:00
Jokob @NetAlertX a23c650d16 Merge pull request #1782 from netalertx/next_release
Next release
2026-09-10 21:01:06 +10:00
jokob-sk d9947a2829 BE: conditional device import support, notification supression support during scan #1721 2026-09-10 21:00:50 +10:00
jokob-sk de730e85e9 BE: conditional device import support, notification supression support during scan #1721 2026-09-10 18:41:07 +10:00
jokob-sk 34993ed77b BE: conditional device import support, notification supression support during scan #1721 2026-09-10 17:40:31 +10:00
jokob-sk 44c52a3cf4 BE: conditional device import support, notification supression support during scan #1721 2026-09-10 14:27:44 +10:00
jokob-sk c3bdd92b8d BE: conditional device import support, notification supression support during scan #1721 2026-09-10 13:51:09 +10:00
Jokob @NetAlertX 8022546419 Merge pull request #1781 from netalertx/next_release
Next release
2026-09-10 13:30:01 +10:00
jokob-sk cc3ccbcaf0 DOCS: skills + SQL cleanup 2026-09-10 10:59:33 +10:00
jokob-sk a976fe0923 DOCS: skills 2026-09-10 10:20:26 +10:00
jokob-sk c6164798e9 DOCS: plugins 2026-09-10 09:49:40 +10:00
Jokob @NetAlertX dc837324a1 Merge pull request #1779 from netalertx/next_release
FE: Easier icon add in Settings  #1773
2026-09-10 08:43:24 +10:00
jokob-sk f24124b0ed LANG: Hungarian 2026-09-10 08:36:02 +10:00
jokob-sk b5d62b73c9 FE: Easier icon add in Settings #1773 2026-09-09 08:08:31 +10:00
Jokob @NetAlertX 4005147a34 Merge pull request #1778 from netalertx/next_release
DOCS: plugins
2026-09-07 10:30:29 +10:00
jokob-sk ba0077b99d DOCS: plugins 2026-09-07 09:44:37 +10:00
Jokob @NetAlertX aad6d24722 Merge pull request #1776 from netalertx/next_release
BE+PLG: mac case sensitivity causing double detection #1775
2026-09-07 09:31:14 +10:00
jokob-sk 85325dad93 DOCS: plugins 2026-09-07 09:30:55 +10:00
jokob-sk 18092b3179 DOCS: plugins 2026-09-07 08:24:53 +10:00
jokob-sk d478deddc9 FE+DOCS: custom props icon select fix + docs cleanup 2026-09-06 11:13:21 +10:00
jokob-sk 3cd13f2f33 FE+DOCS: extract js into files , cust props clarification 2026-09-05 11:16:32 +10:00
jokob-sk 4d0175c660 BE+FE+DOCS: run plugin from custom props/actions 2026-09-05 10:54:56 +10:00
jokob-sk cddb237cd3 FE+DOCS: Wildcards in custom props #1773 2026-09-05 10:36:19 +10:00
Jokob @NetAlertX b934e01fbb Merge pull request #1777 from TsinbeiLabs/fix/notifications-full-width
fix(front): make notifications page span full width
2026-09-05 00:19:26 +10:00
Hsukqi Lee dced246c12 fix(front): make notifications page span full width
Signed-off-by: Hsukqi Lee <team@tsinbei.com>
2026-09-04 21:59:24 +08:00
Safeguard 6916b06d41 Translated using Weblate (Russian)
Currently translated at 100.0% (836 of 836 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2026-09-04 08:51:27 +00:00
jokob-sk 939e6494ba BE+PLG: mac case sensitivity causing double detection #1775 2026-09-04 08:18:02 +10:00
jokob-sk 4be05c958a BE+PLG: mac case sensitivity causing double detection #1775 2026-09-04 08:08:22 +10:00
Jokob @NetAlertX a686a019fe Merge pull request #1771 from netalertx/next_release
DOCS: tree docs
v26.9.0
2026-09-02 08:43:46 +10:00
jokob-sk b1eae18ba2 DOCS: tree docs 2026-09-02 08:43:09 +10:00
Jokob @NetAlertX e0b8abcdd8 Merge pull request #1770 from netalertx/next_release
Next release
v26.9
2026-09-02 08:06:42 +10:00
jokob-sk 5751811243 plugin template update 2026-09-02 07:58:31 +10:00
Jokob @NetAlertX 4b2da481ee Merge pull request #1769 from netalertx/main
Sync
2026-09-01 09:28:01 +10:00
Jokob @NetAlertX df0ef6ec17 Merge pull request #1765 from mauricio-camayo/add-pihole-monitor-plugin
Add pihole_monitor plugin: combined Pi-hole device import + query anomaly detection
2026-09-01 08:31:13 +10:00
Jokob @NetAlertX 72871e23b1 Merge pull request #1768 from netalertx/next_release
PLG+DOCS: plugins dev docs for temp files + adguard export cleanup
2026-09-01 07:47:07 +10:00
Mauricio Camayo d6b4696ac9 fix: track per-source delta so one instance's reset can't mask the other's spike
Addresses CodeRabbit review on PR #1765 (pullrequestreview-5069337680).

pihole_monitor.py:
- last_raw is now tracked per source ({"primary": N, "secondary": M}
  per device) instead of one combined value. Combining raw totals
  across sources before diffing let a counter reset on one instance
  silently net out against real traffic on the other - e.g. primary
  +2000 (a real spike) and secondary resetting 1000->5 (-995) would
  combine into a raw delta of only 1005, hiding most of the primary's
  actual spike behind the secondary's unrelated restart.
- New aggregate_source_deltas(): diffs each source independently via
  compute_delta(), then sums only the valid deltas. A source with no
  valid delta this run (bootstrapping or just reset) contributes
  nothing and doesn't block the others; each source keeps its own
  reference point going forward.
- State loaded from before this change (last_raw as a plain number,
  not per-source) is now tolerated instead of crashing - treated as no
  prior reference point, so every source just bootstraps fresh on the
  next run.

README.md:
- Fixed a self-contradicting line: a less frequent schedule means
  larger per-run deltas, so PIHOLEMON_MIN_BLOCKED may need *raising*,
  not lowering as it previously said.
- Corrected PIHOLEMON_HISTORY_DAYS guidance: it's a retention window,
  not a detection delay. A new device becomes evaluable on its 3rd
  successful run (1st anchors the counter, 2nd records the first
  delta, 3rd has a baseline to compare against), not after the full
  retention window.

Tests: 54 (up from 48). New coverage: aggregate_source_deltas() unit
tests including the exact dual-source reset-masking scenario, a
main()-level integration test for the same, and a regression test for
tolerating pre-per-source state. Both the reset-masking fix and the
legacy-state guard verified via mutation testing (reverted each,
confirmed the relevant tests fail, restored). 99% line+branch coverage
maintained.
2026-08-31 12:51:46 -05:00
Mauricio Camayo e543f14d08 fix: address round 2 of jokob-sk's maintainer review
References PR #1765.

Docs:
- Added PIHOLEMON to docs/PLUGINS.md and a new "Approach 4" section in
  docs/PIHOLE_GUIDE.md, leading with anomaly detection (the actual
  differentiator vs PIHOLEAPI) and explaining when to pick each plugin.
- README/PLUGINS.md/config.json's UI-facing description all reordered
  and shortened to lead with anomaly detection instead of device
  import, and to drop implementation detail that belongs in the
  README, not the Settings page.
- Trimmed the "Why not extend PIHOLEAPI" README section per feedback -
  useful context for a maintainer, not for an end user configuring
  the plugin.

config.json / pihole_monitor.py:
- RUN defaults to "disabled", matching every other non-core plugin.
- VERIFY_SSL split into PRIMARY_VERIFY_SSL / SECONDARY_VERIFY_SSL -
  each instance can be http/https independently. Settings reordered so
  each *_VERIFY_SSL sits right under its matching *_PASSWORD.
- GRAPHQL_TOKEN removed; graphql_token now reads the core API_TOKEN
  setting instead of a plugin-specific duplicate.
- GRAPHQL_URL replaced with a GET_OWNER boolean - the endpoint is now
  derived from this app's own GRAPHQL_PORT (single source of truth)
  instead of a URL the user had to keep in sync by hand.
- HISTORY_LENGTH (run count) replaced with HISTORY_DAYS (a real time
  window): state now stores [timestamp, delta] samples and
  trim_history() drops anything older than the window, so the
  baseline means the same thing regardless of schedule - a faster
  schedule adds more data points instead of shrinking the window.
- STATE_FILE moved from the log folder to dbFolderPath, so the rolling
  anomaly baseline survives NetAlertX upgrades instead of being wiped
  with the logs.
- netalertx_device_owner() (1 GraphQL call per device) replaced by
  netalertx_device_owners() (1 call per run, batched) - avoids N
  blocking round-trips on a large network.
- Fixed a zero-baseline bug: `bool(... and baseline and ...)` silently
  exempted a device with an all-zero blocked-query history (0.0 is
  falsy in Python) from ever being flagged, even on its first real
  spike. Now checks `baseline is not None`.
- Fixed the placeholder-MAC filter: only excluded the literal "ip-::",
  not Pi-hole's general "ip-<address>" placeholder pattern. Caught
  downstream by is_mac() either way, but now the actual placeholder
  check does what it looks like it does.
- Fixed a cumulative-counter bug: Pi-hole's /api/stats/top_clients
  returns a count that's cumulative since FTL last started, not a
  per-interval or daily-resetting one (confirmed against FTL's own
  source and long-standing user reports that it doesn't reset at
  midnight). Comparing that raw total directly against a rolling
  average made any device's ordinary growing traffic look like an
  escalating anomaly. compute_delta() now diffs each run's raw count
  against the previous run's (state gained a per-key last_raw
  reference point alongside the delta history) - None (not 0) on the
  first-ever run for a device or right after a counter reset, so
  those runs re-anchor the reference point instead of fabricating or
  swallowing a delta.
- RUN_SCHD default changed from every 6 hours to every 5 minutes now
  that the baseline window is real days, not run count, so a frequent
  schedule only adds data points instead of narrowing the window; also
  matches the default most other device-scanner plugins use.
- RUN_SCHD gained the same live cron-validity checkmark ARPSCAN and
  other scanner plugins use (a ✓/✗ icon next to the field, validated
  client-side against a regex) - reuses the existing generic
  validateRegex() widget, nothing plugin-specific to build.

Tests: 48 tests (up from 37), 99% line+branch coverage. Every fix
above verified via mutation testing (deliberately broken, confirmed
the relevant test fails, then restored).
2026-08-31 11:49:02 -05:00
jokob-sk 7bf6256788 better scaffolding, robustness 2026-08-31 15:20:54 +10:00
jokob-sk a014140e50 FE: dashed links in network view for non-ethernet connections #1763 2026-08-31 14:57:40 +10:00
jokob-sk 5e615ddff0 FE: dashed links in network view for non-ethernet connections #1763 2026-08-31 14:39:46 +10:00
jokob-sk a394d16fb6 better scaffolding, robustness 2026-08-31 14:01:35 +10:00
jokob-sk d155633164 better scaffolding, robustness 2026-08-31 13:45:30 +10:00
jokob-sk 81202afa31 PLG+DOCS: better scaffolding 2026-08-31 11:27:25 +10:00
jokob-sk e44b17faa7 PLG+DOCS: better scaffolding 2026-08-31 10:01:09 +10:00