From b37bb4430ee9dc6708f53f7b0f56431bb717464d Mon Sep 17 00:00:00 2001 From: gonzalojaubert <111118818+gonzalojaubert@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:36:25 +0000 Subject: [PATCH] Add elapsed time to data migration entity (#1438) * Add elapsed time to data migration entity * rush change * fix elapsed time calculation --- ...time_data_migrations_2023-10-04-08-36.json | 10 +++++++ .../entities/booster-data-migration-entity.ts | 28 +++++++++++++++++-- .../end-to-end/entities.integration.ts | 5 ++-- .../read-models/data-migrations-read-model.ts | 16 +++++++++-- .../src/concepts/data-migration.ts | 6 ++++ 5 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 common/changes/@boostercloud/framework-core/add_elapsed_time_data_migrations_2023-10-04-08-36.json diff --git a/common/changes/@boostercloud/framework-core/add_elapsed_time_data_migrations_2023-10-04-08-36.json b/common/changes/@boostercloud/framework-core/add_elapsed_time_data_migrations_2023-10-04-08-36.json new file mode 100644 index 000000000..6f5ce10b1 --- /dev/null +++ b/common/changes/@boostercloud/framework-core/add_elapsed_time_data_migrations_2023-10-04-08-36.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@boostercloud/framework-core", + "comment": "Add elapsed time to data migration entities", + "type": "minor" + } + ], + "packageName": "@boostercloud/framework-core" +} \ No newline at end of file diff --git a/packages/framework-core/src/core-concepts/data-migration/entities/booster-data-migration-entity.ts b/packages/framework-core/src/core-concepts/data-migration/entities/booster-data-migration-entity.ts index 1935f4d5f..04a02becb 100644 --- a/packages/framework-core/src/core-concepts/data-migration/entities/booster-data-migration-entity.ts +++ b/packages/framework-core/src/core-concepts/data-migration/entities/booster-data-migration-entity.ts @@ -1,21 +1,43 @@ -import { DataMigrationStatus } from '@boostercloud/framework-types' +import { BoosterDataMigrationEntityDuration, DataMigrationStatus } from '@boostercloud/framework-types' import { BoosterDataMigrationStarted } from '../events/booster-data-migration-started' import { BoosterDataMigrationFinished } from '../events/booster-data-migration-finished' export class BoosterDataMigrationEntity { - public constructor(public id: string, public status: DataMigrationStatus, public lastUpdated: string) {} + public constructor( + public id: string, + public status: DataMigrationStatus, + public lastUpdated: string, + public duration?: BoosterDataMigrationEntityDuration + ) {} public static started( event: BoosterDataMigrationStarted, currentDataMigration: BoosterDataMigrationEntity ): BoosterDataMigrationEntity { - return new BoosterDataMigrationEntity(event.name, DataMigrationStatus.RUNNING, event.lastUpdated) + const duration = { + start: new Date().toISOString(), + } + return new BoosterDataMigrationEntity(event.name, DataMigrationStatus.RUNNING, event.lastUpdated, duration) } public static finished( event: BoosterDataMigrationFinished, currentDataMigration: BoosterDataMigrationEntity ): BoosterDataMigrationEntity { + const current = new Date() + if (currentDataMigration.duration?.start) { + const start = currentDataMigration.duration.start + const end = current.toISOString() + const startTime = Date.parse(start) + const endTime = current.getTime() + const elapsedTime = endTime - startTime + const duration: BoosterDataMigrationEntityDuration = { + start: start, + end: end, + elapsedMilliseconds: elapsedTime, + } + return new BoosterDataMigrationEntity(event.name, DataMigrationStatus.FINISHED, event.lastUpdated, duration) + } return new BoosterDataMigrationEntity(event.name, DataMigrationStatus.FINISHED, event.lastUpdated) } } diff --git a/packages/framework-integration-tests/integration/provider-unaware/end-to-end/entities.integration.ts b/packages/framework-integration-tests/integration/provider-unaware/end-to-end/entities.integration.ts index aad2ebbc2..f9c76b6bc 100644 --- a/packages/framework-integration-tests/integration/provider-unaware/end-to-end/entities.integration.ts +++ b/packages/framework-integration-tests/integration/provider-unaware/end-to-end/entities.integration.ts @@ -331,9 +331,10 @@ describe('Entities end-to-end tests', () => { }) }, (result) => { - const count = result?.data?.ListDataMigrationsReadModels?.count + const resultReadModels = result?.data?.ListDataMigrationsReadModels + const count = resultReadModels?.count if (count < 2) { - return `Waiting for ${count} migrations. Done ${count} migrations` + return `Waiting for at least 2 migrations. Done ${count} migrations. ${JSON.stringify(resultReadModels)}` } return true } diff --git a/packages/framework-integration-tests/src/read-models/data-migrations-read-model.ts b/packages/framework-integration-tests/src/read-models/data-migrations-read-model.ts index 23b2bc206..bf077cf1d 100644 --- a/packages/framework-integration-tests/src/read-models/data-migrations-read-model.ts +++ b/packages/framework-integration-tests/src/read-models/data-migrations-read-model.ts @@ -1,17 +1,27 @@ import { BoosterDataMigrationEntity, Projects, ReadModel } from '@boostercloud/framework-core' -import { ProjectionResult } from '@boostercloud/framework-types' +import { BoosterDataMigrationEntityDuration, ProjectionResult } from '@boostercloud/framework-types' @ReadModel({ authorize: 'all', }) export class DataMigrationsReadModel { - public constructor(readonly id: string, readonly status: string, readonly lastUpdated: string) {} + public constructor( + readonly id: string, + readonly status: string, + readonly lastUpdated: string, + readonly duration?: BoosterDataMigrationEntityDuration + ) {} @Projects(BoosterDataMigrationEntity, 'id') public static updated( migration: BoosterDataMigrationEntity, _oldMigration?: DataMigrationsReadModel ): ProjectionResult { - return new DataMigrationsReadModel(migration.id, migration.status.toString(), migration.lastUpdated) + return new DataMigrationsReadModel( + migration.id, + migration.status.toString(), + migration.lastUpdated, + migration.duration + ) } } diff --git a/packages/framework-types/src/concepts/data-migration.ts b/packages/framework-types/src/concepts/data-migration.ts index 20dab7510..a247e3248 100644 --- a/packages/framework-types/src/concepts/data-migration.ts +++ b/packages/framework-types/src/concepts/data-migration.ts @@ -15,3 +15,9 @@ export interface DataMigrationMetadata { readonly class: DataMigrationInterface migrationOptions: DataMigrationParameters } + +export interface BoosterDataMigrationEntityDuration { + start: string + end?: string + elapsedMilliseconds?: number +}