You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**⚙️ Device Management**: Inspect and interact with connected devices
66
67
-**📄 Configuration Viewer**: View and analyze merged configuration files
67
68
-**📦 Version Information**: Check loaded assemblies and versions
69
+
-**🔀 Routing**: Visual signal routing diagram between devices and tie lines
70
+
-**📱 Mobile Control**: Mobile control interface management
71
+
-**🗺️ API Paths**: Browse all available REST API routes on the processor
68
72
-**🏷️ Type Registry**: Browse supported device types and their properties
69
73
74
+
## Multi-Application Support
75
+
76
+
The app supports up to 10 simultaneous PepperDash Essentials program slots (`app01` through `app10`). After logging in, available program slots are automatically discovered and populated in the application selector dropdown in the top navigation bar. Navigating between app slots does not require re-authentication.
77
+
70
78
## System Requirements
71
79
72
80
- Modern web browser (Chrome, Firefox, Safari, Edge)
The web app leverages the processor's built-in security system:
202
+
**Application-Level Authentication**:
203
+
The web app implements its own credential-based authentication flow on top of the processor's built-in security:
199
204
200
-
-**No Independent Authentication**: Web app doesn't implement its own user system
205
+
-**Login Form**: Users provide a username and password before accessing any app data
206
+
-**Credential Validation**: Credentials are submitted to the processor via `POST /:appId/api/loginCredentials`
207
+
-**Server-Side Single Auth**: The backend has one shared authentication mechanism regardless of which `appId` is used in the request
208
+
-**Global Session**: A successful login with any app slot authenticates the session for all running app slots
209
+
-**Redux Auth State**: `isAuthenticated` boolean and `availableApps` list are stored in Redux in-memory (resets on page reload)
210
+
-**Route Protection**: A `RequireAuth` layout route wraps all `/:appId/*` sub-routes; unauthenticated requests are redirected to `/:appId/login`
211
+
212
+
**App Slot Discovery**:
213
+
After credentials are validated, the application probes all 10 possible slots (`app01`–`app10`) in parallel using `Promise.allSettled`. Slots that respond successfully are stored as `availableApps` and populate the app selector dropdown in the top navigation bar.
214
+
215
+
**No Independent Authentication**: Web app doesn't implement its own persistent user system
201
216
-**Processor Integration**: Uses whatever authentication the processor has configured
202
217
-**Session Management**: Relies on processor's session handling
Copy file name to clipboardExpand all lines: docs/explanation/debug-console-design.md
+16-16Lines changed: 16 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,9 +25,9 @@ The console presents information in layers, allowing users to start broad and na
25
25
```
26
26
All System Messages
27
27
↓ (Filter by Device)
28
-
Device-Specific Messages
29
-
↓ (Filter by Level)
30
-
Problem-Level Messages
28
+
Device-Specific Messages
29
+
↓ (Set Per-Device Minimum Level)
30
+
Severity-Filtered Device Messages
31
31
↓ (Text Search)
32
32
Specific Event Messages
33
33
↓ (Click for Details)
@@ -65,9 +65,10 @@ Complete Message Information
65
65
66
66
**Why Client-Side**:
67
67
-**Responsive Filtering**: Filter changes apply instantly to existing messages
68
-
-**Rich Interaction**: Complex filter combinations without server round-trips
68
+
-**Rich Interaction**: Complex filter combinations (including per-device levels) without server round-trips
69
69
-**Historical Analysis**: Can re-filter previously received messages
70
70
-**Reduced Server Load**: Filtering computation happens in user's browser
71
+
-**Persistent Across Navigation**: Filter state stored in Redux survives route changes within the same session
71
72
72
73
**Trade-offs Accepted**:
73
74
-**Bandwidth Usage**: All messages transmitted even if filtered out
@@ -101,18 +102,17 @@ Messages use structured logging with both human-readable text and machine-readab
101
102
### Filter Interface Design
102
103
103
104
**Multiple Filter Types**:
104
-
The console provides three distinct filtering mechanisms:
105
-
1.**Device Selection**: Who generated the message?
106
-
2.**Log Level Selection**: How important is the message?
107
-
3.**Text Search**: What specific content are you looking for?
108
-
109
-
**Why Multiple Types**:
110
-
-**Different Mental Models**: Users think about problems in different ways
111
-
-**Complementary Filtering**: Different filters answer different questions
112
-
-**Flexible Workflow**: Users can apply filters in any order that makes sense
113
-
114
-
**Filter Combination Logic**:
115
-
All filters use AND logic (all conditions must match)
105
+
The console provides two distinct filtering mechanisms:
106
+
1.**Device Selection with Per-Device Minimum Level**: Which devices to show, and what minimum severity to require per device
107
+
2.**Text Search**: What specific content are you looking for?
108
+
109
+
**Per-Device Minimum Log Level**:
110
+
Each device in the filter list can have its own minimum log level threshold, independent of the server-side global minimum. When a device is checked in the Devices dropdown, it defaults to `Information`. A nested level dropdown next to each checked device allows selecting a higher threshold (e.g. `Warning` or `Error`) to reduce noise from that specific device while keeping other devices at a lower threshold.
111
+
112
+
**Why Per-Device Rather Than Global-Only**:
113
+
-**Precision**: A busy device generating many `Information` messages can be silenced at `Warning` while other devices remain visible at `Information`
114
+
-**Context Preservation**: Keeps the context of multiple devices without overwhelming the view with one device's verbose output
115
+
-**Flexible Workflow**: Useful when one device is suspected of issues and you want high verbosity from it, but low noise from everything else
116
116
117
117
**Why AND Logic**:
118
118
-**Intuitive**: Matches mental model of "show me messages that are X AND Y AND Z"
Copy file name to clipboardExpand all lines: docs/explanation/security.md
+13-26Lines changed: 13 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -90,34 +90,21 @@ Web interface could be overwhelmed by requests:
90
90
91
91
### Authentication Model
92
92
93
-
**Certificate-Based Authentication**:
94
-
The system relies on the processor's built-in authentication:
95
-
- Client certificates validate user identity
96
-
- Self-signed certificates common in internal deployments
97
-
- Certificate trust requires explicit user acceptance
98
-
- Certificate revocation through processor management
93
+
**Credential-Based Authentication**:
94
+
The web app implements a credential-based login flow that gates access to all application features:
95
+
96
+
-**Login Form**: Before any processor data is accessible, users must provide a username and password
97
+
-**API Validation**: Credentials are submitted to `POST /cws/:appId/api/loginCredentials` on the processor
98
+
-**Shared Authentication**: The processor backend uses a single authentication mechanism for all program slots — a successful login with any `appId` authenticates the entire session
99
+
-**Global Session State**: Authentication state (`isAuthenticated: boolean`) is stored in Redux. A `RequireAuth` layout route protects all `/:appId/*` sub-routes and redirects unauthenticated users to the login page
100
+
-**In-Memory Only**: The authentication state is not persisted to `localStorage` or cookies. Reloading the page requires re-authentication, providing natural session expiry
101
+
-**App Discovery at Login**: After validating credentials, all 10 possible program slots are probed in parallel. Only slots that respond successfully are shown in the application selector
99
102
100
103
**Session Management**:
101
-
Web sessions are managed securely:
102
-
- Session tokens generated using cryptographically secure random numbers
103
-
- Session data stored server-side, not in cookies
104
-
- Automatic session expiration after inactivity
105
-
- Session invalidation on logout or timeout
106
-
107
-
### Authorization Framework
108
-
109
-
**Role-Based Access Control**:
110
-
Access is controlled through processor-level permissions:
111
-
-**System Administrator**: Full access to all features and data
112
-
-**Operator**: Read access to operational data and controls
113
-
-**Viewer**: Read-only access to status and configuration information
114
-
-**Guest**: Minimal access to basic system information
115
-
116
-
**Permission Inheritance**:
117
-
Permissions are inherited from the processor's user management:
118
-
- Web app does not maintain separate user database
119
-
- Authorization decisions delegated to Essentials framework
120
-
- Consistent access control across all system interfaces
104
+
Web sessions are managed through the Redux store:
105
+
- Session exists for the lifetime of the browser tab
106
+
- Logging out (or reloading) resets all auth state
107
+
- No session tokens are stored client-side beyond the duration of the session
Copy file name to clipboardExpand all lines: docs/reference/log-levels.md
+35-1Lines changed: 35 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -37,7 +37,41 @@
37
37
-**Filtered out**: None
38
38
-**Use case**: Deep debugging, code-level analysis
39
39
40
-
## Message Classification
40
+
## Client-Side Filtering
41
+
42
+
### Per-Device Minimum Log Level Filter
43
+
44
+
Each device checked in the Debug Console Devices dropdown has its own minimum log level threshold. Messages from that device are only shown if they meet or exceed that device's threshold.
45
+
46
+
**Default**: `Information` when a device is first checked
**Example**: Device set to `Warning` — shows Warning, Error, Fatal; hides Information, Debug, Verbose
62
+
63
+
**State**: Stored in Redux `debugConsole.deviceLevels` as `Record<deviceId, levelName>`; persists across navigation within the session
64
+
65
+
### Filter Combination Logic
66
+
67
+
All client-side filters use AND logic:
68
+
-**Device filter**: Message key must match a checked device (or `Global`)
69
+
-**Per-device minimum level**: Message severity must meet the device's threshold
70
+
-**Text search**: All search terms must appear somewhere in the message fields
71
+
72
+
### Server-Side Minimum Log Level
73
+
74
+
The **Minimum Log Level** dropdown in the Debug Console session panel sets the server-side floor for all messages the processor sends to the client. Messages below this level are never transmitted, regardless of the client-side per-device settings. This controls what the processor captures and streams, while per-device levels control what the client displays after receipt.
0 commit comments