rigscope 0.1.3 → 0.1.5
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 +3 -3
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +6 -6
- 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 +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- 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 +3 -3
- package/.next/server/app/administration.segments/_full.segment.rsc +3 -3
- package/.next/server/app/administration.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/administration.segments/administration/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/alerts/page.js +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 +4 -4
- package/.next/server/app/alerts.segments/_full.segment.rsc +4 -4
- package/.next/server/app/alerts.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/alerts.segments/alerts/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/page.js +1 -1
- package/.next/server/app/connections/page.js.nft.json +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 +6 -6
- package/.next/server/app/connections.segments/_full.segment.rsc +6 -6
- package/.next/server/app/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +6 -6
- 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 +4 -4
- package/.next/server/app/history.segments/_full.segment.rsc +4 -4
- package/.next/server/app/history.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/history.segments/history/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +6 -6
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/index.segments/_full.segment.rsc +6 -6
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- 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 +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/machines/[machineId]/page.js +1 -1
- package/.next/server/app/machines/[machineId]/page.js.nft.json +1 -1
- package/.next/server/app/machines/[machineId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/processes/page.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 +4 -4
- package/.next/server/app/processes.segments/_full.segment.rsc +4 -4
- package/.next/server/app/processes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/processes.segments/processes/__PAGE__.segment.rsc +4 -4
- package/.next/server/app-paths-manifest.json +3 -3
- package/.next/server/chunks/168.js +1 -1
- package/.next/server/chunks/364.js +1 -0
- package/.next/server/chunks/751.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/103-13ec30dcc059b9d3.js +1 -0
- package/.next/static/chunks/{227-417939c480f50747.js → 130-e940915010276f88.js} +1 -1
- package/.next/static/chunks/408-29f55984738967db.js +1 -0
- package/.next/static/chunks/app/alerts/{page-fe0e877778c60af8.js → page-2548b2ab0c057953.js} +1 -1
- package/.next/static/chunks/app/connections/{page-99cd54d6929b3f1f.js → page-07113bf16cb352e7.js} +1 -1
- package/.next/static/chunks/app/machines/[machineId]/page-0b89e4393a137c4d.js +1 -0
- package/.next/static/chunks/app/{page-1ae9fc94c897785b.js → page-c68554c93016dd13.js} +1 -1
- package/.next/static/chunks/app/processes/{page-0e98a4a64e829c5f.js → page-b6d97d119f10e2a1.js} +3 -3
- package/.next/static/css/fb3ad9534f4681e6.css +1 -0
- package/CHANGELOG.md +35 -0
- package/DESIGN.md +27 -16
- package/README.md +2 -0
- package/dist/cli.cjs +2366 -1930
- package/dist/collector.cjs +18 -7
- package/dist/hub.cjs +1 -1
- package/docs/installation.md +77 -25
- package/docs/operations.md +13 -7
- package/docs/releasing.md +12 -12
- package/package.json +1 -1
- package/.next/server/chunks/877.js +0 -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/103-c47318242b24e9ac.js +0 -1
- package/.next/static/chunks/408-4fe7147e38981ee1.js +0 -1
- package/.next/static/chunks/app/machines/[machineId]/page-916ee73de5eb067d.js +0 -1
- package/.next/static/css/3fbf75e4c471c6a8.css +0 -1
- /package/.next/static/{xjSDCOO8Gpm5iPO9tyRG5 → oxwySrJXqXq8O6_7AzZGe}/_buildManifest.js +0 -0
- /package/.next/static/{xjSDCOO8Gpm5iPO9tyRG5 → oxwySrJXqXq8O6_7AzZGe}/_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.5",
|
|
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.5` 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.5.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
|
|
|
@@ -91,6 +135,9 @@ DNS name. Choose the section for a new or existing installation.
|
|
|
91
135
|
|
|
92
136
|
### New HTTPS installation
|
|
93
137
|
|
|
138
|
+
`--origin` accepts a root URL with or without a trailing slash and saves it
|
|
139
|
+
without the slash. Paths, query strings and fragments are not allowed.
|
|
140
|
+
|
|
94
141
|
```sh
|
|
95
142
|
npx --yes rigscope@latest install \
|
|
96
143
|
--origin https://machine.example.ts.net:8081 --boot
|
|
@@ -103,16 +150,14 @@ tailscale serve --bg --tls-terminated-tcp=8081 \
|
|
|
103
150
|
If you already installed for localhost, change access without reinstalling:
|
|
104
151
|
|
|
105
152
|
```sh
|
|
106
|
-
rigscope stop
|
|
107
153
|
rigscope configure --origin https://machine.example.ts.net:8081
|
|
108
154
|
tailscale serve --bg --tls-terminated-tcp=8081 \
|
|
109
155
|
"unix:$HOME/.local/state/rigscope/run/hub.sock"
|
|
110
|
-
rigscope start
|
|
111
156
|
```
|
|
112
157
|
|
|
113
158
|
This keeps accounts, history and collector credentials. It updates the local
|
|
114
|
-
collector's destination and moves its pending samples.
|
|
115
|
-
|
|
159
|
+
collector's destination and moves its pending samples. Rigscope asks to stop
|
|
160
|
+
running components during conversion and resumes them afterward. See [Access changes](operations.md#access-changes)
|
|
116
161
|
for backup and queue checks.
|
|
117
162
|
|
|
118
163
|
### Open and check the dashboard
|
|
@@ -138,13 +183,11 @@ collectors connect through HTTPS with certificate validation.
|
|
|
138
183
|
### Return to localhost
|
|
139
184
|
|
|
140
185
|
```sh
|
|
141
|
-
rigscope stop
|
|
142
186
|
rigscope configure --local
|
|
143
187
|
tailscale serve --bg --tls-terminated-tcp=8081 off
|
|
144
|
-
rigscope start
|
|
145
188
|
```
|
|
146
189
|
|
|
147
|
-
If you
|
|
190
|
+
If you used `uninstall --keep-data`, change retained settings through the package entry
|
|
148
191
|
point, then reinstall:
|
|
149
192
|
|
|
150
193
|
```sh
|
|
@@ -175,7 +218,7 @@ Collectors connect outbound and need no incoming port or root access. Each can
|
|
|
175
218
|
send to up to eight hubs. Sharing is separate for each hub; network addresses
|
|
176
219
|
and full process arguments start disabled. See [Collection and sharing](monitoring.md#collection-and-sharing).
|
|
177
220
|
|
|
178
|
-
|
|
221
|
+
Changing destinations asks to stop a running collector and resumes it afterward. To replace an
|
|
179
222
|
existing machine credential, create a grant bound to that machine and use
|
|
180
223
|
`connect --replace`. For unattended enrollment, use `--token-file` with an owned
|
|
181
224
|
private file and delete it afterward; do not put the grant on the command line.
|
|
@@ -252,7 +295,7 @@ settings and collector identities.
|
|
|
252
295
|
|
|
253
296
|
| Alternative | Command |
|
|
254
297
|
| --- | --- |
|
|
255
|
-
| Select an exact published version | `rigscope upgrade --from rigscope@0.1.
|
|
298
|
+
| Select an exact published version | `rigscope upgrade --from rigscope@0.1.5` |
|
|
256
299
|
| Install a local archive | `rigscope upgrade --from ./rigscope-VERSION.tgz` |
|
|
257
300
|
| Return to the retained previous runtime | `rigscope rollback` |
|
|
258
301
|
|
|
@@ -267,13 +310,11 @@ Keep separate backups outside the machine.
|
|
|
267
310
|
### No password was printed
|
|
268
311
|
|
|
269
312
|
The `owner` password appears only when the account is created. Reinstalling with
|
|
270
|
-
saved settings keeps the old password. If you lost it,
|
|
271
|
-
|
|
313
|
+
saved settings keeps the old password. If you lost it, reset it at a private
|
|
314
|
+
prompt; Rigscope coordinates stopping and resuming the running installation:
|
|
272
315
|
|
|
273
316
|
```sh
|
|
274
|
-
rigscope stop
|
|
275
317
|
rigscope recover-password --user owner
|
|
276
|
-
rigscope start
|
|
277
318
|
```
|
|
278
319
|
|
|
279
320
|
Recovery keeps history and collector credentials. Sign in again afterward.
|
|
@@ -291,8 +332,8 @@ npx --yes rigscope@latest status
|
|
|
291
332
|
npx --yes rigscope@latest uninstall
|
|
292
333
|
```
|
|
293
334
|
|
|
294
|
-
Choose the operation you need; `uninstall`
|
|
295
|
-
|
|
335
|
+
Choose the operation you need; `uninstall` deletes this installation and its
|
|
336
|
+
data. Use `uninstall --keep-data` to preserve saved data. Use `ls -l ~/.local/bin/rigscope` to check for a link to an older
|
|
296
337
|
checkout. Back up a confirmed old launcher before removing it, then repeat
|
|
297
338
|
`install` to create the new launcher. Older services with other names may need
|
|
298
339
|
separate cleanup; do not stop unrelated services.
|
|
@@ -302,12 +343,23 @@ separate cleanup; do not stop unrelated services.
|
|
|
302
343
|
Check `rigscope logs hub` and `rigscope doctor`. If port 8081 is already in use,
|
|
303
344
|
identify the listener before stopping anything. For a fresh install, choose an
|
|
304
345
|
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
|
-
|
|
346
|
+
socket. To change a retained installation's local port, run
|
|
347
|
+
`rigscope configure --port 8086` and approve the stop prompt. Previously running
|
|
348
|
+
components resume after the change. `--origin` and `--port` cannot be combined.
|
|
308
349
|
|
|
309
350
|
## Hardware
|
|
310
351
|
|
|
352
|
+
GPU names use NVIDIA's reported model or the system's PCI name database when
|
|
353
|
+
available. Otherwise a vendor label is shown, with the PCI address separately.
|
|
354
|
+
A detected adapter can remain visible without telemetry: driver support and
|
|
355
|
+
permissions determine which counters can be read. Intel integrated adapters do
|
|
356
|
+
not necessarily expose utilization or dedicated VRAM through sysfs; shared
|
|
357
|
+
system RAM is not reported as dedicated VRAM.
|
|
358
|
+
|
|
359
|
+
History only adds historical GPU cards when stored series contain readings.
|
|
360
|
+
Empty PCI placeholder series do not create an extra card while NVIDIA's UUID
|
|
361
|
+
and model become available. Historical cards with readings remain accessible.
|
|
362
|
+
|
|
311
363
|
Collection supports Linux. CPU, memory and process readings come from procfs.
|
|
312
364
|
ARM and RISC-V CPU names are recognized; utilization uses per-core counters.
|
|
313
365
|
|
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.5` 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.5`, 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.5` 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.5.tgz
|
|
55
|
+
npm run verify:installed -- --archive ./out/release/rigscope-0.1.5.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.5.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.5.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.5.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.5.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.5.tgz --access public --tag latest \
|
|
124
124
|
--registry=https://registry.npmjs.org
|
|
125
|
-
npm view rigscope@0.1.
|
|
125
|
+
npm view rigscope@0.1.5 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.5 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
|
-
"use strict";exports.id=877,exports.ids=[877],exports.modules={4155:(a,b,c)=>{c.d(b,{E:()=>r,x:()=>q});var d=c(48249),e=c(2116),f=c.n(e),g=c(31742),h=c(50132),i=c(49187),j=c(90606),k=c(93484),l=c(12421),m=c(22338),n=c(58910);function o(a){return(0,d.jsxs)("button",{type:"button",onClick:a.onClick,className:"inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-foreground transition-colors hover:bg-card-strong",children:[(0,d.jsx)(g.A,{className:"h-3.5 w-3.5","aria-hidden":!0}),a.children]})}function p(a){return(0,d.jsx)(f(),{href:a.href,className:a.primary?"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-accent-foreground transition-colors hover:bg-accent/90":"inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-foreground transition-colors hover:bg-card-strong",children:a.children})}function q(){let{session:a,phase:b,retryConnection:c}=(0,n.M)();switch(a.kind){case"restoring":return(0,d.jsx)(m.Z,{title:"Checking session",className:"mx-auto my-12 max-w-md",children:(0,d.jsx)(m.p,{icon:h.A,note:"Checking your session…"})});case"restore-failed":return(0,d.jsxs)(m.Z,{title:"Hub unreachable",className:"mx-auto my-12 max-w-md",children:[(0,d.jsx)(m.p,{icon:i.A,note:"The hub is unreachable right now."}),(0,d.jsx)("div",{className:"flex justify-center",children:(0,d.jsx)(o,{onClick:c,children:"Check again"})})]});case"signed-out":if("expired"===b)return(0,d.jsxs)(m.Z,{title:"Session ended",className:"mx-auto my-12 max-w-md",children:[(0,d.jsx)(m.p,{icon:j.A,note:"Your session ended."}),(0,d.jsx)("div",{className:"flex justify-center",children:(0,d.jsx)(p,{href:"/login",primary:!0,children:"Sign in"})})]});return(0,d.jsxs)(m.Z,{title:"Sign in required",className:"mx-auto my-12 max-w-md",children:[(0,d.jsx)(m.p,{icon:h.A,note:"Sign in required."}),(0,d.jsx)("div",{className:"flex justify-center",children:(0,d.jsx)(p,{href:"/login",primary:!0,children:"Sign in"})})]});case"auth-unavailable":return(0,d.jsx)(m.Z,{title:"Sign-in unavailable",className:"mx-auto my-12 max-w-md",children:(0,d.jsx)(m.p,{icon:k.A,note:"Browser sign-in is not configured on this hub."})})}return"expired"===b?(0,d.jsxs)(m.Z,{title:"Session ended",className:"mx-auto my-12 max-w-md",children:[(0,d.jsx)(m.p,{icon:j.A,note:"Your session ended."}),(0,d.jsx)("div",{className:"flex justify-center",children:(0,d.jsx)(p,{href:"/login",primary:!0,children:"Sign in"})})]}):"no-permission"===b?(0,d.jsxs)(m.Z,{title:"No permission",className:"mx-auto my-12 max-w-md",children:[(0,d.jsx)(m.p,{icon:k.A,note:`You are signed in as ${a.user.username}, but this hub grants no machine view to this account.`}),(0,d.jsx)("div",{className:"flex justify-center",children:(0,d.jsx)(o,{onClick:c,children:"Check again"})})]}):null}function r(){let{phase:a,retryConnection:b}=(0,n.M)();return"reconnecting"!==a&&"disconnected"!==a&&"connecting"!==a?null:"connecting"===a?(0,d.jsxs)("div",{role:"status",className:"mb-5 flex items-center gap-2 rounded-lg border border-border bg-card px-4 py-2.5 text-xs text-muted-foreground",children:[(0,d.jsx)(g.A,{className:"h-3.5 w-3.5 shrink-0","aria-hidden":!0}),"Connecting to the live feed — waiting for the first snapshot."]}):(0,d.jsxs)("div",{role:"status",className:"mb-5 flex flex-wrap items-center gap-x-3 gap-y-2 rounded-lg border border-border bg-card px-4 py-2.5 text-xs text-muted-foreground",children:[(0,d.jsx)(l.A,{className:"h-3.5 w-3.5 shrink-0 text-warn","aria-hidden":!0}),(0,d.jsxs)("span",{children:["Connection lost — values below are ",(0,d.jsx)("strong",{className:"font-medium text-foreground",children:"last known"}),", not live measurements","reconnecting"===a?" — retrying with backoff…":" — retries stopped."]}),"disconnected"===a?(0,d.jsx)(o,{onClick:b,children:"Retry now"}):null]})}},29356:(a,b,c)=>{c.d(b,{c:()=>e});var d=c(67484);function e(a=1e3){let[b,c]=(0,d.useState)(()=>Date.now());return b}},50280:(a,b,c)=>{c.d(b,{iL:()=>k,jB:()=>m,vw:()=>n});var d=c(48249),e=c(93224),f=c(22127);let g=2*Math.PI*70;function h(a){return Number.isFinite(a)?Math.min(100,Math.max(0,a)):0}function i(a){let{reason:b,ageLabel:c,center:e}=a;return(0,d.jsxs)("p",{className:e?"max-w-[16rem] text-center text-xs text-warn":"text-xs text-warn",children:["Unavailable — ",b,c?(0,d.jsxs)("span",{className:"text-muted-foreground",children:[" (last update ",c,")"]}):null]})}function j(a){let{reason:b,ageLabel:c}=a;return(0,d.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,d.jsx)("div",{role:"img","aria-label":`Unavailable — ${b}`,className:"flex h-40 w-40 shrink-0 items-center justify-center rounded-full border-[5px] border-dashed border-border",children:(0,d.jsx)("span",{className:"tnum text-xl font-semibold text-muted-foreground",children:"—"})}),(0,d.jsx)(i,{reason:b,ageLabel:c,center:!0})]})}function k(a){let{metricName:b,field:c,ageLabel:i,isHeld:k,thresholdMs:l}=a;if("unavailable"===c.out)return(0,d.jsx)(j,{reason:c.reason,ageLabel:i??null});if("absent"===c.out)return(0,d.jsx)(j,{reason:"No sample has arrived yet.",ageLabel:i??null});let m="stale"===c.out,n=h(c.value),o=g*(1-n/100),p=m?`${b} last known ${(0,e.l9)(n)}, stale`:`${b} ${(0,e.l9)(n)}`;return(0,d.jsxs)("div",{className:"flex flex-col items-center gap-3",children:[(0,d.jsxs)("svg",{role:"img","aria-label":p,viewBox:"0 0 160 160",className:"h-40 w-40 shrink-0",children:[(0,d.jsx)("circle",{cx:80,cy:80,r:70,fill:"none",stroke:"var(--border)",strokeWidth:8}),(0,d.jsx)("circle",{cx:80,cy:80,r:70,fill:"none",stroke:m?"var(--warn)":"var(--cpu)",strokeWidth:8,strokeLinecap:"round",strokeDasharray:g,strokeDashoffset:o,transform:"rotate(-90 80 80)"}),(0,d.jsx)("text",{x:"50%",y:m||k?"45%":"50%",dominantBaseline:"central",textAnchor:"middle",className:"fill-foreground text-xl font-semibold tnum",children:(0,e.l9)(n)}),m?(0,d.jsx)("text",{x:"50%",y:102,textAnchor:"middle",className:"fill-warn text-xs tnum",children:"last known"}):k?(0,d.jsx)("text",{x:"50%",y:102,textAnchor:"middle",className:"fill-muted-foreground text-xs tnum",children:"held"}):null]}),(0,d.jsx)("p",{className:"text-center text-xs text-muted-foreground",children:m?`Last known value — no update for over ${(0,e.$)(l??f.vz)}${i?` (${i})`:""}`:i??""})]})}function l(a){let{reason:b,ageLabel:c}=a;return(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsx)("div",{role:"img","aria-label":`Memory unavailable — ${b}`,className:"h-3 w-full max-w-64 rounded-full border border-dashed border-border"}),(0,d.jsx)(i,{reason:b,ageLabel:c})]})}function m(a){let{field:b,ageLabel:c,isHeld:g,thresholdMs:i}=a;if("unavailable"===b.out)return(0,d.jsx)(l,{reason:b.reason,ageLabel:c??null});if("absent"===b.out)return(0,d.jsx)(l,{reason:"No sample has arrived yet.",ageLabel:c??null});let j="stale"===b.out,k=b.totalBytes,m=b.usedBytes,o=k>0?h(m/k*100)/100:0,p=j?`Memory last known ${(0,e.z3)(m)} of ${(0,e.z3)(k)}, stale`:`Memory ${(0,e.z3)(m)} of ${(0,e.z3)(k)}`;return(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsx)("div",{role:"img","aria-label":p,className:"flex h-3 w-full max-w-64 items-stretch overflow-hidden rounded-full bg-card-strong",children:(0,d.jsx)("div",{className:"h-full rounded-full",style:{width:`${100*o}%`,backgroundColor:j?"var(--warn)":"var(--mem)",minWidth:k>0?void 0:0}})}),(0,d.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,d.jsx)("p",{className:"tnum text-sm",children:k>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"font-semibold",children:(0,e.z3)(m)}),(0,d.jsxs)("span",{className:"text-muted-foreground",children:[" of ",(0,e.z3)(k)]}),(0,d.jsxs)("span",{className:"text-muted-foreground",children:[" ","\xb7 ",(0,e.l9)(k>0?m/k*100:null)]})]}):(0,d.jsxs)("span",{className:"text-muted-foreground",children:[(0,e.z3)(m)," used — total size unavailable"]})}),j?(0,d.jsx)(n,{text:"last known",title:`No update for over ${(0,e.$)(i??f.vz)}`}):null,g&&!j?(0,d.jsx)(n,{text:"held",title:"Value kept while the connection is down"}):null]}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground",children:j?`Retained from the last accepted sample${c?` (${c})`:""}.`:c??""})]})}function n(a){let{text:b,title:c}=a;return(0,d.jsx)("span",{title:c,className:"tnum shrink-0 rounded-full border border-border px-2 py-0.5 text-xs text-muted-foreground",children:b})}},90606:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(65366).A)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]])},99837:(a,b,c)=>{c.d(b,{B4:()=>o,CE:()=>k,V5:()=>i,YL:()=>n,Zf:()=>p,cH:()=>l,cy:()=>C,d5:()=>m,fp:()=>z,hL:()=>x,rn:()=>j,v4:()=>h});var d=c(93224);function e(a,b){return{state:"value",value:a,stale:b}}function f(a){return{state:"unavailable",reason:a}}function g(a){return{state:"absent",reason:a}}function h(a){let b=a.displayName?.trim();if(b)return b;let c=a.hostname?.trim();return c||a.machineId}function i(a){let b=new Set,c=[];for(let d of a.tags??[]){if("string"!=typeof d)continue;let a=d.trim();if(!(""===a||b.has(a.toLowerCase()))&&(b.add(a.toLowerCase()),c.push(a),c.length>=32))break}return c}function j(a,b){let c=b.trim().toLowerCase().split(/\s+/).filter(Boolean);return 0===c.length?[...a]:a.filter(a=>{let b=[h(a),a.hostname,a.machineId,a.collectorId,...i(a)].filter(a=>"string"==typeof a&&""!==a.trim()).join(" ").toLowerCase();return c.every(a=>b.includes(a))})}function k(a){return null!=a&&Number.isFinite(a)?`${(0,d.z3)(a)}/s`:"—"}function l(a){return null!=a&&Number.isFinite(a)?`${Math.round(a)} \xb0C`:"—"}function m(a){return null!=a&&Number.isFinite(a)?`${Math.round(a)} W`:"—"}function n(a){return null==a||!Number.isFinite(a)||a<0?"—":`${a<10?a.toFixed(2):a.toFixed(1)} ms`}function o(a){return null!=a&&Number.isFinite(a)?Math.round(a).toLocaleString():"—"}function p(a){return null!=a&&Number.isFinite(a)?`${Math.round(a)} Mb/s`:"—"}function q(a){let b=a.filter(a=>"supported"===a.telemetry);return b.some(a=>"ok"===a.state)&&b.some(a=>"ok"!==a.state)}let r="The collector has not reported this metric family to this hub.";function s(a){return a.metrics?.payload??null}function t(a){return"number"==typeof a&&Number.isFinite(a)?a:null}function u(a){let b=t(a);return null!==b&&b>=0?b:null}function v(a,b,c,d,h=!0){if(null===a||"object"!=typeof a)return g(d);if("unavailable"===a.status)return f(("string"==typeof a.reason?a.reason.trim():"")||"This metric family is unavailable.");if("ok"!==a.status)return g(d);let i=(h?u:t)(a[b]);return null===i?f("Not reported for this sample."):e(i,c)}function w(a){let b=s(a);return null!==b?"ok"===b.disks.status?{state:"available"}:{state:"unavailable",reason:b.disks.reason}:{state:"absent",reason:r}}function x(a,b){var c;let j,k,l,m,n,o,p,t,x,y=(0,d.vj)(a,b),z="stale"===y,A=function(a,b){let c=a.inventory?.gpus??[],d=s(a),e=d?.gpus.status==="ok"?d.gpus.devices:[],f=d?.gpus.status==="unavailable"?d.gpus.reason:null,g=new Map(e.map(a=>[a.id,a])),h=new Map(c.map(a=>[a.id,a])),i=[];for(let a of c)i.push(a.id);for(let a of e)h.has(a.id)||i.push(a.id);let j=[];for(let a of i){let c=h.get(a),d=g.get(a),e={id:a,name:c?.name??a.replace(/^gpu:/,""),vendor:c?.vendor??"other",pciBusId:c?.pciBusId??null,telemetry:c?.telemetry??"supported",stale:b};if(d?.status==="ok"){j.push({...e,state:"ok",reason:null,utilizationPercent:d.utilizationPercent,memoryUsedBytes:d.memoryUsedBytes,memoryTotalBytes:d.memoryTotalBytes??c?.memoryTotalBytes??null,temperatureC:d.temperatureC,powerWatts:d.powerWatts});continue}if(d?.status==="unavailable"){j.push({...e,state:"unavailable",reason:d.reason,utilizationPercent:null,memoryUsedBytes:null,memoryTotalBytes:c?.memoryTotalBytes??null,temperatureC:null,powerWatts:null});continue}if(c?.telemetry==="unsupported"){j.push({...e,state:"unsupported",reason:c.reason??"No supported telemetry for this adapter.",utilizationPercent:null,memoryUsedBytes:null,memoryTotalBytes:null,temperatureC:null,powerWatts:null});continue}j.push({...e,state:"unavailable",reason:f??"No current reading for this device.",utilizationPercent:null,memoryUsedBytes:null,memoryTotalBytes:c?.memoryTotalBytes??null,temperatureC:null,powerWatts:null})}return j}(a,z);return{displayName:h(a),tags:i(a),freshness:y,thresholdMs:(0,d.Cj)(a.expectedIntervalMs),stale:z,cpu:{total:void 0===(l=a.metrics?.payload.cpu)?g("No CPU reading has been received yet."):"ok"===l.status?e(l.usagePercent,z):f(l.reason),perCore:void 0===(m=a.metrics?.payload.cpu)?g("No CPU reading has been received yet; per-core values are unknown."):"ok"===m.status?e([...m.perCore],z):f(m.reason)},memory:void 0===(n=a.metrics?.payload.memory)?g("No memory reading has been received yet."):"ok"===n.status?e({usedBytes:n.usedBytes,totalBytes:n.totalBytes},z):f(n.reason),swap:void 0===(o=a.metrics?.payload.swap)?g("No swap reading has been received yet."):"ok"===o.status?e({usedBytes:o.usedBytes,totalBytes:o.totalBytes},z):f(o.reason),bottlenecks:(p=a.metrics?.payload.cpu,t=a.metrics?.payload.memory,x=a.metrics?.payload.disks,{cpuTemperature:v(p,"temperatureC",z,"No CPU reading has been received yet.",!1),cpuPower:v(p,"powerWatts",z,"No CPU reading has been received yet."),cpuIowait:v(p,"iowaitPercent",z,"No CPU reading has been received yet."),cpuPressure:v(p,"pressureSomePercent",z,"No CPU reading has been received yet."),memoryPressureSome:v(t,"pressureSomePercent",z,"No memory reading has been received yet."),memoryPressureFull:v(t,"pressureFullPercent",z,"No memory reading has been received yet."),ioPressureSome:v(x,"pressureSomePercent",z,"No disk reading has been received yet."),ioPressureFull:v(x,"pressureFullPercent",z,"No disk reading has been received yet.")}),gpus:{family:null!==(j=s(c=a))?"ok"===j.gpus.status?{state:"available"}:{state:"unavailable",reason:j.gpus.reason}:(c.inventory?.gpus.length??0)>0?{state:"absent",reason:"No GPU readings have been received yet."}:{state:"absent",reason:r+" GPU telemetry is unknown until inventory or a reading arrives."},cards:A,partial:q(A)},filesystems:{family:w(a),items:function(a,b){let c=a.inventory?.filesystems??[],d=s(a),e=d?.disks.status==="ok"?d.disks.filesystems:[],f=d?.disks.status==="unavailable"?d.disks.reason:null,g=new Map(e.map(a=>[a.id,a])),h=new Map(c.map(a=>[a.id,a])),i=[];for(let a of c)i.push(a.id);for(let a of e)h.has(a.id)||i.push(a.id);return i.map(a=>{let c=h.get(a),e=g.get(a),i={id:a,mountPoint:c?.mountPoint??a.replace(/^fs:/,""),device:c?.device??"",fsType:c?.fsType??"unknown",totalBytes:c?.totalBytes??null,inodesUsed:null,inodesTotal:null,stale:b};return e?.status==="ok"?{...i,usedBytes:e.usedBytes,totalBytes:e.totalBytes,inodesUsed:u(e.inodesUsed),inodesTotal:u(e.inodesTotal),state:"ok",reason:null}:e?.status==="unavailable"?{...i,usedBytes:null,state:"unavailable",reason:e.reason}:null!==f?{...i,usedBytes:null,state:"unavailable",reason:f}:{...i,usedBytes:null,state:"inventory",reason:null===d?r:"No current usage reading for this filesystem."}})}(a,z)},disks:{family:w(a),items:function(a,b){let c=a.inventory?.disks??[],d=s(a),e=d?.disks.status==="ok"?d.disks.devices:[],f=d?.disks.status==="unavailable"?d.disks.reason:null,g=new Map(e.map(a=>[a.id,a])),h=new Map(c.map(a=>[a.id,a])),i=[];for(let a of c)i.push(a.id);for(let a of e)h.has(a.id)||i.push(a.id);return i.map(a=>{let c=h.get(a),e=g.get(a),i={id:a,name:c?.name??a.replace(/^disk:/,""),model:c?.model??null,rotational:c?.rotational??null,sizeBytes:c?.sizeBytes??null,readLatencyMs:null,writeLatencyMs:null,ioUtilizationPercent:null,stale:b};return e?.status==="ok"?{...i,state:"ok",reason:null,readBytesPerSec:e.readBytesPerSec,writeBytesPerSec:e.writeBytesPerSec,readLatencyMs:u(e.readLatencyMs),writeLatencyMs:u(e.writeLatencyMs),ioUtilizationPercent:u(e.ioUtilizationPercent)}:e?.status==="unavailable"?{...i,state:"unavailable",reason:e.reason,readBytesPerSec:null,writeBytesPerSec:null}:null!==f?{...i,state:"unavailable",reason:f,readBytesPerSec:null,writeBytesPerSec:null}:{...i,state:"inventory",reason:null===d?r:"No current I/O reading for this device.",readBytesPerSec:null,writeBytesPerSec:null}})}(a,z)},network:{family:null!==(k=s(a))?"ok"===k.network.status?{state:"available"}:{state:"unavailable",reason:k.network.reason}:{state:"absent",reason:r},items:function(a,b){let c=a.inventory?.network??[],d=s(a),e=d?.network.status==="ok"?d.network.interfaces:[],f=d?.network.status==="unavailable"?d.network.reason:null,g=new Map(e.map(a=>[a.id,a])),h=new Map(c.map(a=>[a.id,a])),i=[];for(let a of c)i.push(a.id);for(let a of e)h.has(a.id)||i.push(a.id);return i.map(a=>{let c=h.get(a),e=g.get(a),i={id:a,name:c?.name??a.replace(/^net:/,""),mac:c?.mac??null,addresses:c?.addresses??[],virtual:c?.virtual??!1,linkState:c?.state??"unknown",speedMbps:c?.speedMbps??null,stale:b};return e?.status==="ok"?{...i,state:"ok",reason:null,rxBytesPerSec:e.rxBytesPerSec,txBytesPerSec:e.txBytesPerSec}:e?.status==="unavailable"?{...i,state:"unavailable",reason:e.reason,rxBytesPerSec:null,txBytesPerSec:null}:null!==f?{...i,state:"unavailable",reason:f,rxBytesPerSec:null,txBytesPerSec:null}:{...i,state:"inventory",reason:null===d?r:"No current rate reading for this interface.",rxBytesPerSec:null,txBytesPerSec:null}})}(a,z)}}}function y(a){if(0===a.length||a.some(a=>null===a))return null;let b=0;for(let c of a)b+=c;return b}function z(a,b){let c,d,e,f,g,h,i=x(a,b),j=i.gpus.cards,k=0===j.length?null:(e=(d=(c=j.filter(a=>"supported"===a.telemetry)).filter(a=>"ok"===a.state)).map(a=>a.utilizationPercent).filter(a=>null!==a),f=y(c.map(a=>a.memoryUsedBytes)),g=y(c.map(a=>a.memoryTotalBytes)),h=0===d.length?"unavailable"===i.gpus.family.state||"absent"===i.gpus.family.state?i.gpus.family.reason:0===c.length?"No telemetry-supported GPU was reported.":"No current GPU reading.":null,{count:j.length,supportedCount:c.length,okCount:d.length,partial:q(j),maxUtilizationPercent:0===e.length?null:Math.max(...e),memoryUsedBytes:f,memoryTotalBytes:g,stale:i.stale,reason:h}),l=i.filesystems.items.filter(a=>"ok"===a.state&&null!==a.usedBytes&&null!==a.totalBytes&&a.totalBytes>0).map(a=>a.usedBytes/a.totalBytes*100),m=0===i.filesystems.items.length?null:{maxUsedPercent:0===l.length?null:Math.max(...l),stale:i.stale,reason:0===l.length?"available"===i.filesystems.family.state?"No current filesystem usage reading.":i.filesystems.family.reason:null},n=i.network.items.filter(a=>"ok"===a.state&&null!==a.rxBytesPerSec&&null!==a.txBytesPerSec),o=0===i.network.items.length?null:{rxBytesPerSec:n.reduce((a,b)=>a+b.rxBytesPerSec,0),txBytesPerSec:n.reduce((a,b)=>a+b.txBytesPerSec,0),stale:i.stale,reason:0===n.length?"available"===i.network.family.state?"No current interface rate reading.":i.network.family.reason:null};return{cpu:i.cpu.total,memory:i.memory,gpu:k,disk:m,network:o}}let A=["cpu","memory","swap","gpus","disks","network","processes"],B={cpu:"CPU",memory:"Memory",swap:"Swap",gpus:"GPUs",disks:"Disks",network:"Network",processes:"Processes"};function C(a,b){return a.map(a=>{var c;return{machineId:a.machineId,name:h(a),collectorId:a.collectorId,connected:a.connected,cadenceMs:a.expectedIntervalMs??null,thresholdMs:(0,d.Cj)(a.expectedIntervalMs),lastReceivedAt:a.lastReceivedAt,freshness:(0,d.vj)(a,b),delivery:a.delivery?.delivery??null,deliveryCapturedAt:a.delivery?.capturedAt??null,failures:a.delivery?.failures??[],capabilities:void 0===(c=a.inventory)?null:A.map(a=>{let b=c.capabilities[a];return{key:a,label:B[a],status:b.status,reason:b.reason??null}})}})}}};
|
|
@@ -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"
|