@finos/legend-application-studio 22.4.3 → 22.4.5

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.
Files changed (188) hide show
  1. package/lib/components/Core_LegendStudioApplicationPlugin.d.ts.map +1 -1
  2. package/lib/components/Core_LegendStudioApplicationPlugin.js +1 -0
  3. package/lib/components/Core_LegendStudioApplicationPlugin.js.map +1 -1
  4. package/lib/components/EditorComponentTestUtils.d.ts.map +1 -1
  5. package/lib/components/EditorComponentTestUtils.js +7 -5
  6. package/lib/components/EditorComponentTestUtils.js.map +1 -1
  7. package/lib/components/LegendStudioApplication.d.ts.map +1 -1
  8. package/lib/components/LegendStudioApplication.js +4 -1
  9. package/lib/components/LegendStudioApplication.js.map +1 -1
  10. package/lib/components/editor/edit-panel/RuntimeEditor.js +1 -1
  11. package/lib/components/editor/edit-panel/connection-editor/DatabaseBuilder.d.ts.map +1 -1
  12. package/lib/components/editor/edit-panel/connection-editor/DatabaseBuilder.js +6 -4
  13. package/lib/components/editor/edit-panel/connection-editor/DatabaseBuilder.js.map +1 -1
  14. package/lib/components/editor/edit-panel/data-editor/RelationalCSVDataEditor.js +4 -4
  15. package/lib/components/editor/edit-panel/data-editor/RelationalCSVDataEditor.js.map +1 -1
  16. package/lib/components/editor/edit-panel/external-format-editor/DSL_ExternalFormat_BindingElementEditor.js +1 -1
  17. package/lib/components/editor/edit-panel/external-format-editor/DSL_ExternalFormat_BindingElementEditor.js.map +1 -1
  18. package/lib/components/editor/edit-panel/mapping-editor/ClassMappingEditor.d.ts.map +1 -1
  19. package/lib/components/editor/edit-panel/mapping-editor/ClassMappingEditor.js +3 -3
  20. package/lib/components/editor/edit-panel/mapping-editor/ClassMappingEditor.js.map +1 -1
  21. package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.d.ts.map +1 -1
  22. package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.js +5 -3
  23. package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.js.map +1 -1
  24. package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.d.ts.map +1 -1
  25. package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.js +2 -0
  26. package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.js.map +1 -1
  27. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.d.ts.map +1 -1
  28. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.js +1 -1
  29. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.js.map +1 -1
  30. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectDependencyEditor.d.ts.map +1 -1
  31. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectDependencyEditor.js +8 -8
  32. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectDependencyEditor.js.map +1 -1
  33. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionEditor.d.ts.map +1 -1
  34. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionEditor.js +1 -1
  35. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionEditor.js.map +1 -1
  36. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.d.ts.map +1 -1
  37. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js +2 -0
  38. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js.map +1 -1
  39. package/lib/components/editor/edit-panel/testable/TestAssertionEditor.d.ts.map +1 -1
  40. package/lib/components/editor/edit-panel/testable/TestAssertionEditor.js +2 -2
  41. package/lib/components/editor/edit-panel/testable/TestAssertionEditor.js.map +1 -1
  42. package/lib/components/editor/edit-panel/uml-editor/ClassQueryBuilder.d.ts.map +1 -1
  43. package/lib/components/editor/edit-panel/uml-editor/ClassQueryBuilder.js +2 -0
  44. package/lib/components/editor/edit-panel/uml-editor/ClassQueryBuilder.js.map +1 -1
  45. package/lib/components/editor/side-bar/CreateNewElementModal.d.ts.map +1 -1
  46. package/lib/components/editor/side-bar/CreateNewElementModal.js +1 -1
  47. package/lib/components/editor/side-bar/CreateNewElementModal.js.map +1 -1
  48. package/lib/components/editor/side-bar/ProjectDependantsEditor.d.ts.map +1 -1
  49. package/lib/components/editor/side-bar/ProjectDependantsEditor.js +2 -2
  50. package/lib/components/editor/side-bar/ProjectDependantsEditor.js.map +1 -1
  51. package/lib/components/editor/side-bar/WorkflowManager.d.ts.map +1 -1
  52. package/lib/components/editor/side-bar/WorkflowManager.js +9 -9
  53. package/lib/components/editor/side-bar/WorkflowManager.js.map +1 -1
  54. package/lib/components/editor/side-bar/WorkspaceReview.d.ts.map +1 -1
  55. package/lib/components/editor/side-bar/WorkspaceReview.js +4 -4
  56. package/lib/components/editor/side-bar/WorkspaceReview.js.map +1 -1
  57. package/lib/components/editor/side-bar/testable/GlobalTestRunner.d.ts.map +1 -1
  58. package/lib/components/editor/side-bar/testable/GlobalTestRunner.js +2 -2
  59. package/lib/components/editor/side-bar/testable/GlobalTestRunner.js.map +1 -1
  60. package/lib/index.css +2 -2
  61. package/lib/index.css.map +1 -1
  62. package/lib/package.json +5 -5
  63. package/lib/stores/ChangeDetectionEvent.d.ts +11 -11
  64. package/lib/stores/ChangeDetectionEvent.d.ts.map +1 -1
  65. package/lib/stores/ChangeDetectionEvent.js +11 -11
  66. package/lib/stores/ChangeDetectionEvent.js.map +1 -1
  67. package/lib/stores/ChangeDetectionState.d.ts.map +1 -1
  68. package/lib/stores/ChangeDetectionState.js +14 -11
  69. package/lib/stores/ChangeDetectionState.js.map +1 -1
  70. package/lib/stores/EditorGraphState.d.ts.map +1 -1
  71. package/lib/stores/EditorGraphState.js +39 -16
  72. package/lib/stores/EditorGraphState.js.map +1 -1
  73. package/lib/stores/EditorSDLCState.js +3 -3
  74. package/lib/stores/EditorSDLCState.js.map +1 -1
  75. package/lib/stores/EditorStore.d.ts.map +1 -1
  76. package/lib/stores/EditorStore.js +4 -4
  77. package/lib/stores/EditorStore.js.map +1 -1
  78. package/lib/stores/EmbeddedQueryBuilderState.d.ts +1 -0
  79. package/lib/stores/EmbeddedQueryBuilderState.d.ts.map +1 -1
  80. package/lib/stores/EmbeddedQueryBuilderState.js.map +1 -1
  81. package/lib/stores/LegendStudioAppEvent.d.ts +8 -2
  82. package/lib/stores/LegendStudioAppEvent.d.ts.map +1 -1
  83. package/lib/stores/LegendStudioAppEvent.js +8 -2
  84. package/lib/stores/LegendStudioAppEvent.js.map +1 -1
  85. package/lib/stores/LegendStudioApplicationNavigationContext.d.ts +7 -0
  86. package/lib/stores/LegendStudioApplicationNavigationContext.d.ts.map +1 -1
  87. package/lib/stores/LegendStudioApplicationNavigationContext.js +7 -0
  88. package/lib/stores/LegendStudioApplicationNavigationContext.js.map +1 -1
  89. package/lib/stores/LegendStudioBaseStore.d.ts +6 -6
  90. package/lib/stores/LegendStudioBaseStore.d.ts.map +1 -1
  91. package/lib/stores/LegendStudioBaseStore.js +12 -14
  92. package/lib/stores/LegendStudioBaseStore.js.map +1 -1
  93. package/lib/stores/LegendStudioCodeSnippets.d.ts +3 -3
  94. package/lib/stores/LegendStudioCodeSnippets.d.ts.map +1 -1
  95. package/lib/stores/LegendStudioCodeSnippets.js +9 -22
  96. package/lib/stores/LegendStudioCodeSnippets.js.map +1 -1
  97. package/lib/stores/LegendStudioEventService.js +1 -1
  98. package/lib/stores/LegendStudioEventService.js.map +1 -1
  99. package/lib/stores/LegendStudioTelemetry.d.ts +33 -0
  100. package/lib/stores/LegendStudioTelemetry.d.ts.map +1 -0
  101. package/lib/stores/LegendStudioTelemetry.js +37 -0
  102. package/lib/stores/LegendStudioTelemetry.js.map +1 -0
  103. package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionState.d.ts.map +1 -1
  104. package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionState.js +38 -6
  105. package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionState.js.map +1 -1
  106. package/lib/stores/editor-state/element-editor-state/mapping/MappingTestState.d.ts.map +1 -1
  107. package/lib/stores/editor-state/element-editor-state/mapping/MappingTestState.js +27 -5
  108. package/lib/stores/editor-state/element-editor-state/mapping/MappingTestState.js.map +1 -1
  109. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.d.ts.map +1 -1
  110. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.js +38 -6
  111. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.js.map +1 -1
  112. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.d.ts.map +1 -1
  113. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.js +16 -6
  114. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.js.map +1 -1
  115. package/lib/stores/project-viewer/ProjectViewerStore.d.ts.map +1 -1
  116. package/lib/stores/project-viewer/ProjectViewerStore.js +21 -13
  117. package/lib/stores/project-viewer/ProjectViewerStore.js.map +1 -1
  118. package/lib/stores/shared/testable/TestableUtils.d.ts +2 -2
  119. package/lib/stores/shared/testable/TestableUtils.d.ts.map +1 -1
  120. package/lib/stores/shared/testable/TestableUtils.js +3 -3
  121. package/lib/stores/shared/testable/TestableUtils.js.map +1 -1
  122. package/lib/stores/sidebar-state/LocalChangesState.d.ts.map +1 -1
  123. package/lib/stores/sidebar-state/LocalChangesState.js +6 -6
  124. package/lib/stores/sidebar-state/LocalChangesState.js.map +1 -1
  125. package/lib/stores/sidebar-state/ProjectOverviewState.d.ts.map +1 -1
  126. package/lib/stores/sidebar-state/ProjectOverviewState.js +3 -3
  127. package/lib/stores/sidebar-state/ProjectOverviewState.js.map +1 -1
  128. package/lib/stores/sidebar-state/WorkspaceReviewState.d.ts.map +1 -1
  129. package/lib/stores/sidebar-state/WorkspaceReviewState.js +1 -1
  130. package/lib/stores/sidebar-state/WorkspaceReviewState.js.map +1 -1
  131. package/lib/stores/sidebar-state/WorkspaceSyncState.js +1 -1
  132. package/lib/stores/sidebar-state/WorkspaceSyncState.js.map +1 -1
  133. package/lib/stores/sidebar-state/WorkspaceUpdateConflictResolutionState.d.ts.map +1 -1
  134. package/lib/stores/sidebar-state/WorkspaceUpdateConflictResolutionState.js +4 -4
  135. package/lib/stores/sidebar-state/WorkspaceUpdateConflictResolutionState.js.map +1 -1
  136. package/lib/stores/sidebar-state/WorkspaceUpdaterState.d.ts.map +1 -1
  137. package/lib/stores/sidebar-state/WorkspaceUpdaterState.js +2 -2
  138. package/lib/stores/sidebar-state/WorkspaceUpdaterState.js.map +1 -1
  139. package/lib/stores/workspace-review/WorkspaceReviewStore.js +2 -2
  140. package/lib/stores/workspace-review/WorkspaceReviewStore.js.map +1 -1
  141. package/package.json +14 -14
  142. package/src/components/Core_LegendStudioApplicationPlugin.tsx +1 -0
  143. package/src/components/EditorComponentTestUtils.tsx +15 -5
  144. package/src/components/LegendStudioApplication.tsx +9 -4
  145. package/src/components/editor/edit-panel/RuntimeEditor.tsx +1 -1
  146. package/src/components/editor/edit-panel/connection-editor/DatabaseBuilder.tsx +13 -6
  147. package/src/components/editor/edit-panel/data-editor/RelationalCSVDataEditor.tsx +1 -1
  148. package/src/components/editor/edit-panel/external-format-editor/DSL_ExternalFormat_BindingElementEditor.tsx +1 -1
  149. package/src/components/editor/edit-panel/mapping-editor/ClassMappingEditor.tsx +5 -4
  150. package/src/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.tsx +10 -7
  151. package/src/components/editor/edit-panel/mapping-editor/MappingTestEditor.tsx +3 -0
  152. package/src/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.tsx +1 -2
  153. package/src/components/editor/edit-panel/project-configuration-editor/ProjectDependencyEditor.tsx +37 -42
  154. package/src/components/editor/edit-panel/service-editor/ServiceExecutionEditor.tsx +1 -2
  155. package/src/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.tsx +3 -0
  156. package/src/components/editor/edit-panel/testable/TestAssertionEditor.tsx +2 -6
  157. package/src/components/editor/edit-panel/uml-editor/ClassQueryBuilder.tsx +3 -0
  158. package/src/components/editor/side-bar/CreateNewElementModal.tsx +3 -2
  159. package/src/components/editor/side-bar/ProjectDependantsEditor.tsx +23 -26
  160. package/src/components/editor/side-bar/WorkflowManager.tsx +6 -12
  161. package/src/components/editor/side-bar/WorkspaceReview.tsx +2 -3
  162. package/src/components/editor/side-bar/testable/GlobalTestRunner.tsx +2 -6
  163. package/src/stores/ChangeDetectionEvent.ts +11 -11
  164. package/src/stores/ChangeDetectionState.ts +18 -11
  165. package/src/stores/EditorGraphState.ts +91 -39
  166. package/src/stores/EditorSDLCState.ts +3 -3
  167. package/src/stores/EditorStore.ts +6 -4
  168. package/src/stores/EmbeddedQueryBuilderState.ts +1 -0
  169. package/src/stores/LegendStudioAppEvent.ts +10 -2
  170. package/src/stores/LegendStudioApplicationNavigationContext.ts +9 -0
  171. package/src/stores/LegendStudioBaseStore.ts +24 -23
  172. package/src/stores/LegendStudioCodeSnippets.ts +9 -22
  173. package/src/stores/LegendStudioEventService.ts +1 -1
  174. package/src/stores/LegendStudioTelemetry.ts +83 -0
  175. package/src/stores/editor-state/element-editor-state/mapping/MappingExecutionState.ts +76 -1
  176. package/src/stores/editor-state/element-editor-state/mapping/MappingTestState.ts +50 -1
  177. package/src/stores/editor-state/element-editor-state/service/ServiceExecutionState.ts +73 -0
  178. package/src/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.ts +27 -5
  179. package/src/stores/project-viewer/ProjectViewerStore.ts +41 -25
  180. package/src/stores/shared/testable/TestableUtils.ts +3 -3
  181. package/src/stores/sidebar-state/LocalChangesState.ts +10 -6
  182. package/src/stores/sidebar-state/ProjectOverviewState.ts +3 -4
  183. package/src/stores/sidebar-state/WorkspaceReviewState.ts +3 -1
  184. package/src/stores/sidebar-state/WorkspaceSyncState.ts +1 -1
  185. package/src/stores/sidebar-state/WorkspaceUpdateConflictResolutionState.ts +8 -4
  186. package/src/stores/sidebar-state/WorkspaceUpdaterState.ts +4 -2
  187. package/src/stores/workspace-review/WorkspaceReviewStore.ts +2 -2
  188. package/tsconfig.json +1 -0
