Files
forefront-wireless-portal/README.md
T

313 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Forefront Wireless Operations Portal
> **Status:** Scoped & Documented — awaiting build
> **Started:** July 25, 2026
> **Domain:** my.forefrontwireless.com
> **Access:** Dual — staff (role-based) and customer self-service
Single pane of glass for Forefront Wireless operations and customer self-service. Staff get a real-time network dashboard aggregating MikroTik routers, Ubiquiti backhauls & CPEs, switches, PDUs, UPSs, and environmental monitors. Customers get account management and a service upgrade marketplace. All driven by four backend data sources — Splynx, UISP, MikroTik RouterOS, and Zabbix/SNMP.
---
## Access Model — Role-Based (Staff) + Customer
```
my.forefrontwireless.com
├── /login
├── /staff/* ← role-gated
└── /customer/* ← customer-gated
```
### Staff Roles
| Role | Permissions | Who |
|------|------------|-----|
| **Admin** | Full CRUD — devices, customers, SNMP templates, billing overrides, user management | Germaine |
| **Tech** | Read-write limited — troubleshoot customer issues, view all equipment, run diagnostics, reset CPEs, but no billing changes or user management | Contractors, support staff |
| **View Only** | Read-only across all dashboards — no config changes, no customer data mutation | Auditors, occasional helpers |
**Implementation:** Role stored in portal's own user table (not Splynx roles — Splynx is source-of-truth for billing, portal has its own auth). Contractors get Tech role by default.
### Customer Access
- Login (email + password, or magic link)
- Tied to their Splynx customer record
- Can only see their own account, services, and usage
- No network-level visibility
---
## Staff Dashboard — Real-Time Network Ops
The staff landing page is a grid of live-status cards grouped by device category:
### Section 1: MikroTik Routers
**Source:** MikroTik REST API (direct)
**Devices:** 5 × CCR2004
| Widget | Data |
|--------|------|
| Router status | Online/offline, uptime |
| CPU / Memory | Live gauges |
| Aggregate throughput | Total in/out across all interfaces |
| Per-router drill-down | Interface stats, queues, DHCP leases, ARP |
### Section 2: Ubiquiti Backhauls (Point-to-Point Links)
**Source:** UISP API
| Widget | Data |
|--------|------|
| Link status | Up/down, signal strength (dBm) |
| Capacity | Current throughput vs max |
| List view | All P2P links with AirMax stats |
### Section 3: Customer CPEs (Ubiquiti)
**Source:** UISP API
| Widget | Data |
|--------|------|
| CPE status | Online/offline count, last seen |
| Signal health | Signal/chain stats from subscriber devices |
| Search | By customer name → linked CPE |
| Actions (Tech) | Reboot CPE, re-associate |
### Section 4: MikroTik Switches
**Source:** MikroTik REST API (or SNMP via Zabbix proxy)
| Widget | Data |
|--------|------|
| Switch status | Online/offline per switch |
| Port utilization | % used, PoE budget |
| VLAN membership | Trunk/access port map |
### Section 5: PDUs & UPSs (Algcom)
**Source:** SNMP (via Zabbix or direct SNMP poll)
| Widget | Data |
|--------|------|
| PDU outlet status | On/off per outlet, current draw |
| UPS status | Battery charge %, load %, runtime remaining |
| Alerts | On battery, low battery, overload |
### Section 6: Environmental (TPDIN Web Monitor 3)
**Source:** SNMP (via Zabbix or direct) **+** web URL scrape
| Widget | Data |
|--------|------|
| Temperature | Current, min/max 24h |
| Humidity | Current % |
| Contact sensors | Door open/closed, water detected |
| Web UI link | Direct link to TPDIN interface |
---
## Device Inventory & SNMP Template Auto-Generation
Staff (Admin/Tech) can add new devices via the portal UI:
### Add Device Form
| Field | Example | Purpose |
|-------|---------|---------|
| **Make** | Algcom, MikroTik, TPDIN, Ubiquiti | Manufacturer |
| **Model** | ALG-PDU-8, CCR2004, W-M3 | Model identifier |
| **Category** | Router / Switch / PDU / UPS / Environmental / Backhaul / CPE | Dashboard section |
| **IP Address** | 10.x.x.x | SNMP target |
| **SNMP Community** | public / custom | For SNMP polling |
| **Web URL** | http://10.x.x.x | Direct link from dashboard |
| **SNMP Template** | algcom-pdu, tpdin-wm3, mikrotik-switch | Dropdown — existing templates |
### Auto-Template Engine
When a new make/model is added that has no existing template, the backend:
1. **Probes SNMP** — walks `1.3.6.1.2.1` (standard MIB) to discover available OIDs
2. **Identifies device** — matches sysDescr / sysObjectID against known patterns
3. **Suggests template** — maps discovered OIDs to widget types (gauge, status, counter, text)
4. **Staff approves** — one-click to save as reusable template for that make/model
Once a template exists for a make+model, any new device added with that combination inherits it automatically.
### Template Schema (per make/model)
```json
{
"make": "Algcom",
"model": "ALG-PDU-8",
"category": "pdu",
"poll_interval_seconds": 60,
"widgets": [
{
"name": "Outlet 1 Current",
"oid": "1.3.6.1.4.1.x.x.x.1",
"type": "gauge",
"unit": "A",
"warning_threshold": 8,
"critical_threshold": 10
}
]
}
```
---
## Architecture — 4-Source Aggregation
```
┌──────────────────────────────────────────────────────────────────────────┐
│ my.forefrontwireless.com │
│ ┌─────────────────────────┐ │
│ │ React SPA │ │
│ │ /staff/* │ /customer/* │ │
│ └───────────┬─────────────┘ │
└─────────────────────────────────┼────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────┐
│ FastAPI Aggregation Backend │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌────────────────┐ │
│ │ Splynx │ │ UISP │ │MikroTik │ │ Zabbix │ │ Direct SNMP │ │
│ │ Adapter │ │ Adapter │ │ Adapter │ │ Adapter │ │ Poller │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬─────┘ └───────┬────────┘ │
│ │ │ │ │ │ │
│ ┌────┴────┐ ┌────┴────┐ ┌────┴────┐ ┌────┴─────┐ ┌──────┴────────┐ │
│ │ Auth │ │ Role │ │ Device │ │ SNMP │ │ Template │ │
│ │ Service │ │ Manager │ │ Registry│ │ Template │ │ Engine │ │
│ └─────────┘ └─────────┘ └─────────┘ └──────────┘ └───────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────────┐ ┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ Splynx v4.2 │ │ UISP │ │ MikroTik │ │ Zabbix │
│ Self-hosted │ │ (UNMS) │ │ RouterOS │ │ (on-prem │
│ │ │ app2 │ │ REST API │ │ or cloud) │
└──────────────┘ └──────────┘ └──────────────┘ └──────────────┘
billing/CRM network router stats SNMP infra
```
---
## Customer Portal Features
### Dashboard
- Active services (what plan am I on?)
- Current bill & due date
- Data usage (from MikroTik queue stats)
- Recent payments
### Account Management
- Update contact info (email, phone, address)
- Update payment method
- View invoice history
### Marketplace — Service Upgrades
- Browse available plans (from Splynx tariffs)
- Compare current plan vs upgrades
- Request upgrade (generates Splynx ticket or service change)
- See prorated cost before confirming
### Support
- Submit ticket (→ Splynx ticket system)
- View ticket status
- Outage notifications (opt-in SMS/email)
---
## Hardware Inventory — Known Devices
### Routers (MikroTik CCR2004 Series)
| Model | Ports | SFP+ | Cooling | Notes |
|-------|-------|:---:|---------|-------|
| [CCR2004-1G-12S+2XS](https://mikrotik.com/product/ccr2004_1g_12s_2xs) | 1× GbE, 12× SFP+, 2× SFP28 (25G) | ✓ 12+2 | Active | High-density fiber router |
| [CCR2004-16G-2S+PC](https://mikrotik.com/product/ccr2004_16g_2s_pc) | 16× GbE, 2× SFP+ | ✓ 2 | Passive | Silent, 300% faster than CCR1009 |
| [CCR2004-16G-2S+](https://mikrotik.com/product/ccr2004_16g_2splus) | 16× GbE, 2× SFP+ | ✓ 2 | Active | Best single-core perf/watt |
**Data source:** MikroTik REST API — status, CPU, memory, throughput, interface stats, DHCP, queues
### Switches (MikroTik CRS Series)
| Model | Ports | SFP+ | PoE | Form Factor |
|-------|-------|:---:|:---:|-------------|
| [CRS317-1G-16S+RM](https://mikrotik.com/product/crs317_1g_16s_rm) | 1× GbE, 16× SFP+ | ✓ 16 | — | 1U rack, dual PSU |
| [CRS309-1G-8S+IN](https://mikrotik.com/product/crs309_1g_8s_in) | 1× GbE, 8× SFP+ | ✓ 8 | — | Desktop |
| [CRS310-8G+2S+IN](https://mikrotik.com/product/crs310_8g_2s_in) | 8× 2.5GbE, 2× SFP+ | ✓ 2 | — | Desktop, ROS v7 |
| [CRS326-24G-2S+RM](https://mikrotik.com/product/CRS326-24G-2SplusRM) | 24× GbE, 2× SFP+ | ✓ 2 | ✓ Passive | 1U rack |
**Data source:** MikroTik REST API or SNMP — port map, PoE budget, VLAN memberships
### Backhauls (Ubiquiti Point-to-Point)
| Type | Models | Data Source |
|------|--------|-------------|
| AirMax / AirFiber P2P links | Various | UISP API |
**Data source:** UISP API — link status, signal strength (dBm), capacity %, firmware
### Customer CPEs (Ubiquiti Subscriber Devices)
| Type | Data Source |
|------|-------------|
| Ubiquiti CPE stations | UISP API |
**Data source:** UISP API — online/offline, signal health, last seen, reboot action (Tech role)
### DC Power Systems (PacketFlux)
| Device | Description | SNMP | Notes |
|--------|-------------|:---:|-------|
| [PacketFlux RackInjector](https://store.packetflux.com/packetflux-rackinjector/) | Modular DC power injector, hot-swappable, bench-repairable | ✓ via SiteMonitor | Individual port fuses, per-component replacement |
| [RackInjector Hardware Docs](http://packetflux.info/smri/rihw/ri-hardware/) | Installation & configuration manual | — | Internal component layout, power distribution |
**Data source:** SNMP via PacketFlux SiteMonitor system
### DC UPS & PDUs (Algcom)
| SKU | Model | Spec | SNMP | Notes |
|-----|-------|------|:---:|-------|
| [FN-4800-10-SNMP](https://www.ispsupplies.com/ALGcom-FN-4800-10-SNMP) | POWER ADVANCED 48-540-M | 540W / 10A, 48V DC UPS | ✓ | LiFePO4 compatible |
| [FN-4800-25-SNMP](https://www.ispsupplies.com/ALGcom-FN-4800-25-SNMP) | POWER ADVANCED 48-1350-M | 1350W / 25A, 48V DC UPS | ✓ | Larger capacity |
| [37030030001](https://www.ispsupplies.com/ALGcom-37030030001) | DC PDU Monitored 1U | 8× 10A outputs, 80A total, 1060 VDC | ✓ SNMPv2 | Per-outlet V/A/W, remote on/off, scheduling, undervoltage shutdown, Zabbix/Grafana/LibreNMS compatible |
**Data source:** SNMP — per-output voltage, current, power; battery charge/load/runtime for UPS models
### Environmental Monitors (TPDIN)
| Device | Data Source | Widgets |
|--------|-------------|---------|
| TPDIN Web Monitor 3 | SNMP + web URL scrape | Temperature, humidity, contact sensors (door/water) |
**Data source:** SNMP (temp/humidity/contacts) + HTTP scrape of web interface for backup data
---
## Build Phases
| Phase | What | Complexity |
|:---:|------|:---:|
| **1** | Splynx adapter + auth system + roles + customer dashboard | Medium |
| **2** | MikroTik adapter + staff router/switch dashboard | Medium |
| **3** | UISP adapter + backhaul/CPE dashboard | Medium |
| **4** | SNMP poller + template engine + PDU/UPS/environmental dashboard | High |
| **5** | Customer marketplace (plan comparison + upgrade flow) | Medium |
| **6** | Device registry UI + auto-template generation | High |
---
## Integration Dependencies
| Source | Adapter Type | Auth | Status |
|--------|-------------|------|:---:|
| Splynx | REST (HMAC-SHA256 signature) | Key + secret | ✓ Proven |
| UISP | REST (API token) | Settings → Users → API Access | Token needed |
| MikroTik | REST (basic auth) | Read-only API user per router | Users needed |
| Zabbix | REST (API token) | Zabbix API user | TBD — cloud migration |
| SNMP | Direct UDP poll | Community string per device | Template needed |
---
## Related
- **Splynx v2 docs:** https://api-doc.splynx.com/
- **UISP docs:** https://help.ui.com/hc/en-us/categories/360001181833-UISP
- **MikroTik REST API:** https://help.mikrotik.com/docs/display/ROS/REST+API
- **Zabbix API:** https://www.zabbix.com/documentation/current/en/manual/api
- **Git:** https://git.itpropartner.com/ippadmin/forefront-wireless-portal