No description
Find a file
Graham McIntire 9eca2e7069
Fix database schema mismatches preventing SNMP and monitoring data collection
This fixes critical issues where SNMP sensor readings, interface stats, and
monitoring checks were not being saved to the database due to schema mismatches.

Database schema fixes:
- Recreate snmp_sensor_readings table with binary_id primary key
- Recreate snmp_interface_stats table with binary_id primary key
- Recreate monitoring_checks table with binary_id primary key

The original migrations used default integer primary keys, but the schemas
expected binary_id (UUID). This caused Ecto to generate UUID strings that
Postgrex tried to encode as binaries, resulting in silent insert failures.

SNMP interface stats fixes:
- Fix field name mismatch in get_interface_stats (if_in_octets vs in_octets)
- Remove unnecessary tuple handling code (Client already unwraps SNMPKit tuples)
- Clean up decode_snmp_value function and improve error messages

Monitoring check fixes:
- Fix response_time type from float to integer in Poller.check_device
- Add error logging to catch and report check creation failures

These changes enable:
- SNMP sensor readings to be collected and stored (disk usage, memory, CPU, etc.)
- Interface statistics to be collected (Counter64 octets, errors, discards)
- Equipment availability metrics to update on the dashboard
2026-01-05 08:26:16 -06:00
.gitlab/agents Add GitLab CI/CD pipeline for automated Docker build and Kubernetes deployment 2026-01-02 14:53:11 -06:00
assets init 2025-12-21 11:10:43 -06:00
config Set default email sender to hi@towerops.net 2026-01-04 11:16:12 -06:00
k8s Increase pod memory to 2GB 2026-01-04 12:47:57 -06:00
lib Fix database schema mismatches preventing SNMP and monitoring data collection 2026-01-05 08:26:16 -06:00
priv Fix database schema mismatches preventing SNMP and monitoring data collection 2026-01-05 08:26:16 -06:00
rel/overlays/bin add release 2026-01-02 14:36:38 -06:00
test Redesign equipment view with compact LibreNMS-style dashboard 2026-01-03 15:11:47 -06:00
towerops Add towerops/gitlab-agent-helm-release.yaml via glab file sync 2026-01-02 14:22:22 -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 add sendgrid 2026-01-03 15:26:48 -06:00
.gitlab-ci.yml Run migrations on app start instead of separate job 2026-01-03 16:09:31 -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 release 2026-01-02 14:36:38 -06:00
AGENTS.md 1. User Authentication 2025-12-21 13:31:59 -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
gitlab-agent-helm-release.yaml Add gitlab-agent-helm-release.yaml via glab file sync 2026-01-02 14:19:12 -06:00
gitlab-helm-repository.yaml Add gitlab-helm-repository.yaml via glab file sync 2026-01-02 14:19:11 -06:00
IMPLEMENTATION_PLAN.md more features 2026-01-02 14:06:44 -06:00
mix.exs add more things to dashboard 2026-01-04 12:13:20 -06:00
mix.lock add more things to dashboard 2026-01-04 12:13:20 -06:00
README.md timescaledb 2025-12-21 17:17:26 -06:00
TIMESCALEDB.md more features 2026-01-02 14:06:44 -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