@finos/legend-application-query 13.8.53 → 13.8.54

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 (73) hide show
  1. package/lib/__lib__/LegendQueryAgentChatTelemetryHelper.d.ts +23 -4
  2. package/lib/__lib__/LegendQueryAgentChatTelemetryHelper.d.ts.map +1 -1
  3. package/lib/__lib__/LegendQueryAgentChatTelemetryHelper.js +15 -10
  4. package/lib/__lib__/LegendQueryAgentChatTelemetryHelper.js.map +1 -1
  5. package/lib/__lib__/LegendQueryEvent.d.ts +13 -0
  6. package/lib/__lib__/LegendQueryEvent.d.ts.map +1 -1
  7. package/lib/__lib__/LegendQueryEvent.js +16 -0
  8. package/lib/__lib__/LegendQueryEvent.js.map +1 -1
  9. package/lib/__lib__/LegendQueryNavigation.d.ts +2 -2
  10. package/lib/__lib__/LegendQueryNavigation.d.ts.map +1 -1
  11. package/lib/__lib__/LegendQueryNavigation.js +2 -2
  12. package/lib/__lib__/LegendQueryNavigation.js.map +1 -1
  13. package/lib/__lib__/LegendQueryTelemetryHelper.d.ts +54 -0
  14. package/lib/__lib__/LegendQueryTelemetryHelper.d.ts.map +1 -1
  15. package/lib/__lib__/LegendQueryTelemetryHelper.js +45 -0
  16. package/lib/__lib__/LegendQueryTelemetryHelper.js.map +1 -1
  17. package/lib/application/LegendQueryApplicationConfig.d.ts +2 -4
  18. package/lib/application/LegendQueryApplicationConfig.d.ts.map +1 -1
  19. package/lib/application/LegendQueryApplicationConfig.js +2 -5
  20. package/lib/application/LegendQueryApplicationConfig.js.map +1 -1
  21. package/lib/components/Core_LegendQueryApplicationPlugin.d.ts.map +1 -1
  22. package/lib/components/Core_LegendQueryApplicationPlugin.js +8 -1
  23. package/lib/components/Core_LegendQueryApplicationPlugin.js.map +1 -1
  24. package/lib/components/QueryEditor.d.ts.map +1 -1
  25. package/lib/components/QueryEditor.js +21 -6
  26. package/lib/components/QueryEditor.js.map +1 -1
  27. package/lib/components/data-space/DataSpaceInfo.js +6 -6
  28. package/lib/components/data-space/DataSpaceInfo.js.map +1 -1
  29. package/lib/components/data-space/DataSpaceQuerySetup.d.ts.map +1 -1
  30. package/lib/components/data-space/DataSpaceQuerySetup.js +19 -0
  31. package/lib/components/data-space/DataSpaceQuerySetup.js.map +1 -1
  32. package/lib/components/data-space/LegendQueryDataSpaceQueryBuilder.d.ts.map +1 -1
  33. package/lib/components/data-space/LegendQueryDataSpaceQueryBuilder.js +19 -0
  34. package/lib/components/data-space/LegendQueryDataSpaceQueryBuilder.js.map +1 -1
  35. package/lib/index.css +1 -1
  36. package/lib/light-mode.css +1 -1
  37. package/lib/package.json +1 -1
  38. package/lib/stores/QueryEditorStore.d.ts +20 -0
  39. package/lib/stores/QueryEditorStore.d.ts.map +1 -1
  40. package/lib/stores/QueryEditorStore.js +72 -3
  41. package/lib/stores/QueryEditorStore.js.map +1 -1
  42. package/lib/stores/QueryProductionizerSetupStore.d.ts.map +1 -1
  43. package/lib/stores/QueryProductionizerSetupStore.js +13 -0
  44. package/lib/stores/QueryProductionizerSetupStore.js.map +1 -1
  45. package/lib/stores/QuerySetupStore.d.ts.map +1 -1
  46. package/lib/stores/QuerySetupStore.js +1 -0
  47. package/lib/stores/QuerySetupStore.js.map +1 -1
  48. package/lib/stores/__test-utils__/LegendQueryApplicationTestUtils.d.ts.map +1 -1
  49. package/lib/stores/__test-utils__/LegendQueryApplicationTestUtils.js +0 -3
  50. package/lib/stores/__test-utils__/LegendQueryApplicationTestUtils.js.map +1 -1
  51. package/lib/stores/data-cube/ExistingQueryDataCubeViewer.d.ts.map +1 -1
  52. package/lib/stores/data-cube/ExistingQueryDataCubeViewer.js +1 -0
  53. package/lib/stores/data-cube/ExistingQueryDataCubeViewer.js.map +1 -1
  54. package/lib/stores/data-space/DataSpaceQueryBuilderHelper.d.ts.map +1 -1
  55. package/lib/stores/data-space/DataSpaceQueryBuilderHelper.js +5 -1
  56. package/lib/stores/data-space/DataSpaceQueryBuilderHelper.js.map +1 -1
  57. package/package.json +13 -13
  58. package/src/__lib__/LegendQueryAgentChatTelemetryHelper.ts +66 -10
  59. package/src/__lib__/LegendQueryEvent.ts +18 -0
  60. package/src/__lib__/LegendQueryNavigation.ts +4 -4
  61. package/src/__lib__/LegendQueryTelemetryHelper.ts +157 -0
  62. package/src/application/LegendQueryApplicationConfig.ts +8 -12
  63. package/src/components/Core_LegendQueryApplicationPlugin.tsx +26 -2
  64. package/src/components/QueryEditor.tsx +30 -2
  65. package/src/components/data-space/DataSpaceInfo.tsx +8 -8
  66. package/src/components/data-space/DataSpaceQuerySetup.tsx +25 -0
  67. package/src/components/data-space/LegendQueryDataSpaceQueryBuilder.tsx +25 -0
  68. package/src/stores/QueryEditorStore.ts +91 -9
  69. package/src/stores/QueryProductionizerSetupStore.ts +16 -0
  70. package/src/stores/QuerySetupStore.ts +1 -0
  71. package/src/stores/__test-utils__/LegendQueryApplicationTestUtils.ts +0 -3
  72. package/src/stores/data-cube/ExistingQueryDataCubeViewer.ts +1 -0
  73. package/src/stores/data-space/DataSpaceQueryBuilderHelper.ts +6 -1
