rigscope 0.1.3 → 0.1.4
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +4 -4
- package/.next/build-manifest.json +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/administration/page_client-reference-manifest.js +1 -1
- package/.next/server/app/administration.html +1 -1
- package/.next/server/app/administration.rsc +1 -1
- package/.next/server/app/administration.segments/_full.segment.rsc +1 -1
- package/.next/server/app/administration.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/administration.segments/administration/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/alerts/page_client-reference-manifest.js +1 -1
- package/.next/server/app/alerts.html +1 -1
- package/.next/server/app/alerts.rsc +1 -1
- package/.next/server/app/alerts.segments/_full.segment.rsc +1 -1
- package/.next/server/app/alerts.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/alerts.segments/alerts/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections.html +1 -1
- package/.next/server/app/connections.rsc +1 -1
- package/.next/server/app/connections.segments/_full.segment.rsc +1 -1
- package/.next/server/app/connections.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/history/page_client-reference-manifest.js +1 -1
- package/.next/server/app/history.html +1 -1
- package/.next/server/app/history.rsc +2 -2
- package/.next/server/app/history.segments/_full.segment.rsc +2 -2
- package/.next/server/app/history.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/history.segments/history/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +1 -1
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +1 -1
- package/.next/server/app/login.segments/_full.segment.rsc +1 -1
- package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/machines/[machineId]/page.js +1 -1
- package/.next/server/app/machines/[machineId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/processes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/processes.html +1 -1
- package/.next/server/app/processes.rsc +1 -1
- package/.next/server/app/processes.segments/_full.segment.rsc +1 -1
- package/.next/server/app/processes.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/processes.segments/processes/__PAGE__.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +4 -4
- package/.next/server/chunks/168.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/408-29f55984738967db.js +1 -0
- package/.next/static/chunks/app/machines/[machineId]/page-1a25a267563c18c0.js +1 -0
- package/CHANGELOG.md +21 -0
- package/README.md +2 -0
- package/dist/cli.cjs +2365 -1930
- package/dist/collector.cjs +18 -7
- package/dist/hub.cjs +1 -1
- package/docs/installation.md +74 -25
- package/docs/operations.md +13 -7
- package/docs/releasing.md +12 -12
- package/package.json +1 -1
- package/.next/server/route-cache/APP_PAGE/16d1ab46157a868f438fa01e04bf53e805c71cddec593ea1535905c59625cd42/$/login.html +0 -1
- package/.next/server/route-cache/APP_PAGE/16d1ab46157a868f438fa01e04bf53e805c71cddec593ea1535905c59625cd42/$/login.meta +0 -1
- package/.next/server/route-cache/APP_PAGE/16d1ab46157a868f438fa01e04bf53e805c71cddec593ea1535905c59625cd42/$/login.rsc +0 -26
- package/.next/server/route-cache/APP_PAGE/16d1ab46157a868f438fa01e04bf53e805c71cddec593ea1535905c59625cd42/$/login.segments/_full.segment.rsc +0 -26
- package/.next/server/route-cache/APP_PAGE/16d1ab46157a868f438fa01e04bf53e805c71cddec593ea1535905c59625cd42/$/login.segments/_tree.segment.rsc +0 -4
- package/.next/server/route-cache/APP_PAGE/16d1ab46157a868f438fa01e04bf53e805c71cddec593ea1535905c59625cd42/$/login.segments/login/__PAGE__.segment.rsc +0 -32
- package/.next/server/route-cache/APP_PAGE/41da0ef926a63354a29f601d8e8d0a5951196c45ebcd28b7d4708fb7f56f3bf1/$/_not-found.html +0 -1
- package/.next/server/route-cache/APP_PAGE/41da0ef926a63354a29f601d8e8d0a5951196c45ebcd28b7d4708fb7f56f3bf1/$/_not-found.meta +0 -1
- package/.next/server/route-cache/APP_PAGE/41da0ef926a63354a29f601d8e8d0a5951196c45ebcd28b7d4708fb7f56f3bf1/$/_not-found.rsc +0 -24
- package/.next/server/route-cache/APP_PAGE/41da0ef926a63354a29f601d8e8d0a5951196c45ebcd28b7d4708fb7f56f3bf1/$/_not-found.segments/_full.segment.rsc +0 -24
- package/.next/server/route-cache/APP_PAGE/41da0ef926a63354a29f601d8e8d0a5951196c45ebcd28b7d4708fb7f56f3bf1/$/_not-found.segments/_not-found/__PAGE__.segment.rsc +0 -30
- package/.next/server/route-cache/APP_PAGE/41da0ef926a63354a29f601d8e8d0a5951196c45ebcd28b7d4708fb7f56f3bf1/$/_not-found.segments/_tree.segment.rsc +0 -4
- package/.next/server/route-cache/APP_PAGE/c6377dd9ce6a1c2cd100eb4344e843eb4639b9ed26f84643f77680e9eb454c4b/$/index.html +0 -1
- package/.next/server/route-cache/APP_PAGE/c6377dd9ce6a1c2cd100eb4344e843eb4639b9ed26f84643f77680e9eb454c4b/$/index.meta +0 -1
- package/.next/server/route-cache/APP_PAGE/c6377dd9ce6a1c2cd100eb4344e843eb4639b9ed26f84643f77680e9eb454c4b/$/index.rsc +0 -26
- package/.next/server/route-cache/APP_PAGE/c6377dd9ce6a1c2cd100eb4344e843eb4639b9ed26f84643f77680e9eb454c4b/$/index.segments/__PAGE__.segment.rsc +0 -31
- package/.next/server/route-cache/APP_PAGE/c6377dd9ce6a1c2cd100eb4344e843eb4639b9ed26f84643f77680e9eb454c4b/$/index.segments/_full.segment.rsc +0 -26
- package/.next/server/route-cache/APP_PAGE/c6377dd9ce6a1c2cd100eb4344e843eb4639b9ed26f84643f77680e9eb454c4b/$/index.segments/_tree.segment.rsc +0 -3
- package/.next/static/chunks/408-4fe7147e38981ee1.js +0 -1
- package/.next/static/chunks/app/machines/[machineId]/page-916ee73de5eb067d.js +0 -1
- /package/.next/static/{xjSDCOO8Gpm5iPO9tyRG5 → -mNveXe-cHv8irQe97wI_}/_buildManifest.js +0 -0
- /package/.next/static/{xjSDCOO8Gpm5iPO9tyRG5 → -mNveXe-cHv8irQe97wI_}/_ssgManifest.js +0 -0
package/dist/collector.cjs
CHANGED
|
@@ -2934,7 +2934,7 @@ function readSysfsGpu(readers, address) {
|
|
|
2934
2934
|
if (power !== null && values.powerWatts === null) values.powerWatts = power / 1e6;
|
|
2935
2935
|
}
|
|
2936
2936
|
if ([values.utilizationPercent, values.memoryTotalBytes, values.temperatureC, values.powerWatts].every((value) => value === null)) {
|
|
2937
|
-
return { id: id2, status: "unavailable", reason: "
|
|
2937
|
+
return { id: id2, status: "unavailable", reason: "GPU detected, but no readable DRM/sysfs counters; driver support or permissions may limit telemetry" };
|
|
2938
2938
|
}
|
|
2939
2939
|
return values;
|
|
2940
2940
|
}
|
|
@@ -3200,9 +3200,8 @@ function capReason(value) {
|
|
|
3200
3200
|
}
|
|
3201
3201
|
function normalizePciBusId(value) {
|
|
3202
3202
|
const lower = value.trim().toLowerCase();
|
|
3203
|
-
const
|
|
3204
|
-
|
|
3205
|
-
return lower;
|
|
3203
|
+
const match = /^(?:([0-9a-f]{4,8}):)?([0-9a-f]{2}:[0-9a-f]{2}\.[0-7])$/.exec(lower);
|
|
3204
|
+
return match ? `${(match[1] ?? "0").replace(/^0+/, "").padStart(4, "0")}:${match[2]}` : lower;
|
|
3206
3205
|
}
|
|
3207
3206
|
function vendorFor(raw) {
|
|
3208
3207
|
switch (raw.trim().toLowerCase()) {
|
|
@@ -3246,7 +3245,18 @@ function fallbackGpuName(vendor, address) {
|
|
|
3246
3245
|
intel: "Intel",
|
|
3247
3246
|
other: "Display"
|
|
3248
3247
|
};
|
|
3249
|
-
return `${labels[vendor]} display adapter
|
|
3248
|
+
return `${labels[vendor]} display adapter`;
|
|
3249
|
+
}
|
|
3250
|
+
function pciDeviceName(database, vendorId, deviceId) {
|
|
3251
|
+
let vendor = false;
|
|
3252
|
+
for (const line of database.split("\n")) {
|
|
3253
|
+
const heading = /^([0-9a-f]{4})\s+/i.exec(line);
|
|
3254
|
+
if (heading) vendor = heading[1].toLowerCase() === vendorId.replace(/^0x/, "").toLowerCase();
|
|
3255
|
+
if (!vendor) continue;
|
|
3256
|
+
const device = /^\t([0-9a-f]{4})\s+(.+)$/i.exec(line);
|
|
3257
|
+
if (device && device[1].toLowerCase() === deviceId.replace(/^0x/, "").toLowerCase()) return capText(device[2]);
|
|
3258
|
+
}
|
|
3259
|
+
return null;
|
|
3250
3260
|
}
|
|
3251
3261
|
function unsupportedGpuReason(vendor, gpu) {
|
|
3252
3262
|
if (vendor === "aspeed") return "management adapter; no telemetry";
|
|
@@ -3265,6 +3275,7 @@ function buildGpus(read, readdir, gpu) {
|
|
|
3265
3275
|
}
|
|
3266
3276
|
}
|
|
3267
3277
|
}
|
|
3278
|
+
const pciNames = readTextOrNull(read, "/usr/share/hwdata/pci.ids") ?? readTextOrNull(read, "/usr/share/misc/pci.ids") ?? "";
|
|
3268
3279
|
const result = [];
|
|
3269
3280
|
const seenIds = /* @__PURE__ */ new Set();
|
|
3270
3281
|
for (const device of pciDevices) {
|
|
@@ -3284,7 +3295,7 @@ function buildGpus(read, readdir, gpu) {
|
|
|
3284
3295
|
const product = readTextOrNull(read, `/sys/bus/pci/devices/${device.address}/product_name`)?.trim();
|
|
3285
3296
|
entry = {
|
|
3286
3297
|
id: `pci:${device.address}`,
|
|
3287
|
-
name: capText(product || fallbackGpuName(device.vendor, device.address)),
|
|
3298
|
+
name: capText(product || pciDeviceName(pciNames, device.vendorId, readTextOrNull(read, `/sys/bus/pci/devices/${device.address}/device`)?.trim() ?? "") || fallbackGpuName(device.vendor, device.address)),
|
|
3288
3299
|
vendor: device.vendor,
|
|
3289
3300
|
pciBusId: device.address,
|
|
3290
3301
|
telemetry: reading.status === "ok" ? "supported" : "unsupported",
|
|
@@ -5206,7 +5217,7 @@ function budget(value, fallback) {
|
|
|
5206
5217
|
// package.json
|
|
5207
5218
|
var package_default = {
|
|
5208
5219
|
name: "rigscope",
|
|
5209
|
-
version: "0.1.
|
|
5220
|
+
version: "0.1.4",
|
|
5210
5221
|
private: false,
|
|
5211
5222
|
engines: {
|
|
5212
5223
|
node: ">=26.0.0"
|
package/dist/hub.cjs
CHANGED
package/docs/installation.md
CHANGED
|
@@ -27,7 +27,7 @@ install or source checkout is needed. The launcher and services use the installe
|
|
|
27
27
|
runtime, so removing the npx cache does not break them.
|
|
28
28
|
|
|
29
29
|
Releases are on [npm](https://www.npmjs.com/package/rigscope). `@latest` selects
|
|
30
|
-
the current stable release; replace it with `@0.1.
|
|
30
|
+
the current stable release; replace it with `@0.1.4` to select that exact version.
|
|
31
31
|
|
|
32
32
|
### Installation options
|
|
33
33
|
|
|
@@ -53,7 +53,7 @@ For a downloaded package or one built from source, run from the directory
|
|
|
53
53
|
containing the archive, or give its absolute path:
|
|
54
54
|
|
|
55
55
|
```sh
|
|
56
|
-
npx --yes --package ./rigscope-0.1.
|
|
56
|
+
npx --yes --package ./rigscope-0.1.4.tgz rigscope install --boot
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
The same installation options apply. npm still needs registry access or cached
|
|
@@ -71,17 +71,61 @@ Run only the command for the task you want:
|
|
|
71
71
|
| Stop local collection | `rigscope stop collector` |
|
|
72
72
|
| Follow logs | `rigscope logs --follow` |
|
|
73
73
|
| Check configuration, services and sensor access | `rigscope doctor` |
|
|
74
|
-
| Remove
|
|
74
|
+
| Remove the installation and all its data | `rigscope uninstall` |
|
|
75
|
+
| Remove services and runtime, keeping saved data | `rigscope uninstall --keep-data` |
|
|
75
76
|
|
|
76
77
|
`start` is safe to repeat. `logs` shows the last 100 journal lines by default.
|
|
77
78
|
`enable` and `disable` control the hub and collector independently; the initial
|
|
78
79
|
role is a preset. Use `rigscope enable collector` to add local collection to a
|
|
79
80
|
hub-only installation.
|
|
80
81
|
|
|
81
|
-
`uninstall`
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
`uninstall` permanently deletes the selected user installation, including
|
|
83
|
+
accounts, history, collector credentials, pending samples and backups. It stops
|
|
84
|
+
owned services and foreground runtimes and never restarts them. `--purge` remains
|
|
85
|
+
an explicit alias for this default.
|
|
86
|
+
|
|
87
|
+
To keep saved data for a later reinstall, opt in:
|
|
88
|
+
|
|
89
|
+
```sh
|
|
90
|
+
rigscope uninstall --keep-data
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
If the launcher is already gone, use the package entry point:
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
npx --yes rigscope@latest uninstall
|
|
97
|
+
npx --yes rigscope@latest install --role collector --boot
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Pass `--state-dir PATH` to select a separate installation. Reinstalling after
|
|
101
|
+
`uninstall --keep-data` reuses saved settings and the existing password. This
|
|
102
|
+
retention applies to canonical installations; upgrading a pre-canonical format
|
|
103
|
+
resets configuration and history, so back up the state directory first.
|
|
104
|
+
|
|
105
|
+
### Changes while running
|
|
106
|
+
|
|
107
|
+
Commands that need exclusive access detect the selected installation's running
|
|
108
|
+
services and foreground runtimes and ask before stopping them. After a successful
|
|
109
|
+
change, previously running components resume automatically. Uninstall never
|
|
110
|
+
restarts anything.
|
|
111
|
+
|
|
112
|
+
Use `--yes` to approve stopping without a prompt, and `--no-restart` to leave the
|
|
113
|
+
installation stopped after a change. In scripts, pass these flags to Rigscope:
|
|
114
|
+
|
|
115
|
+
```sh
|
|
116
|
+
npx --yes rigscope@latest configure --port 8086 --yes --no-restart
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The first `--yes` belongs to npm; the second approves Rigscope's stop prompt.
|
|
120
|
+
`--no-start` also prevents startup on commands that support it. Components that
|
|
121
|
+
were already stopped stay stopped when restoring a running installation. Foreign
|
|
122
|
+
or unidentifiable processes are never stopped automatically. Foreground trials
|
|
123
|
+
resume as background processes when there is no installed service; their logs
|
|
124
|
+
are written under the selected state directory in `run/hub.log` and
|
|
125
|
+
`run/collector.log`.
|
|
126
|
+
|
|
127
|
+
Terminal output uses color for headings, status and errors. Piped output and
|
|
128
|
+
JSON remain plain; set `NO_COLOR=1` to disable color in a terminal.
|
|
85
129
|
|
|
86
130
|
## Access from another computer
|
|
87
131
|
|
|
@@ -103,16 +147,14 @@ tailscale serve --bg --tls-terminated-tcp=8081 \
|
|
|
103
147
|
If you already installed for localhost, change access without reinstalling:
|
|
104
148
|
|
|
105
149
|
```sh
|
|
106
|
-
rigscope stop
|
|
107
150
|
rigscope configure --origin https://machine.example.ts.net:8081
|
|
108
151
|
tailscale serve --bg --tls-terminated-tcp=8081 \
|
|
109
152
|
"unix:$HOME/.local/state/rigscope/run/hub.sock"
|
|
110
|
-
rigscope start
|
|
111
153
|
```
|
|
112
154
|
|
|
113
155
|
This keeps accounts, history and collector credentials. It updates the local
|
|
114
|
-
collector's destination and moves its pending samples.
|
|
115
|
-
|
|
156
|
+
collector's destination and moves its pending samples. Rigscope asks to stop
|
|
157
|
+
running components during conversion and resumes them afterward. See [Access changes](operations.md#access-changes)
|
|
116
158
|
for backup and queue checks.
|
|
117
159
|
|
|
118
160
|
### Open and check the dashboard
|
|
@@ -138,13 +180,11 @@ collectors connect through HTTPS with certificate validation.
|
|
|
138
180
|
### Return to localhost
|
|
139
181
|
|
|
140
182
|
```sh
|
|
141
|
-
rigscope stop
|
|
142
183
|
rigscope configure --local
|
|
143
184
|
tailscale serve --bg --tls-terminated-tcp=8081 off
|
|
144
|
-
rigscope start
|
|
145
185
|
```
|
|
146
186
|
|
|
147
|
-
If you
|
|
187
|
+
If you used `uninstall --keep-data`, change retained settings through the package entry
|
|
148
188
|
point, then reinstall:
|
|
149
189
|
|
|
150
190
|
```sh
|
|
@@ -175,7 +215,7 @@ Collectors connect outbound and need no incoming port or root access. Each can
|
|
|
175
215
|
send to up to eight hubs. Sharing is separate for each hub; network addresses
|
|
176
216
|
and full process arguments start disabled. See [Collection and sharing](monitoring.md#collection-and-sharing).
|
|
177
217
|
|
|
178
|
-
|
|
218
|
+
Changing destinations asks to stop a running collector and resumes it afterward. To replace an
|
|
179
219
|
existing machine credential, create a grant bound to that machine and use
|
|
180
220
|
`connect --replace`. For unattended enrollment, use `--token-file` with an owned
|
|
181
221
|
private file and delete it afterward; do not put the grant on the command line.
|
|
@@ -252,7 +292,7 @@ settings and collector identities.
|
|
|
252
292
|
|
|
253
293
|
| Alternative | Command |
|
|
254
294
|
| --- | --- |
|
|
255
|
-
| Select an exact published version | `rigscope upgrade --from rigscope@0.1.
|
|
295
|
+
| Select an exact published version | `rigscope upgrade --from rigscope@0.1.4` |
|
|
256
296
|
| Install a local archive | `rigscope upgrade --from ./rigscope-VERSION.tgz` |
|
|
257
297
|
| Return to the retained previous runtime | `rigscope rollback` |
|
|
258
298
|
|
|
@@ -267,13 +307,11 @@ Keep separate backups outside the machine.
|
|
|
267
307
|
### No password was printed
|
|
268
308
|
|
|
269
309
|
The `owner` password appears only when the account is created. Reinstalling with
|
|
270
|
-
saved settings keeps the old password. If you lost it,
|
|
271
|
-
|
|
310
|
+
saved settings keeps the old password. If you lost it, reset it at a private
|
|
311
|
+
prompt; Rigscope coordinates stopping and resuming the running installation:
|
|
272
312
|
|
|
273
313
|
```sh
|
|
274
|
-
rigscope stop
|
|
275
314
|
rigscope recover-password --user owner
|
|
276
|
-
rigscope start
|
|
277
315
|
```
|
|
278
316
|
|
|
279
317
|
Recovery keeps history and collector credentials. Sign in again afterward.
|
|
@@ -291,8 +329,8 @@ npx --yes rigscope@latest status
|
|
|
291
329
|
npx --yes rigscope@latest uninstall
|
|
292
330
|
```
|
|
293
331
|
|
|
294
|
-
Choose the operation you need; `uninstall`
|
|
295
|
-
|
|
332
|
+
Choose the operation you need; `uninstall` deletes this installation and its
|
|
333
|
+
data. Use `uninstall --keep-data` to preserve saved data. Use `ls -l ~/.local/bin/rigscope` to check for a link to an older
|
|
296
334
|
checkout. Back up a confirmed old launcher before removing it, then repeat
|
|
297
335
|
`install` to create the new launcher. Older services with other names may need
|
|
298
336
|
separate cleanup; do not stop unrelated services.
|
|
@@ -302,12 +340,23 @@ separate cleanup; do not stop unrelated services.
|
|
|
302
340
|
Check `rigscope logs hub` and `rigscope doctor`. If port 8081 is already in use,
|
|
303
341
|
identify the listener before stopping anything. For a fresh install, choose an
|
|
304
342
|
unused port with `install --port 8086 --boot`, or use HTTPS mode with a private
|
|
305
|
-
socket. To change a retained installation's local port,
|
|
306
|
-
|
|
307
|
-
|
|
343
|
+
socket. To change a retained installation's local port, run
|
|
344
|
+
`rigscope configure --port 8086` and approve the stop prompt. Previously running
|
|
345
|
+
components resume after the change. `--origin` and `--port` cannot be combined.
|
|
308
346
|
|
|
309
347
|
## Hardware
|
|
310
348
|
|
|
349
|
+
GPU names use NVIDIA's reported model or the system's PCI name database when
|
|
350
|
+
available. Otherwise a vendor label is shown, with the PCI address separately.
|
|
351
|
+
A detected adapter can remain visible without telemetry: driver support and
|
|
352
|
+
permissions determine which counters can be read. Intel integrated adapters do
|
|
353
|
+
not necessarily expose utilization or dedicated VRAM through sysfs; shared
|
|
354
|
+
system RAM is not reported as dedicated VRAM.
|
|
355
|
+
|
|
356
|
+
History only adds historical GPU cards when stored series contain readings.
|
|
357
|
+
Empty PCI placeholder series do not create an extra card while NVIDIA's UUID
|
|
358
|
+
and model become available. Historical cards with readings remain accessible.
|
|
359
|
+
|
|
311
360
|
Collection supports Linux. CPU, memory and process readings come from procfs.
|
|
312
361
|
ARM and RISC-V CPU names are recognized; utilization uses per-core counters.
|
|
313
362
|
|
package/docs/operations.md
CHANGED
|
@@ -37,6 +37,10 @@ structured output.
|
|
|
37
37
|
rigscope upgrade
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
+
Approve the stop prompt if components are running; `--yes` approves it in
|
|
41
|
+
scripts. `--no-restart` leaves the upgraded installation stopped and skips live
|
|
42
|
+
health checks. Uninstall always stays stopped.
|
|
43
|
+
|
|
40
44
|
Use `--from PACKAGE` for an exact npm version or local archive. The command
|
|
41
45
|
stages the package, stops running components, takes a consistent hub database
|
|
42
46
|
backup and activates the new runtime. It restarts only the components that were
|
|
@@ -82,16 +86,17 @@ that format.
|
|
|
82
86
|
|
|
83
87
|
## Password recovery
|
|
84
88
|
|
|
85
|
-
|
|
89
|
+
Enter a new password at the private prompt; approve stopping the running hub
|
|
90
|
+
when asked. Rigscope resumes previously running components after success:
|
|
86
91
|
|
|
87
92
|
```sh
|
|
88
|
-
rigscope stop
|
|
89
93
|
rigscope recover-password --user owner
|
|
90
|
-
rigscope start
|
|
91
94
|
```
|
|
92
95
|
|
|
93
|
-
Recovery
|
|
94
|
-
|
|
96
|
+
Recovery coordinates stopping the hub and refuses foreign or uncertain database
|
|
97
|
+
locks. Use `--yes` to approve stopping without a prompt and `--no-restart` to
|
|
98
|
+
leave it stopped. For unattended recovery, also use `--password-file` with an
|
|
99
|
+
owned `0600` file.
|
|
95
100
|
It updates the existing user's stored hash. `--enable` also clears that user's
|
|
96
101
|
disabled flag; recovery never creates a user or grants administrator access.
|
|
97
102
|
|
|
@@ -103,8 +108,9 @@ managed account.
|
|
|
103
108
|
## Access changes
|
|
104
109
|
|
|
105
110
|
Follow the commands in [Remote access](installation.md#access-from-another-computer).
|
|
106
|
-
`configure`
|
|
107
|
-
destination,
|
|
111
|
+
`configure` asks to stop a running hub and, when changing its local collector's
|
|
112
|
+
destination, its collector. Previously running components resume after success;
|
|
113
|
+
`--yes` approves the stop prompt and `--no-restart` leaves them stopped. `--origin` changes HTTPS access, `--local`
|
|
108
114
|
returns to loopback, and `--port PORT` changes the local hub port (combine it
|
|
109
115
|
with `--local` when leaving HTTPS). `--origin` and `--port` cannot be combined
|
|
110
116
|
because HTTPS mode uses a private Unix socket instead of the port; `--local
|
package/docs/releasing.md
CHANGED
|
@@ -5,7 +5,7 @@ The first public version, `0.1.0`, is published on
|
|
|
5
5
|
[GitHub](https://github.com/Triet1402/rigscope). The package includes MIT licensing,
|
|
6
6
|
dependency notices, the security policy and [release notes](../CHANGELOG.md).
|
|
7
7
|
|
|
8
|
-
The commands below use `0.1.
|
|
8
|
+
The commands below use `0.1.4` as an example. For a new release, substitute its
|
|
9
9
|
new version everywhere; do not attempt to republish an already published version.
|
|
10
10
|
Documentation edits can be committed and pushed to GitHub independently. The published archive and
|
|
11
11
|
its bundled documentation stay unchanged; ship updated package documentation
|
|
@@ -21,7 +21,7 @@ with the next version. Keep each release tag on the revision used to build it.
|
|
|
21
21
|
4. Run the publish dry run, check the npm account, and publish the verified archive.
|
|
22
22
|
5. Verify the registry version and install it into a disposable test installation.
|
|
23
23
|
Check sign-in, fresh telemetry and the installed command.
|
|
24
|
-
6. Tag the exact source revision as `v0.1.
|
|
24
|
+
6. Tag the exact source revision as `v0.1.4`, push the tag, and create a GitHub
|
|
25
25
|
Release with the release notes, verified archive and checksum. Announce it
|
|
26
26
|
after the registry installation works.
|
|
27
27
|
|
|
@@ -45,14 +45,14 @@ npm pack --pack-destination out/release
|
|
|
45
45
|
`npm pack` runs `prepack`, which regenerates dependency notices, builds fresh
|
|
46
46
|
runtime/UI artifacts and verifies them. If notice generation changes a tracked
|
|
47
47
|
file, include that change in the release commit before producing the final
|
|
48
|
-
archive. Reuse the archive for every check below. Replace `0.1.
|
|
48
|
+
archive. Reuse the archive for every check below. Replace `0.1.4` in these
|
|
49
49
|
commands when releasing another version.
|
|
50
50
|
|
|
51
51
|
## Verify the exact archive
|
|
52
52
|
|
|
53
53
|
```sh
|
|
54
|
-
node scripts/verify-package.cjs ./out/release/rigscope-0.1.
|
|
55
|
-
npm run verify:installed -- --archive ./out/release/rigscope-0.1.
|
|
54
|
+
node scripts/verify-package.cjs ./out/release/rigscope-0.1.4.tgz
|
|
55
|
+
npm run verify:installed -- --archive ./out/release/rigscope-0.1.4.tgz
|
|
56
56
|
npm test
|
|
57
57
|
node scripts/test-runtime.cjs
|
|
58
58
|
node scripts/test.cjs --suite development
|
|
@@ -69,9 +69,9 @@ create disposable installations with separate state, launchers, ports and unit
|
|
|
69
69
|
names, then remove their services. They do not select an existing installation.
|
|
70
70
|
|
|
71
71
|
```sh
|
|
72
|
-
RIGSCOPE_TEST_ARCHIVE="$PWD/out/release/rigscope-0.1.
|
|
72
|
+
RIGSCOPE_TEST_ARCHIVE="$PWD/out/release/rigscope-0.1.4.tgz" \
|
|
73
73
|
node --import tsx --test tests/cli-install.integration.ts tests/cli-reset.integration.ts
|
|
74
|
-
node scripts/verify-operations.cjs ./out/release/rigscope-0.1.
|
|
74
|
+
node scripts/verify-operations.cjs ./out/release/rigscope-0.1.4.tgz
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
These cover installation, pairing, independent component controls, bootstrap
|
|
@@ -93,7 +93,7 @@ Record the final checksum after verification:
|
|
|
93
93
|
|
|
94
94
|
```sh
|
|
95
95
|
cd out/release
|
|
96
|
-
sha256sum rigscope-0.1.
|
|
96
|
+
sha256sum rigscope-0.1.4.tgz > SHA256SUMS
|
|
97
97
|
sha256sum --check SHA256SUMS
|
|
98
98
|
```
|
|
99
99
|
|
|
@@ -110,7 +110,7 @@ then verify the account and preview the exact archive:
|
|
|
110
110
|
```sh
|
|
111
111
|
npm login --registry=https://registry.npmjs.org
|
|
112
112
|
npm whoami --registry=https://registry.npmjs.org
|
|
113
|
-
npm publish ./out/release/rigscope-0.1.
|
|
113
|
+
npm publish ./out/release/rigscope-0.1.4.tgz --access public --tag latest \
|
|
114
114
|
--registry=https://registry.npmjs.org --dry-run
|
|
115
115
|
```
|
|
116
116
|
|
|
@@ -120,12 +120,12 @@ to publish or complete two-factor authentication.
|
|
|
120
120
|
When releasing, this command actually publishes the verified archive publicly:
|
|
121
121
|
|
|
122
122
|
```sh
|
|
123
|
-
npm publish ./out/release/rigscope-0.1.
|
|
123
|
+
npm publish ./out/release/rigscope-0.1.4.tgz --access public --tag latest \
|
|
124
124
|
--registry=https://registry.npmjs.org
|
|
125
|
-
npm view rigscope@0.1.
|
|
125
|
+
npm view rigscope@0.1.4 version dist.integrity --registry=https://registry.npmjs.org
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
Then use `npx --yes rigscope@0.1.
|
|
128
|
+
Then use `npx --yes rigscope@0.1.4 install` with a disposable `--state-dir`, an
|
|
129
129
|
unused `--port` and an isolated `XDG_BIN_HOME` for the registry installation
|
|
130
130
|
check. Uninstall that test installation afterward. Use the same isolation
|
|
131
131
|
settings for all test commands so the check does not select a real installation.
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/3fbf75e4c471c6a8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9ca43f4ce1bb8938.js"/><script src="/_next/static/chunks/4bd1b696-c7408084347438ae.js" async=""></script><script src="/_next/static/chunks/794-ceeb732a1a81bc27.js" async=""></script><script src="/_next/static/chunks/main-app-f92328c8950d2e53.js" async=""></script><script src="/_next/static/chunks/939-514e554087419c71.js" async=""></script><script src="/_next/static/chunks/app/layout-4feff677c4071745.js" async=""></script><script src="/_next/static/chunks/app/login/page-c57e12dbe5146737.js" async=""></script><title>Sign in — Rigscope</title><meta name="description" content="Self-hosted remote system monitor — a live fleet of collectors behind one authenticated hub."/><link rel="icon" href="/icon.svg?3b3fa3229e2d0d7a" type="image/svg+xml" sizes="any"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><main class="flex min-h-dvh items-center justify-center bg-background p-6"><div class="w-full max-w-sm"><div class="mb-6 flex items-center gap-2.5"><span class="flex h-7 w-7 shrink-0 items-center justify-center rounded-md border border-border text-accent"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="h-4 w-4"><path d="M8 3H4v18h4M16 3h4v18h-4"></path><path d="m8 15 4-6 4 3M8 8h.01M16 17h.01"></path></svg></span><span class="text-sm font-semibold tracking-tight">Rigscope</span></div><div class="rounded-xl border border-border bg-card p-6"><h1 class="text-lg font-semibold tracking-tight">Sign in</h1><form class="mt-5 flex flex-col gap-4"><div class="flex flex-col gap-1.5"><label for="login-username" class="text-xs font-medium">Username</label><input id="login-username" type="text" autoComplete="username" required="" class="rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground/70" name="username" value=""/></div><div class="flex flex-col gap-1.5"><label for="login-password" class="text-xs font-medium">Password</label><input id="login-password" type="password" autoComplete="current-password" required="" class="rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground/70" name="password" value=""/></div><button type="submit" class="mt-1 inline-flex items-center justify-center rounded-md bg-accent px-3 py-2 text-sm font-medium text-accent-foreground transition-colors hover:bg-accent/90 disabled:cursor-not-allowed disabled:opacity-60">Sign in</button></form></div></div></main><!--$--><!--/$--><script src="/_next/static/chunks/webpack-9ca43f4ce1bb8938.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"static/chunks/939-514e554087419c71.js\"\n3:\"static/chunks/app/layout-4feff677c4071745.js\"\n4:I[2737,[\"939\",\"$2\",\"177\",\"$3\"],\"ThemeProvider\"]\n5:I[9939,[\"939\",\"$2\",\"177\",\"$3\"],\"LiveProvider\"]\n6:I[7121,[],\"\"]\n7:I[4581,[],\"\"]\nb:\"static/chunks/app/login/page-c57e12dbe5146737.js\"\nc:I[5000,[\"939\",\"$2\",\"520\",\"$b\"],\"LoginView\"]\nd:I[484,[],\"OutletBoundary\"]\ne:\"$Sreact.suspense\"\n10:\"ViewportBoundary\"\n11:I[484,[],\"$10\"]\n13:\"MetadataBoundary\"\n14:I[484,[],\"$13\"]\n16:I[7123,[],\"default\",1]\n:HL[\"/_next/static/css/3fbf75e4c471c6a8.css\",\"style\"]\n9:X\na:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$Lc\",null,{}],null,[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$e\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@f\"}]}]]}],\"p\":false,\"v\":null}}]]\n8:[[\"children\",{\"s\":\"login\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$9\"},\"c\":\"$Qa\"}]]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"login\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/3fbf75e4c471c6a8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L4\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"enableSystem\":true,\"children\":[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],\"p\":false,\"v\":null},\"c\":\"$Q8\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L11\",null,{\"children\":\"$L12\"}],[\"$\",\"$L14\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$e\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L15\"}]}],null]}],null]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$16\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"xjSDCOO8Gpm5iPO9tyRG5\"}\n"])</script><script>self.__next_f.push([1,"9:C\n12:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"17:I[6869,[],\"IconMark\"]\nf:null\n15:[[\"$\",\"title\",\"0\",{\"children\":\"Sign in — Rigscope\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted remote system monitor — a live fleet of collectors behind one authenticated hub.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/icon.svg?3b3fa3229e2d0d7a\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"$L17\",\"3\",{}]]\n"])</script></body></html>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"headers":{"x-nextjs-stale-time":"300","x-nextjs-prerender":"1","x-next-cache-tags":"_N_T_/layout,_N_T_/login/layout,_N_T_/login/page,_N_T_/login"},"segmentPaths":["/_tree","/_full","/login/__PAGE__"],"prefetchHints":{"hints":64,"slots":{"children":{"hints":96,"slots":{"children":{"hints":160,"slots":null}}}}},"routeCache":{"key":"/route-cache/APP_PAGE/16d1ab46157a868f438fa01e04bf53e805c71cddec593ea1535905c59625cd42/$/login","owner":{"kind":"APP_PAGE","sourceRoute":"/login/page"},"isFallback":false},"routeCacheLastModified":1793851815565}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
2:"static/chunks/939-514e554087419c71.js"
|
|
3
|
-
3:"static/chunks/app/layout-4feff677c4071745.js"
|
|
4
|
-
4:I[2737,["939","$2","177","$3"],"ThemeProvider"]
|
|
5
|
-
5:I[9939,["939","$2","177","$3"],"LiveProvider"]
|
|
6
|
-
6:I[7121,[],""]
|
|
7
|
-
7:I[4581,[],""]
|
|
8
|
-
b:"static/chunks/app/login/page-c57e12dbe5146737.js"
|
|
9
|
-
c:I[5000,["939","$2","520","$b"],"LoginView"]
|
|
10
|
-
d:I[484,[],"OutletBoundary"]
|
|
11
|
-
e:"$Sreact.suspense"
|
|
12
|
-
10:"ViewportBoundary"
|
|
13
|
-
11:I[484,[],"$10"]
|
|
14
|
-
13:"MetadataBoundary"
|
|
15
|
-
14:I[484,[],"$13"]
|
|
16
|
-
16:I[7123,[],"default",1]
|
|
17
|
-
:HL["/_next/static/css/3fbf75e4c471c6a8.css","style"]
|
|
18
|
-
9:X
|
|
19
|
-
a:[["children",{"s":"__PAGE__","h":512,"d":{"r":["$","$1","c",{"children":[["$","$Lc",null,{}],null,["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],"p":false,"v":null}}]]
|
|
20
|
-
8:[["children",{"s":"login","h":512,"d":{"r":["$","$1","c",{"children":[null,["$","$L6",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],"p":false,"v":"$9"},"c":"$Qa"}]]
|
|
21
|
-
0:{"P":null,"c":["","login"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/3fbf75e4c471c6a8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"children":["$","$L4",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"children":["$","$L5",null,{"children":["$","$L6",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]]}],"p":false,"v":null},"c":"$Q8"},"h":{"r":["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","$L14",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$e",null,{"name":"Next.Metadata","children":"$L15"}]}],null]}],null]}],"p":false,"v":null}},"m":"$undefined","G":["$16",[]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"xjSDCOO8Gpm5iPO9tyRG5"}
|
|
22
|
-
9:C
|
|
23
|
-
12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
24
|
-
17:I[6869,[],"IconMark"]
|
|
25
|
-
f:null
|
|
26
|
-
15:[["$","title","0",{"children":"Sign in — Rigscope"}],["$","meta","1",{"name":"description","content":"Self-hosted remote system monitor — a live fleet of collectors behind one authenticated hub."}],["$","link","2",{"rel":"icon","href":"/icon.svg?3b3fa3229e2d0d7a","type":"image/svg+xml","sizes":"any"}],["$","$L17","3",{}]]
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
2:"static/chunks/939-514e554087419c71.js"
|
|
3
|
-
3:"static/chunks/app/layout-4feff677c4071745.js"
|
|
4
|
-
4:I[2737,["939","$2","177","$3"],"ThemeProvider"]
|
|
5
|
-
5:I[9939,["939","$2","177","$3"],"LiveProvider"]
|
|
6
|
-
6:I[7121,[],""]
|
|
7
|
-
7:I[4581,[],""]
|
|
8
|
-
b:"static/chunks/app/login/page-c57e12dbe5146737.js"
|
|
9
|
-
c:I[5000,["939","$2","520","$b"],"LoginView"]
|
|
10
|
-
d:I[484,[],"OutletBoundary"]
|
|
11
|
-
e:"$Sreact.suspense"
|
|
12
|
-
10:"ViewportBoundary"
|
|
13
|
-
11:I[484,[],"$10"]
|
|
14
|
-
13:"MetadataBoundary"
|
|
15
|
-
14:I[484,[],"$13"]
|
|
16
|
-
16:I[7123,[],"default",1]
|
|
17
|
-
:HL["/_next/static/css/3fbf75e4c471c6a8.css","style"]
|
|
18
|
-
9:X
|
|
19
|
-
a:[["children",{"s":"__PAGE__","h":512,"d":{"r":["$","$1","c",{"children":[["$","$Lc",null,{}],null,["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],"p":false,"v":null}}]]
|
|
20
|
-
8:[["children",{"s":"login","h":512,"d":{"r":["$","$1","c",{"children":[null,["$","$L6",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],"p":false,"v":"$9"},"c":"$Qa"}]]
|
|
21
|
-
0:{"P":null,"c":["","login"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/3fbf75e4c471c6a8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"children":["$","$L4",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"children":["$","$L5",null,{"children":["$","$L6",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]]}],"p":false,"v":null},"c":"$Q8"},"h":{"r":["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","$L14",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$e",null,{"name":"Next.Metadata","children":"$L15"}]}],null]}],null]}],"p":false,"v":null}},"m":"$undefined","G":["$16",[]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"xjSDCOO8Gpm5iPO9tyRG5"}
|
|
22
|
-
9:C
|
|
23
|
-
12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
24
|
-
17:I[6869,[],"IconMark"]
|
|
25
|
-
f:null
|
|
26
|
-
15:[["$","title","0",{"children":"Sign in — Rigscope"}],["$","meta","1",{"name":"description","content":"Self-hosted remote system monitor — a live fleet of collectors behind one authenticated hub."}],["$","link","2",{"rel":"icon","href":"/icon.svg?3b3fa3229e2d0d7a","type":"image/svg+xml","sizes":"any"}],["$","$L17","3",{}]]
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
2:"static/chunks/939-514e554087419c71.js"
|
|
3
|
-
3:"static/chunks/app/layout-4feff677c4071745.js"
|
|
4
|
-
4:I[2737,["939","$2","177","$3"],"ThemeProvider"]
|
|
5
|
-
5:I[9939,["939","$2","177","$3"],"LiveProvider"]
|
|
6
|
-
6:I[7121,[],""]
|
|
7
|
-
7:I[4581,[],""]
|
|
8
|
-
e:"static/chunks/app/login/page-c57e12dbe5146737.js"
|
|
9
|
-
f:I[5000,["939","$2","520","$e"],"LoginView"]
|
|
10
|
-
10:I[484,[],"OutletBoundary"]
|
|
11
|
-
11:"$Sreact.suspense"
|
|
12
|
-
14:"ViewportBoundary"
|
|
13
|
-
15:I[484,[],"$14"]
|
|
14
|
-
16:"MetadataBoundary"
|
|
15
|
-
17:I[484,[],"$16"]
|
|
16
|
-
18:I[6869,[],"IconMark"]
|
|
17
|
-
:HL["/_next/static/css/3fbf75e4c471c6a8.css","style"]
|
|
18
|
-
9:X
|
|
19
|
-
c:X
|
|
20
|
-
c:C
|
|
21
|
-
d:[["children",{"s":"__PAGE__","h":160,"d":{"r":["$","$1","c",{"children":[["$","$Lf",null,{}],null,["$","$L10",null,{"children":["$","$11",null,{"name":"Next.MetadataOutlet","children":"$@12"}]}]]}],"p":"$@13","v":null,"s":"$9"}}]]
|
|
22
|
-
a:[["children",{"s":"login","h":96,"d":{"r":["$","$1","c",{"children":[null,["$","$L6",null,{"parallelRouterKey":"children","template":["$","$L7",null,{}]}]]}],"p":"$@b","v":"$c","s":"$9"},"c":"$Qd"}]]
|
|
23
|
-
0:{"t":{"t":{"s":"","h":80,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/3fbf75e4c471c6a8.css","precedence":"next"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"children":["$","$L4",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"children":["$","$L5",null,{"children":["$","$L6",null,{"parallelRouterKey":"children","template":["$","$L7",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]]}],"p":"$@8","v":null,"s":"$9"},"c":"$Qa"},"h":{"r":["$","$1","h",{"children":[null,["$","$L15",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","$L17",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$11",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Sign in — Rigscope"}],["$","meta","1",{"name":"description","content":"Self-hosted remote system monitor — a live fleet of collectors behind one authenticated hub."}],["$","link","2",{"rel":"icon","href":"/icon.svg?3b3fa3229e2d0d7a","type":"image/svg+xml","sizes":"any"}],["$","$L18","3",{}]]}]}],null]}],null]}],"p":"$@19","v":null,"s":"$9"}},"a":"$@1a","u":"$@1b","b":"xjSDCOO8Gpm5iPO9tyRG5"}
|
|
24
|
-
12:null
|
|
25
|
-
9:300
|
|
26
|
-
1b:true
|
|
27
|
-
9:C
|
|
28
|
-
1a:0
|
|
29
|
-
b:"$undefined"
|
|
30
|
-
8:"$undefined"
|
|
31
|
-
19:"$undefined"
|
|
32
|
-
13:"$undefined"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/3fbf75e4c471c6a8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9ca43f4ce1bb8938.js"/><script src="/_next/static/chunks/4bd1b696-c7408084347438ae.js" async=""></script><script src="/_next/static/chunks/794-ceeb732a1a81bc27.js" async=""></script><script src="/_next/static/chunks/main-app-f92328c8950d2e53.js" async=""></script><script src="/_next/static/chunks/939-514e554087419c71.js" async=""></script><script src="/_next/static/chunks/app/layout-4feff677c4071745.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Rigscope</title><meta name="description" content="Self-hosted remote system monitor — a live fleet of collectors behind one authenticated hub."/><link rel="icon" href="/icon.svg?3b3fa3229e2d0d7a" type="image/svg+xml" sizes="any"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-9ca43f4ce1bb8938.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"static/chunks/939-514e554087419c71.js\"\n3:\"static/chunks/app/layout-4feff677c4071745.js\"\n4:I[2737,[\"939\",\"$2\",\"177\",\"$3\"],\"ThemeProvider\"]\n5:I[9939,[\"939\",\"$2\",\"177\",\"$3\"],\"LiveProvider\"]\n6:I[7121,[],\"\"]\n7:I[4581,[],\"\"]\nb:I[484,[],\"OutletBoundary\"]\nc:\"$Sreact.suspense\"\ne:\"ViewportBoundary\"\nf:I[484,[],\"$e\"]\n11:\"MetadataBoundary\"\n12:I[484,[],\"$11\"]\n14:I[7123,[],\"default\",1]\n:HL[\"/_next/static/css/3fbf75e4c471c6a8.css\",\"style\"]\n9:X\na:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@d\"}]}]]}],\"p\":false,\"v\":null}}]]\n8:[[\"children\",{\"s\":\"_not-found\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$9\"},\"c\":\"$Qa\"}]]\n0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/3fbf75e4c471c6a8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L4\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"enableSystem\":true,\"children\":[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],\"p\":false,\"v\":null},\"c\":\"$Q8\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Lf\",null,{\"children\":\"$L10\"}],[\"$\",\"$L12\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L13\"}]}],null]}],null]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$14\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"xjSDCOO8Gpm5iPO9tyRG5\"}\n"])</script><script>self.__next_f.push([1,"9:C\n10:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"15:I[6869,[],\"IconMark\"]\nd:null\n13:[[\"$\",\"title\",\"0\",{\"children\":\"Rigscope\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted remote system monitor — a live fleet of collectors behind one authenticated hub.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/icon.svg?3b3fa3229e2d0d7a\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"$L15\",\"3\",{}]]\n"])</script></body></html>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"status":404,"headers":{"x-nextjs-stale-time":"300","x-nextjs-prerender":"1","x-next-cache-tags":"_N_T_/layout,_N_T_/_not-found/layout,_N_T_/_not-found/page,_N_T_/_not-found"},"segmentPaths":["/_tree","/_full","/_not-found/__PAGE__"],"prefetchHints":{"hints":64,"slots":{"children":{"hints":96,"slots":{"children":{"hints":160,"slots":null}}}}},"routeCache":{"key":"/route-cache/APP_PAGE/41da0ef926a63354a29f601d8e8d0a5951196c45ebcd28b7d4708fb7f56f3bf1/$/_not-found","owner":{"kind":"APP_PAGE","sourceRoute":"/_not-found/page"},"isFallback":false},"routeCacheLastModified":1793851815561}
|