No description
Find a file
Graham McIntire dab3e29025
fix(telemetry): add comprehensive error handling for Exq API calls
Wrapped all Exq.Api calls in individual try/rescue/catch blocks to handle
GenServer exits and exceptions when Exq hasn't connected to Redis yet.

The "GenServer Exq terminating" errors in logs are from Exq itself crashing
when it receives calls before it's ready, not from our code. These will still
appear in logs as Exq restarts, but our telemetry code won't crash.

Changes:
- Added try/rescue/catch around each queue_size call in the loop
- Added try/rescue/catch around processes/busy calls
- Kept outer try/rescue/catch as a final safety net
- rescue blocks must come before catch blocks in Elixir
2026-01-18 11:32:58 -06:00
.gitlab/agents Add aprs.me project to home-cluster-agent configuration 2026-01-14 13:31:23 -06:00
assets fix AutoDismissFlash hook order and implement raw ICMP ping 2026-01-18 10:56:04 -06:00
config feat: add Exq background job processor 2026-01-17 16:36:49 -06:00
docs Add comprehensive Pangolin security rules 2026-01-15 12:25:21 -06:00
k8s fix(k8s): use ClusterIP service and FQDN for Valkey connection 2026-01-18 11:23:51 -06:00
lib fix(telemetry): add comprehensive error handling for Exq API calls 2026-01-18 11:32:58 -06:00
priv add user profile settings with name, avatar, and timezone 2026-01-18 10:32:23 -06:00
rel/overlays/bin add release 2026-01-02 14:36:38 -06:00
scripts Improve monitor script to eliminate screen flicker 2026-01-15 13:04:41 -06:00
test fix user deletion bug and implement timezone support 2026-01-18 10:51:11 -06:00
towerops Add towerops/gitlab-agent-helm-release.yaml via glab file sync 2026-01-02 14:22:22 -06:00
.credo.exs credo tweak 2026-01-17 15:32:33 -06:00
.dockerignore add release 2026-01-02 14:36:38 -06:00
.formatter.exs format 2025-12-21 11:31:08 -06:00
.gitignore feat: update UI to Tailwind Plus design system and fix auth redirects 2026-01-18 09:56:49 -06:00
.gitlab-ci.yml Set DEPLOY_TIMESTAMP from GitLab CI instead of pod metadata 2026-01-17 11:17:07 -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 Add comprehensive Dialyzer type specifications 2026-01-17 10:52:02 -06:00
AGENT_IMPLEMENTATION.md set up ses 2026-01-09 16:52:11 -06:00
AGENT_PROTOCOL.md agent improvements and agent config 2026-01-16 17:26:51 -06:00
AGENTS.md 1. User Authentication 2025-12-21 13:31:59 -06:00
AWS_SES_SETUP.md set up ses 2026-01-09 16:52:11 -06:00
CLAUDE.md updates 2026-01-17 17:49:53 -06:00
DEPLOYMENT.md more features 2026-01-02 14:06:44 -06:00
Dockerfile Silence debconf warnings in Docker builds 2026-01-03 16:00:54 -06:00
IMPLEMENTATION_PLAN.md more features 2026-01-02 14:06:44 -06:00
mix.exs feat: add Horde for cluster-aware distributed supervision 2026-01-18 10:14:50 -06:00
mix.lock fix user deletion bug and implement timezone support 2026-01-18 10:51:11 -06:00
MOBILE_API.md add api for mobile login 2026-01-15 15:36:14 -06:00
PROFILES.md refactor: use API token auth for profile imports instead of session cookies 2026-01-18 09:30:21 -06:00
README.md timescaledb 2025-12-21 17:17:26 -06:00
tail_logs.sh add logs helper script 2026-01-11 15:45:02 -06:00
TIMESCALEDB.md more features 2026-01-02 14:06:44 -06:00
WEBSOCKET_MIGRATION.md agent improvements and agent config 2026-01-16 17:26:51 -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

Learn more