@@ -99,6 +99,7 @@ import {
99
99
  HttpStatus,
100
100
  isValidUrl,
101
101
  NetworkClientError,
102
+ StopWatch,
102
103
  } from '@finos/legend-shared';
103
104
  import { DSL_DATA_SPACE_LEGEND_QUERY_DOCUMENTATION_KEY } from '../__lib__/DSL_DataSpace_LegendQueryDocumentation.js';
104
105
  import { LegendQueryInfo } from './LegendQueryAppInfo.js';
@@ -188,22 +189,33 @@ const CreateQueryDialog = observer(() => {
188
189
  if (!aiSuggester || !editorStore.queryBuilderState || !legendAIUrl) {
189
190
  return;
190
191
  }
192
+ const sourceInfo = editorStore.getSourceInfo();
191
193
  LegendQueryAgentChatTelemetryHelper.logEvent_QueryAISuggestLaunched(
192
194
  applicationStore.telemetryService,
195
+ { sourceInfo },
193
196
  );
194
197
  setIsSuggestingWithAI(true);
195
198
  setAISuggestion(undefined);
199
+ const stopWatch = new StopWatch();
196
200
  try {
197
201
  const request = await buildAISuggestionRequest(
198
202
  editorStore.queryBuilderState,
199
203
  );
200
204
  const suggestion = await aiSuggester(request, legendAIUrl);
201
205
  setAISuggestion(suggestion);
206
+ LegendQueryAgentChatTelemetryHelper.logEvent_QueryAISuggestSucceeded(
207
+ applicationStore.telemetryService,
208
+ { sourceInfo, durationMs: stopWatch.elapsed },
209
+ );
202
210
  } catch (error) {
203
211
  assertErrorThrown(error);
204
212
  LegendQueryAgentChatTelemetryHelper.logEvent_QueryAISuggestFailure(
205
213
  applicationStore.telemetryService,
206
- error.message,
214
+ {
215
+ sourceInfo,
216
+ durationMs: stopWatch.elapsed,
217
+ errorMessage: error.message,
218
+ },
207
219
  );
208
220
  if (
209
221
  error instanceof NetworkClientError &&
@@ -228,6 +240,7 @@ const CreateQueryDialog = observer(() => {
228
240
  }
229
241
  LegendQueryAgentChatTelemetryHelper.logEvent_QueryAISuggestApplied(
230
242
  applicationStore.telemetryService,
243
+ { sourceInfo: editorStore.getSourceInfo() },
231
244
  );
232
245
  createQueryState.setQueryName(aiSuggestion.title);
233
246
  createQueryState.setQueryDescription(aiSuggestion.description);
@@ -236,6 +249,7 @@ const CreateQueryDialog = observer(() => {
236
249
  const discardAISuggestion = (): void => {
237
250
  LegendQueryAgentChatTelemetryHelper.logEvent_QueryAISuggestDiscarded(
238
251
  applicationStore.telemetryService,
252
+ { sourceInfo: editorStore.getSourceInfo() },
239
253
  );
240
254
  setAISuggestion(undefined);
241
255
  };
@@ -510,8 +524,14 @@ const RenameQueryDialog = observer(
510
524
  ) {
511
525
  return;
512
526
  }
527
+ const sourceInfo = existingEditorStore.getSourceInfo();
528
+ LegendQueryAgentChatTelemetryHelper.logEvent_QueryAISuggestLaunched(
529
+ applicationStore.telemetryService,
530
+ { sourceInfo },
531
+ );
513
532
  setIsSuggestingWithAI(true);
514
533
  setAISuggestion(undefined);
534
+ const stopWatch = new StopWatch();
515
535
  try {
516
536
  const request = await buildAISuggestionRequest(
517
537
  existingEditorStore.queryBuilderState,
@@ -519,11 +539,19 @@ const RenameQueryDialog = observer(
519
539
  );
520
540
  const suggestion = await aiSuggester(request, legendAIUrl);
521
541
  setAISuggestion(suggestion);
542
+ LegendQueryAgentChatTelemetryHelper.logEvent_QueryAISuggestSucceeded(
543
+ applicationStore.telemetryService,
544
+ { sourceInfo, durationMs: stopWatch.elapsed },
545
+ );
522
546
  } catch (error) {
523
547
  assertErrorThrown(error);
524
548
  LegendQueryAgentChatTelemetryHelper.logEvent_QueryAISuggestFailure(
525
549
  applicationStore.telemetryService,
526
- error.message,
550
+ {
551
+ sourceInfo,
552
+ durationMs: stopWatch.elapsed,
553
+ errorMessage: error.message,
554
+ },
527
555
  );
528
556
  if (
529
557
  error instanceof NetworkClientError &&
@@ -34,8 +34,8 @@ import {
34
34
  DataSpaceSupportEmail,
35
35
  } from '@finos/legend-extension-dsl-data-space/graph';
36
36
  import {
37
+ EXTERNAL_APPLICATION_NAVIGATION__generateMarketplaceDataspaceViewUrl,
37
38
  EXTERNAL_APPLICATION_NAVIGATION__generateStudioSDLCProjectViewUrl,
38
- EXTERNAL_APPLICATION_NAVIGATION__generateTaxonomyDataspaceViewUrl,
39
39
  } from '../../__lib__/LegendQueryNavigation.js';
40
40
  import { flowResult } from 'mobx';
41
41
  import { assertErrorThrown, guaranteeType } from '@finos/legend-shared';
@@ -134,14 +134,14 @@ export const QueryEditorDataspaceInfoModal = observer(
134
134
  const storePath =
135
135
  connection?.store?.value.path ?? dataSpaceMedata?.storePath;
136
136
 
137
- const openInTaxonomy = (): void => {
137
+ const openInMarketplace = (): void => {
138
138
  if (
139
139
  projectInfo &&
140
- editorStore.applicationStore.config.taxonomyApplicationUrl
140
+ editorStore.applicationStore.config.marketplaceApplicationUrl
141
141
  ) {
142
142
  editorStore.applicationStore.navigationService.navigator.visitAddress(
143
- EXTERNAL_APPLICATION_NAVIGATION__generateTaxonomyDataspaceViewUrl(
144
- editorStore.applicationStore.config.taxonomyApplicationUrl,
143
+ EXTERNAL_APPLICATION_NAVIGATION__generateMarketplaceDataspaceViewUrl(
144
+ editorStore.applicationStore.config.marketplaceApplicationUrl,
145
145
  projectInfo.groupId,
146
146
  projectInfo.artifactId,
147
147
  projectInfo.versionId,
@@ -176,11 +176,11 @@ export const QueryEditorDataspaceInfoModal = observer(
176
176
  title="Close"
177
177
  disabled={
178
178
  !(
179
- editorStore.applicationStore.config.taxonomyApplicationUrl &&
180
- projectInfo
179
+ editorStore.applicationStore.config
180
+ .marketplaceApplicationUrl && projectInfo
181
181
  )
182
182
  }
183
- onClick={openInTaxonomy}
183
+ onClick={openInMarketplace}
184
184
  >
185
185
  Open Data Space
186
186
  </button>
@@ -38,6 +38,7 @@ import type {
38
38
  } from '../../stores/data-space/DataProductSelectorState.js';
39
39
  import { flowResult } from 'mobx';
40
40
  import { DepotEntityWithOrigin } from '@finos/legend-storage';
41
+ import { LegendQueryTelemetryHelper } from '../../__lib__/LegendQueryTelemetryHelper.js';
41
42
 
42
43
  // Custom format function to handle both DataSpace and DataProduct options
43
44
  const formatDataSpaceOrProductOptionLabel = (
@@ -90,8 +91,32 @@ const DataProductQuerySetupSetupPanelContent = observer(
90
91
  queryBuilderState.queryAgentChatState?.abort();
91
92
  const value = option?.value;
92
93
  if (value instanceof ResolvedDataSpaceEntityWithOrigin) {
94
+ LegendQueryTelemetryHelper.logEvent_ChangeDataSpace(
95
+ applicationStore.telemetryService,
96
+ {
97
+ sourceInfo: queryBuilderState.sourceInfo,
98
+ to: {
99
+ groupId: value.origin?.groupId,
100
+ artifactId: value.origin?.artifactId,
101
+ versionId: value.origin?.versionId,
102
+ path: value.path,
103
+ },
104
+ },
105
+ );
93
106
  queryBuilderState.changeHandlers.onDataSpaceChange(value);
94
107
  } else if (value instanceof DepotEntityWithOrigin) {
108
+ LegendQueryTelemetryHelper.logEvent_ChangeDataProduct(
109
+ applicationStore.telemetryService,
110
+ {
111
+ sourceInfo: queryBuilderState.sourceInfo,
112
+ to: {
113
+ groupId: value.origin?.groupId,
114
+ artifactId: value.origin?.artifactId,
115
+ versionId: value.origin?.versionId,
116
+ path: value.path,
117
+ },
118
+ },
119
+ );
95
120
  queryBuilderState.changeHandlers.onDataProductChange(value);
96
121
  }
97
122
  };
@@ -65,6 +65,7 @@ import { LakehouseRuntimeConfigModal } from '../shared/LakehouseRuntimeConfigMod
65
65
  import type { DataProductWithLegacyOption } from '../../stores/data-space/DataProductSelectorState.js';
66
66
  import { formatDataProductOrSpaceOptionLabel } from '../shared/LegendQueryDataProductOptionLabel.js';
67
67
  import type { LegendQueryDataSpaceQueryBuilderState } from '../../stores/data-space/query-builder/LegendQueryDataSpaceQueryBuilderState.js';
68
+ import { LegendQueryTelemetryHelper } from '../../__lib__/LegendQueryTelemetryHelper.js';
68
69
 
69
70
  const resolveExecutionContextRuntimes = (
70
71
  queryBuilderState: LegendQueryDataSpaceQueryBuilderState,
@@ -117,11 +118,35 @@ const LegendQueryDataSpaceQueryBuilderSetupPanelContent = observer(
117
118
  const value = option.value;
118
119
  if (value instanceof ResolvedDataSpaceEntityWithOrigin) {
119
120
  queryBuilderState.queryAgentChatState?.abort();
121
+ LegendQueryTelemetryHelper.logEvent_ChangeDataSpace(
122
+ applicationStore.telemetryService,
123
+ {
124
+ sourceInfo: queryBuilderState.sourceInfo,
125
+ to: {
126
+ groupId: value.origin?.groupId,
127
+ artifactId: value.origin?.artifactId,
128
+ versionId: value.origin?.versionId,
129
+ path: value.path,
130
+ },
131
+ },
132
+ );
120
133
  queryBuilderState
121
134
  .onDataSpaceChange(value)
122
135
  .catch(queryBuilderState.applicationStore.alertUnhandledError);
123
136
  } else if (value instanceof DepotEntityWithOrigin) {
124
137
  queryBuilderState.queryAgentChatState?.abort();
138
+ LegendQueryTelemetryHelper.logEvent_ChangeDataProduct(
139
+ applicationStore.telemetryService,
140
+ {
141
+ sourceInfo: queryBuilderState.sourceInfo,
142
+ to: {
143
+ groupId: value.origin?.groupId,
144
+ artifactId: value.origin?.artifactId,
145
+ versionId: value.origin?.versionId,
146
+ path: value.path,
147
+ },
148
+ },
149
+ );
125
150
  queryBuilderState.onDataProductChange(value);
126
151
  }
127
152
  };
@@ -630,6 +630,7 @@ export abstract class QueryEditorStore {
630
630
  clientConfig: {
631
631
  baseUrl: this.applicationStore.config.engineServerUrl,
632
632
  queryBaseUrl: this.applicationStore.config.engineQueryServerUrl,
633
+ queryClientName: this.applicationStore.config.engineQueryClientName,
633
634
  enableCompression: true,
634
635
  useCookieAuthOnly:
635
636
  this.applicationStore.config.engineUseCookieAuthOnly,
@@ -641,10 +642,22 @@ export abstract class QueryEditorStore {
641
642
  );
642
643
 
643
644
  yield this.setUpEditorState();
644
- yield flowResult(this.buildGraph());
645
- this.queryBuilderState = (yield this.initializeQueryBuilderState(
646
- stopWatch,
647
- )) as QueryBuilderState;
645
+ try {
646
+ yield flowResult(this.buildGraph());
647
+ } catch (error) {
648
+ assertErrorThrown(error);
649
+ this.logBuildGraphFailure(error);
650
+ throw error;
651
+ }
652
+ try {
653
+ this.queryBuilderState = (yield this.initializeQueryBuilderState(
654
+ stopWatch,
655
+ )) as QueryBuilderState;
656
+ } catch (error) {
657
+ assertErrorThrown(error);
658
+ this.logInitializeQueryBuilderStateFailure(error);
659
+ throw error;
660
+ }
648
661
  this.queryLoaderState.initialize(this.queryBuilderState);
649
662
  this.initState.pass();
650
663
  // the canonical "a query builder is loaded" signal, emitted for every
@@ -755,6 +768,33 @@ export abstract class QueryEditorStore {
755
768
  );
756
769
  }
757
770
 
771
+ /**
772
+ * Failure counterpart of {@link logBuildGraphMetrics}. Fires when the graph
773
+ * build stage of `initialize()` throws. Base emits with only the error
774
+ * dimensions — {@link ExistingQueryEditorStore} overrides to attach the
775
+ * loaded query's identity, mirroring how its success override attaches
776
+ * identity too.
777
+ */
778
+ logBuildGraphFailure(error: Error): void {
779
+ LegendQueryTelemetryHelper.logEvent_GraphInitializationFailed(
780
+ this.applicationStore.telemetryService,
781
+ buildTelemetryErrorFields(error),
782
+ );
783
+ }
784
+
785
+ /**
786
+ * Failure hook for the query builder state initialization stage of
787
+ * `initialize()`. Default is a no-op: creator routes already report a
788
+ * failure here through `INITIALIZE_QUERY_CREATOR__FAILURE`, so emitting a
789
+ * second event would double-count. {@link ExistingQueryEditorStore}
790
+ * overrides this to emit `VIEW_QUERY__FAILURE`, the counterpart of the
791
+ * `VIEW_QUERY__SUCCESS` its `initializeQueryBuilderState` fires on the
792
+ * happy path.
793
+ */
794
+ logInitializeQueryBuilderStateFailure(_error: Error): void {
795
+ // no-op by default; overrides on saved-query stores emit failure telemetry
796
+ }
797
+
758
798
  *buildFullGraph(): GeneratorFn<void> {
759
799
  const stopWatch = new StopWatch();
760
800
 
@@ -2088,6 +2128,32 @@ export class ExistingQueryEditorStore extends QueryEditorStore {
2088
2128
  );
2089
2129
  }
2090
2130
 
2131
+ override logBuildGraphFailure(error: Error): void {
2132
+ // attach whatever identity is already known — `_lightQuery` is only
2133
+ // populated once the query resolves, which may not have happened yet, so
2134
+ // the route id is the only guaranteed field
2135
+ const currentQuery = this._lightQuery;
2136
+ LegendQueryTelemetryHelper.logEvent_GraphInitializationFailed(
2137
+ this.applicationStore.telemetryService,
2138
+ {
2139
+ ...buildTelemetryErrorFields(error),
2140
+ ...(currentQuery ? buildQueryIdentity(currentQuery) : {}),
2141
+ },
2142
+ );
2143
+ }
2144
+
2145
+ override logInitializeQueryBuilderStateFailure(error: Error): void {
2146
+ const currentQuery = this._lightQuery;
2147
+ LegendQueryTelemetryHelper.logEvent_ViewQueryFailed(
2148
+ this.applicationStore.telemetryService,
2149
+ {
2150
+ queryId: this.queryId,
2151
+ ...(currentQuery ? buildQueryIdentity(currentQuery) : {}),
2152
+ ...buildTelemetryErrorFields(error),
2153
+ },
2154
+ );
2155
+ }
2156
+
2091
2157
  override getOpenedFrom(): QUERY_BUILDER_OPENED_FROM {
2092
2158
  return QUERY_BUILDER_OPENED_FROM.QUERY_SAVED;
2093
2159
  }
@@ -2620,11 +2686,27 @@ export class ExistingQueryEditorStore extends QueryEditorStore {
2620
2686
  }
2621
2687
  }
2622
2688
 
2623
- queryBuilderState.initializeWithQuery(
2624
- existingQueryLambda,
2625
- defaultParameters,
2626
- query.gridConfig,
2627
- );
2689
+ try {
2690
+ queryBuilderState.initializeWithQuery(
2691
+ existingQueryLambda,
2692
+ defaultParameters,
2693
+ query.gridConfig,
2694
+ );
2695
+ } catch (error) {
2696
+ assertErrorThrown(error);
2697
+ // pair with `INITIALIZE_QUERY_STATE__SUCCESS` below — this is the tight
2698
+ // boundary that success wraps, so failure is reported here rather than
2699
+ // in the outer catch (which owns `VIEW_QUERY__FAILURE`)
2700
+ LegendQueryTelemetryHelper.logEvent_InitializeQueryStateFailed(
2701
+ this.applicationStore.telemetryService,
2702
+ {
2703
+ queryId: this.queryId,
2704
+ ...buildQueryIdentity(query),
2705
+ ...buildTelemetryErrorFields(error),
2706
+ },
2707
+ );
2708
+ throw error;
2709
+ }
2628
2710
  initailizeQueryStateReport.timings =
2629
2711
  this.applicationStore.timeService.finalizeTimingsRecord(
2630
2712
  initailizeQueryStateStopWatch,
@@ -26,6 +26,7 @@ import { EXTERNAL_APPLICATION_NAVIGATION__generateStudioProductionizeQueryUrl }
26
26
  import { BaseQuerySetupStore } from './QuerySetupStore.js';
27
27
  import { LegendQueryUserDataHelper } from '../__lib__/LegendQueryUserDataHelper.js';
28
28
  import { buildQueryLoaderLifecycleTelemetryHandlers } from '../__lib__/LegendQueryLifecycleTelemetry.js';
29
+ import { LegendQueryTelemetryHelper } from '../__lib__/LegendQueryTelemetryHelper.js';
29
30
  import { quantifyList } from '@finos/legend-shared';
30
31
 
31
32
  export class QueryProductionizerSetupStore extends BaseQuerySetupStore {
@@ -96,6 +97,21 @@ export class QueryProductionizerSetupStore extends BaseQuerySetupStore {
96
97
  prompt: 'Please do not close the application',
97
98
  showLoading: true,
98
99
  });
100
+ // emitted at the actual handoff to studio — the setup landing action
101
+ // that lands us on this route is upstream and may be abandoned before
102
+ // the user picks a query, so emitting here counts real launches only
103
+ LegendQueryTelemetryHelper.logEvent_ProductionizeQueryLaunched(
104
+ this.applicationStore.telemetryService,
105
+ {
106
+ query: {
107
+ id: selectedQuery.id,
108
+ name: selectedQuery.name,
109
+ groupId: selectedQuery.groupId,
110
+ artifactId: selectedQuery.artifactId,
111
+ versionId: selectedQuery.versionId,
112
+ },
113
+ },
114
+ );
99
115
  this.applicationStore.navigationService.navigator.goToAddress(
100
116
  EXTERNAL_APPLICATION_NAVIGATION__generateStudioProductionizeQueryUrl(
101
117
  matchingSDLCEntry.url,
@@ -80,6 +80,7 @@ export abstract class BaseQuerySetupStore {
80
80
  clientConfig: {
81
81
  baseUrl: this.applicationStore.config.engineServerUrl,
82
82
  queryBaseUrl: this.applicationStore.config.engineQueryServerUrl,
83
+ queryClientName: this.applicationStore.config.engineQueryClientName,
83
84
  enableCompression: true,
84
85
  useCookieAuthOnly:
85
86
  this.applicationStore.config.engineUseCookieAuthOnly,
@@ -30,9 +30,6 @@ const TEST_DATA__appConfig = {
30
30
  url: 'https://testStudioUrl',
31
31
  instances: [],
32
32
  },
33
- taxonomy: {
34
- url: 'https://testTaxonomyUrl',
35
- },
36
33
  };
37
34
 
38
35
  export const TEST__getTestLegendQueryApplicationConfig = (
@@ -71,6 +71,7 @@ export class ExistingQueryDataCubeEditorStore {
71
71
  clientConfig: {
72
72
  baseUrl: this.applicationStore.config.engineServerUrl,
73
73
  queryBaseUrl: this.applicationStore.config.engineQueryServerUrl,
74
+ queryClientName: this.applicationStore.config.engineQueryClientName,
74
75
  enableCompression: true,
75
76
  },
76
77
  },
@@ -22,6 +22,7 @@ import { EXTERNAL_APPLICATION_NAVIGATION__generateStudioSDLCProjectViewUrl } fro
22
22
  import type { LegendQueryApplicationStore } from '../LegendQueryBaseStore.js';
23
23
  import { parseProjectIdentifier } from '@finos/legend-storage';
24
24
  import { EXTERNAL_APPLICATION_NAVIGATION__generateStudioProjectViewUrl } from '@finos/legend-application';
25
+ import { LegendQueryTelemetryHelper } from '../../__lib__/LegendQueryTelemetryHelper.js';
25
26
 
26
27
  export const createViewProjectHandler =
27
28
  (applicationStore: LegendQueryApplicationStore) =>
@@ -30,7 +31,10 @@ export const createViewProjectHandler =
30
31
  artifactId: string,
31
32
  versionId: string,
32
33
  entityPath: string | undefined,
33
- ): void =>
34
+ ): void => {
35
+ LegendQueryTelemetryHelper.logEvent_QueryViewProjectLaunched(
36
+ applicationStore.telemetryService,
37
+ );
34
38
  applicationStore.navigationService.navigator.visitAddress(
35
39
  EXTERNAL_APPLICATION_NAVIGATION__generateStudioProjectViewUrl(
36
40
  applicationStore.config.studioApplicationUrl,
@@ -40,6 +44,7 @@ export const createViewProjectHandler =
40
44
  entityPath,
41
45
  ),
42
46
  );
47
+ };
43
48
 
44
49
  export const createViewSDLCProjectHandler =
45
50
  (