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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dcp-worker",
3
- "version": "4.4.1",
3
+ "version": "4.4.2",
4
4
  "description": "Node.js Worker for Distributive Compute Platform",
5
5
  "main": "bin/dcp-worker",
6
6
  "keywords": [
@@ -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
- worker.on('job', job => logger(`New job: ${job.name} ${job.id.slice(0,8)} ${job.description || ''} ${job.link || ''}`));
124
- worker.on('sandbox', sandbox => logger('sbox', sandbox));
125
- worker.on('connect', (runInfo, taskInfo) => {
126
- displayRunInfo(runInfo);
127
- logger(`Worker currently has ${Object.keys(taskInfo.jobs).length} jobs loaded`);
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
- worker.on('stop', () => logger('Worker is preparing to shut down'));
130
- worker.on('end', () => logger('Worker has stopped'));
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 msg = args.map(arg => String(arg)).join(' ');
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();