Merge pull request #16255 from strapi/fix/tracking-system-transfer

This commit is contained in:
Ben Irvin 2023-04-18 09:33:09 +02:00 committed by GitHub
commit eeed535680
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 51 additions and 28 deletions

View File

@ -55,6 +55,7 @@ describe('Export', () => {
// mock utils
const mockUtils = {
getTransferTelemetryPayload: jest.fn().mockReturnValue({}),
loadersFactory: jest.fn().mockReturnValue({ updateLoader: jest.fn() }),
formatDiagnostic: jest.fn(),
createStrapiInstance() {

View File

@ -63,6 +63,7 @@ describe('Import', () => {
// mock utils
const mockUtils = {
getTransferTelemetryPayload: jest.fn().mockReturnValue({}),
loadersFactory: jest.fn().mockReturnValue({ updateLoader: jest.fn() }),
formatDiagnostic: jest.fn(),
createStrapiInstance: jest.fn().mockReturnValue({

View File

@ -5,6 +5,7 @@ const { expectExit } = require('./shared/transfer.test.utils');
describe('Transfer', () => {
// mock utils
const mockUtils = {
getTransferTelemetryPayload: jest.fn().mockReturnValue({}),
loadersFactory: jest.fn().mockReturnValue({ updateLoader: jest.fn() }),
formatDiagnostic: jest.fn(),
createStrapiInstance() {

View File

@ -24,6 +24,7 @@ const {
loadersFactory,
exitMessageText,
abortTransfer,
getTransferTelemetryPayload,
} = require('./utils');
const { exitWith } = require('../utils/helpers');
/**
@ -103,19 +104,10 @@ module.exports = async (opts) => {
updateLoader(stage, data);
});
const getTelemetryPayload = (/* payload */) => {
return {
eventProperties: {
source: engine.sourceProvider.name,
destination: engine.destinationProvider.name,
},
};
};
progress.on('transfer::start', async () => {
console.log(`Starting export...`);
await strapi.telemetry.send('didDEITSProcessStart', getTelemetryPayload());
await strapi.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));
});
let results;
@ -134,11 +126,13 @@ module.exports = async (opts) => {
throw new TransferEngineTransferError(`Export file not created "${outFile}"`);
}
} catch {
await strapi.telemetry.send('didDEITSProcessFail', getTelemetryPayload());
await strapi.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));
exitWith(1, exitMessageText('export', true));
}
await strapi.telemetry.send('didDEITSProcessFinish', getTelemetryPayload());
// Note: we need to await telemetry or else the process ends before it is sent
await strapi.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));
try {
const table = buildTransferTable(results.engine);
console.log(table.toString());

View File

@ -20,6 +20,7 @@ const {
loadersFactory,
exitMessageText,
abortTransfer,
getTransferTelemetryPayload,
} = require('./utils');
const { exitWith } = require('../utils/helpers');
@ -122,18 +123,12 @@ module.exports = async (opts) => {
updateLoader(stage, data);
});
const getTelemetryPayload = () => {
return {
eventProperties: {
source: engine.sourceProvider.name,
destination: engine.destinationProvider.name,
},
};
};
progress.on('transfer::start', async () => {
console.log('Starting import...');
await strapiInstance.telemetry.send('didDEITSProcessStart', getTelemetryPayload());
await strapiInstance.telemetry.send(
'didDEITSProcessStart',
getTransferTelemetryPayload(engine)
);
});
let results;
@ -146,7 +141,7 @@ module.exports = async (opts) => {
results = await engine.transfer();
} catch (e) {
await strapiInstance.telemetry.send('didDEITSProcessFail', getTelemetryPayload());
await strapiInstance.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));
exitWith(1, exitMessageText('import', true));
}
@ -157,7 +152,8 @@ module.exports = async (opts) => {
console.error('There was an error displaying the results of the transfer.');
}
await strapiInstance.telemetry.send('didDEITSProcessFinish', getTelemetryPayload());
// Note: we need to await telemetry or else the process ends before it is sent
await strapiInstance.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));
await strapiInstance.destroy();
exitWith(0, exitMessageText('import'));

View File

@ -21,6 +21,7 @@ const {
loadersFactory,
exitMessageText,
abortTransfer,
getTransferTelemetryPayload,
} = require('./utils');
const { exitWith } = require('../utils/helpers');
@ -161,10 +162,14 @@ module.exports = async (opts) => {
updateLoader(stage, data).fail();
});
let results;
try {
progress.on('transfer::start', async () => {
console.log(`Starting transfer...`);
await strapi.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));
});
let results;
try {
// Abort transfer if user interrupts process
['SIGTERM', 'SIGINT', 'SIGQUIT'].forEach((signal) => {
process.removeAllListeners(signal);
@ -173,10 +178,19 @@ module.exports = async (opts) => {
results = await engine.transfer();
} catch (e) {
await strapi.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));
exitWith(1, exitMessageText('transfer', true));
}
const table = buildTransferTable(results.engine);
console.log(table.toString());
// Note: we need to await telemetry or else the process ends before it is sent
await strapi.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));
try {
const table = buildTransferTable(results.engine);
console.log(table.toString());
} catch (e) {
console.error('There was an error displaying the results of the transfer.');
}
exitWith(0, exitMessageText('transfer'));
};

View File

@ -242,10 +242,26 @@ const loadersFactory = (defaultLoaders = {}) => {
};
};
/**
* Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object
*
* @param {import('@strapi/data-transfer/types').ITransferEngine} engine Initialized transfer engine
* @returns {object} Telemetry properties object
*/
const getTransferTelemetryPayload = (engine) => {
return {
eventProperties: {
source: engine?.sourceProvider?.name,
destination: engine?.destinationProvider?.name,
},
};
};
module.exports = {
loadersFactory,
buildTransferTable,
getDefaultExportName,
getTransferTelemetryPayload,
DEFAULT_IGNORED_CONTENT_TYPES,
createStrapiInstance,
excludeOption,