@@ -89,11 +89,12 @@ import {
89
89
  GraphManagerTelemetry,
90
90
  DataElement,
91
91
  type PackageableElement,
92
- type GraphBuilderReport,
93
92
  type CompilationWarning,
94
93
  type TextCompilationResult,
95
94
  type CompilationResult,
96
95
  type PureModel,
96
+ createGraphBuilderReport,
97
+ reportGraphAnalytics,
97
98
  } from '@finos/legend-graph';
98
99
  import {
99
100
  ActionAlertActionType,
@@ -106,6 +107,7 @@ import { PACKAGEABLE_ELEMENT_TYPE } from './shared/ModelClassifierUtils.js';
106
107
  import { GlobalTestRunnerState } from './sidebar-state/testable/GlobalTestRunnerState.js';
107
108
  import { LEGEND_STUDIO_APP_EVENT } from './LegendStudioAppEvent.js';
108
109
  import { ExplorerTreeState } from './ExplorerTreeState.js';
110
+ import { LegendStudioTelemetry } from './LegendStudioTelemetry.js';
109
111
 
110
112
  export enum GraphBuilderStatus {
111
113
  SUCCEEDED = 'SUCCEEDED',
@@ -347,59 +349,70 @@ export class EditorGraphState {
347
349
  const dependencyEntitiesIndex = (yield flowResult(
348
350
  this.getIndexedDependencyEntities(),
349
351
  )) as Map<string, Entity[]>;
350
- stopWatch.record(GRAPH_MANAGER_EVENT.GRAPH_DEPENDENCIES_FETCHED);
351
-
352
- const dependency_buildReport =
353
- (yield this.editorStore.graphManagerState.graphManager.buildDependencies(
354
- this.editorStore.graphManagerState.coreModel,
355
- this.editorStore.graphManagerState.systemModel,
356
- dependencyManager,
357
- dependencyEntitiesIndex,
358
- this.editorStore.graphManagerState.dependenciesBuildState,
359
- )) as GraphBuilderReport;
352
+ stopWatch.record(GRAPH_MANAGER_EVENT.FETCH_GRAPH_DEPENDENCIES__SUCCESS);
353
+
354
+ const dependency_buildReport = createGraphBuilderReport();
355
+ yield this.editorStore.graphManagerState.graphManager.buildDependencies(
356
+ this.editorStore.graphManagerState.coreModel,
357
+ this.editorStore.graphManagerState.systemModel,
358
+ dependencyManager,
359
+ dependencyEntitiesIndex,
360
+ this.editorStore.graphManagerState.dependenciesBuildState,
361
+ {},
362
+ dependency_buildReport,
363
+ );
360
364
  dependency_buildReport.timings[
361
- GRAPH_MANAGER_EVENT.GRAPH_DEPENDENCIES_FETCHED
362
- ] = stopWatch.getRecord(GRAPH_MANAGER_EVENT.GRAPH_DEPENDENCIES_FETCHED);
365
+ GRAPH_MANAGER_EVENT.FETCH_GRAPH_DEPENDENCIES__SUCCESS
366
+ ] = stopWatch.getRecord(
367
+ GRAPH_MANAGER_EVENT.FETCH_GRAPH_DEPENDENCIES__SUCCESS,
368
+ );
363
369
 
364
370
  // build graph
365
- const graph_buildReport =
366
- (yield this.editorStore.graphManagerState.graphManager.buildGraph(
367
- this.editorStore.graphManagerState.graph,
368
- entities,
369
- this.editorStore.graphManagerState.graphBuildState,
370
- {
371
- TEMPORARY__preserveSectionIndex:
372
- this.editorStore.applicationStore.config.options
373
- .TEMPORARY__preserveSectionIndex,
374
- strict: this.enableStrictMode,
375
- },
376
- )) as GraphBuilderReport;
371
+ const graph_buildReport = createGraphBuilderReport();
372
+ yield this.editorStore.graphManagerState.graphManager.buildGraph(
373
+ this.editorStore.graphManagerState.graph,
374
+ entities,
375
+ this.editorStore.graphManagerState.graphBuildState,
376
+ {
377
+ TEMPORARY__preserveSectionIndex:
378
+ this.editorStore.applicationStore.config.options
379
+ .TEMPORARY__preserveSectionIndex,
380
+ strict: this.enableStrictMode,
381
+ },
382
+ graph_buildReport,
383
+ );
377
384
 
378
385
  // build generations
379
- const generation_buildReport =
380
- (yield this.editorStore.graphManagerState.graphManager.buildGenerations(
381
- this.editorStore.graphManagerState.graph,
382
- this.graphGenerationState.generatedEntities,
383
- this.editorStore.graphManagerState.generationsBuildState,
384
- )) as GraphBuilderReport;
386
+ const generation_buildReport = createGraphBuilderReport();
387
+ yield this.editorStore.graphManagerState.graphManager.buildGenerations(
388
+ this.editorStore.graphManagerState.graph,
389
+ this.graphGenerationState.generatedEntities,
390
+ this.editorStore.graphManagerState.generationsBuildState,
391
+ {},
392
+ generation_buildReport,
393
+ );
385
394
 
386
395
  // report
387
- stopWatch.record(GRAPH_MANAGER_EVENT.GRAPH_INITIALIZED);
396
+ stopWatch.record(GRAPH_MANAGER_EVENT.INITIALIZE_GRAPH__SUCCESS);
388
397
  const graphBuilderReportData = {
389
398
  timings: {
390
- [GRAPH_MANAGER_EVENT.GRAPH_INITIALIZED]: stopWatch.getRecord(
391
- GRAPH_MANAGER_EVENT.GRAPH_INITIALIZED,
399
+ [GRAPH_MANAGER_EVENT.INITIALIZE_GRAPH__SUCCESS]: stopWatch.getRecord(
400
+ GRAPH_MANAGER_EVENT.INITIALIZE_GRAPH__SUCCESS,
392
401
  ),
393
402
  },
394
403
  dependencies: dependency_buildReport,
404
+ dependenciesCount:
405
+ this.editorStore.graphManagerState.graph.dependencyManager
406
+ .numberOfDependencies,
395
407
  graph: graph_buildReport,
396
408
  generations: generation_buildReport,
409
+ generationsCount: this.graphGenerationState.generatedEntities.size,
397
410
  };
398
411
  this.editorStore.applicationStore.log.info(
399
- LogEvent.create(GRAPH_MANAGER_EVENT.GRAPH_INITIALIZED),
412
+ LogEvent.create(GRAPH_MANAGER_EVENT.INITIALIZE_GRAPH__SUCCESS),
400
413
  graphBuilderReportData,
401
414
  );
402
- GraphManagerTelemetry.logEvent_GraphInitialized(
415
+ GraphManagerTelemetry.logEvent_GraphInitializationSucceeded(
403
416
  this.editorStore.applicationStore.telemetryService,
404
417
  graphBuilderReportData,
405
418
  );
@@ -564,6 +577,14 @@ export class EditorGraphState {
564
577
  return FormModeCompilationOutcome.SKIPPED;
565
578
  }
566
579
 
580
+ const stopWatch = new StopWatch();
581
+ const report = reportGraphAnalytics(
582
+ this.editorStore.graphManagerState.graph,
583
+ );
584
+ LegendStudioTelemetry.logEvent_GraphCompilationLaunched(
585
+ this.editorStore.applicationStore.telemetryService,
586
+ );
587
+
567
588
  const currentGraphHash =
568
589
  this.editorStore.changeDetectionState.currentGraphHash;
569
590
 
@@ -584,6 +605,7 @@ export class EditorGraphState {
584
605
  {
585
606
  keepSourceInformation: true,
586
607
  },
608
+ report,
587
609
  )) as CompilationResult;
588
610
 
589
611
  this.warnings = compilationResult.warnings
@@ -606,6 +628,12 @@ export class EditorGraphState {
606
628
  }
607
629
  }
608
630
 
631
+ report.timings.total = stopWatch.elapsed;
632
+ LegendStudioTelemetry.logEvent_GraphCompilationSucceeded(
633
+ this.editorStore.applicationStore.telemetryService,
634
+ report,
635
+ );
636
+
609
637
  return FormModeCompilationOutcome.SUCCEEDED;
610
638
  } catch (error) {
611
639
  assertErrorThrown(error);
@@ -712,6 +740,14 @@ export class EditorGraphState {
712
740
  return;
713
741
  }
714
742
 
743
+ const stopWatch = new StopWatch();
744
+ const report = reportGraphAnalytics(
745
+ this.editorStore.graphManagerState.graph,
746
+ );
747
+ LegendStudioTelemetry.logEvent_TextCompilationLaunched(
748
+ this.editorStore.applicationStore.telemetryService,
749
+ );
750
+
715
751
  const currentGraphHash =
716
752
  this.editorStore.grammarTextEditorState.currentTextGraphHash;
717
753
 
@@ -726,6 +762,8 @@ export class EditorGraphState {
726
762
  (yield this.editorStore.graphManagerState.graphManager.compileText(
727
763
  this.editorStore.grammarTextEditorState.graphGrammarText,
728
764
  this.editorStore.graphManagerState.graph,
765
+ {},
766
+ report,
729
767
  )) as TextCompilationResult;
730
768
 
731
769
  const entities = compilationResult.entities;
@@ -748,7 +786,9 @@ export class EditorGraphState {
748
786
  }
749
787
  }
750
788
 
789
+ stopWatch.record();
751
790
  yield flowResult(this.updateGraphAndApplicationInTextMode(entities));
791
+ stopWatch.record(GRAPH_MANAGER_EVENT.UPDATE_AND_REBUILD_GRAPH__SUCCESS);
752
792
 
753
793
  // Remove `SectionIndex when computing changes in text mode as engine after
754
794
  // transforming grammarToJson would return `SectionIndex` which is not
@@ -760,6 +800,16 @@ export class EditorGraphState {
760
800
  ),
761
801
  ),
762
802
  );
