@itentialopensource/adapter-meraki 0.7.2 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- package/AUTH.md +40 -0
- package/CALLS.md +100 -0
- package/CHANGELOG.md +24 -0
- package/ENHANCE.md +69 -0
- package/PROPERTIES.md +247 -0
- package/README.md +113 -470
- package/SUMMARY.md +9 -0
- package/SYSTEMINFO.md +11 -0
- package/TROUBLESHOOT.md +46 -0
- package/adapter.js +911 -64
- package/adapterBase.js +294 -271
- package/entities/.generic/action.json +5 -5
- package/error.json +12 -0
- package/package.json +18 -13
- package/pronghorn.json +289 -104
- package/propertiesSchema.json +238 -0
- package/refs?service=git-upload-pack +0 -0
- package/report/updateReport1642739939352.json +95 -0
- package/sampleProperties.json +4 -1
- package/test/integration/adapterTestBasicGet.js +1 -1
- package/test/integration/adapterTestIntegration.js +11 -2
- package/test/unit/adapterBaseTestUnit.js +27 -26
- package/test/unit/adapterTestUnit.js +632 -11
- package/utils/addAuth.js +94 -0
- package/utils/basicGet.js +1 -14
- package/utils/entitiesToDB.js +224 -0
- package/utils/modify.js +1 -1
- package/utils/packModificationScript.js +1 -1
- package/utils/patches2bundledDeps.js +90 -0
- package/utils/removeHooks.js +20 -0
- package/utils/tbScript.js +14 -8
- package/utils/tbUtils.js +98 -19
- package/utils/troubleshootingAdapter.js +2 -26
package/utils/tbUtils.js
CHANGED
@@ -100,8 +100,8 @@ module.exports = {
|
|
100
100
|
*
|
101
101
|
* @function decryptProperties
|
102
102
|
*/
|
103
|
-
decryptProperties: (props,
|
104
|
-
const propertyEncryptionClassPath = path.join(
|
103
|
+
decryptProperties: (props, iapDir, discovery) => {
|
104
|
+
const propertyEncryptionClassPath = path.join(iapDir, 'node_modules/@itential/pronghorn-core/core/PropertyEncryption.js');
|
105
105
|
const isEncrypted = props.pathProps.encrypted;
|
106
106
|
const PropertyEncryption = discovery.require(propertyEncryptionClassPath, isEncrypted);
|
107
107
|
const propertyEncryption = new PropertyEncryption({
|
@@ -177,12 +177,12 @@ module.exports = {
|
|
177
177
|
verifyInstallationDir: (dirname, name) => {
|
178
178
|
const pathArray = dirname.split(path.sep);
|
179
179
|
const expectedPath = `node_modules/${name}`;
|
180
|
-
const currentPath = pathArray.slice(pathArray.length -
|
181
|
-
if (
|
182
|
-
throw new Error(`adapter should be installed under ${expectedPath}`);
|
180
|
+
const currentPath = pathArray.slice(pathArray.length - 3, pathArray.length).join('/');
|
181
|
+
if (currentPath.trim() !== expectedPath.trim()) {
|
182
|
+
throw new Error(`adapter should be installed under ${expectedPath} but is installed under ${currentPath}`);
|
183
183
|
}
|
184
184
|
|
185
|
-
const serverFile = path.join(dirname, '
|
185
|
+
const serverFile = path.join(dirname, '../../../', 'server.js');
|
186
186
|
if (!fs.existsSync(serverFile)) {
|
187
187
|
throw new Error(`adapter should be installed under IAP/${expectedPath}`);
|
188
188
|
}
|
@@ -304,23 +304,72 @@ module.exports = {
|
|
304
304
|
* @param {Object} adapterPronghorn - ./pronghorn.json in adapter dir
|
305
305
|
* @param {Object} sampleProperties - './sampleProperties.json' in adapter dir
|
306
306
|
*/
|
307
|
-
createAdapter: (pronghornProps, profileItem, sampleProperties, adapterPronghorn)
|
308
|
-
const
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
307
|
+
createAdapter: function createAdapter(pronghornProps, profileItem, sampleProperties, adapterPronghorn) {
|
308
|
+
const dirname = this.getDirname();
|
309
|
+
const packagePath = `${dirname.split('node_modules')[0]}package.json`;
|
310
|
+
const info = JSON.parse(fs.readFileSync(packagePath));
|
311
|
+
const version = parseInt(info.version.split('.')[0], 10);
|
312
|
+
|
313
|
+
let adapter = {};
|
314
|
+
if (version >= 2020) {
|
315
|
+
adapter = {
|
316
|
+
isEncrypted: pronghornProps.pathProps.encrypted,
|
317
|
+
model: adapterPronghorn.id,
|
318
|
+
name: sampleProperties.id,
|
319
|
+
type: adapterPronghorn.type,
|
320
|
+
properties: sampleProperties,
|
321
|
+
loggerProps: profileItem.loggerProps
|
322
|
+
};
|
323
|
+
} else {
|
324
|
+
adapter = {
|
325
|
+
mongoProps: pronghornProps.mongoProps,
|
326
|
+
isEncrypted: pronghornProps.pathProps.encrypted,
|
327
|
+
model: adapterPronghorn.id,
|
328
|
+
name: sampleProperties.id,
|
329
|
+
type: adapterPronghorn.type,
|
330
|
+
properties: sampleProperties,
|
331
|
+
redisProps: profileItem.redisProps,
|
332
|
+
loggerProps: profileItem.loggerProps,
|
333
|
+
rabbitmq: profileItem.rabbitmq
|
334
|
+
};
|
335
|
+
adapter.mongoProps.pdb = true;
|
336
|
+
}
|
337
|
+
|
319
338
|
adapter.loggerProps.log_filename = `adapter-${adapter.name}.log`;
|
320
|
-
adapter.mongoProps.pdb = true;
|
321
339
|
return adapter;
|
322
340
|
},
|
323
341
|
|
342
|
+
getPronghornProps: function getPronghornProps(iapDir) {
|
343
|
+
console.log('Retrieving properties.json file...');
|
344
|
+
const rawProps = require(path.join(iapDir, 'properties.json'));
|
345
|
+
console.log('Decrypting properties...');
|
346
|
+
const { Discovery } = require(path.join(iapDir, 'node_modules/@itential/itential-utils'));
|
347
|
+
const discovery = new Discovery();
|
348
|
+
const pronghornProps = this.decryptProperties(rawProps, iapDir, discovery);
|
349
|
+
console.log('Found properties.\n');
|
350
|
+
return pronghornProps;
|
351
|
+
},
|
352
|
+
|
353
|
+
// get database connection and existing adapter config
|
354
|
+
getAdapterConfig: async function getAdapterConfig() {
|
355
|
+
const newDirname = this.getDirname();
|
356
|
+
let iapDir;
|
357
|
+
if (this.withinIAP(newDirname)) { // when this script is called from IAP
|
358
|
+
iapDir = newDirname;
|
359
|
+
} else {
|
360
|
+
iapDir = path.join(this.getDirname(), 'utils', '../../../../');
|
361
|
+
}
|
362
|
+
const pronghornProps = this.getPronghornProps(iapDir);
|
363
|
+
console.log('Connecting to Database...');
|
364
|
+
const database = await this.connect(iapDir, pronghornProps);
|
365
|
+
console.log('Connection established.');
|
366
|
+
const { name } = require(path.join(__dirname, '..', 'package.json'));
|
367
|
+
const serviceItem = await database.collection(this.SERVICE_CONFIGS_COLLECTION).findOne(
|
368
|
+
{ model: name }
|
369
|
+
);
|
370
|
+
return { database, serviceItem, pronghornProps };
|
371
|
+
},
|
372
|
+
|
324
373
|
/**
|
325
374
|
* @summary return async healthcheck result as a Promise
|
326
375
|
*
|
@@ -368,5 +417,35 @@ module.exports = {
|
|
368
417
|
} catch (error) {
|
369
418
|
return false;
|
370
419
|
}
|
420
|
+
},
|
421
|
+
|
422
|
+
/**
|
423
|
+
* @summary Used to determine the proper dirname to return in case adapter reference is
|
424
|
+
* symlinked withink IAP
|
425
|
+
* @returns the symlinked path (using pwd command) of the adapter in case properties.json
|
426
|
+
* is not found in the original path
|
427
|
+
* @function getDirname
|
428
|
+
*/
|
429
|
+
getDirname: function getDirname() {
|
430
|
+
if (this.withinIAP(path.join(__dirname, '../../../../'))) {
|
431
|
+
return __dirname;
|
432
|
+
}
|
433
|
+
const { stdout } = this.systemSync('pwd', true);
|
434
|
+
return stdout.trim();
|
435
|
+
},
|
436
|
+
|
437
|
+
/**
|
438
|
+
* @summary connect to mongodb
|
439
|
+
*
|
440
|
+
* @function connect
|
441
|
+
* @param {Object} properties - pronghornProps
|
442
|
+
*/
|
443
|
+
connect: async function connect(iapDir, properties) {
|
444
|
+
// Connect to Mongo
|
445
|
+
const { MongoDBConnection } = require(path.join(iapDir, 'node_modules/@itential/database'));
|
446
|
+
const connection = new MongoDBConnection(properties.mongoProps);
|
447
|
+
const database = await connection.connect(true);
|
448
|
+
return database;
|
371
449
|
}
|
450
|
+
|
372
451
|
};
|
@@ -117,30 +117,6 @@ const VerifyHealthCheckEndpoint = (serviceItem, props, scriptFlag) => {
|
|
117
117
|
return { result, updatedAdapter };
|
118
118
|
};
|
119
119
|
|
120
|
-
const getPronghornProps = (iapDir) => {
|
121
|
-
console.log('Retrieving properties.json file...');
|
122
|
-
const rawProps = require(path.join(iapDir, 'properties.json'));
|
123
|
-
console.log('Decrypting properties...');
|
124
|
-
const { Discovery } = require('@itential/itential-utils');
|
125
|
-
const discovery = new Discovery();
|
126
|
-
const pronghornProps = utils.decryptProperties(rawProps, __dirname, discovery);
|
127
|
-
console.log('Found properties.\n');
|
128
|
-
return pronghornProps;
|
129
|
-
};
|
130
|
-
|
131
|
-
// get database connection and existing adapter config
|
132
|
-
const getAdapterConfig = async () => {
|
133
|
-
const iapDir = path.join(__dirname, '../../../../');
|
134
|
-
const pronghornProps = getPronghornProps(iapDir);
|
135
|
-
console.log('Connecting to Database...');
|
136
|
-
const database = await basicGet.connect(pronghornProps);
|
137
|
-
console.log('Connection established.');
|
138
|
-
const serviceItem = await database.collection(utils.SERVICE_CONFIGS_COLLECTION).findOne(
|
139
|
-
{ model: name }
|
140
|
-
);
|
141
|
-
return { database, serviceItem, pronghornProps };
|
142
|
-
};
|
143
|
-
|
144
120
|
const offline = async () => {
|
145
121
|
console.log('Start offline troubleshooting');
|
146
122
|
const { updatedAdapter } = VerifyHealthCheckEndpoint({ properties: sampleProperties }, {}, true);
|
@@ -159,7 +135,7 @@ const offline = async () => {
|
|
159
135
|
|
160
136
|
const troubleshoot = async (props, scriptFlag, persistFlag, adapter) => {
|
161
137
|
// get database connection and existing adapter config
|
162
|
-
const { database, serviceItem } = await getAdapterConfig();
|
138
|
+
const { database, serviceItem } = await utils.getAdapterConfig();
|
163
139
|
// where troubleshoot should start
|
164
140
|
if (serviceItem) {
|
165
141
|
if (!scriptFlag || rls.keyInYN(`Start verifying the connection and authentication properties for ${name}?`)) {
|
@@ -211,4 +187,4 @@ const troubleshoot = async (props, scriptFlag, persistFlag, adapter) => {
|
|
211
187
|
return null;
|
212
188
|
};
|
213
189
|
|
214
|
-
module.exports = { troubleshoot,
|
190
|
+
module.exports = { troubleshoot, offline };
|