signalk-container 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -59
- package/dist/containers.d.ts +1 -1
- package/dist/containers.d.ts.map +1 -1
- package/dist/containers.js +26 -5
- package/dist/containers.js.map +1 -1
- package/dist/index.js +209 -5
- package/dist/index.js.map +1 -1
- package/dist/resources.d.ts +36 -0
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +58 -0
- package/dist/resources.js.map +1 -1
- package/doc/plugin-developer-guide.md +65 -0
- package/package.json +1 -1
- package/public/805.js +1 -1
package/README.md
CHANGED
|
@@ -9,25 +9,54 @@ Instead of each plugin implementing its own container orchestration, they delega
|
|
|
9
9
|
- **Runtime detection** -- Podman preferred, Docker fallback, podman-shim aware
|
|
10
10
|
- **Container lifecycle** -- pull, create, start, stop, remove with `sk-` prefix naming
|
|
11
11
|
- **One-shot jobs** -- run containers for batch tasks (export, conversion, etc.)
|
|
12
|
-
- **Update detection** -- centralized "is there a newer image?" service for all consumer plugins. Auto-detects semver vs floating tags (`:latest`, `:main`), offline-tolerant with persistent cache, emits Signal K notifications. See the [developer guide](doc/plugin-developer-guide.md#update-detection).
|
|
13
|
-
- **Resource limits** --
|
|
12
|
+
- **Update detection** -- centralized "is there a newer image?" service for all consumer plugins. Auto-detects semver vs floating tags (`:latest`, `:main`), offline-tolerant with persistent cache, emits Signal K notifications, visible inline in the config panel. See the [developer guide](doc/plugin-developer-guide.md#update-detection).
|
|
13
|
+
- **Resource limits editor** -- interactive UI in the config panel for setting CPU/memory/PID caps per container. Values are applied live via `podman update` when possible (no downtime), falls back to recreate when needed. Stored overrides are minimized against the consumer plugin's defaults so a future default bump flows through automatically. See the [developer guide](doc/plugin-developer-guide.md#resource-limits).
|
|
14
|
+
- **Reset to plugin default** -- one-click restore of a container's original resource limits, clearing any user override.
|
|
14
15
|
- **Image management** -- scheduled pruning of dangling images (weekly/monthly)
|
|
15
16
|
- **SELinux support** -- `:Z` volume flags for Podman on Fedora/RHEL
|
|
16
17
|
- **Podman image qualification** -- automatically prefixes `docker.io/` for short image names
|
|
17
|
-
- **Config panel** -- runtime status, managed containers with start/stop/remove controls, prune button
|
|
18
18
|
- **Cross-plugin API** -- other plugins use `globalThis.__signalk_containerManager`
|
|
19
19
|
|
|
20
20
|
## Config Panel
|
|
21
21
|
|
|
22
|
-
The plugin embeds a React config panel in the Signal K Admin UI (via Module Federation)
|
|
22
|
+
The plugin embeds a React config panel in the Signal K Admin UI (via Module Federation). It's the recommended way to manage containers — you shouldn't need to edit JSON directly.
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
### Runtime section
|
|
25
|
+
|
|
26
|
+
- Detected runtime with version (Podman or Docker)
|
|
27
|
+
- Green status indicator when available, red if no runtime was found
|
|
28
|
+
|
|
29
|
+
### Settings
|
|
30
|
+
|
|
31
|
+
- **Preferred runtime** -- auto-detect, or force `podman`/`docker`
|
|
32
|
+
- **Auto-prune images** -- off, weekly, or monthly scheduled cleanup of dangling images
|
|
33
|
+
- **Update check interval** -- how often to check consumer plugins for new container images (1h to 1 week, default 24h)
|
|
34
|
+
- **Background update checks** -- toggle for metered connections; manual checks still work when off
|
|
35
|
+
|
|
36
|
+
### Managed Containers (one card per running or stopped container)
|
|
37
|
+
|
|
38
|
+
- Container name, image, state, and port mappings
|
|
39
|
+
- **Start** / **Stop** / **Remove** buttons appropriate to the current state
|
|
40
|
+
- **Current effective resource limits** shown as compact badges (e.g. `1.5 CPU · 512m · 200 PIDs`)
|
|
41
|
+
- **Override active** amber badge when the user has configured a resource override for the container
|
|
42
|
+
- **Updates row** (when the consumer plugin has registered with the update service):
|
|
43
|
+
- Color-coded badge: `✓ up to date`, `↑ v3.4.0 available`, `↻ rebuild available` (floating tag), `📡 offline` (with cached state fallback), `⚠ check error`
|
|
44
|
+
- "checked 5m ago" staleness indicator
|
|
45
|
+
- **Check now ↻** button for an immediate fresh check
|
|
46
|
+
|
|
47
|
+
### Resource Limits Editor (expands inline when you click "Edit Limits" on a running container)
|
|
48
|
+
|
|
49
|
+
- Four primary fields visible by default: CPU cores, Memory, Memory+swap, Max processes
|
|
50
|
+
- **Advanced** section (collapsed) for CPU shares, CPU pinning, memory reservation, OOM score adjust
|
|
51
|
+
- **× button** next to each field to explicitly unset (send `null`, removing a plugin-default limit)
|
|
52
|
+
- **Apply** -- live update where possible, recreate where needed, with a clear result box showing which method was used and any warnings (e.g. "dropped cpusetCpus — not delegated by cgroups")
|
|
53
|
+
- **Revert** -- discard unsaved form edits, re-seed from current effective state
|
|
54
|
+
- **Reset to default** -- clear the user override entirely and restore the consumer plugin's pristine default limits (confirmation dialog warns about possible recreate)
|
|
55
|
+
- After Apply or Reset, the form re-seeds from the server's fresh state so the inputs always match what's actually running
|
|
56
|
+
|
|
57
|
+
### Maintenance
|
|
58
|
+
|
|
59
|
+
- **Prune Dangling Images** button with before/after space reclaimed summary
|
|
31
60
|
|
|
32
61
|
## How Other Plugins Use It
|
|
33
62
|
|
|
@@ -92,20 +121,21 @@ See [doc/plugin-developer-guide.md](doc/plugin-developer-guide.md) for the full
|
|
|
92
121
|
|
|
93
122
|
All mounted at `/plugins/signalk-container/api/`:
|
|
94
123
|
|
|
95
|
-
| Method | Path | Description
|
|
96
|
-
| ------ | ----------------------------- |
|
|
97
|
-
| GET | `/runtime` | Detected runtime info
|
|
98
|
-
| GET | `/containers` | List managed containers
|
|
99
|
-
| GET | `/containers/:name/state` | Container state
|
|
100
|
-
| POST | `/containers/:name/start` | Start a stopped container
|
|
101
|
-
| POST | `/containers/:name/stop` | Stop a running container
|
|
102
|
-
| POST | `/containers/:name/remove` | Stop and remove a container
|
|
103
|
-
| POST | `/prune` | Prune dangling images
|
|
104
|
-
| GET | `/updates` | List last update-check results
|
|
105
|
-
| GET | `/updates/:pluginId` | Last update-check result for one plugin
|
|
106
|
-
| POST | `/updates/:pluginId/check` | Force a fresh update check (HTTP 200 even when offline)
|
|
107
|
-
| GET | `/containers/:name/resources` | Effective resource limits + user override
|
|
108
|
-
| POST | `/containers/:name/resources` | Apply new resource limits (live or recreate)
|
|
124
|
+
| Method | Path | Description |
|
|
125
|
+
| ------ | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
126
|
+
| GET | `/runtime` | Detected runtime info |
|
|
127
|
+
| GET | `/containers` | List managed containers |
|
|
128
|
+
| GET | `/containers/:name/state` | Container state |
|
|
129
|
+
| POST | `/containers/:name/start` | Start a stopped container |
|
|
130
|
+
| POST | `/containers/:name/stop` | Stop a running container |
|
|
131
|
+
| POST | `/containers/:name/remove` | Stop and remove a container |
|
|
132
|
+
| POST | `/prune` | Prune dangling images |
|
|
133
|
+
| GET | `/updates` | List last update-check results |
|
|
134
|
+
| GET | `/updates/:pluginId` | Last update-check result for one plugin |
|
|
135
|
+
| POST | `/updates/:pluginId/check` | Force a fresh update check (HTTP 200 even when offline) |
|
|
136
|
+
| GET | `/containers/:name/resources` | Effective resource limits + user override |
|
|
137
|
+
| POST | `/containers/:name/resources` | Apply new resource limits (live or recreate). Body is a `ContainerResourceLimits` diff against the consumer plugin's default. |
|
|
138
|
+
| DELETE | `/containers/:name/resources` | Clear any user override and restore the consumer plugin's pristine default limits to the running container. |
|
|
109
139
|
|
|
110
140
|
## Configuration
|
|
111
141
|
|
|
@@ -120,44 +150,55 @@ All mounted at `/plugins/signalk-container/api/`:
|
|
|
120
150
|
|
|
121
151
|
## Setting Resource Limits
|
|
122
152
|
|
|
123
|
-
On a boat with limited compute (typically a Pi 4/5 or low-power x86 mini PC), one runaway container can starve Signal K, raise NMEA decode latency, trigger thermal throttling, or even take the host down via OOM. signalk-container exposes podman/docker resource flags so consumer plugins can set sensible defaults — and you, as the user, can
|
|
153
|
+
On a boat with limited compute (typically a Pi 4/5 or low-power x86 mini PC), one runaway container can starve Signal K, raise NMEA decode latency, trigger thermal throttling, or even take the host down via OOM. signalk-container exposes podman/docker resource flags so consumer plugins can set sensible defaults — and you, as the user, can tune them per-container in two ways: **the config panel UI (recommended)** or direct JSON edit (for scripted/automated setups).
|
|
124
154
|
|
|
125
155
|
### How it works
|
|
126
156
|
|
|
127
|
-
Each consumer plugin (signalk-questdb, signalk-grafana, mayara, etc.) declares default CPU/memory limits when it starts its container.
|
|
157
|
+
Each consumer plugin (signalk-questdb, signalk-grafana, mayara, etc.) declares default CPU/memory limits when it starts its container. Your override is **merged field-by-field** on top of the plugin's defaults, and only the fields that actually differ from the default get stored. This means if a future plugin version bumps its memory default from 512m to 1g, your override for just `cpus` will automatically pick up the new memory value — no manual edit needed.
|
|
158
|
+
|
|
159
|
+
### Using the Config Panel (recommended)
|
|
160
|
+
|
|
161
|
+
1. Open the Signal K admin UI → Plugin Config → **Container Manager**
|
|
162
|
+
2. Find the container you want to tune in the "Managed Containers" list
|
|
163
|
+
3. Click **Edit Limits ▸** on the row
|
|
164
|
+
4. Edit the CPU cores, Memory, Memory+swap, or Max processes fields. Use the × button next to a field to explicitly unset a limit the plugin set. Click **Advanced** to access cpuShares, cpusetCpus, memoryReservation, and oomScoreAdj.
|
|
165
|
+
5. Click **Apply** — live updated where possible (no downtime), recreated where needed. The result box shows which method was used plus any warnings.
|
|
166
|
+
6. To restore the plugin's default: click **Reset to default** (amber button). This clears your override and applies the pristine default to the running container.
|
|
167
|
+
|
|
168
|
+
The form re-seeds from the server's fresh state after every Apply or Reset, so the displayed values always match what's actually running.
|
|
169
|
+
|
|
170
|
+
### Available fields
|
|
171
|
+
|
|
172
|
+
| Field | Example | What it does |
|
|
173
|
+
| ------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
174
|
+
| `cpus` | `1.5` | Hard CPU cap. `1.5` = max 1.5 cores. The most important field for stability. |
|
|
175
|
+
| `cpuShares` | `512` | Soft CPU weight under contention (default 1024). Lower = lower priority. |
|
|
176
|
+
| `cpusetCpus` | `"1,2"` | Pin to specific cores. Useful to keep heavy containers off core 0 where Signal K runs. May force a recreate on hosts where the cpuset cgroup controller isn't delegated. |
|
|
177
|
+
| `memory` | `"512m"`, `"2g"` | Hard memory cap. Container is OOM-killed if exceeded. |
|
|
178
|
+
| `memorySwap` | `"512m"` | Memory + swap total. **Set equal to `memory` to disable swap entirely** — recommended on Pi/eMMC where swap is slow. |
|
|
179
|
+
| `memoryReservation` | `"256m"` | Soft memory floor. Kernel reclaims first from containers above this. |
|
|
180
|
+
| `pidsLimit` | `200` | Cap on processes/threads. Prevents fork bombs and thread leaks. |
|
|
181
|
+
| `oomScoreAdj` | `500` | OOM kill priority, -1000..1000. Higher = killed first when host runs out of memory. Set at container create time only — forces a recreate when changed. |
|
|
128
182
|
|
|
129
|
-
###
|
|
183
|
+
### Direct JSON (scripted/advanced)
|
|
130
184
|
|
|
131
|
-
|
|
185
|
+
The UI writes to a `containerOverrides` map in `plugin-config-data/signalk-container.json`. You can edit this directly if you prefer — useful for automation or bulk configuration:
|
|
132
186
|
|
|
133
187
|
```json
|
|
134
188
|
{
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
|
|
138
|
-
|
|
189
|
+
"configuration": {
|
|
190
|
+
"containerOverrides": {
|
|
191
|
+
"mayara-server": {
|
|
192
|
+
"cpus": 1.5,
|
|
193
|
+
"memory": "512m",
|
|
194
|
+
"memorySwap": "512m"
|
|
195
|
+
}
|
|
196
|
+
}
|
|
139
197
|
}
|
|
140
198
|
}
|
|
141
199
|
```
|
|
142
200
|
|
|
143
|
-
The key (`mayara-server`) is the container name **without** the `sk-` prefix that signalk-container adds internally.
|
|
144
|
-
|
|
145
|
-
### Available fields
|
|
146
|
-
|
|
147
|
-
| Field | Example | What it does |
|
|
148
|
-
| ------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
149
|
-
| `cpus` | `1.5` | Hard CPU cap. `1.5` = max 1.5 cores. The most important field for stability. |
|
|
150
|
-
| `cpuShares` | `512` | Soft CPU weight under contention (default 1024). Lower = lower priority. |
|
|
151
|
-
| `cpusetCpus` | `"1,2"` | Pin to specific cores. Useful to keep heavy containers off core 0 where Signal K runs. |
|
|
152
|
-
| `memory` | `"512m"`, `"2g"` | Hard memory cap. Container is OOM-killed if exceeded. |
|
|
153
|
-
| `memorySwap` | `"512m"` | Memory + swap total. **Set equal to `memory` to disable swap entirely** — recommended on Pi/eMMC where swap is slow. |
|
|
154
|
-
| `memoryReservation` | `"256m"` | Soft memory floor. Kernel reclaims first from containers above this. |
|
|
155
|
-
| `pidsLimit` | `200` | Cap on processes/threads. Prevents fork bombs and thread leaks. |
|
|
156
|
-
| `oomScoreAdj` | `500` | OOM kill priority, -1000..1000. Higher = killed first when host runs out of memory. |
|
|
157
|
-
|
|
158
|
-
### Removing a limit set by a plugin
|
|
159
|
-
|
|
160
|
-
Use `null` to explicitly remove a limit that the consumer plugin set:
|
|
201
|
+
The key (`mayara-server`) is the container name **without** the `sk-` prefix that signalk-container adds internally. Use `null` for a field to explicitly remove a limit set by the plugin:
|
|
161
202
|
|
|
162
203
|
```json
|
|
163
204
|
{
|
|
@@ -165,34 +206,56 @@ Use `null` to explicitly remove a limit that the consumer plugin set:
|
|
|
165
206
|
}
|
|
166
207
|
```
|
|
167
208
|
|
|
168
|
-
|
|
209
|
+
After editing the file, restart the Container Manager plugin from the Signal K admin UI (or run the REST calls below) for the changes to take effect on running containers.
|
|
210
|
+
|
|
211
|
+
### REST API (for scripts or external tools)
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# Read current state
|
|
215
|
+
curl http://localhost:3000/plugins/signalk-container/api/containers/mayara-server/resources
|
|
216
|
+
|
|
217
|
+
# Apply a new override (live or recreate as needed)
|
|
218
|
+
curl -X POST http://localhost:3000/plugins/signalk-container/api/containers/mayara-server/resources \
|
|
219
|
+
-H 'Content-Type: application/json' \
|
|
220
|
+
-d '{"cpus": 2}'
|
|
221
|
+
|
|
222
|
+
# Reset to plugin default (clear the override)
|
|
223
|
+
curl -X DELETE http://localhost:3000/plugins/signalk-container/api/containers/mayara-server/resources
|
|
224
|
+
```
|
|
169
225
|
|
|
170
226
|
### When changes take effect
|
|
171
227
|
|
|
172
|
-
- **
|
|
173
|
-
- **
|
|
174
|
-
- **
|
|
228
|
+
- **Immediately via the UI or REST API** (`updateResources`): signalk-container tries `podman update` / `docker update` first (instantaneous, no downtime). Falls back to stop+remove+create if the runtime can't apply the change live (e.g. unsetting memory limits, or changing `cpusetCpus` / `oomScoreAdj` which are set at container create time only).
|
|
229
|
+
- **On next consumer plugin restart**: the merge happens automatically inside `ensureRunning` — useful for installations that manage via JSON edits and don't want to use the REST API.
|
|
230
|
+
- **Persistence**: overrides applied via the UI or REST API are auto-persisted to `plugin-config-data/signalk-container.json` — they survive Signal K restarts without any extra action.
|
|
175
231
|
|
|
176
232
|
### Verifying limits are applied
|
|
177
233
|
|
|
178
|
-
Check the live container
|
|
234
|
+
Check the live container directly:
|
|
179
235
|
|
|
180
236
|
```bash
|
|
181
237
|
podman inspect sk-mayara-server --format '
|
|
182
238
|
cpus={{.HostConfig.NanoCpus}}
|
|
183
239
|
memory={{.HostConfig.Memory}}
|
|
240
|
+
pids={{.HostConfig.PidsLimit}}
|
|
184
241
|
'
|
|
185
242
|
```
|
|
186
243
|
|
|
187
244
|
`NanoCpus` is in CPU-nanoseconds per second; `1500000000` = 1.5 cores. Memory is in bytes.
|
|
188
245
|
|
|
189
|
-
Or
|
|
246
|
+
Or via the REST API:
|
|
190
247
|
|
|
191
248
|
```bash
|
|
192
|
-
curl http://localhost:3000/plugins/signalk-container/api/containers/mayara-server/resources
|
|
193
|
-
# {
|
|
249
|
+
curl http://localhost:3000/plugins/signalk-container/api/containers/mayara-server/resources | jq
|
|
250
|
+
# {
|
|
251
|
+
# "name": "mayara-server",
|
|
252
|
+
# "effective": { "cpus": 1.5, "memory": "512m", ... }, // what's actually applied
|
|
253
|
+
# "override": { "cpus": 1.5 } // only what the user changed
|
|
254
|
+
# }
|
|
194
255
|
```
|
|
195
256
|
|
|
257
|
+
Note that `override` contains only the fields that differ from the consumer plugin's default — this minimization is automatic and lets future plugin default bumps flow through without you having to re-edit your override.
|
|
258
|
+
|
|
196
259
|
### Picking the right values
|
|
197
260
|
|
|
198
261
|
1. Run the container without overrides for a typical workload
|
package/dist/containers.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export declare function imageExists(runtime: ContainerRuntimeInfo, image: string
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function getImageDigest(runtime: ContainerRuntimeInfo, imageOrContainer: string): Promise<string | null>;
|
|
14
14
|
export declare function pullImage(runtime: ContainerRuntimeInfo, image: string, onProgress?: (msg: string) => void): Promise<void>;
|
|
15
|
-
export declare function getContainerState(runtime: ContainerRuntimeInfo, name: string): Promise<ContainerState>;
|
|
15
|
+
export declare function getContainerState(runtime: ContainerRuntimeInfo, name: string, exec?: ExecFn): Promise<ContainerState>;
|
|
16
16
|
/**
|
|
17
17
|
* Type alias matching `ExecRuntimeFn` in resources.ts; declared
|
|
18
18
|
* locally so containers.ts doesn't have to depend on resources.ts.
|
package/dist/containers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAYjB,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAgBR;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,oBAAoB,EAC7B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0BxB;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"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"}
|
package/dist/containers.js
CHANGED
|
@@ -86,18 +86,39 @@ async function pullImage(runtime, image, onProgress) {
|
|
|
86
86
|
throw new Error(`Failed to pull ${image}: ${log.slice(-5).join("\n")}`);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
async function getContainerState(runtime, name) {
|
|
89
|
+
async function getContainerState(runtime, name, exec = runtime_1.execRuntime) {
|
|
90
90
|
const fullName = prefixedName(name);
|
|
91
|
-
|
|
91
|
+
// Query multiple state fields and treat the container as running if
|
|
92
|
+
// ANY of them indicate running. Rationale: rootless podman on some
|
|
93
|
+
// kernels briefly returns inconsistent `State.Status` values for a
|
|
94
|
+
// container that's actually running (observed during heavy concurrent
|
|
95
|
+
// inspect traffic from the config panel's 5-second poll). The
|
|
96
|
+
// `State.Pid` field is a more authoritative signal — if there's a
|
|
97
|
+
// live PID, the container process exists regardless of what Status
|
|
98
|
+
// momentarily claims. Same for `State.Running` which is a boolean
|
|
99
|
+
// that podman populates independently from Status.
|
|
100
|
+
//
|
|
101
|
+
// Order in the format string: Status | Running | Pid
|
|
102
|
+
const result = await exec(runtime, [
|
|
92
103
|
"inspect",
|
|
93
104
|
"--format",
|
|
94
|
-
"{{.State.Status}}",
|
|
105
|
+
"{{.State.Status}}|{{.State.Running}}|{{.State.Pid}}",
|
|
95
106
|
fullName,
|
|
96
107
|
]);
|
|
97
108
|
if (result.exitCode !== 0)
|
|
98
109
|
return "missing";
|
|
99
|
-
const
|
|
100
|
-
|
|
110
|
+
const [rawStatus, rawRunning, rawPid] = result.stdout.split("|");
|
|
111
|
+
const status = (rawStatus ?? "").toLowerCase().trim();
|
|
112
|
+
const runningFlag = (rawRunning ?? "").toLowerCase().trim() === "true";
|
|
113
|
+
const pid = Number((rawPid ?? "").trim());
|
|
114
|
+
const hasLivePid = Number.isFinite(pid) && pid > 0;
|
|
115
|
+
// Running if ANY source says so. This is the defensive OR — we'd
|
|
116
|
+
// rather report "running" when the container is actually stopped
|
|
117
|
+
// (worst case: ensureRunning's "already running" fast path skips
|
|
118
|
+
// a start call, which would then fail the subsequent health check
|
|
119
|
+
// and recover) than report "stopped" when it's running (worst
|
|
120
|
+
// case: update service skips legit checks, user sees flap).
|
|
121
|
+
if (status === "running" || runningFlag || hasLivePid)
|
|
101
122
|
return "running";
|
|
102
123
|
return "stopped";
|
|
103
124
|
}
|
package/dist/containers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,111 @@ module.exports = (app) => {
|
|
|
31
31
|
const lastConfigs = new Map();
|
|
32
32
|
let currentOverrides = {};
|
|
33
33
|
const effectiveResources = new Map();
|
|
34
|
+
// Pristine plugin-default resource limits, captured at the top of the
|
|
35
|
+
// `api.ensureRunning` wrapper BEFORE the override merge. Lets the
|
|
36
|
+
// "Reset to plugin defaults" feature restore what the consumer plugin
|
|
37
|
+
// originally asked for. Without this, we'd have no way to reconstruct
|
|
38
|
+
// the default — lastConfigs stores the post-merge result.
|
|
39
|
+
const pluginDefaults = new Map();
|
|
40
|
+
// Captured at start(config). Used by recordOverride to build the full
|
|
41
|
+
// cfg object when calling app.savePluginOptions, so the disk file keeps
|
|
42
|
+
// runtime/pruneSchedule/etc. untouched alongside the new override.
|
|
43
|
+
let currentConfig = null;
|
|
44
|
+
/**
|
|
45
|
+
* Persist the current in-memory `currentOverrides` map to disk via
|
|
46
|
+
* Signal K's `app.savePluginOptions`. Best-effort: failures are
|
|
47
|
+
* logged but non-fatal (the live container state is already correct;
|
|
48
|
+
* we just lose durability across Signal K restarts).
|
|
49
|
+
*
|
|
50
|
+
* Does NOT cause a plugin restart — `savePluginOptions` writes to
|
|
51
|
+
* plugin-config-data/signalk-container.json without triggering the
|
|
52
|
+
* Signal K admin UI's stop-and-restart flow, so this is safe to
|
|
53
|
+
* call from inside a request handler without causing downtime.
|
|
54
|
+
*
|
|
55
|
+
* The `debugContext` is included in the debug log line so it's
|
|
56
|
+
* possible to tell which code path triggered the write.
|
|
57
|
+
*/
|
|
58
|
+
function persistOverridesToDisk(debugContext) {
|
|
59
|
+
if (!currentConfig || !app.savePluginOptions) {
|
|
60
|
+
app.debug(`persistOverridesToDisk(${debugContext}): skipped (currentConfig=${currentConfig !== null}, savePluginOptions=${!!app.savePluginOptions})`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const newCfg = {
|
|
64
|
+
...currentConfig,
|
|
65
|
+
containerOverrides: { ...currentOverrides },
|
|
66
|
+
};
|
|
67
|
+
// Keep currentConfig in sync so subsequent writes see the latest
|
|
68
|
+
// containerOverrides too.
|
|
69
|
+
currentConfig = newCfg;
|
|
70
|
+
app.savePluginOptions(newCfg, (err) => {
|
|
71
|
+
if (err) {
|
|
72
|
+
app.error(`Failed to persist containerOverrides to disk (${debugContext}): ${err.message}. ` +
|
|
73
|
+
`The in-memory state is correct but will be lost on the next Signal K restart.`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
app.debug(`persistOverridesToDisk(${debugContext}): wrote to plugin-config-data`);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Record a user-requested override into `currentOverrides` so that
|
|
82
|
+
* `GET /api/containers/:name/resources` returns a truthful `override`
|
|
83
|
+
* field, AND so the next `ensureRunning` call from a consumer plugin
|
|
84
|
+
* correctly merges the override on top of the plugin's default.
|
|
85
|
+
*
|
|
86
|
+
* Also persists the updated override map to disk via
|
|
87
|
+
* `persistOverridesToDisk` so the user's Apply click survives both
|
|
88
|
+
* page reloads AND full Signal K restarts.
|
|
89
|
+
*
|
|
90
|
+
* Called from inside `updateResources` after a successful apply.
|
|
91
|
+
*
|
|
92
|
+
* The input `limits` is a snapshot of the user's intent for the
|
|
93
|
+
* container (e.g. the form state from the resource editor, which
|
|
94
|
+
* seeds from the current effective state). We minimize it against
|
|
95
|
+
* `pluginDefaults.get(name)` so that only fields which genuinely
|
|
96
|
+
* differ from the consumer plugin's default get stored. This:
|
|
97
|
+
* - Prevents the "Override active" badge from sticking when the
|
|
98
|
+
* user submits a form that matches the plugin default.
|
|
99
|
+
* - Lets future plugin-default bumps (e.g. mayara bumping memory
|
|
100
|
+
* from "512m" to "1g") propagate to users who only explicitly
|
|
101
|
+
* overrode a different field like cpus.
|
|
102
|
+
*
|
|
103
|
+
* If the minimized result is empty (every submitted field matches
|
|
104
|
+
* the plugin default), the override is deleted entirely.
|
|
105
|
+
*
|
|
106
|
+
* When no plugin default is known (pluginDefaults lacks an entry —
|
|
107
|
+
* only possible if the consumer plugin never called ensureRunning,
|
|
108
|
+
* which shouldn't happen in practice since updateResources requires
|
|
109
|
+
* a prior ensureRunning for its recreate fallback path), we fall
|
|
110
|
+
* back to storing the raw limits as before.
|
|
111
|
+
*/
|
|
112
|
+
function recordOverride(name, limits) {
|
|
113
|
+
const pluginDefault = pluginDefaults.get(name);
|
|
114
|
+
const minimized = pluginDefault
|
|
115
|
+
? (0, resources_1.minimizeOverride)(limits, pluginDefault)
|
|
116
|
+
: { ...limits };
|
|
117
|
+
const keys = Object.keys(minimized);
|
|
118
|
+
if (keys.length === 0) {
|
|
119
|
+
delete currentOverrides[name];
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
currentOverrides[name] = minimized;
|
|
123
|
+
}
|
|
124
|
+
persistOverridesToDisk(`recordOverride(${name})`);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Remove a container's override entirely and persist to disk.
|
|
128
|
+
* Used by the reset-to-plugin-defaults path (DELETE endpoint) where
|
|
129
|
+
* we want to clear the override independently of calling
|
|
130
|
+
* updateResources (which would re-add it via recordOverride at the
|
|
131
|
+
* end of the successful-apply branches).
|
|
132
|
+
*/
|
|
133
|
+
function clearOverride(name) {
|
|
134
|
+
if (!(name in currentOverrides))
|
|
135
|
+
return;
|
|
136
|
+
delete currentOverrides[name];
|
|
137
|
+
persistOverridesToDisk(`clearOverride(${name})`);
|
|
138
|
+
}
|
|
34
139
|
const api = {
|
|
35
140
|
getRuntime() {
|
|
36
141
|
return runtimeInfo;
|
|
@@ -53,6 +158,14 @@ module.exports = (app) => {
|
|
|
53
158
|
async ensureRunning(name, config, options) {
|
|
54
159
|
if (!runtimeInfo)
|
|
55
160
|
throw new Error("No container runtime available");
|
|
161
|
+
// Capture the plugin's pristine default resource limits BEFORE
|
|
162
|
+
// merging with the user override. This is the only place in the
|
|
163
|
+
// system that sees the "default" as a separate input; lastConfigs
|
|
164
|
+
// stores the post-merge result. We need the default for:
|
|
165
|
+
// - "Reset to plugin defaults" action in the UI
|
|
166
|
+
// - (future) detecting when an override happens to match the
|
|
167
|
+
// default and offering to clear it
|
|
168
|
+
pluginDefaults.set(name, { ...(config.resources ?? {}) });
|
|
56
169
|
// Merge user override on top of the plugin's default resources.
|
|
57
170
|
// The user override (from signalk-container's own plugin config)
|
|
58
171
|
// wins field-by-field; null in the override removes a limit.
|
|
@@ -197,11 +310,34 @@ module.exports = (app) => {
|
|
|
197
310
|
throw new Error("No container runtime available");
|
|
198
311
|
const fullName = name.startsWith("sk-") ? name : `sk-${name}`;
|
|
199
312
|
const warnings = [];
|
|
200
|
-
//
|
|
201
|
-
//
|
|
313
|
+
// Bug Y: `limits` is the user's intent for fields they want to
|
|
314
|
+
// change, NOT an absolute target. Merge it on top of the consumer
|
|
315
|
+
// plugin's pristine default (stored in pluginDefaults by the
|
|
316
|
+
// api.ensureRunning wrapper) so the fields the user didn't
|
|
317
|
+
// touch stay at the plugin default. Without this merge, the user
|
|
318
|
+
// submitting just `{cpus: 2}` would cause the container to be
|
|
319
|
+
// recreated with ONLY cpus (memory/swap/pids wiped), because
|
|
320
|
+
// updateResources was treating the payload as absolute.
|
|
321
|
+
//
|
|
322
|
+
// This mirrors the semantics of the api.ensureRunning wrapper
|
|
323
|
+
// which already merges plugin default + user override before
|
|
324
|
+
// applying. Now both entry points behave consistently: the
|
|
325
|
+
// final state applied to the container is always
|
|
326
|
+
// `pluginDefault ⊕ userOverride`, where userOverride is the
|
|
327
|
+
// minimal set of fields the user explicitly changed.
|
|
328
|
+
//
|
|
329
|
+
// The ORIGINAL unmerged `limits` is still passed to
|
|
330
|
+
// recordOverride, which in turn passes it through minimizeOverride
|
|
331
|
+
// (same plugin-default-aware logic). So the stored override is
|
|
332
|
+
// still minimal — only fields that actually differ from the
|
|
333
|
+
// default.
|
|
334
|
+
const pluginDefault = pluginDefaults.get(name) ?? {};
|
|
335
|
+
const mergedTarget = (0, resources_1.mergeResourceLimits)(pluginDefault, limits);
|
|
336
|
+
// Filter the MERGED target against the runtime's actual cgroup
|
|
337
|
+
// capabilities. Dropping a field here is silent at the
|
|
202
338
|
// resources.ts layer; we surface it once via app.debug so the
|
|
203
339
|
// user knows their override is being ignored. (Bug B fix.)
|
|
204
|
-
const { accepted: filteredLimits, dropped } = (0, resources_1.filterUnsupportedLimits)(
|
|
340
|
+
const { accepted: filteredLimits, dropped } = (0, resources_1.filterUnsupportedLimits)(mergedTarget, runtimeInfo);
|
|
205
341
|
for (const d of dropped) {
|
|
206
342
|
const w = `dropped resources.${d.field}: ${d.reason}`;
|
|
207
343
|
warnings.push(w);
|
|
@@ -228,8 +364,9 @@ module.exports = (app) => {
|
|
|
228
364
|
throw new Error(`updateResources: container ${fullName} does not exist`);
|
|
229
365
|
}
|
|
230
366
|
// Live state already matches the request — true no-op.
|
|
231
|
-
// Update the
|
|
367
|
+
// Update the caches so they stop lying if they were stale.
|
|
232
368
|
effectiveResources.set(name, { ...filteredLimits });
|
|
369
|
+
recordOverride(name, limits);
|
|
233
370
|
return {
|
|
234
371
|
method: "live",
|
|
235
372
|
warnings: warnings.length ? warnings : undefined,
|
|
@@ -259,6 +396,7 @@ module.exports = (app) => {
|
|
|
259
396
|
: await (0, resources_1.tryLiveUpdate)(runtimeInfo, fullName, filteredLimits);
|
|
260
397
|
if (live.ok) {
|
|
261
398
|
effectiveResources.set(name, { ...filteredLimits });
|
|
399
|
+
recordOverride(name, limits);
|
|
262
400
|
// Also keep the cached ContainerConfig in sync so that a
|
|
263
401
|
// future recreate (e.g. on plugin restart) preserves the
|
|
264
402
|
// newer limits.
|
|
@@ -351,6 +489,7 @@ module.exports = (app) => {
|
|
|
351
489
|
}
|
|
352
490
|
lastConfigs.set(name, newConfig);
|
|
353
491
|
effectiveResources.set(name, { ...filteredLimits });
|
|
492
|
+
recordOverride(name, limits);
|
|
354
493
|
return { method: "recreated", warnings };
|
|
355
494
|
},
|
|
356
495
|
getResources(name) {
|
|
@@ -475,6 +614,10 @@ module.exports = (app) => {
|
|
|
475
614
|
},
|
|
476
615
|
},
|
|
477
616
|
start(config) {
|
|
617
|
+
// Cache the full config object so recordOverride() can rebuild it
|
|
618
|
+
// when persisting a new override via savePluginOptions. Shallow
|
|
619
|
+
// copy to avoid mutating the caller's object.
|
|
620
|
+
currentConfig = { ...config };
|
|
478
621
|
// Cache user-supplied per-container resource overrides. These
|
|
479
622
|
// are merged into every ensureRunning() call so consumer
|
|
480
623
|
// plugins automatically pick them up. The user can edit them
|
|
@@ -584,7 +727,9 @@ module.exports = (app) => {
|
|
|
584
727
|
}
|
|
585
728
|
lastConfigs.clear();
|
|
586
729
|
effectiveResources.clear();
|
|
730
|
+
pluginDefaults.clear();
|
|
587
731
|
currentOverrides = {};
|
|
732
|
+
currentConfig = null;
|
|
588
733
|
delete globalThis.__signalk_containerManager;
|
|
589
734
|
},
|
|
590
735
|
registerWithRouter(router) {
|
|
@@ -638,7 +783,66 @@ module.exports = (app) => {
|
|
|
638
783
|
const limits = (req.body ?? {});
|
|
639
784
|
try {
|
|
640
785
|
const result = await api.updateResources(name, limits);
|
|
641
|
-
res.json({
|
|
786
|
+
res.json({
|
|
787
|
+
name,
|
|
788
|
+
...result,
|
|
789
|
+
effective: api.getResources(name),
|
|
790
|
+
// Mirror what GET returns so the frontend can derive its
|
|
791
|
+
// "Override active" badge from a single source (POST
|
|
792
|
+
// response on click, GET response on reload).
|
|
793
|
+
override: currentOverrides[name] ?? null,
|
|
794
|
+
});
|
|
795
|
+
}
|
|
796
|
+
catch (err) {
|
|
797
|
+
res.status(500).json({
|
|
798
|
+
error: err instanceof Error ? err.message : "Unknown error",
|
|
799
|
+
});
|
|
800
|
+
}
|
|
801
|
+
});
|
|
802
|
+
/**
|
|
803
|
+
* Clear any user override for a container and restore the
|
|
804
|
+
* consumer plugin's pristine default resource limits. The
|
|
805
|
+
* plugin default is captured at the top of api.ensureRunning
|
|
806
|
+
* (pluginDefaults map) before the merge layer mixes in any
|
|
807
|
+
* override — this endpoint restores the pure default state,
|
|
808
|
+
* which is IMPOSSIBLE to express via the normal POST route
|
|
809
|
+
* (POST with `{}` would leave the container with no limits,
|
|
810
|
+
* not the default limits).
|
|
811
|
+
*
|
|
812
|
+
* Requires that the consumer plugin has called ensureRunning
|
|
813
|
+
* at least once, otherwise there's nothing to reset to.
|
|
814
|
+
*/
|
|
815
|
+
router.delete("/api/containers/:name/resources", async (req, res) => {
|
|
816
|
+
if (!runtimeInfo) {
|
|
817
|
+
res.status(503).json({ error: "No container runtime available" });
|
|
818
|
+
return;
|
|
819
|
+
}
|
|
820
|
+
const name = String(req.params.name);
|
|
821
|
+
const pluginDefault = pluginDefaults.get(name);
|
|
822
|
+
if (!pluginDefault) {
|
|
823
|
+
res.status(404).json({
|
|
824
|
+
error: `No plugin default recorded for ${name}. The consumer plugin ` +
|
|
825
|
+
`must call ensureRunning() first (which happens automatically ` +
|
|
826
|
+
`on plugin startup).`,
|
|
827
|
+
});
|
|
828
|
+
return;
|
|
829
|
+
}
|
|
830
|
+
try {
|
|
831
|
+
// Apply the plugin's pristine default to the running container.
|
|
832
|
+
// This goes through updateResources which handles the usual
|
|
833
|
+
// live-vs-recreate decision AND calls recordOverride at the
|
|
834
|
+
// end — which is the opposite of what we want for "clear the
|
|
835
|
+
// override". So we clear AFTERWARDS (two writes to disk, but
|
|
836
|
+
// correct final state).
|
|
837
|
+
const result = await api.updateResources(name, pluginDefault);
|
|
838
|
+
clearOverride(name);
|
|
839
|
+
res.json({
|
|
840
|
+
name,
|
|
841
|
+
cleared: true,
|
|
842
|
+
...result,
|
|
843
|
+
effective: api.getResources(name),
|
|
844
|
+
override: null,
|
|
845
|
+
});
|
|
642
846
|
}
|
|
643
847
|
catch (err) {
|
|
644
848
|
res.status(500).json({
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/resources.d.ts
CHANGED
|
@@ -12,6 +12,42 @@ import type { ContainerResourceLimits, ContainerRuntimeInfo } from "./types";
|
|
|
12
12
|
* state). `target` is the post-merge intended state.
|
|
13
13
|
*/
|
|
14
14
|
export declare function fieldsRequiringRecreateForUnset(current: ContainerResourceLimits, target: ContainerResourceLimits): Array<keyof ContainerResourceLimits>;
|
|
15
|
+
/**
|
|
16
|
+
* Compute the minimal override: the subset of `limits` fields whose
|
|
17
|
+
* values actually differ from the consumer plugin's default.
|
|
18
|
+
*
|
|
19
|
+
* The config panel's resource editor seeds its form from the current
|
|
20
|
+
* effective state (plugin default + override applied), which means
|
|
21
|
+
* users who only want to change ONE field end up submitting a payload
|
|
22
|
+
* containing all visible fields. Without minimization, every such
|
|
23
|
+
* submission would store a full snapshot as the override, which:
|
|
24
|
+
* 1. Shows "Override active" even when the submission matches
|
|
25
|
+
* the plugin default exactly
|
|
26
|
+
* 2. Pins the user to the old default values if the plugin author
|
|
27
|
+
* bumps the default in a future version (e.g. if mayara bumps
|
|
28
|
+
* memory from "512m" to "1g", a snapshot override from before
|
|
29
|
+
* the bump would silently keep the user on "512m")
|
|
30
|
+
*
|
|
31
|
+
* This helper compares each field in `limits` against `pluginDefault`
|
|
32
|
+
* and returns only the fields that represent a real user intent
|
|
33
|
+
* different from the default. Rules:
|
|
34
|
+
*
|
|
35
|
+
* - `limits[k] === undefined` → drop (field not in submission)
|
|
36
|
+
* - `limits[k] === null`:
|
|
37
|
+
* - `pluginDefault[k] === undefined` → drop (both unset, no diff)
|
|
38
|
+
* - `pluginDefault[k]` is set → KEEP (user explicitly unsetting
|
|
39
|
+
* a value the plugin set — real intent)
|
|
40
|
+
* - `limits[k]` has a value:
|
|
41
|
+
* - equal to `pluginDefault[k]` → drop (redundant)
|
|
42
|
+
* - different → KEEP (real user override)
|
|
43
|
+
*
|
|
44
|
+
* An empty result `{}` means "no override" — caller should delete the
|
|
45
|
+
* container's entry from `currentOverrides` rather than store `{}`.
|
|
46
|
+
*
|
|
47
|
+
* Equality comparison is `===` for primitives. The only complex field
|
|
48
|
+
* is cpusetCpus (a string); `1.5 === 1.5` for cpus works correctly.
|
|
49
|
+
*/
|
|
50
|
+
export declare function minimizeOverride(limits: ContainerResourceLimits, pluginDefault: ContainerResourceLimits): ContainerResourceLimits;
|
|
15
51
|
export interface FilterResult {
|
|
16
52
|
/** Limits with unsupported fields removed. */
|
|
17
53
|
accepted: ContainerResourceLimits;
|
package/dist/resources.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAuC7E;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,uBAAuB,GAC9B,KAAK,CAAC,MAAM,uBAAuB,CAAC,CAUtC;
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAuC7E;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,uBAAuB,GAC9B,KAAK,CAAC,MAAM,uBAAuB,CAAC,CAUtC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,uBAAuB,EAC/B,aAAa,EAAE,uBAAuB,GACrC,uBAAuB,CAuBzB;AAuBD,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,QAAQ,EAAE,uBAAuB,CAAC;IAClC;;;;OAIG;IACH,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,YAAY,CA+Bd;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,GAC5C,uBAAuB,CAsBzB;AAaD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,uBAAuB,GAAG,SAAS,EAC3C,OAAO,EAAE,oBAAoB,GAC5B,MAAM,EAAE,CAkCV;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,uBAAuB,GAC9B,MAAM,EAAE,GAAG,IAAI,CAmCjB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,MAAM,EAAE,KACX,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,uBAAuB,EAC/B,IAAI,GAAE,aAA2B,GAChC,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB3C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,uBAAuB,GAAG,SAAS,EACtC,CAAC,EAAE,uBAAuB,GAAG,SAAS,GACrC,OAAO,CAeT"}
|
package/dist/resources.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.fieldsRequiringRecreateForUnset = fieldsRequiringRecreateForUnset;
|
|
4
|
+
exports.minimizeOverride = minimizeOverride;
|
|
4
5
|
exports.filterUnsupportedLimits = filterUnsupportedLimits;
|
|
5
6
|
exports.mergeResourceLimits = mergeResourceLimits;
|
|
6
7
|
exports.resourceFlagsForRun = resourceFlagsForRun;
|
|
@@ -66,6 +67,63 @@ function fieldsRequiringRecreateForUnset(current, target) {
|
|
|
66
67
|
function isSet(v) {
|
|
67
68
|
return v !== undefined && v !== null;
|
|
68
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Compute the minimal override: the subset of `limits` fields whose
|
|
72
|
+
* values actually differ from the consumer plugin's default.
|
|
73
|
+
*
|
|
74
|
+
* The config panel's resource editor seeds its form from the current
|
|
75
|
+
* effective state (plugin default + override applied), which means
|
|
76
|
+
* users who only want to change ONE field end up submitting a payload
|
|
77
|
+
* containing all visible fields. Without minimization, every such
|
|
78
|
+
* submission would store a full snapshot as the override, which:
|
|
79
|
+
* 1. Shows "Override active" even when the submission matches
|
|
80
|
+
* the plugin default exactly
|
|
81
|
+
* 2. Pins the user to the old default values if the plugin author
|
|
82
|
+
* bumps the default in a future version (e.g. if mayara bumps
|
|
83
|
+
* memory from "512m" to "1g", a snapshot override from before
|
|
84
|
+
* the bump would silently keep the user on "512m")
|
|
85
|
+
*
|
|
86
|
+
* This helper compares each field in `limits` against `pluginDefault`
|
|
87
|
+
* and returns only the fields that represent a real user intent
|
|
88
|
+
* different from the default. Rules:
|
|
89
|
+
*
|
|
90
|
+
* - `limits[k] === undefined` → drop (field not in submission)
|
|
91
|
+
* - `limits[k] === null`:
|
|
92
|
+
* - `pluginDefault[k] === undefined` → drop (both unset, no diff)
|
|
93
|
+
* - `pluginDefault[k]` is set → KEEP (user explicitly unsetting
|
|
94
|
+
* a value the plugin set — real intent)
|
|
95
|
+
* - `limits[k]` has a value:
|
|
96
|
+
* - equal to `pluginDefault[k]` → drop (redundant)
|
|
97
|
+
* - different → KEEP (real user override)
|
|
98
|
+
*
|
|
99
|
+
* An empty result `{}` means "no override" — caller should delete the
|
|
100
|
+
* container's entry from `currentOverrides` rather than store `{}`.
|
|
101
|
+
*
|
|
102
|
+
* Equality comparison is `===` for primitives. The only complex field
|
|
103
|
+
* is cpusetCpus (a string); `1.5 === 1.5` for cpus works correctly.
|
|
104
|
+
*/
|
|
105
|
+
function minimizeOverride(limits, pluginDefault) {
|
|
106
|
+
const result = {};
|
|
107
|
+
for (const key of Object.keys(limits)) {
|
|
108
|
+
const value = limits[key];
|
|
109
|
+
const defaultValue = pluginDefault[key];
|
|
110
|
+
if (value === undefined)
|
|
111
|
+
continue;
|
|
112
|
+
if (value === null) {
|
|
113
|
+
// Null = "explicitly unset this field". Only meaningful if the
|
|
114
|
+
// plugin actually had it set in the first place.
|
|
115
|
+
if (isSet(defaultValue)) {
|
|
116
|
+
result[key] = null;
|
|
117
|
+
}
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
// Set value — compare to plugin default.
|
|
121
|
+
if (value !== defaultValue) {
|
|
122
|
+
result[key] = value;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
69
127
|
/**
|
|
70
128
|
* Maps each ContainerResourceLimits field to the cgroup v2 controller
|
|
71
129
|
* it requires. `null` means the field is not gated by a cgroup
|
package/dist/resources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":";;AAmDA,0EAaC;
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -328,6 +328,35 @@ Lists all `sk-` prefixed containers.
|
|
|
328
328
|
|
|
329
329
|
Returns the local image ID (sha256 digest) for an image reference or container name. Returns `null` if not present locally. Used internally by the update detection service for floating-tag drift checks, but exposed to plugins that want to do their own digest comparison.
|
|
330
330
|
|
|
331
|
+
### `getResources(name): ContainerResourceLimits`
|
|
332
|
+
|
|
333
|
+
Returns the currently effective (merged plugin default + user override) resource limits for a managed container. Empty object `{}` if the container isn't tracked or has no limits.
|
|
334
|
+
|
|
335
|
+
```typescript
|
|
336
|
+
const effective = containers.getResources("my-db");
|
|
337
|
+
// → { cpus: 2, memory: "1g", memorySwap: "1g", pidsLimit: 200 }
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
Prefer this over direct `podman inspect` because it reflects the merge logic and stays in sync with user overrides applied via the config panel or REST API. For the raw user override (the diff stored in plugin config), read `GET /api/containers/:name/resources` which also returns an `override` field.
|
|
341
|
+
|
|
342
|
+
### `updateResources(name, limits): Promise<UpdateResourcesResult>`
|
|
343
|
+
|
|
344
|
+
Apply new resource limits to a running container, merging `limits` against the consumer plugin's pristine default captured at `ensureRunning` time. Tries `podman update` first (live, no downtime), falls back to stop+remove+ensureRunning if the runtime refuses (e.g. `cpusetCpus` on a host without cgroup delegation, or unsetting a `memory` limit which create-time-only fields can't do live).
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
const result = await containers.updateResources("my-db", {
|
|
348
|
+
cpus: 3.0, // just the field the user changed
|
|
349
|
+
});
|
|
350
|
+
console.log(result.method); // "live" or "recreated"
|
|
351
|
+
console.log(result.warnings); // optional messages (e.g. cgroup drops)
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
The input `limits` is treated as a diff: fields you don't include are inherited from the plugin default. Fields set to `null` are explicit unsets. The minimized override (only fields actually different from the default) is stored in plugin config and persisted automatically via `savePluginOptions`.
|
|
355
|
+
|
|
356
|
+
If the recreate path is taken and fails, signalk-container attempts rollback to the previous working config before throwing. If rollback also fails, the plugin enters an error state and the error message names both failures clearly.
|
|
357
|
+
|
|
358
|
+
Throws if `name` has no cached `ContainerConfig` — i.e. if the consumer plugin hasn't called `ensureRunning` yet during this Signal K session. That's normally impossible during normal operation since consumer plugins always call `ensureRunning` at startup.
|
|
359
|
+
|
|
331
360
|
---
|
|
332
361
|
|
|
333
362
|
## Update Detection
|
|
@@ -609,6 +638,42 @@ This is the same data exposed via `GET /plugins/signalk-container/api/containers
|
|
|
609
638
|
4. **`updateResources` is callable any time** but the cached config used for recreate fallback comes from your most recent `ensureRunning()` call. If you've never called `ensureRunning`, recreate will throw with a clear error.
|
|
610
639
|
5. **`cpuset-cpus` and `oom-score-adj` cannot be live-updated.** Setting either forces the recreate fallback.
|
|
611
640
|
|
|
641
|
+
### v0.1.8 semantic refinements (important for plugin authors)
|
|
642
|
+
|
|
643
|
+
v0.1.8 tightened the merge semantics so the system behaves predictably across plugin updates and user interactions. As a plugin author you don't need to do anything special — these are invariants signalk-container enforces automatically — but understanding them helps you reason about edge cases.
|
|
644
|
+
|
|
645
|
+
**1. Stored overrides are minimized against your plugin default.**
|
|
646
|
+
|
|
647
|
+
When a user applies an override via the UI or REST API, signalk-container compares the submitted payload against your pristine `config.resources` (captured at `ensureRunning` time) and stores only the fields that actually differ. For example, if your default is `{cpus: 1.5, memory: "512m", memorySwap: "512m", pidsLimit: 200}` and the user applies `{cpus: 2, memory: "512m", memorySwap: "512m", pidsLimit: 200}` (because the form was seeded from current effective state), the stored override becomes just `{cpus: 2}` — the memory/swap/pids values match the default, so they're dropped.
|
|
648
|
+
|
|
649
|
+
Consequence: **if you bump your plugin's default memory from `"512m"` to `"1g"` in a future version, users who only overrode `cpus` automatically get the new memory default.** Their override doesn't pin them to the old value.
|
|
650
|
+
|
|
651
|
+
**2. `updateResources` merges the payload against your plugin default before applying.**
|
|
652
|
+
|
|
653
|
+
When the user POSTs `{cpus: 2}` to `/api/containers/:name/resources`, signalk-container internally does `mergeResourceLimits(pluginDefault, {cpus: 2})` before applying to the container. The container ends up with `{cpus: 2, memory: "512m", memorySwap: "512m", pidsLimit: 200}` — the user's change plus all of your defaults. Without this merge, the user's partial payload would wipe the other fields.
|
|
654
|
+
|
|
655
|
+
Consequence: **users can submit partial payloads without losing your other defaults.** Scripts hitting the REST API don't need to know your full default set.
|
|
656
|
+
|
|
657
|
+
**3. Reset-to-default via `DELETE /api/containers/:name/resources`.**
|
|
658
|
+
|
|
659
|
+
The UI's "Reset to default" button and the DELETE endpoint do three things atomically: apply your pristine `config.resources` to the running container (live or via recreate), clear the user's stored override (`containerOverrides[name]` → deleted from plugin config), and persist the cleared state to disk. Users can go back to "pure plugin default" with one click, including explicit unsets that would otherwise require a manual JSON edit.
|
|
660
|
+
|
|
661
|
+
**4. `getContainerState` is robust against transient runtime state flap.**
|
|
662
|
+
|
|
663
|
+
The underlying podman/docker `inspect` call can briefly report inconsistent `.State.Status` values under concurrent load (observed on rootless podman with systemd cgroup delegation). v0.1.8's `getContainerState` queries three fields — `Status`, `Running`, and `Pid` — and reports `"running"` if any of them indicate running. This prevents the update service's state gate from misfiring and skipping legitimate checks.
|
|
664
|
+
|
|
665
|
+
**5. The `effectiveResources` cache is no longer trusted for no-op decisions.**
|
|
666
|
+
|
|
667
|
+
Prior versions compared the incoming `updateResources` payload against the in-memory `effectiveResources` cache to detect no-ops. v0.1.8 instead calls `getLiveResources()` (podman inspect) and compares against actual cgroup state. This means:
|
|
668
|
+
|
|
669
|
+
- Stale cache entries after a buggy predecessor run no longer mask reality
|
|
670
|
+
- Manual `podman update` from outside Signal K is detected on the next updateResources call
|
|
671
|
+
- Container state drift from any source is handled correctly
|
|
672
|
+
|
|
673
|
+
**6. The config panel form re-seeds from server truth after every Apply / Reset.**
|
|
674
|
+
|
|
675
|
+
The inline ResourceLimitsEditor updates its form inputs from the server's post-action `effective` state after Apply or Reset. This eliminates the class of bug where a user's stale form values could silently re-submit on accidental Apply after a Reset.
|
|
676
|
+
|
|
612
677
|
---
|
|
613
678
|
|
|
614
679
|
## TypeScript Types
|
package/package.json
CHANGED
package/public/805.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(self.webpackChunksignalk_container=self.webpackChunksignalk_container||[]).push([[805],{805(e,t,n){n.r(t),n.d(t,{default:()=>s});var a=n(231);const o={root:{fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',color:"#333",padding:"16px 0"},sectionTitle:{fontSize:13,fontWeight:600,color:"#888",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:10,marginTop:24},btn:{display:"inline-flex",alignItems:"center",gap:8,padding:"8px 16px",border:"none",borderRadius:6,fontSize:13,fontWeight:600,cursor:"pointer"},btnPrimary:{background:"#3b82f6",color:"#fff"},btnDanger:{background:"#ef4444",color:"#fff",padding:"6px 12px",fontSize:12},btnWarning:{background:"#f59e0b",color:"#fff",padding:"6px 12px",fontSize:12},btnSave:{background:"#3b82f6",color:"#fff"},btnSuccess:{background:"#10b981",color:"#fff"},btnDisabled:{opacity:.5,cursor:"not-allowed"},status:{marginTop:8,fontSize:12,minHeight:18},runtimeCard:{display:"flex",alignItems:"center",gap:14,padding:"14px 18px",background:"#f8f9fa",border:"1px solid #e0e0e0",borderRadius:10,marginBottom:12},runtimeIcon:{width:44,height:44,borderRadius:10,display:"flex",alignItems:"center",justifyContent:"center",fontSize:22,flexShrink:0},runtimeInfo:{flex:1},runtimeName:{fontSize:15,fontWeight:600,color:"#333"},runtimeVersion:{fontSize:12,color:"#888"},containerItem:{display:"flex",alignItems:"center",gap:12,padding:"10px 14px",background:"#f8f9fa",border:"1px solid #e0e0e0",borderRadius:10,marginBottom:8},stateIndicator:{width:10,height:10,borderRadius:"50%",flexShrink:0},containerInfo:{flex:1,minWidth:0},containerName:{fontSize:14,fontWeight:600,color:"#333"},containerMeta:{fontSize:11,color:"#888",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},containerActions:{display:"flex",gap:6,flexShrink:0},empty:{textAlign:"center",padding:"30px 16px",color:"#999",fontSize:13},fieldRow:{display:"flex",alignItems:"center",gap:12,marginBottom:10},label:{fontSize:13,fontWeight:500,color:"#555",width:160,flexShrink:0},select:{padding:"6px 10px",borderRadius:6,border:"1px solid #ccc",fontSize:13,background:"#fff",color:"#333"},hint:{fontSize:11,color:"#aaa",marginLeft:8},pruneResult:{fontSize:12,color:"#10b981",marginTop:6}},r={running:"#10b981",stopped:"#f59e0b",missing:"#94a3b8","no-runtime":"#ef4444"},i={running:"Running",stopped:"Stopped",missing:"Not created","no-runtime":"No runtime"};function l({label:e,value:t,options:n,onChange:r,hint:i}){return a.createElement("div",{style:o.fieldRow},a.createElement("span",{style:o.label},e),a.createElement("select",{style:o.select,value:t,onChange:e=>r(e.target.value)},n.map(e=>a.createElement("option",{key:e.value,value:e.value},e.label))),i&&a.createElement("span",{style:o.hint},i))}function s({configuration:e,save:t}){const n=e||{},[s,c]=(0,a.useState)(n.runtime||"auto"),[m,d]=(0,a.useState)(n.pruneSchedule||"weekly"),[u,p]=(0,a.useState)(null),[f,g]=(0,a.useState)([]),[b,y]=(0,a.useState)(!0),[h,v]=(0,a.useState)(""),[S,k]=(0,a.useState)(!1),[E,x]=(0,a.useState)(null),w=(0,a.useCallback)(async()=>{try{const[e,t]=await Promise.all([fetch("/plugins/signalk-container/api/runtime"),fetch("/plugins/signalk-container/api/containers")]);e.ok?p(await e.json()):p(null),t.ok?g(await t.json()):g([])}catch{p(null),g([])}y(!1)},[]);return(0,a.useEffect)(()=>{w();const e=setInterval(w,5e3);return()=>clearInterval(e)},[w]),a.createElement("div",{style:o.root},a.createElement("div",{style:o.sectionTitle},"Runtime"),b?a.createElement("div",{style:o.empty},"Detecting container runtime..."):u?a.createElement("div",{style:o.runtimeCard},a.createElement("div",{style:{...o.runtimeIcon,background:"podman"===u.runtime?"#892ca0":"#2496ed",color:"#fff"}},"podman"===u.runtime?"P":"D"),a.createElement("div",{style:o.runtimeInfo},a.createElement("div",{style:o.runtimeName},u.runtime.charAt(0).toUpperCase()+u.runtime.slice(1),u.isPodmanDockerShim?" (via docker shim)":""),a.createElement("div",{style:o.runtimeVersion},"Version ",u.version)),a.createElement("div",{style:{...o.stateIndicator,background:"#10b981"},title:"Runtime available"})):a.createElement("div",{style:o.runtimeCard},a.createElement("div",{style:{...o.runtimeIcon,background:"#fef2f2",color:"#ef4444"}},"!"),a.createElement("div",{style:o.runtimeInfo},a.createElement("div",{style:o.runtimeName},"No container runtime found"),a.createElement("div",{style:o.runtimeVersion},"Install Podman: sudo apt install podman"))),a.createElement("div",{style:o.sectionTitle},"Settings"),a.createElement(l,{label:"Preferred runtime",value:s,onChange:c,options:[{value:"auto",label:"Auto-detect (Podman preferred)"},{value:"podman",label:"Podman"},{value:"docker",label:"Docker"}]}),a.createElement(l,{label:"Auto-prune images",value:m,onChange:d,options:[{value:"off",label:"Off"},{value:"weekly",label:"Weekly"},{value:"monthly",label:"Monthly"}]}),a.createElement("div",{style:o.sectionTitle},"Managed Containers"),0===f.length?a.createElement("div",{style:o.empty},b?"Loading...":"No managed containers. Other plugins will create them."):f.map(e=>a.createElement("div",{key:e.name,style:o.containerItem},a.createElement("div",{style:{...o.stateIndicator,background:r[e.state]||"#94a3b8"},title:i[e.state]||e.state}),a.createElement("div",{style:o.containerInfo},a.createElement("div",{style:o.containerName},e.name),a.createElement("div",{style:o.containerMeta},e.image," · ",i[e.state]||e.state,e.ports&&e.ports.length>0&&e.ports[0]?` · ${e.ports.join(", ")}`:"")),a.createElement("div",{style:o.containerActions},"stopped"===e.state&&a.createElement("button",{style:{...o.btn,...o.btnPrimary,padding:"6px 12px",fontSize:12},onClick:()=>(async e=>{v(`Starting ${e}...`),k(!1);try{const t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/start`,{method:"POST"});if(t.ok)v(`${e} started.`),w();else{const e=await t.json().catch(()=>({error:t.statusText}));v(`Failed: ${e.error}`),k(!0)}}catch(e){v(`Error: ${e.message}`),k(!0)}})(e.name)},"Start"),"running"===e.state&&a.createElement("button",{style:{...o.btn,...o.btnWarning},onClick:()=>(async e=>{v(`Stopping ${e}...`),k(!1);try{const t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/stop`,{method:"POST"});if(t.ok)v(`${e} stopped.`),w();else{const e=await t.json().catch(()=>({error:t.statusText}));v(`Failed: ${e.error}`),k(!0)}}catch(e){v(`Error: ${e.message}`),k(!0)}})(e.name)},"Stop"),a.createElement("button",{style:{...o.btn,...o.btnDanger},onClick:()=>(async(e,t)=>{if("running"!==t||window.confirm(`${e} is running. Stop and remove it?`)){v(`Removing ${e}...`),k(!1);try{const t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/remove`,{method:"POST"});if(t.ok)v(`${e} removed.`),w();else{const e=await t.json().catch(()=>({error:t.statusText}));v(`Failed: ${e.error}`),k(!0)}}catch(e){v(`Error: ${e.message}`),k(!0)}}})(e.name,e.state)},"Remove")))),a.createElement("div",{style:o.sectionTitle},"Maintenance"),a.createElement("button",{style:{...o.btn,...o.btnSuccess},onClick:async()=>{v("Pruning dangling images..."),k(!1),x(null);try{const e=await fetch("/plugins/signalk-container/api/prune",{method:"POST"});if(e.ok){const t=await e.json().catch(()=>({error:e.statusText}));x(t),v(`Pruned ${t.imagesRemoved} image(s), reclaimed ${t.spaceReclaimed}.`)}else{const t=await e.json().catch(()=>({error:e.statusText}));v(`Prune failed: ${t.error}`),k(!0)}}catch(e){v(`Error: ${e.message}`),k(!0)}}},"Prune Dangling Images"),h&&a.createElement("div",{style:{...o.status,color:S?"#ef4444":"#10b981"}},h),a.createElement("div",{style:{...o.sectionTitle,marginTop:28}}," "),a.createElement("button",{style:{...o.btn,...o.btnSave},onClick:()=>{t({runtime:s,pruneSchedule:m,maxConcurrentJobs:n.maxConcurrentJobs||2}),v("Saved! Plugin will restart."),k(!1)}},"Save Configuration"))}}}]);
|
|
1
|
+
"use strict";(self.webpackChunksignalk_container=self.webpackChunksignalk_container||[]).push([[805],{805(e,t,n){n.r(t),n.d(t,{default:()=>m});var r=n(231);const a={root:{fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',color:"#333",padding:"16px 0"},sectionTitle:{fontSize:13,fontWeight:600,color:"#888",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:10,marginTop:24},btn:{display:"inline-flex",alignItems:"center",gap:8,padding:"8px 16px",border:"none",borderRadius:6,fontSize:13,fontWeight:600,cursor:"pointer"},btnPrimary:{background:"#3b82f6",color:"#fff"},btnDanger:{background:"#ef4444",color:"#fff",padding:"6px 12px",fontSize:12},btnWarning:{background:"#f59e0b",color:"#fff",padding:"6px 12px",fontSize:12},btnSave:{background:"#3b82f6",color:"#fff"},btnSuccess:{background:"#10b981",color:"#fff"},btnDisabled:{opacity:.5,cursor:"not-allowed"},status:{marginTop:8,fontSize:12,minHeight:18},runtimeCard:{display:"flex",alignItems:"center",gap:14,padding:"14px 18px",background:"#f8f9fa",border:"1px solid #e0e0e0",borderRadius:10,marginBottom:12},runtimeIcon:{width:44,height:44,borderRadius:10,display:"flex",alignItems:"center",justifyContent:"center",fontSize:22,flexShrink:0},runtimeInfo:{flex:1},runtimeName:{fontSize:15,fontWeight:600,color:"#333"},runtimeVersion:{fontSize:12,color:"#888"},containerItem:{display:"flex",alignItems:"center",gap:12,padding:"10px 14px",background:"#f8f9fa",border:"1px solid #e0e0e0",borderRadius:10,marginBottom:8},stateIndicator:{width:10,height:10,borderRadius:"50%",flexShrink:0},containerInfo:{flex:1,minWidth:0},containerName:{fontSize:14,fontWeight:600,color:"#333"},containerMeta:{fontSize:11,color:"#888",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},containerActions:{display:"flex",gap:6,flexShrink:0},containerCard:{background:"#f8f9fa",border:"1px solid #e0e0e0",borderRadius:10,marginBottom:8,overflow:"hidden"},containerItemFlat:{display:"flex",alignItems:"center",gap:12,padding:"10px 14px"},limitsRow:{display:"flex",alignItems:"center",gap:10,padding:"6px 14px 10px 34px",fontSize:11,color:"#666",flexWrap:"wrap"},updatesRow:{display:"flex",alignItems:"center",gap:10,padding:"0 14px 10px 34px",fontSize:11,color:"#666",flexWrap:"wrap"},limitBadge:{display:"inline-flex",alignItems:"center",padding:"2px 8px",borderRadius:12,background:"#e5e7eb",color:"#374151",fontSize:11,fontWeight:500},overrideBadge:{display:"inline-flex",alignItems:"center",padding:"2px 8px",borderRadius:12,background:"#fef3c7",color:"#92400e",fontSize:10,fontWeight:600},editLimitsBtn:{marginLeft:"auto",padding:"3px 10px",fontSize:11,background:"#fff",color:"#3b82f6",border:"1px solid #3b82f6",borderRadius:6,cursor:"pointer",fontWeight:500},limitsEditor:{borderTop:"1px solid #e0e0e0",padding:"14px 14px 14px 34px",background:"#fff"},limitsEditorGrid:{display:"grid",gridTemplateColumns:"160px 1fr auto",gap:"8px 12px",alignItems:"center",marginBottom:10},limitsEditorLabel:{fontSize:12,fontWeight:500,color:"#555"},limitsEditorInput:{padding:"5px 8px",borderRadius:5,border:"1px solid #ccc",fontSize:12,background:"#fff",color:"#333",fontFamily:"inherit",width:"100%",boxSizing:"border-box"},limitsEditorInputDisabled:{background:"#f3f4f6",color:"#9ca3af",fontStyle:"italic"},limitsEditorUnsetBtn:{width:24,height:24,borderRadius:4,border:"1px solid #d1d5db",background:"#fff",color:"#6b7280",fontSize:14,lineHeight:1,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center"},limitsEditorUnsetBtnActive:{background:"#fee2e2",color:"#991b1b",border:"1px solid #fca5a5"},limitsEditorAdvancedToggle:{fontSize:11,color:"#3b82f6",cursor:"pointer",userSelect:"none",marginTop:6,marginBottom:10,display:"inline-block"},limitsEditorActions:{display:"flex",gap:8,justifyContent:"flex-end",marginTop:10},limitsEditorResult:{marginTop:10,padding:"8px 10px",borderRadius:6,fontSize:11,lineHeight:1.5},limitsEditorResultLive:{background:"#d1fae5",color:"#065f46"},limitsEditorResultRecreated:{background:"#fef3c7",color:"#92400e"},limitsEditorResultError:{background:"#fee2e2",color:"#991b1b"},limitsEditorWarning:{marginTop:4,fontSize:10,opacity:.85,fontStyle:"italic"},empty:{textAlign:"center",padding:"30px 16px",color:"#999",fontSize:13},fieldRow:{display:"flex",alignItems:"center",gap:12,marginBottom:10},label:{fontSize:13,fontWeight:500,color:"#555",width:160,flexShrink:0},select:{padding:"6px 10px",borderRadius:6,border:"1px solid #ccc",fontSize:13,background:"#fff",color:"#333"},hint:{fontSize:11,color:"#aaa",marginLeft:8},pruneResult:{fontSize:12,color:"#10b981",marginTop:6}},i={running:"#10b981",stopped:"#f59e0b",missing:"#94a3b8","no-runtime":"#ef4444"},o={running:"Running",stopped:"Stopped",missing:"Not created","no-runtime":"No runtime"};function l({label:e,value:t,options:n,onChange:i,hint:o}){return r.createElement("div",{style:a.fieldRow},r.createElement("span",{style:a.label},e),r.createElement("select",{style:a.select,value:t,onChange:e=>i(e.target.value)},n.map(e=>r.createElement("option",{key:e.value,value:e.value},e.label))),o&&r.createElement("span",{style:a.hint},o))}function s({label:e,value:t,onChange:n,hint:i}){return r.createElement("div",{style:a.fieldRow},r.createElement("span",{style:a.label},e),r.createElement("label",{style:{display:"inline-flex",alignItems:"center",cursor:"pointer",gap:8}},r.createElement("input",{type:"checkbox",checked:t,onChange:e=>n(e.target.checked),style:{width:16,height:16,cursor:"pointer"}}),r.createElement("span",{style:{fontSize:13,color:"#555"}},t?"Enabled":"Disabled")),i&&r.createElement("span",{style:a.hint},i))}function c(e){return e&&e.startsWith("sk-")?e.slice(3):e}const d=[{key:"cpus",label:"CPU (cores)",type:"number",step:"0.1",min:"0.1",placeholder:"e.g. 1.5",primary:!0},{key:"memory",label:"Memory",type:"text",placeholder:"e.g. 512m, 2g",primary:!0},{key:"memorySwap",label:"Memory + swap",type:"text",placeholder:"= memory to disable swap",primary:!0},{key:"pidsLimit",label:"Max processes",type:"number",step:"1",min:"1",placeholder:"e.g. 200",primary:!0},{key:"cpuShares",label:"CPU shares (weight)",type:"number",step:"1",min:"2",placeholder:"default 1024",primary:!1},{key:"cpusetCpus",label:"Pin to CPUs",type:"text",placeholder:'e.g. "0,1" or "1-3"',primary:!1},{key:"memoryReservation",label:"Memory reservation",type:"text",placeholder:"soft floor, e.g. 256m",primary:!1},{key:"oomScoreAdj",label:"OOM score adjust",type:"number",step:"1",min:"-1000",max:"1000",placeholder:"-1000 to 1000",primary:!1}];function u({containerName:e,effective:t,initialOverride:n,onApply:i,onResetToDefault:o,onClose:l}){const s=e=>{const n=e??t,r={};for(const e of d)n&&void 0!==n[e.key]&&null!==n[e.key]?r[e.key]=String(n[e.key]):r[e.key]="";return r},[c,u]=(0,r.useState)(()=>s(t)),[m,p]=(0,r.useState)(()=>!!n&&d.some(e=>!e.primary&&void 0!==n[e.key])),[f,g]=(0,r.useState)(!1),[b,y]=(0,r.useState)(!1),[h,k]=(0,r.useState)(null),v=t=>{const n=c[t.key],i=null===n;return r.createElement(r.Fragment,{key:t.key},r.createElement("label",{style:a.limitsEditorLabel,htmlFor:`lim-${e}-${t.key}`},t.label),r.createElement("input",{id:`lim-${e}-${t.key}`,type:i?"text":t.type,value:i?"":n,step:t.step,min:t.min,max:t.max,placeholder:i?"(unset — remove limit)":t.placeholder,disabled:i,onChange:e=>{return n=t.key,r=e.target.value,void u(e=>({...e,[n]:r}));var n,r},style:{...a.limitsEditorInput,...i?a.limitsEditorInputDisabled:{}}}),r.createElement("button",{type:"button",onClick:()=>{return e=t.key,void u(t=>({...t,[e]:null===t[e]?"":null}));var e},title:i?"Click to set a value again":"Click to explicitly unset (remove this limit)",style:{...a.limitsEditorUnsetBtn,...i?a.limitsEditorUnsetBtnActive:{}}},i?"↺":"×"))},E=d.filter(e=>e.primary),x=d.filter(e=>!e.primary);return r.createElement("div",{style:a.limitsEditor},r.createElement("div",{style:a.limitsEditorGrid},E.map(v)),r.createElement("span",{onClick:()=>p(!m),style:a.limitsEditorAdvancedToggle},m?"▾":"▸"," Advanced (",x.length," more fields)"),m&&r.createElement("div",{style:a.limitsEditorGrid},x.map(v)),r.createElement("div",{style:a.limitsEditorActions},r.createElement("button",{type:"button",onClick:l,disabled:f||b,style:{...a.btn,padding:"6px 12px",fontSize:12,background:"#fff",color:"#6b7280",border:"1px solid #d1d5db",...f||b?a.btnDisabled:{}}},"Close"),r.createElement("button",{type:"button",onClick:async()=>{if(window.confirm(`Reset ${e} to the plugin's default resource limits? This will remove your override and may cause a brief container recreate (~5s of downtime) if memory limits need to be unset.`)){y(!0),k(null);try{const e=await o();k(e),e&&e.effective&&u(s(e.effective))}catch(e){k({error:e.message||String(e)})}y(!1)}},disabled:f||b,title:"Clear override and restore plugin-default limits",style:{...a.btn,padding:"6px 12px",fontSize:12,background:"#fff",color:"#d97706",border:"1px solid #f59e0b",...f||b?a.btnDisabled:{}}},b?"Resetting...":"Reset to default"),r.createElement("button",{type:"button",onClick:()=>{u(s(t)),k(null)},disabled:f||b,title:"Discard unsaved changes in this form (does not touch the server)",style:{...a.btn,padding:"6px 12px",fontSize:12,background:"#fff",color:"#6b7280",border:"1px solid #d1d5db",...f||b?a.btnDisabled:{}}},"Revert"),r.createElement("button",{type:"button",onClick:async()=>{g(!0),k(null);try{const e=function(e){const t={};for(const n of d){const r=e[n.key];if(null!==r){if(void 0!==r&&""!==r)if("number"===n.type){const e=Number(r);if(!Number.isFinite(e))continue;t[n.key]=e}else t[n.key]=r}else t[n.key]=null}return t}(c),t=await i(e);k(t),t&&t.effective&&u(s(t.effective))}catch(e){k({error:e.message||String(e)})}g(!1)},disabled:f||b,style:{...a.btn,...a.btnPrimary,padding:"6px 14px",fontSize:12,...f||b?a.btnDisabled:{}}},f?"Applying...":"Apply")),h&&r.createElement("div",{style:{...a.limitsEditorResult,...h.error?a.limitsEditorResultError:"recreated"===h.method?a.limitsEditorResultRecreated:a.limitsEditorResultLive}},h.error?r.createElement(r.Fragment,null,r.createElement("strong",null,"Error:")," ",h.error):r.createElement(r.Fragment,null,r.createElement("strong",null,"live"===h.method?"Applied live (no restart)":"Container recreated"),h.warnings&&h.warnings.length>0&&r.createElement("div",{style:a.limitsEditorWarning},h.warnings.map((e,t)=>r.createElement("div",{key:t},"⚠ ",e))))))}function m({configuration:e,save:t}){const n=e||{},[m,p]=(0,r.useState)(n.runtime||"auto"),[f,g]=(0,r.useState)(n.pruneSchedule||"weekly"),[b,y]=(0,r.useState)(n.updateCheckInterval||"24h"),[h,k]=(0,r.useState)(!1!==n.backgroundUpdateChecks),[v,E]=(0,r.useState)(n.containerOverrides||{}),[x,S]=(0,r.useState)(null),[w,C]=(0,r.useState)([]),[$,R]=(0,r.useState)({}),[I,T]=(0,r.useState)({}),[z,P]=(0,r.useState)({}),[j,A]=(0,r.useState)({}),[D,U]=(0,r.useState)(new Set),[O,B]=(0,r.useState)(new Set),[N,W]=(0,r.useState)(!0),[L,M]=(0,r.useState)(""),[F,V]=(0,r.useState)(!1),[H,G]=(0,r.useState)(null),J=(0,r.useCallback)(async()=>{try{const[e,t]=await Promise.all([fetch("/plugins/signalk-container/api/runtime"),fetch("/plugins/signalk-container/api/containers")]);e.ok?S(await e.json()):S(null);let n=[];if(t.ok?(n=await t.json(),C(n)):C([]),n.length>0){const e={},t={};await Promise.all(n.map(async n=>{const r=c(n.name);try{const n=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(r)}/resources`);if(n.ok){const a=await n.json();e[r]=a.effective||{},t[r]=a.override??null}}catch{}})),R(e),T(t)}try{const e=await fetch("/plugins/signalk-container/api/updates");if(e.ok){const t=await e.json();if(Array.isArray(t)){const e={},n={};for(const r of t)r&&r.containerName&&(n[r.containerName]=r,r.pluginId&&(e[r.containerName]=r.pluginId));P(e=>{const t={...n};for(const r of Object.keys(n)){const a=n[r],i=e[r];"unknown"===a.reason&&i&&i.reason&&"unknown"!==i.reason&&(t[r]=i)}return t}),A(e)}}}catch{}}catch{S(null),C([])}W(!1)},[]);(0,r.useEffect)(()=>{J();const e=setInterval(J,5e3);return()=>clearInterval(e)},[J]);const _=e=>{const t=c(e);B(e=>{const n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})};return r.createElement("div",{style:a.root},r.createElement("div",{style:a.sectionTitle},"Runtime"),N?r.createElement("div",{style:a.empty},"Detecting container runtime..."):x?r.createElement("div",{style:a.runtimeCard},r.createElement("div",{style:{...a.runtimeIcon,background:"podman"===x.runtime?"#892ca0":"#2496ed",color:"#fff"}},"podman"===x.runtime?"P":"D"),r.createElement("div",{style:a.runtimeInfo},r.createElement("div",{style:a.runtimeName},x.runtime.charAt(0).toUpperCase()+x.runtime.slice(1),x.isPodmanDockerShim?" (via docker shim)":""),r.createElement("div",{style:a.runtimeVersion},"Version ",x.version)),r.createElement("div",{style:{...a.stateIndicator,background:"#10b981"},title:"Runtime available"})):r.createElement("div",{style:a.runtimeCard},r.createElement("div",{style:{...a.runtimeIcon,background:"#fef2f2",color:"#ef4444"}},"!"),r.createElement("div",{style:a.runtimeInfo},r.createElement("div",{style:a.runtimeName},"No container runtime found"),r.createElement("div",{style:a.runtimeVersion},"Install Podman: sudo apt install podman"))),r.createElement("div",{style:a.sectionTitle},"Settings"),r.createElement(l,{label:"Preferred runtime",value:m,onChange:p,options:[{value:"auto",label:"Auto-detect (Podman preferred)"},{value:"podman",label:"Podman"},{value:"docker",label:"Docker"}]}),r.createElement(l,{label:"Auto-prune images",value:f,onChange:g,options:[{value:"off",label:"Off"},{value:"weekly",label:"Weekly"},{value:"monthly",label:"Monthly"}]}),r.createElement(l,{label:"Update check interval",value:b,onChange:y,options:[{value:"1h",label:"Every hour"},{value:"6h",label:"Every 6 hours"},{value:"12h",label:"Every 12 hours"},{value:"24h",label:"Daily (recommended)"},{value:"48h",label:"Every 2 days"},{value:"168h",label:"Weekly"}],hint:"How often to check for new container images"}),r.createElement(s,{label:"Background update checks",value:h,onChange:k,hint:"Disable on metered connections; manual check still works"}),r.createElement("div",{style:a.sectionTitle},"Managed Containers"),0===w.length?r.createElement("div",{style:a.empty},N?"Loading...":"No managed containers. Other plugins will create them."):w.map(e=>{const t=c(e.name),n=$[t]||{},l=I[t],s=l&&Object.keys(l).length>0,m=O.has(t),p=d.map(e=>function(e,t){if(null==t||""===t)return null;switch(e){case"cpus":return`${t} CPU`;case"memory":return`${t}`;case"memorySwap":return`swap: ${t}`;case"memoryReservation":return`reserve: ${t}`;case"pidsLimit":return`${t} PIDs`;case"cpuShares":return`shares: ${t}`;case"cpusetCpus":return`cpus: ${t}`;case"oomScoreAdj":return`oom: ${t}`;default:return`${e}: ${t}`}}(e.key,n[e.key])).filter(Boolean),f=z[t],g=function(e){if(!e||!e.reason)return null;const{reason:t,runningTag:n,currentVersion:r,latestVersion:a,fromCache:i}=e;return"newer-version"===t?{label:`↑ ${a||"update"} available`,bg:"#fef3c7",fg:"#92400e",title:`Update available: ${r} → ${a}`}:"digest-drift"===t?{label:"↻ rebuild available",bg:"#fef3c7",fg:"#92400e",title:`Image rebuild available for :${n}${a?` (latest stable ${a})`:""}`}:"offline"===t?{label:i?"📡 offline (cached)":"📡 offline",bg:"#e5e7eb",fg:"#4b5563",title:i?"Network unreachable; showing last cached check result":"Network unreachable; no cached result yet"}:"error"===t?{label:"⚠ check error",bg:"#fee2e2",fg:"#991b1b",title:e.error||"Update check error"}:"up-to-date"===t?{label:"✅ up to date",bg:"#dcfce7",fg:"#166534",title:"Up to date"+(r?" ("+r+")":"")}:null}(f),b=!!j[t],y=D.has(t);return r.createElement("div",{key:e.name,style:a.containerCard},r.createElement("div",{style:a.containerItemFlat},r.createElement("div",{style:{...a.stateIndicator,background:i[e.state]||"#94a3b8"},title:o[e.state]||e.state}),r.createElement("div",{style:a.containerInfo},r.createElement("div",{style:a.containerName},e.name),r.createElement("div",{style:a.containerMeta},e.image," · ",o[e.state]||e.state,e.ports&&e.ports.length>0&&e.ports[0]?` · ${e.ports.join(", ")}`:"")),r.createElement("div",{style:a.containerActions},"stopped"===e.state&&r.createElement("button",{style:{...a.btn,...a.btnPrimary,padding:"6px 12px",fontSize:12},onClick:()=>(async e=>{M(`Starting ${e}...`),V(!1);try{const t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/start`,{method:"POST"});if(t.ok)M(`${e} started.`),J();else{const e=await t.json().catch(()=>({error:t.statusText}));M(`Failed: ${e.error}`),V(!0)}}catch(e){M(`Error: ${e.message}`),V(!0)}})(e.name)},"Start"),"running"===e.state&&r.createElement("button",{style:{...a.btn,...a.btnWarning},onClick:()=>(async e=>{M(`Stopping ${e}...`),V(!1);try{const t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/stop`,{method:"POST"});if(t.ok)M(`${e} stopped.`),J();else{const e=await t.json().catch(()=>({error:t.statusText}));M(`Failed: ${e.error}`),V(!0)}}catch(e){M(`Error: ${e.message}`),V(!0)}})(e.name)},"Stop"),r.createElement("button",{style:{...a.btn,...a.btnDanger},onClick:()=>(async(e,t)=>{if("running"!==t||window.confirm(`${e} is running. Stop and remove it?`)){M(`Removing ${e}...`),V(!1);try{const t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/remove`,{method:"POST"});if(t.ok)M(`${e} removed.`),J();else{const e=await t.json().catch(()=>({error:t.statusText}));M(`Failed: ${e.error}`),V(!0)}}catch(e){M(`Error: ${e.message}`),V(!0)}}})(e.name,e.state)},"Remove"))),r.createElement("div",{style:a.limitsRow},0===p.length?r.createElement("span",{style:{color:"#9ca3af",fontStyle:"italic"}},"No resource limits set"):p.map((e,t)=>r.createElement("span",{key:t,style:a.limitBadge},e)),s&&r.createElement("span",{style:a.overrideBadge,title:"You have a user override configured for this container"},"Override active"),"running"===e.state&&r.createElement("button",{type:"button",style:a.editLimitsBtn,onClick:()=>_(e.name)},m?"Collapse ▾":"Edit Limits ▸")),b&&"running"===e.state&&r.createElement("div",{style:a.updatesRow},g?r.createElement("span",{style:{...a.limitBadge,background:g.bg,color:g.fg},title:g.title},g.label):r.createElement("span",{style:{color:"#9ca3af",fontStyle:"italic"}},"No update check yet"),f?.lastSuccessfulCheckAt&&r.createElement("span",{style:{fontSize:10,color:"#9ca3af"},title:`Last successful check: ${f.lastSuccessfulCheckAt}`},"checked"," ",function(e){try{const t=new Date(e).getTime(),n=Math.max(0,Math.floor((Date.now()-t)/1e3));if(n<5)return"just now";if(n<60)return`${n}s ago`;const r=Math.floor(n/60);if(r<60)return`${r}m ago`;const a=Math.floor(r/60);return a<24?`${a}h ago`:`${Math.floor(a/24)}d ago`}catch{return e}}(f.lastSuccessfulCheckAt)),r.createElement("button",{type:"button",onClick:()=>(async e=>{const t=j[e];if(!t)return M(`${e}: no update service registered. The consumer plugin hasn't migrated to signalk-container's update detection yet.`),void V(!0);U(t=>{const n=new Set(t);return n.add(e),n}),M(`Checking ${e} for updates...`),V(!1);try{const n=await fetch(`/plugins/signalk-container/api/updates/${encodeURIComponent(t)}/check`,{method:"POST"});if(n.ok){const t=await n.json();P(n=>({...n,[e]:t})),M(function(e){if(!e)return"No update data";const{runningTag:t,currentVersion:n,latestVersion:r,updateAvailable:a,reason:i,fromCache:o}=e;return"offline"===i?o?"📡 Offline — last cached result shows "+(a?"update available":"up to date"):"📡 Offline — no cached result yet":"newer-version"===i?`↑ Update available: ${n} → ${r}`:"digest-drift"===i?`↻ Rebuild available for :${t}${r?` (latest stable: ${r})`:""}`:"up-to-date"===i?"✅ Up to date"+(n?" ("+n+")":""):"older-than-pinned"===i?`ℹ Pinned to ${n}, latest stable is ${r}`:"error"===i?`⚠ Check error: ${e.error||"unknown"}`:`State: ${i||"unknown"}`}(t)),V(!1)}else{const e=await n.json().catch(()=>({error:n.statusText}));M(`Check failed: ${e.error}`),V(!0)}}catch(e){M(`Check error: ${e.message}`),V(!0)}U(t=>{const n=new Set(t);return n.delete(e),n})})(t),disabled:y,title:"Force a fresh update check now",style:{...a.editLimitsBtn,marginLeft:"auto",...y?a.btnDisabled:{}}},y?"Checking...":"Check now ↻")),m&&r.createElement(u,{containerName:t,effective:n,initialOverride:l,onApply:e=>(async(e,t)=>{const n=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/resources`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),r=await n.json().catch(()=>({}));return n.ok?(r.effective&&R(t=>({...t,[e]:r.effective})),T(t=>({...t,[e]:r.override??null})),E(t=>{const n={...t};return r.override&&Object.keys(r.override).length>0?n[e]=r.override:delete n[e],n}),{method:r.method,warnings:r.warnings,effective:r.effective}):{error:r.error||`${n.status} ${n.statusText}`}})(t,e),onResetToDefault:()=>(async e=>{const t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/resources`,{method:"DELETE"}),n=await t.json().catch(()=>({}));return t.ok?(n.effective&&R(t=>({...t,[e]:n.effective})),T(t=>({...t,[e]:null})),E(t=>{const n={...t};return delete n[e],n}),{method:n.method,warnings:n.warnings,effective:n.effective}):{error:n.error||`${t.status} ${t.statusText}`}})(t),onClose:()=>_(e.name)}))}),r.createElement("div",{style:a.sectionTitle},"Maintenance"),r.createElement("button",{style:{...a.btn,...a.btnSuccess},onClick:async()=>{M("Pruning dangling images..."),V(!1),G(null);try{const e=await fetch("/plugins/signalk-container/api/prune",{method:"POST"});if(e.ok){const t=await e.json().catch(()=>({error:e.statusText}));G(t),M(`Pruned ${t.imagesRemoved} image(s), reclaimed ${t.spaceReclaimed}.`)}else{const t=await e.json().catch(()=>({error:e.statusText}));M(`Prune failed: ${t.error}`),V(!0)}}catch(e){M(`Error: ${e.message}`),V(!0)}}},"Prune Dangling Images"),L&&r.createElement("div",{style:{...a.status,color:F?"#ef4444":"#10b981"}},L),r.createElement("div",{style:{...a.sectionTitle,marginTop:28}}," "),r.createElement("button",{style:{...a.btn,...a.btnSave},onClick:()=>{const e={};for(const[t,n]of Object.entries(I))n&&Object.keys(n).length>0&&(e[t]=n);t({...n,runtime:m,pruneSchedule:f,maxConcurrentJobs:n.maxConcurrentJobs||2,updateCheckInterval:b,backgroundUpdateChecks:h,containerOverrides:e}),M("Saved! Plugin will restart."),V(!1)}},"Save Configuration"))}}}]);
|