forked from aerospike/aerospike-client-nodejs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscan.js
executable file
·94 lines (83 loc) · 2.4 KB
/
scan.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env node
// *****************************************************************************
// Copyright 2013-2023 Aerospike, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License")
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// *****************************************************************************
const shared = require('./shared')
shared.runner()
function udfParams (argv) {
if (!argv.udf) {
return
}
const udf = {}
udf.module = argv.udf.shift()
udf.func = argv.udf.shift()
udf.args = argv.udf
return udf
}
function buildScanOptions (argv) {
const options = {
concurrent: argv.concurrent
}
console.info(options)
return options
}
async function scan (client, argv) {
const options = buildScanOptions(argv)
const scan = client.scan(argv.namespace, argv.set, options)
if (argv.bins) {
scan.select(argv.bins)
}
const udf = udfParams(argv)
if (udf && argv.background) {
await scanBackground(scan, udf)
} else {
await scanForeach(scan)
}
}
async function scanForeach (scan) {
const stream = scan.foreach()
stream.on('data', shared.cli.printRecord)
await shared.streams.consume(stream)
}
async function scanBackground (query, udf) {
const job = await scan.background(udf.module, udf.func, udf.args)
console.info('Running scan in background - Job ID:', job.jobID)
}
exports.command = 'scan'
exports.describe = 'Execute a scan and print the results'
exports.handler = shared.run(scan)
exports.builder = {
bins: {
describe: 'List of bins to fetch for each record',
type: 'array',
group: 'Command:'
},
concurrent: {
describe: 'Scan all cluster nodes in parallel',
type: 'boolean',
group: 'Command:',
default: true
},
udf: {
desc: 'UDF module, function & arguments to apply to the query',
group: 'Command:',
type: 'array'
},
background: {
desc: 'Run the scan in the background (with Record UDF)',
group: 'Command:',
type: 'boolean'
}
}