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 // mock utils
const mockUtils = { const mockUtils = {
getTransferTelemetryPayload: jest.fn().mockReturnValue({}),
loadersFactory: jest.fn().mockReturnValue({ updateLoader: jest.fn() }), loadersFactory: jest.fn().mockReturnValue({ updateLoader: jest.fn() }),
formatDiagnostic: jest.fn(), formatDiagnostic: jest.fn(),
createStrapiInstance() { createStrapiInstance() {

View File

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

View File

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

View File

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

View File

@ -20,6 +20,7 @@ const {
loadersFactory, loadersFactory,
exitMessageText, exitMessageText,
abortTransfer, abortTransfer,
getTransferTelemetryPayload,
} = require('./utils'); } = require('./utils');
const { exitWith } = require('../utils/helpers'); const { exitWith } = require('../utils/helpers');
@ -122,18 +123,12 @@ module.exports = async (opts) => {
updateLoader(stage, data); updateLoader(stage, data);
}); });
const getTelemetryPayload = () => {
return {
eventProperties: {
source: engine.sourceProvider.name,
destination: engine.destinationProvider.name,
},
};
};
progress.on('transfer::start', async () => { progress.on('transfer::start', async () => {
console.log('Starting import...'); console.log('Starting import...');
await strapiInstance.telemetry.send('didDEITSProcessStart', getTelemetryPayload()); await strapiInstance.telemetry.send(
'didDEITSProcessStart',
getTransferTelemetryPayload(engine)
);
}); });
let results; let results;
@ -146,7 +141,7 @@ module.exports = async (opts) => {
results = await engine.transfer(); results = await engine.transfer();
} catch (e) { } catch (e) {
await strapiInstance.telemetry.send('didDEITSProcessFail', getTelemetryPayload()); await strapiInstance.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));
exitWith(1, exitMessageText('import', true)); 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.'); 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(); await strapiInstance.destroy();
exitWith(0, exitMessageText('import')); exitWith(0, exitMessageText('import'));

View File

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