# nitin-o/pi-admin-dashboard architecture

> Architecture diagram of the GitHub repository nitin-o/pi-admin-dashboard, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nitin-o/pi-admin-dashboard
- Repository: https://github.com/nitin-o/pi-admin-dashboard

## Overview

This is a browser-based log viewer backed by an Express API. An admin signs in, then the dashboard retrieves searchable, paginated logs and operational views; authenticated clients can also submit logs. The API persists sanitized entries as daily JSONL files and publishes new entries for real-time delivery. The graph includes documented-by-code auth, network, statistics, system, and WebSocket branches, though some controller and service internals were not excerpted; their connections are shown only where the source index or server wiring supports them.

Main entry points: [`src/server.js`](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/server.js) (HTTP server), [`src/services/log.service.js`](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/log.service.js) (Log writer), [`client/src/js/app.js`](https://github.com/nitin-o/pi-admin-dashboard/blob/main/client/src/js/app.js) (App bootstrap), [`src/routes/auth.routes.js`](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/routes/auth.routes.js) (Auth routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Browser client"]
  node_web["Log dashboard<br/>[dashboard.js]"]
  node_clientauth["Login UI<br/>[auth.js]"]
  node_clientapi["API client<br/>[api.js]"]
  node_app["App bootstrap<br/>[app.js]"]
end

subgraph group_api["API and access"]
  node_server["HTTP server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[auth.routes.js]"]
  node_authcontroller["Admin authentication<br/>[auth.controller.js]"]
  node_authguard["JWT guard<br/>[auth.middleware.js]"]
  node_ingestroutes["Ingest routes<br/>[ingest.routes.js]"]
  node_logroutes["Log routes<br/>[log.routes.js]"]
  node_networkroutes["Network routes<br/>[network.routes.js]"]
  node_requestlog["Request logging<br/>[request-logger.js]"]
  node_errors["Error handling<br/>[error-handler.js]"]
  node_ratelimit["Login rate limit"]
end

subgraph group_logs["Log processing"]
  node_ingestcontroller["Log ingestion"]
  node_logcontroller["Log API<br/>[log.controller.js]"]
  node_writer["Log writer<br/>[log.service.js]"]
  node_logstore[("Daily log files<br/>[log.service.js]")]
  node_query["Log query"]
  node_realtime["Realtime publisher"]
  node_websocket["WebSocket delivery"]
end

subgraph group_ops["Operational views"]
  node_statistics["Statistics"]
  node_statisticscontroller["Statistics API"]
  node_networkcontroller["Network API"]
  node_network["Network status<br/>[network.service.js]"]
  node_systemcontroller["System API"]
  node_system["System status<br/>[system.service.js]"]
end

node_admin(("Admin"))

node_admin -->|"uses"| node_app
node_app -->|"checks session"| node_clientapi
node_app -->|"renders login"| node_clientauth
node_app -->|"starts dashboard"| node_web
node_web -->|"requests data"| node_clientapi
node_clientapi -.->|"calls API"| node_server
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_logroutes
node_server -->|"mounts"| node_ingestroutes
node_server -->|"mounts"| node_networkroutes
node_server -->|"mounts"| node_statisticscontroller
node_server -->|"mounts"| node_systemcontroller
node_server -->|"installs"| node_requestlog
node_server -->|"installs"| node_errors
node_server -->|"attaches"| node_websocket
node_authroutes -->|"routes to"| node_authcontroller
node_authroutes -->|"protects"| node_authguard
node_authroutes -->|"limits login"| node_ratelimit
node_authcontroller -->|"records auth"| node_writer
node_ingestroutes -->|"protects"| node_authguard
node_ingestroutes -->|"routes to"| node_ingestcontroller
node_ingestcontroller -->|"writes entry"| node_writer
node_logroutes -->|"routes to"| node_logcontroller
node_logcontroller -->|"queries logs"| node_query
node_logcontroller -->|"records failures"| node_writer
node_writer -->|"appends entries"| node_logstore
node_query -->|"reads entries"| node_logstore
node_writer -->|"publishes entry"| node_realtime
node_websocket -.->|"subscribes"| node_realtime
node_networkroutes -->|"routes to"| node_networkcontroller
node_networkroutes -->|"protects"| node_authguard
node_networkcontroller -->|"delegates to"| node_network
node_statisticscontroller -.->|"delegates to"| node_statistics
node_systemcontroller -.->|"delegates to"| node_system

click node_web "https://github.com/nitin-o/pi-admin-dashboard/blob/main/client/src/js/dashboard.js"
click node_clientauth "https://github.com/nitin-o/pi-admin-dashboard/blob/main/client/src/js/auth.js"
click node_clientapi "https://github.com/nitin-o/pi-admin-dashboard/blob/main/client/src/js/api.js"
click node_app "https://github.com/nitin-o/pi-admin-dashboard/blob/main/client/src/js/app.js"
click node_server "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/server.js"
click node_authroutes "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/routes/auth.routes.js"
click node_authcontroller "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/auth.controller.js"
click node_authguard "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/middleware/auth.middleware.js"
click node_ingestroutes "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/routes/ingest.routes.js"
click node_ingestcontroller "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/ingest.controller.js"
click node_logroutes "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/routes/log.routes.js"
click node_logcontroller "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/log.controller.js"
click node_writer "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/log.service.js"
click node_logstore "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/log.service.js"
click node_query "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/log-query.service.js"
click node_statistics "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/log-statistics.service.js"
click node_statisticscontroller "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/statistics.controller.js"
click node_networkroutes "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/routes/network.routes.js"
click node_networkcontroller "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/network.controller.js"
click node_network "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/network.service.js"
click node_systemcontroller "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/system.controller.js"
click node_system "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/system.service.js"
click node_realtime "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/realtime.service.js"
click node_websocket "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/websocket.service.js"
click node_requestlog "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/middleware/request-logger.js"
click node_errors "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/middleware/error-handler.js"
click node_ratelimit "https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/middleware/rate-limit.middleware.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web,node_clientauth,node_clientapi,node_app toneBlue
class node_server,node_authroutes,node_authcontroller,node_authguard,node_ingestroutes,node_logroutes,node_networkroutes,node_requestlog,node_errors,node_ratelimit toneAmber
class node_ingestcontroller,node_logcontroller,node_writer,node_logstore,node_query,node_realtime,node_websocket toneMint
class node_statistics,node_statisticscontroller,node_networkcontroller,node_network,node_systemcontroller,node_system toneRose
class node_admin toneIndigo
```

## Components

### Browser client

- [Log dashboard](https://github.com/nitin-o/pi-admin-dashboard/blob/main/client/src/js/dashboard.js): `client/src/js/dashboard.js`
- [Login UI](https://github.com/nitin-o/pi-admin-dashboard/blob/main/client/src/js/auth.js): `client/src/js/auth.js`
- [API client](https://github.com/nitin-o/pi-admin-dashboard/blob/main/client/src/js/api.js): `client/src/js/api.js`
- [App bootstrap](https://github.com/nitin-o/pi-admin-dashboard/blob/main/client/src/js/app.js): `client/src/js/app.js`

### API and access

- [HTTP server](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/server.js): `src/server.js`
- [Auth routes](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/routes/auth.routes.js): `src/routes/auth.routes.js`
- [Admin authentication](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/auth.controller.js): `src/controllers/auth.controller.js`
- [JWT guard](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/middleware/auth.middleware.js): `src/middleware/auth.middleware.js`
- [Ingest routes](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/routes/ingest.routes.js): `src/routes/ingest.routes.js`
- [Log routes](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/routes/log.routes.js): `src/routes/log.routes.js`
- [Network routes](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/routes/network.routes.js): `src/routes/network.routes.js`
- [Request logging](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/middleware/request-logger.js): `src/middleware/request-logger.js`
- [Error handling](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/middleware/error-handler.js): `src/middleware/error-handler.js`
- [Login rate limit](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/middleware/rate-limit.middleware.js): `src/middleware/rate-limit.middleware.js`

### Log processing

- [Log ingestion](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/ingest.controller.js): `src/controllers/ingest.controller.js`
- [Log API](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/log.controller.js): `src/controllers/log.controller.js`
- [Log writer](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/log.service.js): `src/services/log.service.js`
- [Daily log files](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/log.service.js): `src/services/log.service.js`
- [Log query](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/log-query.service.js): `src/services/log-query.service.js`
- [Realtime publisher](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/realtime.service.js): `src/services/realtime.service.js`
- [WebSocket delivery](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/websocket.service.js): `src/services/websocket.service.js`

### Operational views

- [Statistics](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/log-statistics.service.js): `src/services/log-statistics.service.js`
- [Statistics API](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/statistics.controller.js): `src/controllers/statistics.controller.js`
- [Network API](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/network.controller.js): `src/controllers/network.controller.js`
- [Network status](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/network.service.js): `src/services/network.service.js`
- [System API](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/controllers/system.controller.js): `src/controllers/system.controller.js`
- [System status](https://github.com/nitin-o/pi-admin-dashboard/blob/main/src/services/system.service.js): `src/services/system.service.js`

### Other components

- **Admin**

## Connections

- Admin → App bootstrap: uses (evidence: `client/src/js/app.js`)
- App bootstrap → API client: checks session (evidence: `client/src/js/app.js`)
- App bootstrap → Login UI: renders login (evidence: `client/src/js/app.js`)
- App bootstrap → Log dashboard: starts dashboard (evidence: `client/src/js/app.js`)
- Log dashboard → API client: requests data (evidence: `client/src/js/dashboard.js`)
- API client → HTTP server: calls API
- HTTP server → Auth routes: mounts (evidence: `src/server.js`)
- HTTP server → Log routes: mounts (evidence: `src/server.js`)
- HTTP server → Ingest routes: mounts (evidence: `src/server.js`)
- HTTP server → Network routes: mounts (evidence: `src/server.js`)
- HTTP server → Statistics API: mounts (evidence: `src/server.js`)
- HTTP server → System API: mounts (evidence: `src/server.js`)
- HTTP server → Request logging: installs (evidence: `src/server.js`)
- HTTP server → Error handling: installs (evidence: `src/server.js`)
- HTTP server → WebSocket delivery: attaches (evidence: `src/server.js`)
- Auth routes → Admin authentication: routes to (evidence: `src/routes/auth.routes.js`)
- Auth routes → JWT guard: protects (evidence: `src/routes/auth.routes.js`)
- Auth routes → Login rate limit: limits login (evidence: `src/routes/auth.routes.js`)
- Admin authentication → Log writer: records auth (evidence: `src/controllers/auth.controller.js`)
- Ingest routes → JWT guard: protects (evidence: `src/routes/ingest.routes.js`)
- Ingest routes → Log ingestion: routes to (evidence: `src/routes/ingest.routes.js`)
- Log ingestion → Log writer: writes entry (evidence: `src/controllers/ingest.controller.js`)
- Log routes → Log API: routes to (evidence: `src/routes/log.routes.js`)
- Log API → Log query: queries logs (evidence: `src/controllers/log.controller.js`)
- Log API → Log writer: records failures (evidence: `src/controllers/log.controller.js`)
- Log writer → Daily log files: appends entries (evidence: `src/services/log.service.js`)
- Log query → Daily log files: reads entries (evidence: `src/services/log-query.service.js`)
- Log writer → Realtime publisher: publishes entry (evidence: `src/services/log.service.js`)
- WebSocket delivery → Realtime publisher: subscribes (evidence: `src/services/websocket.service.js`)
- Network routes → Network API: routes to (evidence: `src/routes/network.routes.js`)
- Network routes → JWT guard: protects (evidence: `src/routes/network.routes.js`)
- Network API → Network status: delegates to (evidence: `src/controllers/network.controller.js`)
- Statistics API → Statistics: delegates to (evidence: `src/controllers/statistics.controller.js`)
- System API → System status: delegates to (evidence: `src/controllers/system.controller.js`)
