No description
Find a file
2026-02-01 15:02:35 -06:00
.gitlab/agents Add aprs.me project to home-cluster-agent configuration 2026-01-14 13:31:23 -06:00
assets live device polling 2026-02-01 13:19:32 -06:00
c_src fix: correct library linking order in Makefile 2026-01-30 13:24:25 -06:00
config Add rate limiting to auth and API endpoints using Hammer 2026-02-01 14:59:54 -06:00
docs feat: implement sudo mode MFA-only verification controller 2026-02-01 14:34:17 -06:00
k8s fix prod crash with yaml parsing 2026-01-31 08:25:07 -06:00
lib Merge branch 'gmcintire/user-first-last-name' into 'main' 2026-02-01 15:00:24 -06:00
mibs handle mib uploading 2026-01-18 16:29:24 -06:00
priv Merge branch 'gmcintire/user-first-last-name' into 'main' 2026-02-01 15:00:24 -06:00
rel/overlays/bin add release 2026-01-02 14:36:38 -06:00
scripts complete overhaul of snmp engine 2026-01-30 10:41:07 -06:00
test user settings test update 2026-02-01 15:02:35 -06:00
towerops Add towerops/gitlab-agent-helm-release.yaml via glab file sync 2026-01-02 14:22:22 -06:00
vendor add upsert support for geoip imports to prevent duplicates 2026-01-28 13:37:02 -06:00
.credo.exs credo improvements 2026-01-23 13:40:49 -06:00
.dialyzer_ignore.exs fix impersonate mfa and some dialyzer issues 2026-01-30 17:04:39 -06:00
.dockerignore nif ci fix complie in ci 2026-01-30 12:47:18 -06:00
.formatter.exs format 2025-12-21 11:31:08 -06:00
.gitignore fix TOTP enrollment with recovery codes 2026-01-31 14:54:44 -06:00
.gitlab-ci.yml deploy tweak 2026-01-27 11:49:30 -06:00
.sobelow-skips Add firmware version tracking system 2026-02-01 10:46:27 -06:00
.sourceignore Add .sourceignore to exclude non-k8s files from Flux 2026-01-02 14:43:57 -06:00
.test-watch.exs add test watch 2026-01-03 12:35:26 -06:00
.tool-versions test cleanup 2026-01-19 13:29:38 -06:00
AGENTS.md 1. User Authentication 2025-12-21 13:31:59 -06:00
CLAUDE.md Add rate limiting to auth and API endpoints using Hammer 2026-02-01 14:59:54 -06:00
Dockerfile fix: compile C NIF explicitly in Docker build 2026-01-30 13:04:06 -06:00
Makefile complete overhaul of snmp engine 2026-01-30 10:41:07 -06:00
mix.exs Add rate limiting to auth and API endpoints using Hammer 2026-02-01 14:59:54 -06:00
mix.lock Add rate limiting to auth and API endpoints using Hammer 2026-02-01 14:59:54 -06:00
README.md Add manual firmware check trigger instructions to README 2026-02-01 10:50:21 -06:00
REFACTOR.md refactor 2026-01-31 09:35:07 -06:00
tail_logs.sh add logs helper script 2026-01-11 15:45:02 -06:00

TowerOps

Network monitoring and alerting platform built with Phoenix LiveView.

Features

  • Multi-tenant architecture - Organizations with role-based permissions
  • Site hierarchy - Organize equipment across multiple sites
  • Automated monitoring - Real-time ping monitoring with configurable intervals
  • Time-series data - Efficient storage with TimescaleDB (optional)
  • Real-time updates - LiveView dashboard with PubSub
  • Equipment tracking - Monitor network devices by IP address

Quick Start

Prerequisites

  • Elixir 1.14+
  • PostgreSQL 14+
  • (Optional) TimescaleDB for production-grade time-series performance

Setup

# Install dependencies
mix setup

# Start the server
mix phx.server

Visit localhost:4000 from your browser.

TimescaleDB (Production Only)

Development: Uses standard PostgreSQL (no TimescaleDB required).

Production: TimescaleDB is automatically enabled for optimal performance with time-series data.

# Production deployment - install TimescaleDB first
brew tap timescale/tap && brew install timescaledb  # macOS
# Then run migrations with MIX_ENV=prod
MIX_ENV=prod mix ecto.migrate

See TIMESCALEDB.md for detailed installation and configuration.

How it works: Migrations detect the environment (MIX_ENV) and only enable TimescaleDB features (hypertables, compression, retention policies, continuous aggregates) in production.

Development

Database

mix ecto.create       # Create database
mix ecto.migrate      # Run migrations
mix ecto.reset        # Drop, create, and migrate

Testing

mix test              # Run all tests
mix test --trace      # Run with detailed output

Code Quality

mix format            # Format code with Styler
mix compile --warnings-as-errors

Firmware Version Tracking

The system automatically checks for latest firmware versions daily (2 AM dev, 4 AM prod). To manually trigger a firmware check:

# Start IEx console
iex -S mix phx.server

# Manually trigger firmware version fetch
Oban.insert(Towerops.Workers.FirmwareVersionFetcherWorker.new(%{}))

The worker will:

  1. Fetch the latest MikroTik RouterOS version from RSS feed
  2. Store version information in the database
  3. Enable firmware update indicators on device detail pages

Check the logs for fetch results:

# View recent Oban jobs
Towerops.Repo.all(Oban.Job) |> Enum.take(5)

Learn more