towerops/README.md

104 lines
2.7 KiB
Markdown

# 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
```bash
# Install dependencies
mix setup
# Start the server
mix phx.server
```
Visit [`localhost:4000`](http://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.
```bash
# 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](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
```bash
mix ecto.create # Create database
mix ecto.migrate # Run migrations
mix ecto.reset # Drop, create, and migrate
```
### Testing
```bash
mix test # Run all tests
mix test --trace # Run with detailed output
```
### Code Quality
```bash
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:
```bash
# 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:
```elixir
# View recent Oban jobs
Towerops.Repo.all(Oban.Job) |> Enum.take(5)
```
## Learn more
* Official website: https://www.phoenixframework.org/
* Guides: https://hexdocs.pm/phoenix/overview.html
* Docs: https://hexdocs.pm/phoenix
* Forum: https://elixirforum.com/c/phoenix-forum
* Source: https://github.com/phoenixframework/phoenix