@itentialopensource/adapter-meraki 0.8.1 → 0.8.4
Sign up to get free protection for your applications and to get access to all the features.
- package/AUTH.md +14 -15
- package/BROKER.md +199 -0
- package/CALLS.md +158 -89
- package/CHANGELOG.md +68 -26
- package/CODE_OF_CONDUCT.md +12 -17
- package/CONTRIBUTING.md +88 -74
- package/ENHANCE.md +14 -14
- package/PROPERTIES.md +483 -89
- package/README.md +131 -51
- package/SUMMARY.md +2 -2
- package/TROUBLESHOOT.md +4 -3
- package/adapter.js +174 -732
- package/adapterBase.js +841 -88
- package/entities/.generic/action.json +105 -0
- package/entities/.generic/schema.json +6 -1
- package/package.json +5 -3
- package/pronghorn.json +642 -563
- package/propertiesDecorators.json +14 -0
- package/propertiesSchema.json +393 -195
- package/refs?service=git-upload-pack +0 -0
- package/report/adapterInfo.json +10 -0
- package/report/updateReport1651511176919.json +115 -0
- package/report/updateReport1652488414759.json +120 -0
- package/sampleProperties.json +132 -3
- package/test/integration/adapterTestBasicGet.js +1 -1
- package/test/integration/adapterTestIntegration.js +24 -107
- package/test/unit/adapterBaseTestUnit.js +10 -3
- package/test/unit/adapterTestUnit.js +38 -131
- package/utils/adapterInfo.js +206 -0
- package/utils/entitiesToDB.js +12 -57
- package/utils/pre-commit.sh +3 -0
- package/utils/tbScript.js +35 -20
- package/utils/tbUtils.js +49 -31
- package/utils/testRunner.js +16 -16
@@ -4,6 +4,7 @@
|
|
4
4
|
/* global describe it log pronghornProps */
|
5
5
|
/* eslint global-require: warn */
|
6
6
|
/* eslint no-unused-vars: warn */
|
7
|
+
/* eslint import/no-dynamic-require:warn */
|
7
8
|
|
8
9
|
// include required items for testing & logging
|
9
10
|
const assert = require('assert');
|
@@ -18,22 +19,31 @@ const { use } = require('chai');
|
|
18
19
|
const td = require('testdouble');
|
19
20
|
|
20
21
|
const anything = td.matchers.anything();
|
21
|
-
|
22
|
-
// stub and attemptTimeout are used throughout the code so set them here
|
23
22
|
let logLevel = 'none';
|
24
|
-
const stub = true;
|
25
23
|
const isRapidFail = false;
|
26
|
-
|
24
|
+
|
25
|
+
// read in the properties from the sampleProperties files
|
26
|
+
let adaptdir = __dirname;
|
27
|
+
if (adaptdir.endsWith('/test/integration')) {
|
28
|
+
adaptdir = adaptdir.substring(0, adaptdir.length - 17);
|
29
|
+
} else if (adaptdir.endsWith('/test/unit')) {
|
30
|
+
adaptdir = adaptdir.substring(0, adaptdir.length - 10);
|
31
|
+
}
|
32
|
+
const samProps = require(`${adaptdir}/sampleProperties.json`).properties;
|
27
33
|
|
28
34
|
// these variables can be changed to run in integrated mode so easier to set them here
|
29
35
|
// always check these in with bogus data!!!
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
36
|
+
samProps.stub = true;
|
37
|
+
samProps.host = 'replace.hostorip.here';
|
38
|
+
samProps.authentication.username = 'username';
|
39
|
+
samProps.authentication.password = 'password';
|
40
|
+
samProps.protocol = 'http';
|
41
|
+
samProps.port = 80;
|
42
|
+
samProps.ssl.enabled = false;
|
43
|
+
samProps.ssl.accept_invalid_cert = false;
|
44
|
+
samProps.request.attempt_timeout = 60000;
|
45
|
+
const attemptTimeout = samProps.request.attempt_timeout;
|
46
|
+
const { stub } = samProps;
|
37
47
|
|
38
48
|
// these are the adapter properties. You generally should not need to alter
|
39
49
|
// any of these after they are initially set up
|
@@ -45,102 +55,7 @@ global.pronghornProps = {
|
|
45
55
|
adapters: [{
|
46
56
|
id: 'Test-meraki',
|
47
57
|
type: 'Meraki',
|
48
|
-
properties:
|
49
|
-
host,
|
50
|
-
port,
|
51
|
-
base_path: '//api',
|
52
|
-
version: 'v0',
|
53
|
-
cache_location: 'none',
|
54
|
-
encode_pathvars: true,
|
55
|
-
save_metric: false,
|
56
|
-
protocol,
|
57
|
-
stub,
|
58
|
-
authentication: {
|
59
|
-
auth_method: 'basic user_password',
|
60
|
-
username,
|
61
|
-
password,
|
62
|
-
token: '',
|
63
|
-
token_timeout: -1,
|
64
|
-
token_cache: 'local',
|
65
|
-
invalid_token_error: 401,
|
66
|
-
auth_field: 'header.headers.Authorization',
|
67
|
-
auth_field_format: 'Basic {b64}{username}:{password}{/b64}',
|
68
|
-
auth_logging: false,
|
69
|
-
client_id: '',
|
70
|
-
client_secret: '',
|
71
|
-
grant_type: ''
|
72
|
-
},
|
73
|
-
healthcheck: {
|
74
|
-
type: 'none',
|
75
|
-
frequency: 60000,
|
76
|
-
query_object: {}
|
77
|
-
},
|
78
|
-
throttle: {
|
79
|
-
throttle_enabled: false,
|
80
|
-
number_pronghorns: 1,
|
81
|
-
sync_async: 'sync',
|
82
|
-
max_in_queue: 1000,
|
83
|
-
concurrent_max: 1,
|
84
|
-
expire_timeout: 0,
|
85
|
-
avg_runtime: 200,
|
86
|
-
priorities: [
|
87
|
-
{
|
88
|
-
value: 0,
|
89
|
-
percent: 100
|
90
|
-
}
|
91
|
-
]
|
92
|
-
},
|
93
|
-
request: {
|
94
|
-
number_redirects: 0,
|
95
|
-
number_retries: 3,
|
96
|
-
limit_retry_error: 0,
|
97
|
-
failover_codes: [],
|
98
|
-
attempt_timeout: attemptTimeout,
|
99
|
-
global_request: {
|
100
|
-
payload: {},
|
101
|
-
uriOptions: {},
|
102
|
-
addlHeaders: {},
|
103
|
-
authData: {}
|
104
|
-
},
|
105
|
-
healthcheck_on_timeout: true,
|
106
|
-
return_raw: true,
|
107
|
-
archiving: false,
|
108
|
-
return_request: false
|
109
|
-
},
|
110
|
-
proxy: {
|
111
|
-
enabled: false,
|
112
|
-
host: '',
|
113
|
-
port: 1,
|
114
|
-
protocol: 'http',
|
115
|
-
username: '',
|
116
|
-
password: ''
|
117
|
-
},
|
118
|
-
ssl: {
|
119
|
-
ecdhCurve: '',
|
120
|
-
enabled: sslenable,
|
121
|
-
accept_invalid_cert: sslinvalid,
|
122
|
-
ca_file: '',
|
123
|
-
key_file: '',
|
124
|
-
cert_file: '',
|
125
|
-
secure_protocol: '',
|
126
|
-
ciphers: ''
|
127
|
-
},
|
128
|
-
mongo: {
|
129
|
-
host: '',
|
130
|
-
port: 0,
|
131
|
-
database: '',
|
132
|
-
username,
|
133
|
-
password: '',
|
134
|
-
replSet: '',
|
135
|
-
db_ssl: {
|
136
|
-
enabled: false,
|
137
|
-
accept_invalid_cert: false,
|
138
|
-
ca_file: '',
|
139
|
-
key_file: '',
|
140
|
-
cert_file: ''
|
141
|
-
}
|
142
|
-
}
|
143
|
-
}
|
58
|
+
properties: samProps
|
144
59
|
}]
|
145
60
|
}
|
146
61
|
};
|
@@ -475,6 +390,7 @@ describe('[unit] Meraki Adapter Test', () => {
|
|
475
390
|
assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapUnsuspendAdapter'));
|
476
391
|
assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapGetAdapterQueue'));
|
477
392
|
assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'genericAdapterRequest'));
|
393
|
+
assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'genericAdapterRequestNoBasePath'));
|
478
394
|
done();
|
479
395
|
} catch (error) {
|
480
396
|
log.error(`Test Failure: ${error}`);
|
@@ -646,6 +562,8 @@ describe('[unit] Meraki Adapter Test', () => {
|
|
646
562
|
assert.equal('string', propertiesDotJson.definitions.authentication.properties.client_id.type);
|
647
563
|
assert.equal('string', propertiesDotJson.definitions.authentication.properties.client_secret.type);
|
648
564
|
assert.equal('string', propertiesDotJson.definitions.authentication.properties.grant_type.type);
|
565
|
+
assert.notEqual(undefined, propertiesDotJson.definitions.ssl);
|
566
|
+
assert.notEqual(null, propertiesDotJson.definitions.ssl);
|
649
567
|
assert.notEqual('', propertiesDotJson.definitions.ssl);
|
650
568
|
assert.equal('string', propertiesDotJson.definitions.ssl.properties.ecdhCurve.type);
|
651
569
|
assert.equal('boolean', propertiesDotJson.definitions.ssl.properties.enabled.type);
|
@@ -659,6 +577,7 @@ describe('[unit] Meraki Adapter Test', () => {
|
|
659
577
|
assert.equal('string', propertiesDotJson.properties.version.type);
|
660
578
|
assert.equal('string', propertiesDotJson.properties.cache_location.type);
|
661
579
|
assert.equal('boolean', propertiesDotJson.properties.encode_pathvars.type);
|
580
|
+
assert.equal('boolean', propertiesDotJson.properties.encode_queryvars.type);
|
662
581
|
assert.equal(true, Array.isArray(propertiesDotJson.properties.save_metric.type));
|
663
582
|
assert.equal('string', propertiesDotJson.properties.protocol.type);
|
664
583
|
assert.notEqual(undefined, propertiesDotJson.definitions);
|
@@ -707,8 +626,6 @@ describe('[unit] Meraki Adapter Test', () => {
|
|
707
626
|
assert.equal('string', propertiesDotJson.definitions.proxy.properties.protocol.type);
|
708
627
|
assert.equal('string', propertiesDotJson.definitions.proxy.properties.username.type);
|
709
628
|
assert.equal('string', propertiesDotJson.definitions.proxy.properties.password.type);
|
710
|
-
assert.notEqual(undefined, propertiesDotJson.definitions.ssl);
|
711
|
-
assert.notEqual(null, propertiesDotJson.definitions.ssl);
|
712
629
|
assert.notEqual(undefined, propertiesDotJson.definitions.mongo);
|
713
630
|
assert.notEqual(null, propertiesDotJson.definitions.mongo);
|
714
631
|
assert.notEqual('', propertiesDotJson.definitions.mongo);
|
@@ -725,11 +642,11 @@ describe('[unit] Meraki Adapter Test', () => {
|
|
725
642
|
assert.equal('string', propertiesDotJson.definitions.mongo.properties.db_ssl.properties.key_file.type);
|
726
643
|
assert.equal('string', propertiesDotJson.definitions.mongo.properties.db_ssl.properties.cert_file.type);
|
727
644
|
assert.notEqual('', propertiesDotJson.definitions.devicebroker);
|
728
|
-
assert.equal('
|
729
|
-
assert.equal('
|
730
|
-
assert.equal('
|
731
|
-
assert.equal('
|
732
|
-
assert.equal('
|
645
|
+
assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getDevice.type);
|
646
|
+
assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getDevicesFiltered.type);
|
647
|
+
assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.isAlive.type);
|
648
|
+
assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getConfig.type);
|
649
|
+
assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getCount.type);
|
733
650
|
done();
|
734
651
|
} catch (error) {
|
735
652
|
log.error(`Test Failure: ${error}`);
|
@@ -846,17 +763,13 @@ describe('[unit] Meraki Adapter Test', () => {
|
|
846
763
|
assert.notEqual(undefined, sampleDotJson.properties.ssl.cert_file);
|
847
764
|
assert.notEqual(undefined, sampleDotJson.properties.ssl.secure_protocol);
|
848
765
|
assert.notEqual(undefined, sampleDotJson.properties.ssl.ciphers);
|
849
|
-
|
850
766
|
assert.notEqual(undefined, sampleDotJson.properties.base_path);
|
851
767
|
assert.notEqual(undefined, sampleDotJson.properties.version);
|
852
768
|
assert.notEqual(undefined, sampleDotJson.properties.cache_location);
|
853
769
|
assert.notEqual(undefined, sampleDotJson.properties.encode_pathvars);
|
770
|
+
assert.notEqual(undefined, sampleDotJson.properties.encode_queryvars);
|
854
771
|
assert.notEqual(undefined, sampleDotJson.properties.save_metric);
|
855
772
|
assert.notEqual(undefined, sampleDotJson.properties.protocol);
|
856
|
-
assert.notEqual(undefined, sampleDotJson.properties.stub);
|
857
|
-
assert.notEqual(undefined, sampleDotJson.properties.stub);
|
858
|
-
assert.notEqual(undefined, sampleDotJson.properties.stub);
|
859
|
-
assert.notEqual(undefined, sampleDotJson.properties.stub);
|
860
773
|
assert.notEqual(undefined, sampleDotJson.properties.healthcheck);
|
861
774
|
assert.notEqual(null, sampleDotJson.properties.healthcheck);
|
862
775
|
assert.notEqual('', sampleDotJson.properties.healthcheck);
|
@@ -915,6 +828,12 @@ describe('[unit] Meraki Adapter Test', () => {
|
|
915
828
|
assert.notEqual(undefined, sampleDotJson.properties.mongo.db_ssl.ca_file);
|
916
829
|
assert.notEqual(undefined, sampleDotJson.properties.mongo.db_ssl.key_file);
|
917
830
|
assert.notEqual(undefined, sampleDotJson.properties.mongo.db_ssl.cert_file);
|
831
|
+
assert.notEqual(undefined, sampleDotJson.properties.devicebroker);
|
832
|
+
assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getDevice);
|
833
|
+
assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getDevicesFiltered);
|
834
|
+
assert.notEqual(undefined, sampleDotJson.properties.devicebroker.isAlive);
|
835
|
+
assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getConfig);
|
836
|
+
assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getCount);
|
918
837
|
done();
|
919
838
|
} catch (error) {
|
920
839
|
log.error(`Test Failure: ${error}`);
|
@@ -1291,18 +1210,6 @@ describe('[unit] Meraki Adapter Test', () => {
|
|
1291
1210
|
});
|
1292
1211
|
});
|
1293
1212
|
|
1294
|
-
describe('#hasDevices', () => {
|
1295
|
-
it('should have a hasDevices function', (done) => {
|
1296
|
-
try {
|
1297
|
-
assert.equal(true, typeof a.hasDevices === 'function');
|
1298
|
-
done();
|
1299
|
-
} catch (error) {
|
1300
|
-
log.error(`Test Failure: ${error}`);
|
1301
|
-
done(error);
|
1302
|
-
}
|
1303
|
-
});
|
1304
|
-
});
|
1305
|
-
|
1306
1213
|
describe('#getDevice', () => {
|
1307
1214
|
it('should have a getDevice function', (done) => {
|
1308
1215
|
try {
|
@@ -0,0 +1,206 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
/* @copyright Itential, LLC 2019 */
|
3
|
+
/* eslint global-require:warn */
|
4
|
+
/* eslint import/no-dynamic-require:warn */
|
5
|
+
/* eslint prefer-destructuring:warn */
|
6
|
+
|
7
|
+
const fs = require('fs-extra');
|
8
|
+
const path = require('path');
|
9
|
+
|
10
|
+
/**
|
11
|
+
* This script will determine the information about the adapter and store
|
12
|
+
* it into a file in the adapter.
|
13
|
+
*/
|
14
|
+
|
15
|
+
/**
|
16
|
+
* get adapter information
|
17
|
+
*/
|
18
|
+
function adapterInfo() {
|
19
|
+
// set the base pase of the adapter - tool shoud be one level up in utils
|
20
|
+
let adaptdir = __dirname;
|
21
|
+
const infoRes = {};
|
22
|
+
|
23
|
+
if (adaptdir.endsWith('/utils')) {
|
24
|
+
adaptdir = adaptdir.substring(0, adaptdir.length - 6);
|
25
|
+
}
|
26
|
+
const pack = require(`${adaptdir}/package.json`);
|
27
|
+
infoRes.version = pack.version;
|
28
|
+
|
29
|
+
let configCount = 0;
|
30
|
+
if (fs.existsSync(`${adaptdir}/pronghorn.json`)) {
|
31
|
+
const cFile = fs.readFileSync(`${adaptdir}/pronghorn.json`, 'utf8');
|
32
|
+
configCount += cFile.split('\n').length;
|
33
|
+
} else {
|
34
|
+
console.log('Missing - pronghorn.json');
|
35
|
+
}
|
36
|
+
if (fs.existsSync(`${adaptdir}/propertiesSchema.json`)) {
|
37
|
+
const cFile = fs.readFileSync(`${adaptdir}/propertiesSchema.json`, 'utf8');
|
38
|
+
configCount += cFile.split('\n').length;
|
39
|
+
} else {
|
40
|
+
console.log('Missing - propertiesSchema.json');
|
41
|
+
}
|
42
|
+
if (fs.existsSync(`${adaptdir}/error.json`)) {
|
43
|
+
const cFile = fs.readFileSync(`${adaptdir}/error.json`, 'utf8');
|
44
|
+
configCount += cFile.split('\n').length;
|
45
|
+
} else {
|
46
|
+
console.log('Missing - error.json');
|
47
|
+
}
|
48
|
+
const entitydir = path.join(adaptdir, '/entities');
|
49
|
+
if (fs.existsSync(entitydir) && fs.statSync(entitydir).isDirectory()) {
|
50
|
+
const entities = fs.readdirSync(entitydir);
|
51
|
+
// need to go through each entity in the entities directory
|
52
|
+
for (let e = 0; e < entities.length; e += 1) {
|
53
|
+
if (fs.statSync(`${entitydir}/${entities[e]}`).isDirectory()) {
|
54
|
+
const cfiles = fs.readdirSync(entitydir);
|
55
|
+
for (let c = 0; c < cfiles.length; c += 1) {
|
56
|
+
if (cfiles[c].endsWith('.json')) {
|
57
|
+
const ccFile = fs.readFileSync(`${entitydir}/${entities[e]}/${cfiles[c]}`, 'utf8');
|
58
|
+
configCount += ccFile.split('\n').length;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
} else {
|
64
|
+
console.log('Could not find the entities directory');
|
65
|
+
}
|
66
|
+
infoRes.configLines = configCount;
|
67
|
+
|
68
|
+
let scodeCount = 0;
|
69
|
+
if (fs.existsSync(`${adaptdir}/utils/artifactize.js`)) {
|
70
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/artifactize.js`, 'utf8');
|
71
|
+
scodeCount += sFile.split('\n').length;
|
72
|
+
} else {
|
73
|
+
console.log('Missing - utils/artifactize.js');
|
74
|
+
}
|
75
|
+
if (fs.existsSync(`${adaptdir}/utils/basicGet.js`)) {
|
76
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/basicGet.js`, 'utf8');
|
77
|
+
scodeCount += sFile.split('\n').length;
|
78
|
+
} else {
|
79
|
+
console.log('Missing - utils/basicGet.js');
|
80
|
+
}
|
81
|
+
if (fs.existsSync(`${adaptdir}/utils/checkMigrate.js`)) {
|
82
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/checkMigrate.js`, 'utf8');
|
83
|
+
scodeCount += sFile.split('\n').length;
|
84
|
+
} else {
|
85
|
+
console.log('Missing - utils/checkMigrate.js');
|
86
|
+
}
|
87
|
+
if (fs.existsSync(`${adaptdir}/utils/findPath.js`)) {
|
88
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/findPath.js`, 'utf8');
|
89
|
+
scodeCount += sFile.split('\n').length;
|
90
|
+
} else {
|
91
|
+
console.log('Missing - utils/findPath.js');
|
92
|
+
}
|
93
|
+
if (fs.existsSync(`${adaptdir}/utils/modify.js`)) {
|
94
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/modify.js`, 'utf8');
|
95
|
+
scodeCount += sFile.split('\n').length;
|
96
|
+
} else {
|
97
|
+
console.log('Missing - utils/modify.js');
|
98
|
+
}
|
99
|
+
if (fs.existsSync(`${adaptdir}/utils/packModificationScript.js`)) {
|
100
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/packModificationScript.js`, 'utf8');
|
101
|
+
scodeCount += sFile.split('\n').length;
|
102
|
+
} else {
|
103
|
+
console.log('Missing - utils/packModificationScript.js');
|
104
|
+
}
|
105
|
+
if (fs.existsSync(`${adaptdir}/utils/setup.js`)) {
|
106
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/setup.js`, 'utf8');
|
107
|
+
scodeCount += sFile.split('\n').length;
|
108
|
+
} else {
|
109
|
+
console.log('Missing - utils/setup.js');
|
110
|
+
}
|
111
|
+
if (fs.existsSync(`${adaptdir}/utils/tbScript.js`)) {
|
112
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/tbScript.js`, 'utf8');
|
113
|
+
scodeCount += sFile.split('\n').length;
|
114
|
+
} else {
|
115
|
+
console.log('Missing - utils/tbScript.js');
|
116
|
+
}
|
117
|
+
if (fs.existsSync(`${adaptdir}/utils/tbUtils.js`)) {
|
118
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/tbUtils.js`, 'utf8');
|
119
|
+
scodeCount += sFile.split('\n').length;
|
120
|
+
} else {
|
121
|
+
console.log('Missing - utils/tbUtils.js');
|
122
|
+
}
|
123
|
+
if (fs.existsSync(`${adaptdir}/utils/testRunner.js`)) {
|
124
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/testRunner.js`, 'utf8');
|
125
|
+
scodeCount += sFile.split('\n').length;
|
126
|
+
} else {
|
127
|
+
console.log('Missing - utils/testRunner.js');
|
128
|
+
}
|
129
|
+
if (fs.existsSync(`${adaptdir}/utils/troubleshootingAdapter.js`)) {
|
130
|
+
const sFile = fs.readFileSync(`${adaptdir}/utils/troubleshootingAdapter.js`, 'utf8');
|
131
|
+
scodeCount += sFile.split('\n').length;
|
132
|
+
} else {
|
133
|
+
console.log('Missing - utils/troubleshootingAdapter.js');
|
134
|
+
}
|
135
|
+
infoRes.scriptLines = scodeCount;
|
136
|
+
|
137
|
+
let codeCount = 0;
|
138
|
+
if (fs.existsSync(`${adaptdir}/adapter.js`)) {
|
139
|
+
const aFile = fs.readFileSync(`${adaptdir}/adapter.js`, 'utf8');
|
140
|
+
codeCount += aFile.split('\n').length;
|
141
|
+
} else {
|
142
|
+
console.log('Missing - utils/adapter.js');
|
143
|
+
}
|
144
|
+
if (fs.existsSync(`${adaptdir}/adapterBase.js`)) {
|
145
|
+
const aFile = fs.readFileSync(`${adaptdir}/adapterBase.js`, 'utf8');
|
146
|
+
codeCount += aFile.split('\n').length;
|
147
|
+
} else {
|
148
|
+
console.log('Missing - utils/adapterBase.js');
|
149
|
+
}
|
150
|
+
infoRes.codeLines = codeCount;
|
151
|
+
|
152
|
+
let tcodeCount = 0;
|
153
|
+
let ttestCount = 0;
|
154
|
+
if (fs.existsSync(`${adaptdir}/test/integration/adapterTestBasicGet.js`)) {
|
155
|
+
const tFile = fs.readFileSync(`${adaptdir}/test/integration/adapterTestBasicGet.js`, 'utf8');
|
156
|
+
tcodeCount += tFile.split('\n').length;
|
157
|
+
ttestCount += tFile.split('it(\'').length;
|
158
|
+
} else {
|
159
|
+
console.log('Missing - test/integration/adapterTestBasicGet.js');
|
160
|
+
}
|
161
|
+
if (fs.existsSync(`${adaptdir}/test/integration/adapterTestConnectivity.js`)) {
|
162
|
+
const tFile = fs.readFileSync(`${adaptdir}/test/integration/adapterTestConnectivity.js`, 'utf8');
|
163
|
+
tcodeCount += tFile.split('\n').length;
|
164
|
+
ttestCount += tFile.split('it(\'').length;
|
165
|
+
} else {
|
166
|
+
console.log('Missing - test/integration/adapterTestConnectivity.js');
|
167
|
+
}
|
168
|
+
if (fs.existsSync(`${adaptdir}/test/integration/adapterTestIntegration.js`)) {
|
169
|
+
const tFile = fs.readFileSync(`${adaptdir}/test/integration/adapterTestIntegration.js`, 'utf8');
|
170
|
+
tcodeCount += tFile.split('\n').length;
|
171
|
+
ttestCount += tFile.split('it(\'').length;
|
172
|
+
} else {
|
173
|
+
console.log('Missing - test/integration/adapterTestIntegration.js');
|
174
|
+
}
|
175
|
+
if (fs.existsSync(`${adaptdir}/test/unit/adapterBaseTestUnit.js`)) {
|
176
|
+
const tFile = fs.readFileSync(`${adaptdir}/test/unit/adapterBaseTestUnit.js`, 'utf8');
|
177
|
+
tcodeCount += tFile.split('\n').length;
|
178
|
+
ttestCount += tFile.split('it(\'').length;
|
179
|
+
} else {
|
180
|
+
console.log('Missing - test/unit/adapterBaseTestUnit.js');
|
181
|
+
}
|
182
|
+
if (fs.existsSync(`${adaptdir}/test/unit/adapterTestUnit.js`)) {
|
183
|
+
const tFile = fs.readFileSync(`${adaptdir}/test/unit/adapterTestUnit.js`, 'utf8');
|
184
|
+
tcodeCount += tFile.split('\n').length;
|
185
|
+
ttestCount += tFile.split('it(\'').length;
|
186
|
+
} else {
|
187
|
+
console.log('Missing - test/unit/adapterTestUnit.js');
|
188
|
+
}
|
189
|
+
infoRes.testLines = tcodeCount;
|
190
|
+
infoRes.testCases = ttestCount;
|
191
|
+
infoRes.totalCodeLines = scodeCount + codeCount + tcodeCount;
|
192
|
+
|
193
|
+
if (fs.existsSync(`${adaptdir}/pronghorn.json`)) {
|
194
|
+
// Read the entity schema from the file system
|
195
|
+
const phFile = path.join(adaptdir, '/pronghorn.json');
|
196
|
+
const prong = require(phFile);
|
197
|
+
infoRes.wfTasks = prong.methods.length;
|
198
|
+
} else {
|
199
|
+
console.log('Missing - pronghorn.json');
|
200
|
+
}
|
201
|
+
|
202
|
+
console.log(JSON.stringify(infoRes));
|
203
|
+
fs.writeFileSync(`${adaptdir}/report/adapterInfo.json`, JSON.stringify(infoRes, null, 2));
|
204
|
+
}
|
205
|
+
|
206
|
+
adapterInfo();
|
package/utils/entitiesToDB.js
CHANGED
@@ -14,10 +14,8 @@
|
|
14
14
|
*/
|
15
15
|
|
16
16
|
const fs = require('fs');
|
17
|
-
const { MongoClient } = require('mongodb');
|
18
17
|
const path = require('path');
|
19
|
-
|
20
|
-
// const { string } = require('yargs');
|
18
|
+
const utils = require('./tbUtils');
|
21
19
|
|
22
20
|
// get the pronghorn database information
|
23
21
|
const getPronghornProps = async (iapDir) => {
|
@@ -99,7 +97,7 @@ const optionsHandler = (options) => {
|
|
99
97
|
/**
|
100
98
|
* Function used to put the adapter configuration into the provided database
|
101
99
|
*/
|
102
|
-
const moveEntitiesToDB = (targetPath, options) => {
|
100
|
+
const moveEntitiesToDB = async (targetPath, options) => {
|
103
101
|
// set local variables
|
104
102
|
let myOpts = options;
|
105
103
|
let myPath = targetPath;
|
@@ -120,25 +118,7 @@ const moveEntitiesToDB = (targetPath, options) => {
|
|
120
118
|
}
|
121
119
|
|
122
120
|
// get the pronghorn database properties
|
123
|
-
optionsHandler(options).then((currentProps) => {
|
124
|
-
let mongoUrl;
|
125
|
-
let dbName;
|
126
|
-
|
127
|
-
// find the mongo properties so we can connect
|
128
|
-
if (currentProps.mongoProps) {
|
129
|
-
mongoUrl = currentProps.mongoProps.url;
|
130
|
-
dbName = currentProps.mongoProps.db;
|
131
|
-
} else if (currentProps.mongo) {
|
132
|
-
if (currentProps.mongo.url) {
|
133
|
-
mongoUrl = currentProps.mongo.url;
|
134
|
-
} else {
|
135
|
-
mongoUrl = `mongodb://${currentProps.mongo.host}:${currentProps.mongo.port}`;
|
136
|
-
}
|
137
|
-
dbName = currentProps.mongo.database;
|
138
|
-
} else {
|
139
|
-
throw new Error('Mongo properties are not specified in adapter preferences!');
|
140
|
-
}
|
141
|
-
|
121
|
+
return optionsHandler(options).then(async (currentProps) => {
|
142
122
|
// Check valid filepath provided
|
143
123
|
if (!myPath) {
|
144
124
|
// if no path use the current directory without the utils
|
@@ -184,41 +164,16 @@ const moveEntitiesToDB = (targetPath, options) => {
|
|
184
164
|
});
|
185
165
|
|
186
166
|
// Upload documents to db collection
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
collection.insertMany(docs, { checkKeys: false }, (error, res) => {
|
197
|
-
if (error) {
|
198
|
-
log.error(JSON.stringify(error));
|
199
|
-
throw error;
|
200
|
-
}
|
201
|
-
// log the insertion, close the database and return
|
202
|
-
log.debug(`Inserted ${docs.length} documents to ${dbName}.${myOpts.targetCollection} with response ${JSON.stringify(res)}`);
|
203
|
-
db.close();
|
204
|
-
return res;
|
205
|
-
});
|
206
|
-
});
|
167
|
+
const iapDir = utils.getIAPHome();
|
168
|
+
const db = await utils.connect(iapDir, currentProps).catch((err) => { console.error(err); throw err; });
|
169
|
+
if (!db) {
|
170
|
+
console.error('Error occured when connectiong to database', currentProps);
|
171
|
+
throw new Error('Database not found');
|
172
|
+
}
|
173
|
+
const collection = db.collection(myOpts.targetCollection);
|
174
|
+
const res = await collection.insertMany(docs, { checkKeys: false }).catch((err) => { console.error(err); throw err; });
|
175
|
+
return res;
|
207
176
|
});
|
208
177
|
};
|
209
178
|
|
210
|
-
// const args = process.argv.slice(2);
|
211
|
-
|
212
|
-
// throw new SyntaxError(args[0]);
|
213
|
-
|
214
|
-
// if (args.length === 0) {
|
215
|
-
// console.error('ERROR: target path not specified!');
|
216
|
-
// } else if (args[0] === 'help') {
|
217
|
-
// log.trace('node ./entitiesToDB <target path> <options object: {iapDir: string, pronghornProps: string, targetCollection: string}>');
|
218
|
-
// } else if (args.length === 1) {
|
219
|
-
// console.error('ERROR: IAP directory not specified');
|
220
|
-
// } else {
|
221
|
-
// moveEntitiesToDB(args[0], args[1]);
|
222
|
-
// }
|
223
|
-
|
224
179
|
module.exports = { moveEntitiesToDB };
|
package/utils/pre-commit.sh
CHANGED
@@ -17,6 +17,9 @@ printf "%b" "Running pre-commit hooks...\\n"
|
|
17
17
|
# verify testing script is stubbed and no credentials
|
18
18
|
node utils/testRunner.js -r
|
19
19
|
|
20
|
+
# update the adapter information file
|
21
|
+
node utils/adapterInfo.js
|
22
|
+
|
20
23
|
# security audit on the code
|
21
24
|
npm audit --registry=https://registry.npmjs.org --audit-level=moderate
|
22
25
|
|
package/utils/tbScript.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* eslint no-console
|
1
|
+
/* eslint-disable no-console */
|
2
2
|
/* eslint import/no-unresolved: warn */
|
3
3
|
/* eslint global-require: warn */
|
4
4
|
|
@@ -7,7 +7,6 @@
|
|
7
7
|
/* eslint import/no-extraneous-dependencies: warn */
|
8
8
|
/* eslint import/no-dynamic-require: warn */
|
9
9
|
|
10
|
-
const path = require('path');
|
11
10
|
const program = require('commander');
|
12
11
|
const rls = require('readline-sync');
|
13
12
|
const utils = require('./tbUtils');
|
@@ -19,32 +18,39 @@ const { addAuthInfo } = require('./addAuth');
|
|
19
18
|
|
20
19
|
const { troubleshoot, offline } = require('./troubleshootingAdapter');
|
21
20
|
|
22
|
-
const
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
console.
|
28
|
-
|
29
|
-
}
|
21
|
+
const executeInStandaloneMode = async (command) => {
|
22
|
+
console.info('\n> Executing the script outside of IAP installation directory');
|
23
|
+
console.info('> Using sampleProperties.json configuration');
|
24
|
+
switch (command) {
|
25
|
+
case 'install': {
|
26
|
+
console.error('Not currently in IAP directory - installation not possible');
|
27
|
+
break;
|
28
|
+
}
|
29
|
+
case 'connectivity': {
|
30
30
|
const { host } = sampleProperties.properties;
|
31
31
|
console.log(`perform networking diagnositics to ${host}`);
|
32
|
-
|
33
|
-
|
34
|
-
}
|
32
|
+
utils.runConnectivity(host);
|
33
|
+
break;
|
34
|
+
}
|
35
|
+
case 'healthcheck': {
|
35
36
|
const a = basicGet.getAdapterInstance({ properties: sampleProperties });
|
36
37
|
await utils.healthCheck(a);
|
37
|
-
|
38
|
-
} else if (command === 'basicget') {
|
39
|
-
await utils.runBasicGet();
|
40
|
-
process.exit(0);
|
38
|
+
break;
|
41
39
|
}
|
42
|
-
|
43
|
-
|
40
|
+
case 'basicget': {
|
41
|
+
utils.runBasicGet();
|
42
|
+
break;
|
43
|
+
}
|
44
|
+
default: {
|
45
|
+
if (rls.keyInYN('Troubleshooting without IAP?')) {
|
46
|
+
await offline();
|
47
|
+
}
|
44
48
|
}
|
45
|
-
process.exit(0);
|
46
49
|
}
|
50
|
+
process.exit(0);
|
51
|
+
};
|
47
52
|
|
53
|
+
const executeUnderIAPInstallationDirectory = async (command) => {
|
48
54
|
if (command === undefined) {
|
49
55
|
await troubleshoot({}, true, true);
|
50
56
|
} else if (command === 'install') {
|
@@ -79,6 +85,7 @@ const main = async (command) => {
|
|
79
85
|
process.exit(0);
|
80
86
|
}
|
81
87
|
} else {
|
88
|
+
const dirname = utils.getCurrentExecutionPath();
|
82
89
|
utils.verifyInstallationDir(dirname, name);
|
83
90
|
utils.runTest();
|
84
91
|
if (rls.keyInYN(`Do you want to install ${name} to IAP?`)) {
|
@@ -123,6 +130,14 @@ const main = async (command) => {
|
|
123
130
|
}
|
124
131
|
};
|
125
132
|
|
133
|
+
const main = async (command) => {
|
134
|
+
if (!utils.areWeUnderIAPinstallationDirectory()) {
|
135
|
+
executeInStandaloneMode(command); // configuration from sampleproperties.json
|
136
|
+
} else {
|
137
|
+
executeUnderIAPInstallationDirectory(command); // configuration from $IAP_HOME/properties.json
|
138
|
+
}
|
139
|
+
};
|
140
|
+
|
126
141
|
program
|
127
142
|
.command('connectivity')
|
128
143
|
.alias('c')
|