-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathconfirmLoad.js
72 lines (64 loc) · 2.19 KB
/
confirmLoad.js
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
const fs = require('fs');
const superagent = require('superagent');
const readline = require('readline');
const path = require('path');
const { getAuthToken } = require('./lib/login');
let ep = process.argv[2];
let inFile = process.argv[3];
(async () => {
try {
const start = new Date().valueOf();
if (!inFile) {
throw 'Usage: node confirmLoad.js <endpoint> <jsonl_file> ';
} else if (!fs.existsSync(inFile)) {
throw new Error('Can\'t find input file');
}
const config = (fs.existsSync('./config.js')) ? require('./config.js') : require('./config.default.js');
ep = ep.replace(/__/g, '/');
ep = ep.replace(/^\.x\//, '');
const workingDir = path.dirname(inFile);
const baseName = path.basename(inFile, '.jsonl');
const notFoundPath = `${workingDir}/${baseName}-not-found.jsonl`;
if (fs.existsSync(notFoundPath)) {
fs.unlinkSync(notFoundPath);
}
const authToken = await getAuthToken(superagent, config.okapi, config.tenant, config.authpath, config.username, config.password);
const actionUrl = `${config.okapi}/${ep}`;
let updated = 0;
let success = 0;
let fail = 0;
const fileStream = fs.createReadStream(inFile);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
let x = 0;
for await (const line of rl) {
x++;
let rec = JSON.parse(line);
let lDate = new Date();
let recUrl = `${actionUrl}/${rec.id}`;
console.log(`[${x}] ${lDate} ${recUrl}`);
try {
let res = await superagent
.get(recUrl)
.set('x-okapi-token', authToken)
.set('accept', 'application/json');
success++;
} catch (e) {
console.log(`WARN record not found for ${rec.id}...`);
fs.writeFileSync(notFoundPath, line + '\n', { flag: 'a' });
fail++;
}
}
const end = new Date().valueOf();
const ms = end - start;
const time = Math.floor(ms / 1000);
console.log(`\nTime: ${time} sec`);
console.log(`Records updated: ${updated}`);
console.log(`Records added: ${success}`);
console.log(`Failures: ${fail}\n`);
} catch (e) {
console.error(e);
}
})();