dcp-worker 4.4.1 → 4.4.2
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/lib/web-iface.js +1 -1
- package/package.json +1 -1
- package/www/hud/small-dark.html +72 -8
package/lib/web-iface.js
CHANGED
|
@@ -377,7 +377,7 @@ function filenameFromPathname(docroot, pathname, strip)
|
|
|
377
377
|
pathname = pathname.slice(strip.length);
|
|
378
378
|
}
|
|
379
379
|
const filename = path.join(docroot, pathname);
|
|
380
|
-
if (!filename.startsWith(docroot) || filename[docroot.length] !==
|
|
380
|
+
if (!filename.startsWith(docroot) || filename[docroot.length] !== path.sep)
|
|
381
381
|
throw new Error(`invalid pathname ${pathname} ${filename} ${docroot}`);
|
|
382
382
|
return filename;
|
|
383
383
|
}
|
package/package.json
CHANGED
package/www/hud/small-dark.html
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
import * as hud from "./hud-common.mjs";
|
|
23
23
|
window.addEventListener('error', ev => dcp['dom-tk'].modals.alert(ev));
|
|
24
24
|
window.addEventListener('unhandledrejection', ev => dcp['dom-tk'].modals.alert(ev.reason));
|
|
25
|
+
document.body.style.height = window.innerHeight + 'px';
|
|
25
26
|
</script>
|
|
26
27
|
<style type="text/css">
|
|
27
28
|
HTML, BODY {
|
|
@@ -120,14 +121,76 @@ async function init()
|
|
|
120
121
|
el.textContent = String(bnTotal.plus(bnAmount));
|
|
121
122
|
});
|
|
122
123
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
//
|
|
125
|
+
// WORKER EVENTS
|
|
126
|
+
//
|
|
127
|
+
|
|
128
|
+
// Fired when fetching work from the scheduler
|
|
129
|
+
worker.on("fetch", ev => {
|
|
130
|
+
const jobIds = Object.keys(ev.jobs);
|
|
131
|
+
|
|
132
|
+
if (jobIds.length === 0) {
|
|
133
|
+
logger("[worker.fetch] No new work fetched; retrying in 7 seconds...");
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const sizeKB = (ev.fetchSize / 1024).toFixed(2);
|
|
138
|
+
logger(`[worker.fetch] fetchSize: ${sizeKB} KB`);
|
|
139
|
+
|
|
140
|
+
for (const jobId of jobIds) {
|
|
141
|
+
const job = ev.jobs[jobId];
|
|
142
|
+
const sliceCount = ev.slices[jobId] || 0;
|
|
143
|
+
|
|
144
|
+
logger(`jobId: ${jobId}\tname: ${job.name}\tdescription: ${job.description}\tlink: ${job.link}\tslicesFetched: ${sliceCount}`)
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// Fired after a slice result is sent (or fails to send)
|
|
149
|
+
worker.on("result", (urlOrError, size, jobId) => {
|
|
150
|
+
if (urlOrError instanceof Error) {
|
|
151
|
+
logger(`[worker.result] job ${jobId} had error ${urlOrError.message}`);
|
|
152
|
+
} else {
|
|
153
|
+
logger(`[worker.result] job ${jobId} sent ${(size / 1024).toFixed(2)} KB to ${urlOrError || "scheduler"}`);
|
|
154
|
+
}
|
|
128
155
|
});
|
|
129
|
-
|
|
130
|
-
|
|
156
|
+
|
|
157
|
+
// Payment received for completed slices
|
|
158
|
+
let totalEarned = 0;
|
|
159
|
+
const totalEarnedEl = document.getElementById("total-earned");
|
|
160
|
+
worker.on("payment", (payment, paymentAccount, jobId, slice) => {
|
|
161
|
+
totalEarned += Number(payment);
|
|
162
|
+
if (totalEarnedEl) {
|
|
163
|
+
totalEarnedEl.textContent = `${totalEarned.toFixed(3)} ⊇`;
|
|
164
|
+
}
|
|
165
|
+
logger(
|
|
166
|
+
`[worker.payment] ` +
|
|
167
|
+
`payment: ${payment} ⊇, ` +
|
|
168
|
+
`depositAccount: ${paymentAccount}, ` +
|
|
169
|
+
`jobId: ${jobId}, ` +
|
|
170
|
+
`slice: ${slice}`
|
|
171
|
+
);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// Worker stop requested; shutdown starting
|
|
175
|
+
worker.on("stop", abort => {
|
|
176
|
+
logger("[worker.stop] worker preparing to shutdown...");
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// Worker shutdown complete
|
|
180
|
+
worker.on("end", () => {
|
|
181
|
+
logger("[worker.end] worker fully stopped");
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// Internal error occurred in worker
|
|
185
|
+
worker.on("error", err => {
|
|
186
|
+
logger(`[worker.error] ${error.code ? error.message+'; code='+error.code : error.message}`);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
// Warning occurred in worker
|
|
190
|
+
worker.on("warning", warn => {
|
|
191
|
+
logger(`[worker.warning] ${JSON.stringify(warn, null, 2)}`);
|
|
192
|
+
});
|
|
193
|
+
|
|
131
194
|
}
|
|
132
195
|
|
|
133
196
|
const logLines = [];
|
|
@@ -135,7 +198,8 @@ const logSize = 100;
|
|
|
135
198
|
function logger(...args)
|
|
136
199
|
{
|
|
137
200
|
const logEl = $('#loggerText');
|
|
138
|
-
const
|
|
201
|
+
const ts = new Date().toLocaleTimeString();
|
|
202
|
+
const msg = `[${ts}] ` + args.map(arg => String(arg)).join(' ');
|
|
139
203
|
logLines.push(msg);
|
|
140
204
|
if (logLines.length === logSize)
|
|
141
205
|
logLines.shift();
|