@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.
- package/lib/__lib__/LegendQueryAgentChatTelemetryHelper.d.ts +23 -4
- package/lib/__lib__/LegendQueryAgentChatTelemetryHelper.d.ts.map +1 -1
- package/lib/__lib__/LegendQueryAgentChatTelemetryHelper.js +15 -10
- package/lib/__lib__/LegendQueryAgentChatTelemetryHelper.js.map +1 -1
- package/lib/__lib__/LegendQueryEvent.d.ts +13 -0
- package/lib/__lib__/LegendQueryEvent.d.ts.map +1 -1
- package/lib/__lib__/LegendQueryEvent.js +16 -0
- package/lib/__lib__/LegendQueryEvent.js.map +1 -1
- package/lib/__lib__/LegendQueryNavigation.d.ts +2 -2
- package/lib/__lib__/LegendQueryNavigation.d.ts.map +1 -1
- package/lib/__lib__/LegendQueryNavigation.js +2 -2
- package/lib/__lib__/LegendQueryNavigation.js.map +1 -1
- package/lib/__lib__/LegendQueryTelemetryHelper.d.ts +54 -0
- package/lib/__lib__/LegendQueryTelemetryHelper.d.ts.map +1 -1
- package/lib/__lib__/LegendQueryTelemetryHelper.js +45 -0
- package/lib/__lib__/LegendQueryTelemetryHelper.js.map +1 -1
- package/lib/application/LegendQueryApplicationConfig.d.ts +2 -4
- package/lib/application/LegendQueryApplicationConfig.d.ts.map +1 -1
- package/lib/application/LegendQueryApplicationConfig.js +2 -5
- package/lib/application/LegendQueryApplicationConfig.js.map +1 -1
- package/lib/components/Core_LegendQueryApplicationPlugin.d.ts.map +1 -1
- package/lib/components/Core_LegendQueryApplicationPlugin.js +8 -1
- package/lib/components/Core_LegendQueryApplicationPlugin.js.map +1 -1
- package/lib/components/QueryEditor.d.ts.map +1 -1
- package/lib/components/QueryEditor.js +21 -6
- package/lib/components/QueryEditor.js.map +1 -1
- package/lib/components/data-space/DataSpaceInfo.js +6 -6
- package/lib/components/data-space/DataSpaceInfo.js.map +1 -1
- package/lib/components/data-space/DataSpaceQuerySetup.d.ts.map +1 -1
- package/lib/components/data-space/DataSpaceQuerySetup.js +19 -0
- package/lib/components/data-space/DataSpaceQuerySetup.js.map +1 -1
- package/lib/components/data-space/LegendQueryDataSpaceQueryBuilder.d.ts.map +1 -1
- package/lib/components/data-space/LegendQueryDataSpaceQueryBuilder.js +19 -0
- package/lib/components/data-space/LegendQueryDataSpaceQueryBuilder.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/light-mode.css +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/QueryEditorStore.d.ts +20 -0
- package/lib/stores/QueryEditorStore.d.ts.map +1 -1
- package/lib/stores/QueryEditorStore.js +72 -3
- package/lib/stores/QueryEditorStore.js.map +1 -1
- package/lib/stores/QueryProductionizerSetupStore.d.ts.map +1 -1
- package/lib/stores/QueryProductionizerSetupStore.js +13 -0
- package/lib/stores/QueryProductionizerSetupStore.js.map +1 -1
- package/lib/stores/QuerySetupStore.d.ts.map +1 -1
- package/lib/stores/QuerySetupStore.js +1 -0
- package/lib/stores/QuerySetupStore.js.map +1 -1
- package/lib/stores/__test-utils__/LegendQueryApplicationTestUtils.d.ts.map +1 -1
- package/lib/stores/__test-utils__/LegendQueryApplicationTestUtils.js +0 -3
- package/lib/stores/__test-utils__/LegendQueryApplicationTestUtils.js.map +1 -1
- package/lib/stores/data-cube/ExistingQueryDataCubeViewer.d.ts.map +1 -1
- package/lib/stores/data-cube/ExistingQueryDataCubeViewer.js +1 -0
- package/lib/stores/data-cube/ExistingQueryDataCubeViewer.js.map +1 -1
- package/lib/stores/data-space/DataSpaceQueryBuilderHelper.d.ts.map +1 -1
- package/lib/stores/data-space/DataSpaceQueryBuilderHelper.js +5 -1
- package/lib/stores/data-space/DataSpaceQueryBuilderHelper.js.map +1 -1
- package/package.json +13 -13
- package/src/__lib__/LegendQueryAgentChatTelemetryHelper.ts +66 -10
- package/src/__lib__/LegendQueryEvent.ts +18 -0
- package/src/__lib__/LegendQueryNavigation.ts +4 -4
- package/src/__lib__/LegendQueryTelemetryHelper.ts +157 -0
- package/src/application/LegendQueryApplicationConfig.ts +8 -12
- package/src/components/Core_LegendQueryApplicationPlugin.tsx +26 -2
- package/src/components/QueryEditor.tsx +30 -2
- package/src/components/data-space/DataSpaceInfo.tsx +8 -8
- package/src/components/data-space/DataSpaceQuerySetup.tsx +25 -0
- package/src/components/data-space/LegendQueryDataSpaceQueryBuilder.tsx +25 -0
- package/src/stores/QueryEditorStore.ts +91 -9
- package/src/stores/QueryProductionizerSetupStore.ts +16 -0
- package/src/stores/QuerySetupStore.ts +1 -0
- package/src/stores/__test-utils__/LegendQueryApplicationTestUtils.ts +0 -3
- package/src/stores/data-cube/ExistingQueryDataCubeViewer.ts +1 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
|
137
|
+
const openInMarketplace = (): void => {
|
|
138
138
|
if (
|
|
139
139
|
projectInfo &&
|
|
140
|
-
editorStore.applicationStore.config.
|
|
140
|
+
editorStore.applicationStore.config.marketplaceApplicationUrl
|
|
141
141
|
) {
|
|
142
142
|
editorStore.applicationStore.navigationService.navigator.visitAddress(
|
|
143
|
-
|
|
144
|
-
editorStore.applicationStore.config.
|
|
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
|
|
180
|
-
|
|
179
|
+
editorStore.applicationStore.config
|
|
180
|
+
.marketplaceApplicationUrl && projectInfo
|
|
181
181
|
)
|
|
182
182
|
}
|
|
183
|
-
onClick={
|
|
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
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
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
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
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,
|
|
@@ -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
|
(
|