- Sites schema with hierarchical parent-child relationships
- CRUD operations for sites
- Sites context with helper functions
- LiveView pages:
- /orgs/:slug/sites - List all sites
- /orgs/:slug/sites/new - Create new site
- /orgs/:slug/sites/:id - View site details
- /orgs/:slug/sites/:id/edit - Edit site
- Support for site locations and descriptions
- Site tree builder for hierarchy visualization
2. Equipment Management
- Equipment schema with monitoring fields
- IP address validation (IPv4 & IPv6)
- Equipment status tracking (up/down/unknown)
- Customizable check intervals per equipment
- Equipment context with CRUD operations
- LiveView pages:
- /orgs/:slug/equipment - List all equipment
- /orgs/:slug/equipment/new - Add equipment
- /orgs/:slug/equipment/:id - View equipment details
- /orgs/:slug/equipment/:id/edit - Edit equipment
- Equipment can be added from site pages
- Status badges and last checked timestamps
3. Database Schema
- sites table with self-referencing parent_site_id
- equipment table with status tracking
- All migrations run successfully
- Proper indexes on foreign keys and status
4. Features Implemented
- ✅ IP address validation using :inet.parse_address
- ✅ Site hierarchy with parent-child relationships
- ✅ Equipment linked to sites
- ✅ Monitoring enabled/disabled per equipment
- ✅ Customizable check intervals (30s - 3600s)
- ✅ Status tracking (up/down/unknown)
- ✅ Timestamps for last check and last status change
- ✅ Organization-scoped data (users only see their org's data)
23 lines
823 B
Elixir
23 lines
823 B
Elixir
defmodule Towerops.Repo.Migrations.CreateEquipment do
|
|
use Ecto.Migration
|
|
|
|
def change do
|
|
create table(:equipment, primary_key: false) do
|
|
add :id, :binary_id, primary_key: true
|
|
add :site_id, references(:sites, type: :binary_id, on_delete: :delete_all), null: false
|
|
add :name, :string, null: false
|
|
add :ip_address, :string, null: false
|
|
add :description, :text
|
|
add :status, :string, null: false, default: "unknown"
|
|
add :last_checked_at, :utc_datetime
|
|
add :last_status_change_at, :utc_datetime
|
|
add :monitoring_enabled, :boolean, default: true, null: false
|
|
add :check_interval_seconds, :integer, default: 300, null: false
|
|
|
|
timestamps(type: :utc_datetime)
|
|
end
|
|
|
|
create index(:equipment, [:site_id])
|
|
create index(:equipment, [:status])
|
|
end
|
|
end
|