()
| 236 | } |
| 237 | |
| 238 | var oncomplete = function () { |
| 239 | |
| 240 | //Output information about job running time, benchmarks, etc. if |
| 241 | //the `benchmark` op is set |
| 242 | var time; |
| 243 | if (job.options.benchmark) { |
| 244 | var mb_read, mb_written, MB = 1024 * 1024, now = new Date(); |
| 245 | |
| 246 | var round = function (val) { |
| 247 | return Math.round(val * 1000) / 1000; |
| 248 | }; |
| 249 | |
| 250 | time = (now - job.start_time) / 1000; |
| 251 | mb_read = round(job.obj.getBytesRead() / MB); |
| 252 | mb_written = round(job.obj.getBytesWritten() / MB); |
| 253 | |
| 254 | if (mb_read) { |
| 255 | self.status( |
| 256 | 'Read ' + mb_read + 'MB (' + round(mb_read / time) + 'MB/s)' |
| 257 | , 'ok'); |
| 258 | } |
| 259 | |
| 260 | if (mb_written) { |
| 261 | self.status( |
| 262 | 'Wrote ' + mb_written + 'MB (' + round(mb_written / time) + 'MB/s)' |
| 263 | , 'ok'); |
| 264 | } |
| 265 | } |
| 266 | |
| 267 | //Wait for output streams to drain, then we're done |
| 268 | job.obj.waitForOutputStreamDrains.apply(job.obj, [function () { |
| 269 | self.status('Job complete' + (time ? 'd in ' + time + 's' : ''), 'ok'); |
| 270 | var oncomplete = job.oncomplete; |
| 271 | self.jobs[job.id] = null; |
| 272 | oncomplete(); |
| 273 | }]); |
| 274 | }; |
| 275 | |
| 276 | //Call job.complete() if it's defined |
| 277 | if (typeof job.obj.complete === 'function') { |
no test coverage detected