towerops/.gitignore
Graham McIntire 91f23416e4 feat(insights): SectorOverload + CpeRealign recommendation rules
Two new multi-source rules using data we already collect, both wired
into the existing hourly RecommendationsRunWorker.

SectorOverload — fires when a Preseem-monitored AP has <25% free
airtime AND active subscribers. Critical urgency when free airtime
drops below 15%, OR when free airtime <25% AND QoE <50. Reuses the
airtime/subscriber/QoE data already pulled by PreseemSyncWorker so
no new collection is needed. UI: orange evidence card with free
airtime, subscriber count, QoE score, and AP model.

CpeRealign — fires when a wireless client has BOTH signal_strength
<=-78 dBm AND SNR <=18 dB seen in the last 2 hours. This is the
classic alignment / obstruction signature, distinct from the
existing single-metric wireless_signal_weak / wireless_snr_low
alerts produced by WirelessInsightWorker. One insight per (AP, CPE)
pair via a metadata.dedup_key. Critical when signal <=-88 OR SNR
<=10. UI: rose evidence card with signal, SNR, TX/RX rate, distance,
hostname.

Insights.insert_insight_if_new/1 dedup logic now prefers a
metadata.dedup_key over device_id when explicitly set, allowing
per-CPE insights without collapsing multiple CPEs on the same AP
into a single insight. Existing rules without dedup_key are
unaffected.

Insight.@valid_types extended with sector_overload and cpe_realign.

LLM enrichment automatically applies to both new types via the
existing Phase 1 worker — no extra wiring.

Also adds k8s/secrets.yaml to .gitignore so operators can drop a
local Secret manifest with real values, kubectl apply manually, and
never accidentally commit it. Documented in k8s/README.md.
2026-05-09 17:07:15 -05:00

111 lines
2.2 KiB
Text

# Development worktrees
.worktrees/
# Nix development environment state
.nix-mix/
.nix-hex/
.nix-postgres/
.nix-redis/
.nix-services-started
# The directory Mix will write compiled artifacts to.
/_build/
# If you run "mix test --cover", coverage assets end up here.
/cover/
# The directory Mix downloads your dependencies sources to.
/deps/
# Development log files
/log/dev.log*
# Vendored package dependencies and build artifacts
vendor/*/deps/
vendor/*/_build/
# Where 3rd-party dependencies like ExDoc output generated docs.
/doc/
# Ignore .fetch files in case you like to edit your project deps locally.
/.fetch
# If the VM crashes, it generates a dump, let's ignore it too.
erl_crash.dump
# Also ignore archive artifacts (built via "mix archive.build").
*.ez
# Temporary files, for example, from tests.
/tmp/
# Ignore package tarball (built via "mix hex.build").
towerops-*.tar
# Ignore assets that are produced by build tools.
/priv/static/assets/
# Ignore digested assets cache.
/priv/static/cache_manifest.json
# In case you use Node.js/npm, you want to ignore these.
npm-debug.log
/assets/node_modules/
# macOS system files
.DS_Store
# Dialyzer PLT files
/priv/plts/
# Environment variables (used by direnv and Kustomize secretGenerator)
.envrc
k8s/.envrc
/towerops-agent/
# TODO tracking (personal notes, not for version control)
TODO.md
# SNMP profiles export (temporary/local data)
profiles.json
# Elixir language server and tooling
.elixir-tools/
.expert/
# MIB files directories (keep directory structure in git, ignore contents)
/mibs/*
!/mibs/.gitkeep
# Application MIB files (now committed to git and included in Docker image)
# Only ignore the top-level librenms mibs directory (symlink)
# Compiled NIF binaries (platform-specific, should be built in Docker)
/priv/*.so
/priv/*.dylib
/c_src/*.o
/.expert/
# Gas Town (added by gt)
.runtime/
.claude/
.beads/
.agents/
.logs/
.direnv/
# Stride API credentials (contains secrets - never commit)
.stride_auth.md
# Local k8s secret manifest — copy from any *.example.yaml in k8s/, fill in
# real values, then `kubectl apply -f k8s/secrets.yaml`. Never commit.
k8s/secrets.yaml
# Build artifacts
/build/
# Generated by nix, machine-specific paths
.pre-commit-config.yaml