@finos/legend-application-studio 28.21.44 → 28.21.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__lib__/LegendStudioEvent.d.ts +55 -1
- package/lib/__lib__/LegendStudioEvent.d.ts.map +1 -1
- package/lib/__lib__/LegendStudioEvent.js +77 -0
- package/lib/__lib__/LegendStudioEvent.js.map +1 -1
- package/lib/__lib__/LegendStudioTelemetryHelper.d.ts +491 -1
- package/lib/__lib__/LegendStudioTelemetryHelper.d.ts.map +1 -1
- package/lib/__lib__/LegendStudioTelemetryHelper.js +594 -1
- package/lib/__lib__/LegendStudioTelemetryHelper.js.map +1 -1
- package/lib/components/editor/side-bar/WorkflowManager.d.ts.map +1 -1
- package/lib/components/editor/side-bar/WorkflowManager.js +15 -0
- package/lib/components/editor/side-bar/WorkflowManager.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/editor/EditorGraphState.d.ts.map +1 -1
- package/lib/stores/editor/EditorGraphState.js +17 -1
- package/lib/stores/editor/EditorGraphState.js.map +1 -1
- package/lib/stores/editor/EditorStore.d.ts.map +1 -1
- package/lib/stores/editor/EditorStore.js +10 -0
- package/lib/stores/editor/EditorStore.js.map +1 -1
- package/lib/stores/editor/EditorTabManagerState.d.ts +18 -1
- package/lib/stores/editor/EditorTabManagerState.d.ts.map +1 -1
- package/lib/stores/editor/EditorTabManagerState.js +90 -1
- package/lib/stores/editor/EditorTabManagerState.js.map +1 -1
- package/lib/stores/editor/EditorTabTelemetryHelper.d.ts +31 -0
- package/lib/stores/editor/EditorTabTelemetryHelper.d.ts.map +1 -0
- package/lib/stores/editor/EditorTabTelemetryHelper.js +55 -0
- package/lib/stores/editor/EditorTabTelemetryHelper.js.map +1 -0
- package/lib/stores/editor/GraphEditFormModeState.d.ts.map +1 -1
- package/lib/stores/editor/GraphEditFormModeState.js +11 -1
- package/lib/stores/editor/GraphEditFormModeState.js.map +1 -1
- package/lib/stores/editor/editor-state/GraphGenerationState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/GraphGenerationState.js +25 -0
- package/lib/stores/editor/editor-state/GraphGenerationState.js.map +1 -1
- package/lib/stores/editor/editor-state/ModelImporterState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/ModelImporterState.js +2 -1
- package/lib/stores/editor/editor-state/ModelImporterState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/ElementExternalFormatGenerationState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/ElementExternalFormatGenerationState.js +14 -0
- package/lib/stores/editor/editor-state/element-editor-state/ElementExternalFormatGenerationState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/availability/testable/AvailabilityTestableState.d.ts +5 -0
- package/lib/stores/editor/editor-state/element-editor-state/availability/testable/AvailabilityTestableState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/availability/testable/AvailabilityTestableState.js +13 -0
- package/lib/stores/editor/editor-state/element-editor-state/availability/testable/AvailabilityTestableState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.d.ts +5 -0
- package/lib/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.js +13 -0
- package/lib/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.d.ts +7 -0
- package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.js +19 -0
- package/lib/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.d.ts +5 -0
- package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.js +13 -0
- package/lib/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.d.ts +7 -0
- package/lib/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.js +34 -0
- package/lib/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/service/ServiceRegistrationState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/service/ServiceRegistrationState.js +29 -0
- package/lib/stores/editor/editor-state/element-editor-state/service/ServiceRegistrationState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestDataState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestDataState.js +2 -0
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestDataState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestEditorState.d.ts +3 -0
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestEditorState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestEditorState.js +7 -0
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestEditorState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestableState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestableState.js +46 -17
- package/lib/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestableState.js.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.d.ts +7 -0
- package/lib/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.js +110 -16
- package/lib/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.js.map +1 -1
- package/lib/stores/editor/editor-state/project-configuration-editor-state/ProjectConfigurationEditorState.d.ts +2 -1
- package/lib/stores/editor/editor-state/project-configuration-editor-state/ProjectConfigurationEditorState.d.ts.map +1 -1
- package/lib/stores/editor/editor-state/project-configuration-editor-state/ProjectConfigurationEditorState.js +10 -4
- package/lib/stores/editor/editor-state/project-configuration-editor-state/ProjectConfigurationEditorState.js.map +1 -1
- package/lib/stores/editor/sidebar-state/BulkServiceRegistrationState.d.ts.map +1 -1
- package/lib/stores/editor/sidebar-state/BulkServiceRegistrationState.js +11 -0
- package/lib/stores/editor/sidebar-state/BulkServiceRegistrationState.js.map +1 -1
- package/lib/stores/editor/sidebar-state/ProjectOverviewState.d.ts.map +1 -1
- package/lib/stores/editor/sidebar-state/ProjectOverviewState.js +51 -0
- package/lib/stores/editor/sidebar-state/ProjectOverviewState.js.map +1 -1
- package/lib/stores/editor/sidebar-state/WorkflowManagerState.d.ts +14 -0
- package/lib/stores/editor/sidebar-state/WorkflowManagerState.d.ts.map +1 -1
- package/lib/stores/editor/sidebar-state/WorkflowManagerState.js +141 -26
- package/lib/stores/editor/sidebar-state/WorkflowManagerState.js.map +1 -1
- package/lib/stores/editor/sidebar-state/WorkspaceReviewState.d.ts.map +1 -1
- package/lib/stores/editor/sidebar-state/WorkspaceReviewState.js +41 -0
- package/lib/stores/editor/sidebar-state/WorkspaceReviewState.js.map +1 -1
- package/lib/stores/editor/sidebar-state/testable/GlobalTestRunnerState.d.ts.map +1 -1
- package/lib/stores/editor/sidebar-state/testable/GlobalTestRunnerState.js +71 -9
- package/lib/stores/editor/sidebar-state/testable/GlobalTestRunnerState.js.map +1 -1
- package/lib/stores/project-reviewer/ProjectReviewerStore.d.ts.map +1 -1
- package/lib/stores/project-reviewer/ProjectReviewerStore.js +45 -0
- package/lib/stores/project-reviewer/ProjectReviewerStore.js.map +1 -1
- package/lib/stores/workspace-setup/WorkspaceSetupStore.d.ts.map +1 -1
- package/lib/stores/workspace-setup/WorkspaceSetupStore.js +48 -4
- package/lib/stores/workspace-setup/WorkspaceSetupStore.js.map +1 -1
- package/package.json +9 -9
- package/src/__lib__/LegendStudioEvent.ts +88 -0
- package/src/__lib__/LegendStudioTelemetryHelper.ts +1389 -204
- package/src/components/editor/side-bar/WorkflowManager.tsx +24 -0
- package/src/index.ts +4 -1
- package/src/stores/editor/EditorGraphState.ts +30 -1
- package/src/stores/editor/EditorStore.ts +19 -0
- package/src/stores/editor/EditorTabManagerState.ts +128 -1
- package/src/stores/editor/EditorTabTelemetryHelper.ts +70 -0
- package/src/stores/editor/GraphEditFormModeState.ts +19 -1
- package/src/stores/editor/editor-state/GraphGenerationState.ts +53 -0
- package/src/stores/editor/editor-state/ModelImporterState.ts +2 -0
- package/src/stores/editor/editor-state/element-editor-state/ElementExternalFormatGenerationState.ts +30 -0
- package/src/stores/editor/editor-state/element-editor-state/availability/testable/AvailabilityTestableState.ts +17 -0
- package/src/stores/editor/editor-state/element-editor-state/dataProduct/testable/DataProductTestableState.ts +17 -0
- package/src/stores/editor/editor-state/element-editor-state/function-activator/testable/FunctionTestableState.ts +25 -0
- package/src/stores/editor/editor-state/element-editor-state/ingest/IngestTestableState.ts +17 -0
- package/src/stores/editor/editor-state/element-editor-state/mapping/testable/MappingTestableState.ts +57 -0
- package/src/stores/editor/editor-state/element-editor-state/service/ServiceRegistrationState.ts +56 -0
- package/src/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestDataState.ts +10 -0
- package/src/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestEditorState.ts +9 -0
- package/src/stores/editor/editor-state/element-editor-state/service/testable/ServiceTestableState.ts +78 -21
- package/src/stores/editor/editor-state/element-editor-state/testable/TestableEditorState.ts +205 -18
- package/src/stores/editor/editor-state/project-configuration-editor-state/ProjectConfigurationEditorState.ts +38 -3
- package/src/stores/editor/sidebar-state/BulkServiceRegistrationState.ts +27 -0
- package/src/stores/editor/sidebar-state/ProjectOverviewState.ts +114 -0
- package/src/stores/editor/sidebar-state/WorkflowManagerState.ts +259 -29
- package/src/stores/editor/sidebar-state/WorkspaceReviewState.ts +84 -0
- package/src/stores/editor/sidebar-state/testable/GlobalTestRunnerState.ts +124 -17
- package/src/stores/project-reviewer/ProjectReviewerStore.ts +97 -0
- package/src/stores/workspace-setup/WorkspaceSetupStore.ts +87 -4
- package/tsconfig.json +1 -0
|
@@ -25,6 +25,11 @@ import {
|
|
|
25
25
|
import type { EditorStore } from '../EditorStore.js';
|
|
26
26
|
import type { EditorSDLCState } from '../EditorSDLCState.js';
|
|
27
27
|
import { LEGEND_STUDIO_APP_EVENT } from '../../../__lib__/LegendStudioEvent.js';
|
|
28
|
+
import {
|
|
29
|
+
LegendStudioTelemetryHelper,
|
|
30
|
+
SDLC_REVIEW_ACTION,
|
|
31
|
+
SDLC_REVIEW_ROLE,
|
|
32
|
+
} from '../../../__lib__/LegendStudioTelemetryHelper.js';
|
|
28
33
|
import { LegendStudioUserDataHelper } from '../../../__lib__/LegendStudioUserDataHelper.js';
|
|
29
34
|
import {
|
|
30
35
|
type GeneratorFn,
|
|
@@ -287,6 +292,22 @@ export class WorkspaceReviewState {
|
|
|
287
292
|
return;
|
|
288
293
|
}
|
|
289
294
|
this.isClosingWorkspaceReview = true;
|
|
295
|
+
const startTime = Date.now();
|
|
296
|
+
const reviewId = this.workspaceReview.id;
|
|
297
|
+
const sourceInfo = this.editorStore.editorMode.getSourceInfo();
|
|
298
|
+
const identity = {
|
|
299
|
+
action: SDLC_REVIEW_ACTION.CLOSE,
|
|
300
|
+
role: SDLC_REVIEW_ROLE.AUTHOR,
|
|
301
|
+
projectId: this.sdlcState.activeProject.projectId,
|
|
302
|
+
patchReleaseVersionId:
|
|
303
|
+
this.sdlcState.activePatch?.patchReleaseVersionId.id,
|
|
304
|
+
reviewId,
|
|
305
|
+
};
|
|
306
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionLaunched(
|
|
307
|
+
this.editorStore.applicationStore.telemetryService,
|
|
308
|
+
sourceInfo,
|
|
309
|
+
identity,
|
|
310
|
+
);
|
|
290
311
|
try {
|
|
291
312
|
yield this.editorStore.sdlcServerClient.rejectReview(
|
|
292
313
|
this.sdlcState.activeProject.projectId,
|
|
@@ -294,12 +315,22 @@ export class WorkspaceReviewState {
|
|
|
294
315
|
this.workspaceReview.id,
|
|
295
316
|
);
|
|
296
317
|
this.workspaceReview = undefined;
|
|
318
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionSucceeded(
|
|
319
|
+
this.editorStore.applicationStore.telemetryService,
|
|
320
|
+
sourceInfo,
|
|
321
|
+
{ ...identity, durationMs: Date.now() - startTime },
|
|
322
|
+
);
|
|
297
323
|
} catch (error) {
|
|
298
324
|
assertErrorThrown(error);
|
|
299
325
|
this.editorStore.applicationStore.logService.error(
|
|
300
326
|
LogEvent.create(LEGEND_STUDIO_APP_EVENT.SDLC_MANAGER_FAILURE),
|
|
301
327
|
error,
|
|
302
328
|
);
|
|
329
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionFailure(
|
|
330
|
+
this.editorStore.applicationStore.telemetryService,
|
|
331
|
+
sourceInfo,
|
|
332
|
+
{ ...identity, errorMessage: error.message },
|
|
333
|
+
);
|
|
303
334
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
304
335
|
} finally {
|
|
305
336
|
this.isClosingWorkspaceReview = false;
|
|
@@ -332,6 +363,20 @@ export class WorkspaceReviewState {
|
|
|
332
363
|
return;
|
|
333
364
|
}
|
|
334
365
|
this.isCreatingWorkspaceReview = true;
|
|
366
|
+
const startTime = Date.now();
|
|
367
|
+
const sourceInfo = this.editorStore.editorMode.getSourceInfo();
|
|
368
|
+
const identity = {
|
|
369
|
+
action: SDLC_REVIEW_ACTION.CREATE,
|
|
370
|
+
role: SDLC_REVIEW_ROLE.AUTHOR,
|
|
371
|
+
projectId: this.sdlcState.activeProject.projectId,
|
|
372
|
+
patchReleaseVersionId:
|
|
373
|
+
this.sdlcState.activePatch?.patchReleaseVersionId.id,
|
|
374
|
+
};
|
|
375
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionLaunched(
|
|
376
|
+
this.editorStore.applicationStore.telemetryService,
|
|
377
|
+
sourceInfo,
|
|
378
|
+
identity,
|
|
379
|
+
);
|
|
335
380
|
try {
|
|
336
381
|
const description =
|
|
337
382
|
reviewDescription ??
|
|
@@ -348,12 +393,26 @@ export class WorkspaceReviewState {
|
|
|
348
393
|
},
|
|
349
394
|
)) as PlainObject<Review>,
|
|
350
395
|
);
|
|
396
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionSucceeded(
|
|
397
|
+
this.editorStore.applicationStore.telemetryService,
|
|
398
|
+
sourceInfo,
|
|
399
|
+
{
|
|
400
|
+
...identity,
|
|
401
|
+
reviewId: this.workspaceReview.id,
|
|
402
|
+
durationMs: Date.now() - startTime,
|
|
403
|
+
},
|
|
404
|
+
);
|
|
351
405
|
} catch (error) {
|
|
352
406
|
assertErrorThrown(error);
|
|
353
407
|
this.editorStore.applicationStore.logService.error(
|
|
354
408
|
LogEvent.create(LEGEND_STUDIO_APP_EVENT.SDLC_MANAGER_FAILURE),
|
|
355
409
|
error,
|
|
356
410
|
);
|
|
411
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionFailure(
|
|
412
|
+
this.editorStore.applicationStore.telemetryService,
|
|
413
|
+
sourceInfo,
|
|
414
|
+
{ ...identity, errorMessage: error.message },
|
|
415
|
+
);
|
|
357
416
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
358
417
|
} finally {
|
|
359
418
|
this.isCreatingWorkspaceReview = false;
|
|
@@ -396,6 +455,21 @@ export class WorkspaceReviewState {
|
|
|
396
455
|
return;
|
|
397
456
|
}
|
|
398
457
|
|
|
458
|
+
const startTime = Date.now();
|
|
459
|
+
const sourceInfo = this.editorStore.editorMode.getSourceInfo();
|
|
460
|
+
const identity = {
|
|
461
|
+
action: SDLC_REVIEW_ACTION.COMMIT,
|
|
462
|
+
role: SDLC_REVIEW_ROLE.AUTHOR,
|
|
463
|
+
projectId: this.sdlcState.activeProject.projectId,
|
|
464
|
+
patchReleaseVersionId:
|
|
465
|
+
this.sdlcState.activePatch?.patchReleaseVersionId.id,
|
|
466
|
+
reviewId: review.id,
|
|
467
|
+
};
|
|
468
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionLaunched(
|
|
469
|
+
this.editorStore.applicationStore.telemetryService,
|
|
470
|
+
sourceInfo,
|
|
471
|
+
identity,
|
|
472
|
+
);
|
|
399
473
|
try {
|
|
400
474
|
yield this.editorStore.sdlcServerClient.commitReview(
|
|
401
475
|
this.sdlcState.activeProject.projectId,
|
|
@@ -403,6 +477,11 @@ export class WorkspaceReviewState {
|
|
|
403
477
|
review.id,
|
|
404
478
|
{ message: `${review.title} [review]` },
|
|
405
479
|
);
|
|
480
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionSucceeded(
|
|
481
|
+
this.editorStore.applicationStore.telemetryService,
|
|
482
|
+
sourceInfo,
|
|
483
|
+
{ ...identity, durationMs: Date.now() - startTime },
|
|
484
|
+
);
|
|
406
485
|
// Committing a review deletes the workspace on SDLC. Drop it from
|
|
407
486
|
// the recents cache so the workspace setup screen doesn't keep
|
|
408
487
|
// offering a dead link. Patch workspaces are never cached.
|
|
@@ -452,6 +531,11 @@ export class WorkspaceReviewState {
|
|
|
452
531
|
LogEvent.create(LEGEND_STUDIO_APP_EVENT.SDLC_MANAGER_FAILURE),
|
|
453
532
|
error,
|
|
454
533
|
);
|
|
534
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionFailure(
|
|
535
|
+
this.editorStore.applicationStore.telemetryService,
|
|
536
|
+
sourceInfo,
|
|
537
|
+
{ ...identity, errorMessage: error.message },
|
|
538
|
+
);
|
|
455
539
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
456
540
|
} finally {
|
|
457
541
|
this.isCommittingWorkspaceReview = false;
|
|
@@ -54,6 +54,14 @@ import type {
|
|
|
54
54
|
} from '../../../LegendStudioApplicationPlugin.js';
|
|
55
55
|
import { ServiceEditorState } from '../../editor-state/element-editor-state/service/ServiceEditorState.js';
|
|
56
56
|
import { LegendStudioUserDataHelper } from '../../../../__lib__/LegendStudioUserDataHelper.js';
|
|
57
|
+
import {
|
|
58
|
+
GLOBAL_TEST_RUN_SCOPE,
|
|
59
|
+
LegendStudioTelemetryHelper,
|
|
60
|
+
TESTABLE_RUN_MODE,
|
|
61
|
+
getTestableKind,
|
|
62
|
+
getTestablePath,
|
|
63
|
+
summarizeTestResults,
|
|
64
|
+
} from '../../../../__lib__/LegendStudioTelemetryHelper.js';
|
|
57
65
|
|
|
58
66
|
// Testable Metadata
|
|
59
67
|
export interface TestableMetadata {
|
|
@@ -456,6 +464,10 @@ export class TestableState {
|
|
|
456
464
|
this.isRunningTests.inProgress();
|
|
457
465
|
let input: RunTestsTestableInput;
|
|
458
466
|
let currentNode = node;
|
|
467
|
+
const testable = this.testableMetadata.testable;
|
|
468
|
+
let mode: TESTABLE_RUN_MODE = TESTABLE_RUN_MODE.RUN_TESTABLE;
|
|
469
|
+
let suiteId: string | undefined;
|
|
470
|
+
let testCount = 0;
|
|
459
471
|
try {
|
|
460
472
|
if (node instanceof AssertionTestTreeNodeData) {
|
|
461
473
|
const atomicTest = guaranteeNonNullable(node.assertion.parentTest);
|
|
@@ -463,8 +475,11 @@ export class TestableState {
|
|
|
463
475
|
atomicTest.__parent instanceof TestSuite
|
|
464
476
|
? atomicTest.__parent
|
|
465
477
|
: undefined;
|
|
466
|
-
input = new RunTestsTestableInput(
|
|
478
|
+
input = new RunTestsTestableInput(testable);
|
|
467
479
|
input.unitTestIds = [new UniqueTestId(suite, atomicTest)];
|
|
480
|
+
mode = TESTABLE_RUN_MODE.RUN_TEST;
|
|
481
|
+
suiteId = suite?.id;
|
|
482
|
+
testCount = 1;
|
|
468
483
|
const parentNode = Array.from(this.treeData.nodes.values())
|
|
469
484
|
.filter(filterByType(AtomicTestTreeNodeData))
|
|
470
485
|
.find((n) => n.atomicTest === atomicTest);
|
|
@@ -478,30 +493,74 @@ export class TestableState {
|
|
|
478
493
|
atomicTest.__parent instanceof TestSuite
|
|
479
494
|
? atomicTest.__parent
|
|
480
495
|
: undefined;
|
|
481
|
-
input = new RunTestsTestableInput(
|
|
496
|
+
input = new RunTestsTestableInput(testable);
|
|
482
497
|
input.unitTestIds = [new UniqueTestId(suite, atomicTest)];
|
|
498
|
+
mode = TESTABLE_RUN_MODE.RUN_TEST;
|
|
499
|
+
suiteId = suite?.id;
|
|
500
|
+
testCount = 1;
|
|
483
501
|
node.isRunning = true;
|
|
484
502
|
} else if (node instanceof TestSuiteTreeNodeData) {
|
|
485
|
-
input = new RunTestsTestableInput(
|
|
503
|
+
input = new RunTestsTestableInput(testable);
|
|
486
504
|
input.unitTestIds = node.testSuite.tests.map(
|
|
487
505
|
(s) => new UniqueTestId(node.testSuite, s),
|
|
488
506
|
);
|
|
507
|
+
mode = TESTABLE_RUN_MODE.RUN_SUITE;
|
|
508
|
+
suiteId = node.testSuite.id;
|
|
509
|
+
testCount = node.testSuite.tests.length;
|
|
489
510
|
node.isRunning = true;
|
|
490
511
|
} else if (node instanceof TestableTreeNodeData) {
|
|
491
|
-
input = new RunTestsTestableInput(
|
|
512
|
+
input = new RunTestsTestableInput(testable);
|
|
513
|
+
mode = TESTABLE_RUN_MODE.RUN_TESTABLE;
|
|
514
|
+
suiteId = undefined;
|
|
515
|
+
testCount = testable.tests.reduce(
|
|
516
|
+
(acc, t) => acc + (t instanceof TestSuite ? t.tests.length : 1),
|
|
517
|
+
0,
|
|
518
|
+
);
|
|
492
519
|
node.isRunning = true;
|
|
493
520
|
} else {
|
|
494
521
|
throw new UnsupportedOperationError(
|
|
495
522
|
`Unable to run tests for node ${node}`,
|
|
496
523
|
);
|
|
497
524
|
}
|
|
498
|
-
const
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
525
|
+
const telemetryBase = {
|
|
526
|
+
testableKind: getTestableKind(testable),
|
|
527
|
+
testablePath: getTestablePath(testable),
|
|
528
|
+
suiteId,
|
|
529
|
+
mode,
|
|
530
|
+
testCount,
|
|
531
|
+
};
|
|
532
|
+
const startTime = Date.now();
|
|
533
|
+
LegendStudioTelemetryHelper.logEvent_TestableRunLaunched(
|
|
534
|
+
this.editorStore.applicationStore.telemetryService,
|
|
535
|
+
this.editorStore.editorMode.getSourceInfo(),
|
|
536
|
+
telemetryBase,
|
|
537
|
+
);
|
|
538
|
+
try {
|
|
539
|
+
const testResults =
|
|
540
|
+
(yield this.editorStore.graphManagerState.graphManager.runTests(
|
|
541
|
+
[input],
|
|
542
|
+
this.editorStore.graphManagerState.graph,
|
|
543
|
+
)) as TestResult[];
|
|
544
|
+
this.globalTestRunnerState.handleResults(testResults);
|
|
545
|
+
this.isRunningTests.complete();
|
|
546
|
+
LegendStudioTelemetryHelper.logEvent_TestableRunSucceeded(
|
|
547
|
+
this.editorStore.applicationStore.telemetryService,
|
|
548
|
+
this.editorStore.editorMode.getSourceInfo(),
|
|
549
|
+
{
|
|
550
|
+
...telemetryBase,
|
|
551
|
+
durationMs: Date.now() - startTime,
|
|
552
|
+
...summarizeTestResults(testResults),
|
|
553
|
+
},
|
|
554
|
+
);
|
|
555
|
+
} catch (error) {
|
|
556
|
+
assertErrorThrown(error);
|
|
557
|
+
LegendStudioTelemetryHelper.logEvent_TestableRunFailure(
|
|
558
|
+
this.editorStore.applicationStore.telemetryService,
|
|
559
|
+
this.editorStore.editorMode.getSourceInfo(),
|
|
560
|
+
{ ...telemetryBase, errorMessage: error.message },
|
|
561
|
+
);
|
|
562
|
+
throw error;
|
|
563
|
+
}
|
|
505
564
|
} catch (error) {
|
|
506
565
|
assertErrorThrown(error);
|
|
507
566
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
@@ -659,11 +718,21 @@ export class GlobalTestRunnerState {
|
|
|
659
718
|
}
|
|
660
719
|
|
|
661
720
|
*runAllTests(): GeneratorFn<void> {
|
|
721
|
+
const inputs = this.ownTestableStates.map(
|
|
722
|
+
(e) => new RunTestsTestableInput(e.testableMetadata.testable),
|
|
723
|
+
);
|
|
724
|
+
const telemetryBase = {
|
|
725
|
+
scope: GLOBAL_TEST_RUN_SCOPE.ALL,
|
|
726
|
+
testableCount: inputs.length,
|
|
727
|
+
};
|
|
728
|
+
const startTime = Date.now();
|
|
729
|
+
LegendStudioTelemetryHelper.logEvent_GlobalTestRunLaunched(
|
|
730
|
+
this.editorStore.applicationStore.telemetryService,
|
|
731
|
+
this.editorStore.editorMode.getSourceInfo(),
|
|
732
|
+
telemetryBase,
|
|
733
|
+
);
|
|
662
734
|
try {
|
|
663
735
|
this.isRunningTests.inProgress();
|
|
664
|
-
const inputs = this.ownTestableStates.map(
|
|
665
|
-
(e) => new RunTestsTestableInput(e.testableMetadata.testable),
|
|
666
|
-
);
|
|
667
736
|
const testResults =
|
|
668
737
|
(yield this.editorStore.graphManagerState.graphManager.runTests(
|
|
669
738
|
inputs,
|
|
@@ -671,10 +740,24 @@ export class GlobalTestRunnerState {
|
|
|
671
740
|
)) as TestResult[];
|
|
672
741
|
this.handleResults(testResults);
|
|
673
742
|
this.isRunningTests.complete();
|
|
743
|
+
LegendStudioTelemetryHelper.logEvent_GlobalTestRunSucceeded(
|
|
744
|
+
this.editorStore.applicationStore.telemetryService,
|
|
745
|
+
this.editorStore.editorMode.getSourceInfo(),
|
|
746
|
+
{
|
|
747
|
+
...telemetryBase,
|
|
748
|
+
durationMs: Date.now() - startTime,
|
|
749
|
+
...summarizeTestResults(testResults),
|
|
750
|
+
},
|
|
751
|
+
);
|
|
674
752
|
} catch (error) {
|
|
675
753
|
assertErrorThrown(error);
|
|
676
754
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
677
755
|
this.isRunningTests.fail();
|
|
756
|
+
LegendStudioTelemetryHelper.logEvent_GlobalTestRunFailure(
|
|
757
|
+
this.editorStore.applicationStore.telemetryService,
|
|
758
|
+
this.editorStore.editorMode.getSourceInfo(),
|
|
759
|
+
{ ...telemetryBase, errorMessage: error.message },
|
|
760
|
+
);
|
|
678
761
|
}
|
|
679
762
|
}
|
|
680
763
|
|
|
@@ -711,11 +794,21 @@ export class GlobalTestRunnerState {
|
|
|
711
794
|
}
|
|
712
795
|
|
|
713
796
|
*runDependenciesTests(): GeneratorFn<void> {
|
|
797
|
+
const inputs = this.allDependencyTestablesStates.map(
|
|
798
|
+
(e) => new RunTestsTestableInput(e.testableMetadata.testable),
|
|
799
|
+
);
|
|
800
|
+
const telemetryBase = {
|
|
801
|
+
scope: GLOBAL_TEST_RUN_SCOPE.DEPENDENCIES,
|
|
802
|
+
testableCount: inputs.length,
|
|
803
|
+
};
|
|
804
|
+
const startTime = Date.now();
|
|
805
|
+
LegendStudioTelemetryHelper.logEvent_GlobalTestRunLaunched(
|
|
806
|
+
this.editorStore.applicationStore.telemetryService,
|
|
807
|
+
this.editorStore.editorMode.getSourceInfo(),
|
|
808
|
+
telemetryBase,
|
|
809
|
+
);
|
|
714
810
|
try {
|
|
715
811
|
this.isRunningDependencyTests.inProgress();
|
|
716
|
-
const inputs = this.allDependencyTestablesStates.map(
|
|
717
|
-
(e) => new RunTestsTestableInput(e.testableMetadata.testable),
|
|
718
|
-
);
|
|
719
812
|
const testResults =
|
|
720
813
|
(yield this.editorStore.graphManagerState.graphManager.runTests(
|
|
721
814
|
inputs,
|
|
@@ -723,10 +816,24 @@ export class GlobalTestRunnerState {
|
|
|
723
816
|
)) as TestResult[];
|
|
724
817
|
this.handleResults(testResults);
|
|
725
818
|
this.isRunningDependencyTests.complete();
|
|
819
|
+
LegendStudioTelemetryHelper.logEvent_GlobalTestRunSucceeded(
|
|
820
|
+
this.editorStore.applicationStore.telemetryService,
|
|
821
|
+
this.editorStore.editorMode.getSourceInfo(),
|
|
822
|
+
{
|
|
823
|
+
...telemetryBase,
|
|
824
|
+
durationMs: Date.now() - startTime,
|
|
825
|
+
...summarizeTestResults(testResults),
|
|
826
|
+
},
|
|
827
|
+
);
|
|
726
828
|
} catch (error) {
|
|
727
829
|
assertErrorThrown(error);
|
|
728
830
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
729
831
|
this.isRunningDependencyTests.fail();
|
|
832
|
+
LegendStudioTelemetryHelper.logEvent_GlobalTestRunFailure(
|
|
833
|
+
this.editorStore.applicationStore.telemetryService,
|
|
834
|
+
this.editorStore.editorMode.getSourceInfo(),
|
|
835
|
+
{ ...telemetryBase, errorMessage: error.message },
|
|
836
|
+
);
|
|
730
837
|
}
|
|
731
838
|
}
|
|
732
839
|
}
|
|
@@ -45,6 +45,11 @@ import {
|
|
|
45
45
|
ReviewApproval,
|
|
46
46
|
} from '@finos/legend-server-sdlc';
|
|
47
47
|
import { LEGEND_STUDIO_APP_EVENT } from '../../__lib__/LegendStudioEvent.js';
|
|
48
|
+
import {
|
|
49
|
+
LegendStudioTelemetryHelper,
|
|
50
|
+
SDLC_REVIEW_ACTION,
|
|
51
|
+
SDLC_REVIEW_ROLE,
|
|
52
|
+
} from '../../__lib__/LegendStudioTelemetryHelper.js';
|
|
48
53
|
import { LegendStudioUserDataHelper } from '../../__lib__/LegendStudioUserDataHelper.js';
|
|
49
54
|
import { DEFAULT_TAB_SIZE } from '@finos/legend-application';
|
|
50
55
|
import type { Entity } from '@finos/legend-storage';
|
|
@@ -431,6 +436,19 @@ export class ProjectReviewerStore {
|
|
|
431
436
|
|
|
432
437
|
*approveReview(): GeneratorFn<void> {
|
|
433
438
|
this.approveState.inProgress();
|
|
439
|
+
const startTime = Date.now();
|
|
440
|
+
const identity = {
|
|
441
|
+
action: SDLC_REVIEW_ACTION.APPROVE,
|
|
442
|
+
role: SDLC_REVIEW_ROLE.REVIEWER,
|
|
443
|
+
projectId: this.projectId,
|
|
444
|
+
patchReleaseVersionId: this.patchReleaseVersionId,
|
|
445
|
+
reviewId: this.review.id,
|
|
446
|
+
};
|
|
447
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionLaunched(
|
|
448
|
+
this.editorStore.applicationStore.telemetryService,
|
|
449
|
+
undefined,
|
|
450
|
+
identity,
|
|
451
|
+
);
|
|
434
452
|
try {
|
|
435
453
|
this.currentReview = Review.serialization.fromJson(
|
|
436
454
|
(yield this.editorStore.sdlcServerClient.approveReview(
|
|
@@ -439,12 +457,22 @@ export class ProjectReviewerStore {
|
|
|
439
457
|
this.review.id,
|
|
440
458
|
)) as PlainObject<Review>,
|
|
441
459
|
);
|
|
460
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionSucceeded(
|
|
461
|
+
this.editorStore.applicationStore.telemetryService,
|
|
462
|
+
undefined,
|
|
463
|
+
{ ...identity, durationMs: Date.now() - startTime },
|
|
464
|
+
);
|
|
442
465
|
} catch (error) {
|
|
443
466
|
assertErrorThrown(error);
|
|
444
467
|
this.editorStore.applicationStore.logService.error(
|
|
445
468
|
LogEvent.create(LEGEND_STUDIO_APP_EVENT.SDLC_MANAGER_FAILURE),
|
|
446
469
|
error,
|
|
447
470
|
);
|
|
471
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionFailure(
|
|
472
|
+
this.editorStore.applicationStore.telemetryService,
|
|
473
|
+
undefined,
|
|
474
|
+
{ ...identity, errorMessage: error.message },
|
|
475
|
+
);
|
|
448
476
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
449
477
|
} finally {
|
|
450
478
|
this.approveState.complete();
|
|
@@ -453,6 +481,19 @@ export class ProjectReviewerStore {
|
|
|
453
481
|
|
|
454
482
|
*commitReview(): GeneratorFn<void> {
|
|
455
483
|
this.commitState.inProgress();
|
|
484
|
+
const startTime = Date.now();
|
|
485
|
+
const identity = {
|
|
486
|
+
action: SDLC_REVIEW_ACTION.COMMIT,
|
|
487
|
+
role: SDLC_REVIEW_ROLE.REVIEWER,
|
|
488
|
+
projectId: this.projectId,
|
|
489
|
+
patchReleaseVersionId: this.patchReleaseVersionId,
|
|
490
|
+
reviewId: this.review.id,
|
|
491
|
+
};
|
|
492
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionLaunched(
|
|
493
|
+
this.editorStore.applicationStore.telemetryService,
|
|
494
|
+
undefined,
|
|
495
|
+
identity,
|
|
496
|
+
);
|
|
456
497
|
try {
|
|
457
498
|
this.currentReview = Review.serialization.fromJson(
|
|
458
499
|
(yield this.editorStore.sdlcServerClient.commitReview(
|
|
@@ -462,6 +503,11 @@ export class ProjectReviewerStore {
|
|
|
462
503
|
{ message: `${this.review.title} [review]` },
|
|
463
504
|
)) as PlainObject<Review>,
|
|
464
505
|
);
|
|
506
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionSucceeded(
|
|
507
|
+
this.editorStore.applicationStore.telemetryService,
|
|
508
|
+
undefined,
|
|
509
|
+
{ ...identity, durationMs: Date.now() - startTime },
|
|
510
|
+
);
|
|
465
511
|
// Committing a review deletes its workspace on SDLC. Drop the
|
|
466
512
|
// matching entry from the local recents cache (no-op if it wasn't
|
|
467
513
|
// there, e.g., the reviewer isn't the workspace author). Patch
|
|
@@ -482,6 +528,11 @@ export class ProjectReviewerStore {
|
|
|
482
528
|
LogEvent.create(LEGEND_STUDIO_APP_EVENT.SDLC_MANAGER_FAILURE),
|
|
483
529
|
error,
|
|
484
530
|
);
|
|
531
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionFailure(
|
|
532
|
+
this.editorStore.applicationStore.telemetryService,
|
|
533
|
+
undefined,
|
|
534
|
+
{ ...identity, errorMessage: error.message },
|
|
535
|
+
);
|
|
485
536
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
486
537
|
} finally {
|
|
487
538
|
this.commitState.complete();
|
|
@@ -490,6 +541,19 @@ export class ProjectReviewerStore {
|
|
|
490
541
|
|
|
491
542
|
*reOpenReview(): GeneratorFn<void> {
|
|
492
543
|
this.reOpenState.inProgress();
|
|
544
|
+
const startTime = Date.now();
|
|
545
|
+
const identity = {
|
|
546
|
+
action: SDLC_REVIEW_ACTION.REOPEN,
|
|
547
|
+
role: SDLC_REVIEW_ROLE.REVIEWER,
|
|
548
|
+
projectId: this.projectId,
|
|
549
|
+
patchReleaseVersionId: this.patchReleaseVersionId,
|
|
550
|
+
reviewId: this.review.id,
|
|
551
|
+
};
|
|
552
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionLaunched(
|
|
553
|
+
this.editorStore.applicationStore.telemetryService,
|
|
554
|
+
undefined,
|
|
555
|
+
identity,
|
|
556
|
+
);
|
|
493
557
|
try {
|
|
494
558
|
this.currentReview = Review.serialization.fromJson(
|
|
495
559
|
(yield this.editorStore.sdlcServerClient.reopenReview(
|
|
@@ -498,12 +562,22 @@ export class ProjectReviewerStore {
|
|
|
498
562
|
this.review.id,
|
|
499
563
|
)) as PlainObject<Review>,
|
|
500
564
|
);
|
|
565
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionSucceeded(
|
|
566
|
+
this.editorStore.applicationStore.telemetryService,
|
|
567
|
+
undefined,
|
|
568
|
+
{ ...identity, durationMs: Date.now() - startTime },
|
|
569
|
+
);
|
|
501
570
|
} catch (error) {
|
|
502
571
|
assertErrorThrown(error);
|
|
503
572
|
this.editorStore.applicationStore.logService.error(
|
|
504
573
|
LogEvent.create(LEGEND_STUDIO_APP_EVENT.SDLC_MANAGER_FAILURE),
|
|
505
574
|
error,
|
|
506
575
|
);
|
|
576
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionFailure(
|
|
577
|
+
this.editorStore.applicationStore.telemetryService,
|
|
578
|
+
undefined,
|
|
579
|
+
{ ...identity, errorMessage: error.message },
|
|
580
|
+
);
|
|
507
581
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
508
582
|
} finally {
|
|
509
583
|
this.reOpenState.complete();
|
|
@@ -512,6 +586,19 @@ export class ProjectReviewerStore {
|
|
|
512
586
|
|
|
513
587
|
*closeReview(): GeneratorFn<void> {
|
|
514
588
|
this.closeState.inProgress();
|
|
589
|
+
const startTime = Date.now();
|
|
590
|
+
const identity = {
|
|
591
|
+
action: SDLC_REVIEW_ACTION.CLOSE,
|
|
592
|
+
role: SDLC_REVIEW_ROLE.REVIEWER,
|
|
593
|
+
projectId: this.projectId,
|
|
594
|
+
patchReleaseVersionId: this.patchReleaseVersionId,
|
|
595
|
+
reviewId: this.review.id,
|
|
596
|
+
};
|
|
597
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionLaunched(
|
|
598
|
+
this.editorStore.applicationStore.telemetryService,
|
|
599
|
+
undefined,
|
|
600
|
+
identity,
|
|
601
|
+
);
|
|
515
602
|
try {
|
|
516
603
|
this.currentReview = Review.serialization.fromJson(
|
|
517
604
|
(yield this.editorStore.sdlcServerClient.closeReview(
|
|
@@ -520,12 +607,22 @@ export class ProjectReviewerStore {
|
|
|
520
607
|
this.review.id,
|
|
521
608
|
)) as PlainObject<Review>,
|
|
522
609
|
);
|
|
610
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionSucceeded(
|
|
611
|
+
this.editorStore.applicationStore.telemetryService,
|
|
612
|
+
undefined,
|
|
613
|
+
{ ...identity, durationMs: Date.now() - startTime },
|
|
614
|
+
);
|
|
523
615
|
} catch (error) {
|
|
524
616
|
assertErrorThrown(error);
|
|
525
617
|
this.editorStore.applicationStore.logService.error(
|
|
526
618
|
LogEvent.create(LEGEND_STUDIO_APP_EVENT.SDLC_MANAGER_FAILURE),
|
|
527
619
|
error,
|
|
528
620
|
);
|
|
621
|
+
LegendStudioTelemetryHelper.logEvent_SdlcReviewActionFailure(
|
|
622
|
+
this.editorStore.applicationStore.telemetryService,
|
|
623
|
+
undefined,
|
|
624
|
+
{ ...identity, errorMessage: error.message },
|
|
625
|
+
);
|
|
529
626
|
this.editorStore.applicationStore.notificationService.notifyError(error);
|
|
530
627
|
} finally {
|
|
531
628
|
this.closeState.complete();
|