803
+
804
+ report.timings = {
805
+ ...report.timings,
806
+ ...Object.fromEntries(stopWatch.records),
807
+ total: stopWatch.elapsed,
808
+ };
809
+ LegendStudioTelemetry.logEvent_GraphCompilationSucceeded(
810
+ this.editorStore.applicationStore.telemetryService,
811
+ report,
812
+ );
763
813
  } catch (error) {
764
814
  assertErrorThrown(error);
765
815
  this.mostRecentTextModeCompilationGraphHash = currentGraphHash;
@@ -1111,7 +1161,7 @@ export class EditorGraphState {
1111
1161
  );
1112
1162
 
1113
1163
  this.editorStore.applicationStore.log.info(
1114
- LogEvent.create(GRAPH_MANAGER_EVENT.GRAPH_UPDATED_AND_REBUILT),
1164
+ LogEvent.create(GRAPH_MANAGER_EVENT.UPDATE_AND_REBUILD_GRAPH__SUCCESS),
1115
1165
  '[TOTAL]',
1116
1166
  Date.now() - startTime,
1117
1167
  'ms',
@@ -1124,7 +1174,9 @@ export class EditorGraphState {
1124
1174
  yield this.editorStore.changeDetectionState.preComputeGraphElementHashes();
1125
1175
  this.editorStore.changeDetectionState.start();
1126
1176
  this.editorStore.applicationStore.log.info(
1127
- LogEvent.create(CHANGE_DETECTION_EVENT.CHANGE_DETECTION_RESTARTED),
1177
+ LogEvent.create(
1178
+ CHANGE_DETECTION_EVENT.CHANGE_DETECTION_RESTART__SUCCESS,
1179
+ ),
1128
1180
  '[ASYNC]',
1129
1181
  );
1130
1182
 
@@ -1184,7 +1236,7 @@ export class EditorGraphState {
1184
1236
  this.reprocessExplorerTreeInTextMode();
1185
1237
 
1186
1238
  this.editorStore.applicationStore.log.info(
1187
- LogEvent.create(GRAPH_MANAGER_EVENT.GRAPH_UPDATED_AND_REBUILT),
1239
+ LogEvent.create(GRAPH_MANAGER_EVENT.UPDATE_AND_REBUILD_GRAPH__SUCCESS),
1188
1240
  '[TOTAL]',
1189
1241
  Date.now() - startTime,
1190
1242
  'ms',
@@ -382,7 +382,7 @@ export class EditorSDLCState {
382
382
  this.editorStore.changeDetectionState.workspaceLocalLatestRevisionState.buildEntityHashesIndex(
383
383
  entities,
384
384
  LogEvent.create(
385
- CHANGE_DETECTION_EVENT.CHANGE_DETECTION_LOCAL_HASHES_INDEX_BUILT,
385
+ CHANGE_DETECTION_EVENT.CHANGE_DETECTION_BUILD_LOCAL_HASHES_INDEX__SUCCESS,
386
386
  ),
387
387
  ),
388
388
  );
@@ -412,7 +412,7 @@ export class EditorSDLCState {
412
412
  this.editorStore.changeDetectionState.workspaceBaseRevisionState.buildEntityHashesIndex(
413
413
  workspaceBaseEntities,
414
414
  LogEvent.create(
415
- CHANGE_DETECTION_EVENT.CHANGE_DETECTION_WORKSPACE_HASHES_INDEX_BUILT,
415
+ CHANGE_DETECTION_EVENT.CHANGE_DETECTION_BUILD_WORKSPACE_HASHES_INDEX__SUCCESS,
416
416
  ),
417
417
  ),
418
418
  );
@@ -441,7 +441,7 @@ export class EditorSDLCState {
441
441
  this.editorStore.changeDetectionState.projectLatestRevisionState.buildEntityHashesIndex(
442
442
  projectLatestEntities,
443
443
  LogEvent.create(
444
- CHANGE_DETECTION_EVENT.CHANGE_DETECTION_PROJECT_LATEST_HASHES_INDEX_BUILT,
444
+ CHANGE_DETECTION_EVENT.CHANGE_DETECTION_BUILD_PROJECT_LATEST_HASHES_INDEX__SUCCESS,
445
445
  ),
446
446
  ),
447
447
  );
@@ -814,7 +814,7 @@ export class EditorStore implements CommandRegistrar {
814
814
  entities,
815
815
  );
816
816
  this.applicationStore.log.info(
817
- LogEvent.create(GRAPH_MANAGER_EVENT.GRAPH_ENTITIES_FETCHED),
817
+ LogEvent.create(GRAPH_MANAGER_EVENT.FETCH_GRAPH_ENTITIES__SUCCESS),
818
818
  Date.now() - startTime,
819
819
  'ms',
820
820
  );
@@ -838,7 +838,7 @@ export class EditorStore implements CommandRegistrar {
838
838
  this.changeDetectionState.workspaceLocalLatestRevisionState.buildEntityHashesIndex(
839
839
  entities,
840
840
  LogEvent.create(
841
- CHANGE_DETECTION_EVENT.CHANGE_DETECTION_LOCAL_HASHES_INDEX_BUILT,
841
+ CHANGE_DETECTION_EVENT.CHANGE_DETECTION_BUILD_LOCAL_HASHES_INDEX__SUCCESS,
842
842
  ),
843
843
  ),
844
844
  );
@@ -879,7 +879,7 @@ export class EditorStore implements CommandRegistrar {
879
879
  this.changeDetectionState.workspaceLocalLatestRevisionState.buildEntityHashesIndex(
880
880
  entities,
881
881
  LogEvent.create(
882
- CHANGE_DETECTION_EVENT.CHANGE_DETECTION_LOCAL_HASHES_INDEX_BUILT,
882
+ CHANGE_DETECTION_EVENT.CHANGE_DETECTION_BUILD_LOCAL_HASHES_INDEX__SUCCESS,
883
883
  ),
884
884
  ),
885
885
 
@@ -892,7 +892,9 @@ export class EditorStore implements CommandRegistrar {
892
892
  this.changeDetectionState.computeAggregatedProjectLatestChanges(true),
893
893
  ]);
894
894
  this.applicationStore.log.info(
895
- LogEvent.create(CHANGE_DETECTION_EVENT.CHANGE_DETECTION_RESTARTED),
895
+ LogEvent.create(
896
+ CHANGE_DETECTION_EVENT.CHANGE_DETECTION_RESTART__SUCCESS,
897
+ ),
896
898
  '[ASNYC]',
897
899
  );
898
900
  // ======= FINISHED (RE)START CHANGE DETECTION =======
@@ -32,6 +32,7 @@ type EmbeddedQueryBuilderConfiguration = {
32
32
  setupQueryBuilderState: () => QueryBuilderState;
33
33
  disableCompile?: boolean | undefined;
34
34
  actionConfigs: EmbeddedQueryBuilderActionConfiguration[];
35
+ applicationContext: string;
35
36
  };
36
37
 
37
38
  export class EmbeddedQueryBuilderState {
@@ -15,6 +15,14 @@
15
15
  */
16
16
 
17
17
  export enum LEGEND_STUDIO_APP_EVENT {
18
+ COMPILE_GRAPH__LAUNCH = 'editor.compilation.compile-graph.launch',
19
+ COMPILE_TEXT__LAUNCH = 'editor.compilation.compile-text.launch',
20
+ TEST_DATA_GENERATION__LAUNCH = 'editor.test.test-data-generation.launch',
21
+
22
+ TEXT_MODE_COMPILATION__SUCCESS = 'editor.text-mode.compilation.success',
23
+ FORM_MODE_COMPILATION__SUCCESS = 'editor.form-mode.compilation.success',
24
+ TEST_DATA_GENERATION__SUCCESS = 'editor.test.test-data-generation.success',
25
+
18
26
  // FAILURE
19
27
  // TODO: consider to spliting all of these generic errors into more specific events
20
28
  GENERIC_FAILURE = 'application.failure.generic',
@@ -31,8 +39,8 @@ export enum LEGEND_STUDIO_APP_EVENT {
31
39
  // TODO: consider to split this generic errors into more specific events
32
40
  SDLC_MANAGER_FAILURE = 'sdlc.manager.failure',
33
41
 
34
- WORKSPACE_UPDATED = 'sdlc.workspace-update.success',
35
- WORKSPACE_LOCAL_CHANGES_PUSHED = 'sdlc.local-changes-push.success',
42
+ UPDATE_WORKSPACE__SUCCESS = 'sdlc.workspace-update.success',
43
+ PUSH_LOCAL_CHANGES__SUCCESS = 'sdlc.local-changes-push.success',
36
44
 
37
45
  // Depot
38
46
  // TODO: consider to split this generic errors into more specific events
@@ -40,10 +40,19 @@ export enum LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY {
40
40
  FUNCTION_EDITOR = 'studio.editor.function-editor',
41
41
 
42
42
  MAPPING_EDITOR = 'studio.editor.mapping-editor',
43
+ CLASS_MAPPING_EDITOR = 'studio.editor.mapping-editor.class-mapping-editor',
44
+ OPERATION_CLASS_MAPPING_EDITOR = 'studio.editor.mapping-editor.operation-class-mapping-editor',
45
+ ENUMERATION_MAPPING_EDITOR = 'studio.editor.mapping-editor.enumeration-mapping-editor',
46
+ MAPPING_EXECUTION_EDITOR = 'studio.editor.mapping-editor.execution-editor',
47
+ MAPPING_TEST_EDITOR = 'studio.editor.mapping-editor.test-editor',
48
+
43
49
  RUNTIME_EDITOR = 'studio.editor.runtime-editor',
50
+
44
51
  CONNECTION_EDITOR = 'studio.editor.connection-editor',
52
+ DATABASE_BUILDER = 'studio.editor.connection-editor.database-builder',
45
53
 
46
54
  SERVICE_EDITOR = 'studio.editor.service-editor',
55
+ SERVICE_EDITOR_EXECUTION = 'studio.editor.service-editor.execution',
47
56
  SERVICE_EDITOR_TEST = 'studio.editor.service-editor.test',
48
57
 
49
58
  DATA_ELEMENT_EDITOR = 'studio.editor.data-element-editor',
@@ -29,6 +29,7 @@ import {
29
29
  ActionAlertType,
30
30
  ApplicationTelemetry,
31
31
  matchPath,
32
+ APPLICATION_EVENT,
32
33
  } from '@finos/legend-application';
33
34
  import {
34
35
  action,
@@ -46,20 +47,18 @@ import type { LegendStudioApplicationConfig } from '../application/LegendStudioA
46
47
  import { LegendStudioEventService } from './LegendStudioEventService.js';
47
48
  import { LEGEND_STUDIO_SDLC_BYPASSED_ROUTE_PATTERN } from './LegendStudioRouter.js';
48
49
 
49
- const UNKNOWN_USER_ID = '(unknown)';
50
-
51
50
  export type LegendStudioApplicationStore = ApplicationStore<
52
51
  LegendStudioApplicationConfig,
53
52
  LegendStudioPluginManager
54
53
  >;
55
54
 
56
55
  export class LegendStudioBaseStore {
57
- applicationStore: LegendStudioApplicationStore;
58
- sdlcServerClient: SDLCServerClient;
59
- depotServerClient: DepotServerClient;
60
- pluginManager: LegendStudioPluginManager;
56
+ readonly applicationStore: LegendStudioApplicationStore;
57
+ readonly sdlcServerClient: SDLCServerClient;
58
+ readonly depotServerClient: DepotServerClient;
59
+ readonly pluginManager: LegendStudioPluginManager;
61
60
 
62
- initState = ActionState.create();
61
+ readonly initState = ActionState.create();
63
62
 
64
63
  isSDLCAuthorized: boolean | undefined = false;
65
64
  SDLCServerTermsOfServicesUrlsToView: string[] = [];
@@ -93,9 +92,7 @@ export class LegendStudioBaseStore {
93
92
 
94
93
  *initialize(): GeneratorFn<void> {
95
94
  if (!this.initState.isInInitialState) {
96
- this.applicationStore.notifyIllegalState(
97
- 'Studio store is re-initialized',
98
- );
95
+ this.applicationStore.notifyIllegalState('Base store is re-initialized');
99
96
  return;
100
97
  }
101
98
  this.initState.inProgress();
@@ -111,29 +108,32 @@ export class LegendStudioBaseStore {
111
108
  // setup SDLC server client
112
109
  yield flowResult(this.initializeSDLCServerClient());
113
110
 
114
- let currentUserID = UNKNOWN_USER_ID;
115
111
  try {
116
112
  const currentUser = User.serialization.fromJson(
117
113
  (yield this.sdlcServerClient.getCurrentUser()) as PlainObject<User>,
118
114
  );
119
115
  this.sdlcServerClient.setCurrentUser(currentUser);
120
- currentUserID = currentUser.userId;
116
+ this.applicationStore.setCurrentUser(currentUser.userId);
121
117
  } catch (error) {
122
118
  assertErrorThrown(error);
123
119
  this.applicationStore.log.error(
124
- LogEvent.create(LEGEND_STUDIO_APP_EVENT.SDLC_MANAGER_FAILURE),
120
+ LogEvent.create(
121
+ APPLICATION_EVENT.APPLICATION_IDENTITY_AUTO_FETCH__FAILURE,
122
+ ),
125
123
  error,
126
124
  );
127
125
  this.applicationStore.notifyWarning(error.message);
128
126
  }
129
127
 
130
128
  // setup telemetry service
131
- this.applicationStore.telemetryService.setUserId(currentUserID);
129
+ this.applicationStore.telemetryService.setUserId(
130
+ this.applicationStore.currentUser,
131
+ );
132
132
  } else {
133
133
  this.isSDLCAuthorized = undefined;
134
134
  }
135
135
 
136
- ApplicationTelemetry.logEvent_ApplicationInitialized(
136
+ ApplicationTelemetry.logEvent_ApplicationInitializationSucceeded(
137
137
  this.applicationStore.telemetryService,
138
138
  {
139
139
  application: {
@@ -150,6 +150,7 @@ export class LegendStudioBaseStore {
150
150
  },
151
151
  },
152
152
  );
153
+
153
154
  LegendStudioEventService.create(
154
155
  this.applicationStore.eventService,
155
156
  ).notify_ApplicationLoaded();
@@ -157,6 +158,14 @@ export class LegendStudioBaseStore {
157
158
  this.initState.complete();
158
159
  }
159
160
 
161
+ get needsToAcceptSDLCServerTermsOfServices(): boolean {
162
+ return Boolean(this.SDLCServerTermsOfServicesUrlsToView.length);
163
+ }
164
+
165
+ dismissSDLCServerTermsOfServicesAlert(): void {
166
+ this.SDLCServerTermsOfServicesUrlsToView = [];
167
+ }
168
+
160
169
  private *initializeSDLCServerClient(): GeneratorFn<void> {
161
170
  try {
162
171
  this.isSDLCAuthorized =
@@ -245,12 +254,4 @@ export class LegendStudioBaseStore {
245
254
  }
246
255
  }
247
256
  }
248
-
249
- get needsToAcceptSDLCServerTermsOfServices(): boolean {
250
- return Boolean(this.SDLCServerTermsOfServicesUrlsToView.length);
251
- }
252
-
253
- dismissSDLCServerTermsOfServicesAlert(): void {
254
- this.SDLCServerTermsOfServicesUrlsToView = [];
255
- }
256
257
  }
@@ -236,7 +236,9 @@ export const BLANK_SERVICE_SNIPPET = `Service \${1:new::NewService}
236
236
  documentation: \${4:'documentation'};
237
237
  autoActivateUpdates: \${5:true};
238
238
  execution: \${6:}
239
- test: \${7:}
239
+ testSuites:
240
+ [
241
+ ]
240
242
  }`;
241
243
 
242
244
  export const SERVICE_WITH_SINGLE_EXECUTION_SNIPPET = `Service \${1:new::NewService}
@@ -261,13 +263,9 @@ export const SERVICE_WITH_SINGLE_EXECUTION_SNIPPET = `Service \${1:new::NewServi
261
263
  // example of using runtime pointer
262
264
  // runtime: model::SomeRuntime;
263
265
  }
264
- test: Single
265
- {
266
- data: 'data'; // this test data will be shared across tests
267
- asserts:
268
- [
269
- ];
270
- }
266
+ testSuites:
267
+ [
268
+ ]
271
269
  }`;
272
270
 
273
271
  export const SERVICE_WITH_MULTI_EXECUTION_SNIPPET = `Service \${1:new::NewService}
@@ -301,20 +299,9 @@ export const SERVICE_WITH_MULTI_EXECUTION_SNIPPET = `Service \${1:new::NewServic
301
299
  // runtime: model::SomeRuntime;
302
300
  // }
303
301
  }
304
- test: Multi
305
- {
306
- tests['key_1']:
307
- {
308
- data: 'data';
309
- asserts:
310
- [
311
- ];
312
- }
313
- // tests['key_2']:
314
- // {
315
- // data: 'data';
316
- // }
317
- }
302
+ testSuites:
303
+ [
304
+ ]
318
305
  }`;
319
306
 
320
307
  // ------------------------------------- Generation -------------------------------------
@@ -31,6 +31,6 @@ export class LegendStudioEventService {
31
31
  }
32
32
 
33
33
  notify_ApplicationLoaded(): void {
34
- this.eventService.notify(APPLICATION_EVENT.APPLICATION_LOADED, {});
34
+ this.eventService.notify(APPLICATION_EVENT.APPLICATION_LOAD__SUCCESS, {});
35
35
  }
36
36
  }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import type { GraphManagerOperationReport } from '@finos/legend-graph';
18
+ import type { TelemetryService } from '@finos/legend-shared';
19
+ import { LEGEND_STUDIO_APP_EVENT } from './LegendStudioAppEvent.js';
20
+
21
+ type Compilation_TelemetryData = GraphManagerOperationReport & {
22
+ dependenciesCount: number;
23
+ };
24
+
25
+ type TestDataGeneration_TelemetryData = GraphManagerOperationReport & {
26
+ dependenciesCount: number;
27
+ };
28
+
29
+ export class LegendStudioTelemetry {
30
+ static logEvent_GraphCompilationLaunched(
31
+ telemetryService: TelemetryService,
32
+ ): void {
33
+ telemetryService.logEvent(
34
+ LEGEND_STUDIO_APP_EVENT.COMPILE_GRAPH__LAUNCH,
35
+ {},
36
+ );
37
+ }
38
+
39
+ static logEvent_TextCompilationLaunched(
40
+ telemetryService: TelemetryService,
41
+ ): void {
42
+ telemetryService.logEvent(LEGEND_STUDIO_APP_EVENT.COMPILE_TEXT__LAUNCH, {});
43
+ }
44
+
45
+ static logEvent_TestDataGenerationLaunched(
46
+ telemetryService: TelemetryService,
47
+ ): void {
48
+ telemetryService.logEvent(
49
+ LEGEND_STUDIO_APP_EVENT.TEST_DATA_GENERATION__LAUNCH,
50
+ {},
51
+ );
52
+ }
53
+
54
+ static logEvent_GraphCompilationSucceeded(
55
+ telemetryService: TelemetryService,
56
+ data: Compilation_TelemetryData,
57
+ ): void {
58
+ telemetryService.logEvent(
59
+ LEGEND_STUDIO_APP_EVENT.FORM_MODE_COMPILATION__SUCCESS,
60
+ data,
61
+ );
62
+ }
63
+
64
+ static logEvent_TextCompilationSucceeded(
65
+ telemetryService: TelemetryService,
66
+ data: Compilation_TelemetryData,
67
+ ): void {
68
+ telemetryService.logEvent(
69
+ LEGEND_STUDIO_APP_EVENT.TEXT_MODE_COMPILATION__SUCCESS,
70
+ data,
71
+ );
72
+ }
73
+
74
+ static logEvent_TestDataGenerationSucceeded(
75
+ telemetryService: TelemetryService,
76
+ data: TestDataGeneration_TelemetryData,
77
+ ): void {
78
+ telemetryService.logEvent(
79
+ LEGEND_STUDIO_APP_EVENT.TEST_DATA_GENERATION__SUCCESS,
80
+ data,
81
+ );
82
+ }
83
+ }