This repository was archived by the owner on Jul 23, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmain.js
More file actions
58 lines (49 loc) · 1.61 KB
/
main.js
File metadata and controls
58 lines (49 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
'use strict';
const cleanData = require('./clean.js').data;
async function copyDatabase(reader, input, output) {
var total = 0;
var copied = 0;
var skipped = 0;
await output(async function (write) {
console.time('Copy objects');
try {
console.log('Counting objects...');
await reader(input, async function(count) {
total = count;
console.log('Attempting to copy ' + total + ' objects...');
}, async function(data) {
var values = cleanData(data);
if (values) {
await write(values);
copied++;
} else {
skipped++;
}
if ((copied + skipped) % 100000 === 0) {
console.log((' ' + Math.floor(100 * (copied + skipped) / total)).substr(-3) + '% - ' + copied + ' objects copied (' + skipped + ' skipped)');
}
});
if ((copied + skipped) % 100000 !== 0) {
console.log('100% - ' + copied + ' objects copied (' + skipped + ' skipped)');
}
if (copied + skipped !== total) {
console.warn('There were ' + (copied + skipped) + ' objects, but ' + total + ' were expected.');
}
} finally {
console.timeEnd('Copy objects');
}
});
}
async function main(reader, input, writer, output, concurrency, memory, sessionReader, sessionInput) {
console.time('Full conversion');
try {
await writer(output, concurrency, memory, async function (copyData, copySessions) {
var data = input ? copyDatabase(reader, input, copyData) : Promise.resolve();
var sessions = sessionInput ? copySessions(sessionReader, sessionInput) : Promise.resolve();
await Promise.all([data, sessions]);
});
} finally {
console.timeEnd('Full conversion');
}
}
module.exports = main;