@finos/legend-application-data-cube 0.3.8 → 0.3.10

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 (27) hide show
  1. package/lib/__lib__/DataCubeEvent.d.ts +28 -0
  2. package/lib/__lib__/DataCubeEvent.d.ts.map +1 -0
  3. package/lib/__lib__/DataCubeEvent.js +29 -0
  4. package/lib/__lib__/DataCubeEvent.js.map +1 -0
  5. package/lib/components/__test-utils__/LegendDataCubeStoreTestUtils.d.ts.map +1 -1
  6. package/lib/components/__test-utils__/LegendDataCubeStoreTestUtils.js +7 -1
  7. package/lib/components/__test-utils__/LegendDataCubeStoreTestUtils.js.map +1 -1
  8. package/lib/index.css +1 -1
  9. package/lib/package.json +1 -1
  10. package/lib/stores/LegendDataCubeDataCubeEngine.d.ts +1 -0
  11. package/lib/stores/LegendDataCubeDataCubeEngine.d.ts.map +1 -1
  12. package/lib/stores/LegendDataCubeDataCubeEngine.js +23 -0
  13. package/lib/stores/LegendDataCubeDataCubeEngine.js.map +1 -1
  14. package/lib/stores/builder/LegendDataCubeBuilderStore.d.ts.map +1 -1
  15. package/lib/stores/builder/LegendDataCubeBuilderStore.js +25 -4
  16. package/lib/stores/builder/LegendDataCubeBuilderStore.js.map +1 -1
  17. package/lib/stores/builder/LegendDataCubeCreatorState.d.ts +3 -1
  18. package/lib/stores/builder/LegendDataCubeCreatorState.d.ts.map +1 -1
  19. package/lib/stores/builder/LegendDataCubeCreatorState.js +184 -13
  20. package/lib/stores/builder/LegendDataCubeCreatorState.js.map +1 -1
  21. package/package.json +5 -5
  22. package/src/__lib__/DataCubeEvent.ts +28 -0
  23. package/src/components/__test-utils__/LegendDataCubeStoreTestUtils.tsx +24 -0
  24. package/src/stores/LegendDataCubeDataCubeEngine.ts +43 -0
  25. package/src/stores/builder/LegendDataCubeBuilderStore.tsx +60 -4
  26. package/src/stores/builder/LegendDataCubeCreatorState.tsx +286 -17
  27. package/tsconfig.json +1 -0
@@ -18,13 +18,17 @@ import { action, makeObservable, observable } from 'mobx';
18
18
  import { ActionState, assertErrorThrown, IllegalStateError, UnsupportedOperationError, } from '@finos/legend-shared';
19
19
  import { LegendQueryDataCubeSourceBuilderState } from './source/LegendQueryDataCubeSourceBuilderState.js';
20
20
  import { LegendDataCubeSourceBuilderType, } from './source/LegendDataCubeSourceBuilderState.js';
21
- import { DEFAULT_TOOL_PANEL_WINDOW_CONFIG, } from '@finos/legend-data-cube';
21
+ import { ADHOC_FUNCTION_DATA_CUBE_SOURCE_TYPE, ADHOC_QUERY_DATA_CUBE_SOURCE_TYPE, AdhocQueryDataCubeSource, DataCubeTelemetryHelper, DEFAULT_TOOL_PANEL_WINDOW_CONFIG, RawAdhocQueryDataCubeSource, RawUserDefinedFunctionDataCubeSource, UserDefinedFunctionDataCubeSource, } from '@finos/legend-data-cube';
22
22
  import { LegendDataCubeCreator } from '../../components/builder/LegendDataCubeCreator.js';
23
23
  import { AdhocQueryDataCubeSourceBuilderState } from './source/AdhocQueryDataCubeSourceBuilderState.js';
24
24
  import { LegendDataCubeBuilderState, } from './LegendDataCubeBuilderStore.js';
25
25
  import { generateBuilderRoute } from '../../__lib__/LegendDataCubeNavigation.js';
26
26
  import { LocalFileDataCubeSourceBuilderState } from './source/LocalFileDataCubeSourceBuilderState.js';
27
27
  import { UserDefinedFunctionDataCubeSourceBuilderState } from './source/UserDefinedFunctionDataCubeSourceBuilderState.js';
28
+ import { LEGEND_QUERY_DATA_CUBE_SOURCE_TYPE, LegendQueryDataCubeSource, RawLegendQueryDataCubeSource, } from '../model/LegendQueryDataCubeSource.js';
29
+ import { V1_deserializePureModelContext, V1_PureModelContextPointer, V1_LegendSDLC, } from '@finos/legend-graph';
30
+ import { LOCAL_FILE_QUERY_DATA_CUBE_SOURCE_TYPE, LocalFileDataCubeSource, RawLocalFileQueryDataCubeSource, } from '../model/LocalFileDataCubeSource.js';
31
+ import { DATACUBE_APP_EVENT } from '../../__lib__/DataCubeEvent.js';
28
32
  const DEFAULT_SOURCE_TYPE = LegendDataCubeSourceBuilderType.LEGEND_QUERY;
29
33
  export class LegendDataCubeCreatorState {
30
34
  _application;
@@ -69,29 +73,196 @@ export class LegendDataCubeCreatorState {
69
73
  throw new UnsupportedOperationError(`Can't create source builder for unsupported type '${type}'`);
70
74
  }
71
75
  }
76
+ logFromSource(eventType, source, errorMessage) {
77
+ if (!source) {
78
+ DataCubeTelemetryHelper.logEvent_Datacube(this._application.telemetryService, {
79
+ error: errorMessage,
80
+ }, eventType);
81
+ return;
82
+ }
83
+ if (source instanceof LegendQueryDataCubeSource) {
84
+ const queryInfo = source.info;
85
+ DataCubeTelemetryHelper.logEvent_Datacube_LegendQuery(this._application.telemetryService, {
86
+ project: {
87
+ groupId: queryInfo.groupId,
88
+ artifactId: queryInfo.artifactId,
89
+ versionId: queryInfo.versionId,
90
+ },
91
+ query: {
92
+ id: queryInfo.id,
93
+ name: queryInfo.name,
94
+ },
95
+ error: errorMessage,
96
+ }, eventType);
97
+ }
98
+ else if (source instanceof UserDefinedFunctionDataCubeSource) {
99
+ const deserializedModel = V1_deserializePureModelContext(source.model);
100
+ const sdlcInfo = deserializedModel instanceof V1_PureModelContextPointer &&
101
+ deserializedModel.sdlcInfo instanceof V1_LegendSDLC
102
+ ? deserializedModel.sdlcInfo
103
+ : undefined;
104
+ DataCubeTelemetryHelper.logEvent_Datacube_AdhocFunction(this._application.telemetryService, {
105
+ project: sdlcInfo !== undefined
106
+ ? {
107
+ groupId: sdlcInfo.groupId,
108
+ artifactId: sdlcInfo.artifactId,
109
+ versionId: sdlcInfo.version,
110
+ }
111
+ : undefined,
112
+ function: {
113
+ path: source.functionPath,
114
+ runtime: source.runtime,
115
+ },
116
+ error: errorMessage,
117
+ }, eventType);
118
+ }
119
+ else if (source instanceof LocalFileDataCubeSource) {
120
+ DataCubeTelemetryHelper.logEvent_Datacube_LocalFile(this._application.telemetryService, {
121
+ file: {
122
+ name: source.fileName,
123
+ format: source.fileFormat,
124
+ },
125
+ error: errorMessage,
126
+ }, eventType);
127
+ }
128
+ else if (source instanceof AdhocQueryDataCubeSource) {
129
+ const deserializedModel = V1_deserializePureModelContext(source.model);
130
+ const sdlcInfo = deserializedModel instanceof V1_PureModelContextPointer &&
131
+ deserializedModel.sdlcInfo instanceof V1_LegendSDLC
132
+ ? deserializedModel.sdlcInfo
133
+ : undefined;
134
+ DataCubeTelemetryHelper.logEvent_Datacube_AdhocQuery(this._application.telemetryService, {
135
+ project: sdlcInfo !== undefined
136
+ ? {
137
+ groupId: sdlcInfo.groupId,
138
+ artifactId: sdlcInfo.artifactId,
139
+ versionId: sdlcInfo.version,
140
+ }
141
+ : undefined,
142
+ adhocQuery: {
143
+ mapping: source.mapping,
144
+ runtime: source.runtime,
145
+ },
146
+ error: errorMessage,
147
+ }, eventType);
148
+ }
149
+ }
150
+ logFromRawSource(eventType, source, errorMessage, dataCubeId) {
151
+ if (!source) {
152
+ DataCubeTelemetryHelper.logEvent_Datacube(this._application.telemetryService, {
153
+ dataCubeId: dataCubeId,
154
+ error: errorMessage,
155
+ }, eventType);
156
+ return;
157
+ }
158
+ if (source._type === LEGEND_QUERY_DATA_CUBE_SOURCE_TYPE) {
159
+ const rawSource = RawLegendQueryDataCubeSource.serialization.fromJson(source);
160
+ DataCubeTelemetryHelper.logEvent_Datacube_LegendQuery(this._application.telemetryService, {
161
+ query: {
162
+ id: rawSource.queryId,
163
+ },
164
+ dataCubeId: dataCubeId,
165
+ error: errorMessage,
166
+ }, eventType);
167
+ }
168
+ else if (source._type === ADHOC_FUNCTION_DATA_CUBE_SOURCE_TYPE) {
169
+ const rawSource = RawUserDefinedFunctionDataCubeSource.serialization.fromJson(source);
170
+ const deserializedModel = V1_deserializePureModelContext(rawSource.model);
171
+ const sdlcInfo = deserializedModel instanceof V1_PureModelContextPointer &&
172
+ deserializedModel.sdlcInfo instanceof V1_LegendSDLC
173
+ ? deserializedModel.sdlcInfo
174
+ : undefined;
175
+ DataCubeTelemetryHelper.logEvent_Datacube_AdhocFunction(this._application.telemetryService, {
176
+ project: sdlcInfo !== undefined
177
+ ? {
178
+ groupId: sdlcInfo.groupId,
179
+ artifactId: sdlcInfo.artifactId,
180
+ versionId: sdlcInfo.version,
181
+ }
182
+ : undefined,
183
+ function: {
184
+ path: rawSource.functionPath,
185
+ runtime: rawSource.runtime,
186
+ },
187
+ dataCubeId: dataCubeId,
188
+ error: errorMessage,
189
+ }, eventType);
190
+ }
191
+ else if (source._type === LOCAL_FILE_QUERY_DATA_CUBE_SOURCE_TYPE) {
192
+ const rawSource = RawLocalFileQueryDataCubeSource.serialization.fromJson(source);
193
+ DataCubeTelemetryHelper.logEvent_Datacube_LocalFile(this._application.telemetryService, {
194
+ file: {
195
+ name: rawSource.fileName,
196
+ format: rawSource.fileFormat,
197
+ },
198
+ dataCubeId: dataCubeId,
199
+ error: errorMessage,
200
+ }, eventType);
201
+ }
202
+ else if (source._type === ADHOC_QUERY_DATA_CUBE_SOURCE_TYPE) {
203
+ const rawSource = RawAdhocQueryDataCubeSource.serialization.fromJson(source);
204
+ const deserializedModel = V1_deserializePureModelContext(rawSource.model);
205
+ const sdlcInfo = deserializedModel instanceof V1_PureModelContextPointer &&
206
+ deserializedModel.sdlcInfo instanceof V1_LegendSDLC
207
+ ? deserializedModel.sdlcInfo
208
+ : undefined;
209
+ DataCubeTelemetryHelper.logEvent_Datacube_AdhocQuery(this._application.telemetryService, {
210
+ project: sdlcInfo !== undefined
211
+ ? {
212
+ groupId: sdlcInfo.groupId,
213
+ artifactId: sdlcInfo.artifactId,
214
+ versionId: sdlcInfo.version,
215
+ }
216
+ : undefined,
217
+ adhocQuery: {
218
+ mapping: rawSource.mapping,
219
+ runtime: rawSource.runtime,
220
+ },
221
+ dataCubeId: dataCubeId,
222
+ error: errorMessage,
223
+ }, eventType);
224
+ }
225
+ }
72
226
  async finalize(sourceData) {
73
227
  if (!sourceData && !this.sourceBuilder.isValid) {
74
228
  throw new IllegalStateError(`Can't generate DataCube: source is not valid`);
75
229
  }
76
230
  this.finalizeState.inProgress();
77
231
  try {
78
- const specification = await this._engine.generateBaseSpecification(sourceData ?? (await this.sourceBuilder.generateSourceData()));
79
- if (specification.configuration) {
80
- this.sourceBuilder.finalizeConfiguration(specification.configuration);
232
+ sourceData =
233
+ sourceData ?? (await this.sourceBuilder.generateSourceData());
234
+ try {
235
+ const source = await this._engine.processSource(sourceData);
236
+ const specification = await this._engine.generateBaseSpecification(sourceData, source);
237
+ if (specification.configuration) {
238
+ this.sourceBuilder.finalizeConfiguration(specification.configuration);
239
+ }
240
+ // reset
241
+ this._store.setBuilder(new LegendDataCubeBuilderState(specification));
242
+ // only update the route instead of reloading in case we are creating
243
+ // a new DataCube when we are editing another DataCube
244
+ this._application.navigationService.navigator.updateCurrentLocation(generateBuilderRoute(null));
245
+ this.changeSourceBuilder(DEFAULT_SOURCE_TYPE, true);
246
+ this.display.close();
247
+ this.finalizeState.pass();
248
+ this.logFromSource(DATACUBE_APP_EVENT.NEW_DATACUBE__SUCCESS, source);
249
+ }
250
+ catch (error) {
251
+ assertErrorThrown(error);
252
+ const message = `DataCube Creation Failure: ${error.message}`;
253
+ this.logFromRawSource(DATACUBE_APP_EVENT.NEW_DATACUBE__FAILURE, sourceData, message);
254
+ this._alertService.alertError(error, {
255
+ message: message,
256
+ });
257
+ this.finalizeState.fail();
81
258
  }
82
- // reset
83
- this._store.setBuilder(new LegendDataCubeBuilderState(specification));
84
- // only update the route instead of reloading in case we are creating
85
- // a new DataCube when we are editing another DataCube
86
- this._application.navigationService.navigator.updateCurrentLocation(generateBuilderRoute(null));
87
- this.changeSourceBuilder(DEFAULT_SOURCE_TYPE, true);
88
- this.display.close();
89
- this.finalizeState.pass();
90
259
  }
91
260
  catch (error) {
92
261
  assertErrorThrown(error);
262
+ const message = `DataCube Creation Failure: ${error.message}`;
263
+ this.logFromSource(DATACUBE_APP_EVENT.NEW_DATACUBE__FAILURE, undefined, message);
93
264
  this._alertService.alertError(error, {
94
- message: `DataCube Creation Failure: ${error.message}`,
265
+ message: message,
95
266
  });
96
267
  this.finalizeState.fail();
97
268
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LegendDataCubeCreatorState.js","sourceRoot":"","sources":["../../../src/stores/builder/LegendDataCubeCreatorState.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LegendDataCubeCreatorState.js","sourceRoot":"","sources":["../../../src/stores/builder/LegendDataCubeCreatorState.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-application-data-cube",
3
- "version": "0.3.8",
3
+ "version": "0.3.10",
4
4
  "description": "Legend DataCube application core",
5
5
  "keywords": [
6
6
  "legend",
@@ -45,10 +45,10 @@
45
45
  "@duckdb/duckdb-wasm": "1.29.0",
46
46
  "@finos/legend-application": "16.0.31",
47
47
  "@finos/legend-art": "7.1.88",
48
- "@finos/legend-code-editor": "2.0.53",
49
- "@finos/legend-data-cube": "0.1.14",
50
- "@finos/legend-graph": "32.1.11",
51
- "@finos/legend-query-builder": "4.16.15",
48
+ "@finos/legend-code-editor": "2.0.54",
49
+ "@finos/legend-data-cube": "0.1.16",
50
+ "@finos/legend-graph": "32.1.12",
51
+ "@finos/legend-query-builder": "4.16.17",
52
52
  "@finos/legend-server-depot": "6.0.86",
53
53
  "@finos/legend-shared": "11.0.9",
54
54
  "@finos/legend-storage": "3.0.128",
@@ -0,0 +1,28 @@
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
+ export enum DATACUBE_APP_EVENT {
18
+ CREATE_DATACUBE__SUCCESS = 'dataCube.create-dataCube.success',
19
+ CREATE_DATACUBE__FAILURE = 'dataCube.create-dataCube.failure',
20
+ LOAD_DATACUBE__SUCCESS = 'dataCube.load-dataCube.success',
21
+ LOAD_DATACUBE__FAILURE = 'dataCube.load-dataCube.failure',
22
+ NEW_DATACUBE__SUCCESS = 'dataCube.new-dataCube.success',
23
+ NEW_DATACUBE__FAILURE = 'dataCube.new-dataCube.failure',
24
+ UPDATE_DATACUBE__SUCCESS = 'dataCube.update-dataCube.success',
25
+ UPDATE_DATACUBE__FAILURE = 'dataCube.update-dataCube.failure',
26
+ DELETE_DATACUBE__SUCCESS = 'dataCube.delete-dataCube.success',
27
+ DELETE_DATACUBE__FAILURE = 'dataCube.delete-dataCube.failure',
28
+ }
@@ -58,9 +58,11 @@ import { DSL_DataSpace_GraphManagerPreset } from '@finos/legend-extension-dsl-da
58
58
  import {
59
59
  ENGINE_TEST_SUPPORT__execute,
60
60
  ENGINE_TEST_SUPPORT__getLambdaRelationType,
61
+ ENGINE_TEST_SUPPORT__getLambdaReturnType,
61
62
  ENGINE_TEST_SUPPORT__grammarToJSON_lambda,
62
63
  ENGINE_TEST_SUPPORT__grammarToJSON_valueSpecification,
63
64
  ENGINE_TEST_SUPPORT__JSONToGrammar_valueSpecification,
65
+ ENGINE_TEST_SUPPORT__transformTdsToRelation_lambda,
64
66
  } from '@finos/legend-graph/test';
65
67
  import type { Entity } from '@finos/legend-storage';
66
68
 
@@ -165,6 +167,17 @@ export const TEST__setUpDataCubeBuilder = async (
165
167
  MOCK__builderStore.depotServerClient,
166
168
  'getVersionEntities',
167
169
  ).mockResolvedValue(mockEntities);
170
+ createSpy(
171
+ MOCK__builderStore.engineServerClient,
172
+ 'lambdaReturnType',
173
+ ).mockImplementation(
174
+ async (input: PlainObject<V1_LambdaReturnTypeInput>) => {
175
+ return ENGINE_TEST_SUPPORT__getLambdaReturnType(
176
+ input.lambda as PlainObject<V1_RawLambda>,
177
+ V1_serializePureModelContext(pmcd),
178
+ );
179
+ },
180
+ );
168
181
  createSpy(
169
182
  MOCK__builderStore.engineServerClient,
170
183
  'lambdaRelationType',
@@ -176,6 +189,17 @@ export const TEST__setUpDataCubeBuilder = async (
176
189
  );
177
190
  },
178
191
  );
192
+ createSpy(
193
+ MOCK__builderStore.engineServerClient,
194
+ 'transformTdsToRelation_lambda',
195
+ ).mockImplementation(
196
+ async (input: PlainObject<V1_LambdaReturnTypeInput>) => {
197
+ return ENGINE_TEST_SUPPORT__transformTdsToRelation_lambda(
198
+ input.lambda as PlainObject<V1_RawLambda>,
199
+ V1_serializePureModelContext(pmcd),
200
+ );
201
+ },
202
+ );
179
203
  createSpy(
180
204
  MOCK__builderStore.engineServerClient,
181
205
  'runQuery',
@@ -84,6 +84,7 @@ import {
84
84
  V1_deserializeValueSpecification,
85
85
  LET_TOKEN,
86
86
  V1_AppliedFunction,
87
+ type V1_LambdaReturnTypeResult,
87
88
  } from '@finos/legend-graph';
88
89
  import {
89
90
  _elementPtr,
@@ -138,6 +139,7 @@ import {
138
139
  LocalFileDataCubeSource,
139
140
  RawLocalFileQueryDataCubeSource,
140
141
  } from './model/LocalFileDataCubeSource.js';
142
+ import { QUERY_BUILDER_PURE_PATH } from '@finos/legend-query-builder';
141
143
 
142
144
  export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
143
145
  private readonly _application: LegendDataCubeApplicationStore;
@@ -409,10 +411,38 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
409
411
  ),
410
412
  ),
411
413
  );
414
+
415
+ // Check return type of lambda. If it is a TDS type, convert it to
416
+ // the new relation protocol.
417
+ const returnType = await this._getLambdaReturnType(
418
+ this.serializeValueSpecification(source.lambda),
419
+ source.model,
420
+ );
421
+ if (returnType === QUERY_BUILDER_PURE_PATH.TDS_TABULAR_DATASET) {
422
+ try {
423
+ const transformedLambda = guaranteeType(
424
+ this.deserializeValueSpecification(
425
+ await this._engineServerClient.transformTdsToRelation_lambda({
426
+ model: source.model,
427
+ lambda: source.lambda,
428
+ }),
429
+ ),
430
+ V1_Lambda,
431
+ );
432
+ source.lambda = transformedLambda;
433
+ } catch (e) {
434
+ assertErrorThrown(e);
435
+ throw new Error(
436
+ `Error transforming TDS protocol to relation protocol:\n${e.message}`,
437
+ );
438
+ }
439
+ }
440
+
412
441
  // If the lambda has multiple expressions, the source query should only be the final
413
442
  // expression of the lambda. All previous expressions should be left untouched and will
414
443
  // be prepended to the transformed query when it is executed.
415
444
  source.query = at(source.lambda.body, source.lambda.body.length - 1);
445
+
416
446
  try {
417
447
  source.columns = (
418
448
  await this._getLambdaRelationType(
@@ -426,6 +456,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
426
456
  `Can't get query result columns. Make sure the saved query return a relation (i.e. typed TDS). Error: ${error.message}`,
427
457
  );
428
458
  }
459
+
429
460
  // To handle parameter value with function calls we
430
461
  // 1. Separate the parameters with function calls from regular parameters
431
462
  // 2. Add let statements for function parameter values and store them in the source's letParameterValueSpec
@@ -905,6 +936,18 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
905
936
  );
906
937
  }
907
938
 
939
+ private async _getLambdaReturnType(
940
+ lambda: PlainObject<V1_Lambda>,
941
+ model: PlainObject<V1_PureModelContext>,
942
+ ): Promise<string> {
943
+ return (
944
+ (await this._engineServerClient.lambdaReturnType({
945
+ lambda,
946
+ model,
947
+ })) as unknown as V1_LambdaReturnTypeResult
948
+ ).returnType;
949
+ }
950
+
908
951
  async _getLambdaRelationType(
909
952
  lambda: PlainObject<V1_Lambda>,
910
953
  model: PlainObject<V1_PureModelContext>,
@@ -68,6 +68,8 @@ import { LegendDataCubeSourceViewer } from '../../components/builder/LegendDataC
68
68
  import { LOCAL_FILE_QUERY_DATA_CUBE_SOURCE_TYPE } from '../model/LocalFileDataCubeSource.js';
69
69
  import type { LegendDataCubeSourceLoaderState } from './source/LegendDataCubeSourceLoaderState.js';
70
70
  import { LocalFileDataCubeSourceLoaderState } from './source/LocalFileDataCubeSourceLoaderState.js';
71
+ import { DATACUBE_APP_EVENT } from '../../__lib__/DataCubeEvent.js';
72
+ import { LegendApplicationTelemetryHelper } from '@finos/legend-application';
71
73
 
72
74
  export class LegendDataCubeBuilderState {
73
75
  readonly uuid = uuid();
@@ -382,10 +384,20 @@ export class LegendDataCubeBuilderStore {
382
384
 
383
385
  this.finalizeLoad(specification, persistentDataCube, dataCubeId);
384
386
  this.loadState.pass();
387
+ this.creator.logFromRawSource(
388
+ DATACUBE_APP_EVENT.LOAD_DATACUBE__SUCCESS,
389
+ specification.source,
390
+ );
385
391
  } catch (error) {
386
392
  assertErrorThrown(error);
393
+ const message = `DataCube Load Failure: ${error.message}`;
394
+ this.creator.logFromRawSource(
395
+ DATACUBE_APP_EVENT.LOAD_DATACUBE__FAILURE,
396
+ this.builder?.initialSpecification.source,
397
+ message,
398
+ );
387
399
  this.alertService.alertError(error, {
388
- message: `DataCube Load Failure: ${error.message}`,
400
+ message: message,
389
401
  });
390
402
  this.application.navigationService.navigator.updateCurrentLocation(
391
403
  generateBuilderRoute(null),
@@ -396,6 +408,11 @@ export class LegendDataCubeBuilderStore {
396
408
  this.taskService.endTask(task);
397
409
  }
398
410
  }
411
+
412
+ LegendApplicationTelemetryHelper.logEvent_ApplicationInitializationSucceeded(
413
+ this.application.telemetryService,
414
+ this.application,
415
+ );
399
416
  }
400
417
 
401
418
  private finalizeLoad(
@@ -496,12 +513,22 @@ export class LegendDataCubeBuilderStore {
496
513
 
497
514
  this.saverDisplay.close();
498
515
  this.saveState.pass();
516
+ this.creator.logFromSource(
517
+ DATACUBE_APP_EVENT.CREATE_DATACUBE__SUCCESS,
518
+ this.builder.source,
519
+ );
499
520
  } catch (error) {
500
521
  assertErrorThrown(error);
522
+ const message = `DataCube Creation Failure: ${error.message}`;
501
523
  this.alertService.alertError(error, {
502
- message: `DataCube Creation Failure: ${error.message}`,
524
+ message: message,
503
525
  });
504
526
  this.saveState.fail();
527
+ this.creator.logFromSource(
528
+ DATACUBE_APP_EVENT.CREATE_DATACUBE__FAILURE,
529
+ this.builder.source,
530
+ message,
531
+ );
505
532
  } finally {
506
533
  this.taskService.endTask(task);
507
534
  }
@@ -554,10 +581,24 @@ export class LegendDataCubeBuilderStore {
554
581
 
555
582
  this.saverDisplay.close();
556
583
  this.saveState.pass();
584
+ this.creator.logFromSource(
585
+ options?.saveAsNew
586
+ ? DATACUBE_APP_EVENT.CREATE_DATACUBE__SUCCESS
587
+ : DATACUBE_APP_EVENT.UPDATE_DATACUBE__SUCCESS,
588
+ this.builder.source,
589
+ );
557
590
  } catch (error) {
558
591
  assertErrorThrown(error);
592
+ const message = `DataCube Update Failure: ${error.message}`;
593
+ this.creator.logFromSource(
594
+ options?.saveAsNew
595
+ ? DATACUBE_APP_EVENT.CREATE_DATACUBE__FAILURE
596
+ : DATACUBE_APP_EVENT.UPDATE_DATACUBE__FAILURE,
597
+ this.builder.source,
598
+ message,
599
+ );
559
600
  this.alertService.alertError(error, {
560
- message: `DataCube Update Failure: ${error.message}`,
601
+ message: message,
561
602
  });
562
603
  this.saveState.fail();
563
604
  } finally {
@@ -581,6 +622,11 @@ export class LegendDataCubeBuilderStore {
581
622
  const task = this.taskService.newTask('Deleting DataCube...');
582
623
 
583
624
  try {
625
+ const persistentDataCubeToDelete =
626
+ await this.baseStore.graphManager.getDataCube(dataCubeId);
627
+ const specification = DataCubeSpecification.serialization.fromJson(
628
+ persistentDataCubeToDelete.content,
629
+ );
584
630
  await this.baseStore.graphManager.deleteDataCube(dataCubeId);
585
631
 
586
632
  // update the list of stack of recently viewed DataCubes
@@ -609,10 +655,20 @@ export class LegendDataCubeBuilderStore {
609
655
  this.setDataCubeToDelete(undefined);
610
656
  this.deleteConfirmationDisplay.close();
611
657
  this.deleteState.pass();
658
+ this.creator.logFromRawSource(
659
+ DATACUBE_APP_EVENT.DELETE_DATACUBE__SUCCESS,
660
+ specification.source,
661
+ );
612
662
  } catch (error) {
613
663
  assertErrorThrown(error);
664
+ const message = `DataCube Delete Failure: ${error.message}`;
665
+ this.creator.logFromRawSource(
666
+ DATACUBE_APP_EVENT.DELETE_DATACUBE__FAILURE,
667
+ undefined,
668
+ message,
669
+ );
614
670
  this.alertService.alertError(error, {
615
- message: `DataCube Delete Failure: ${error.message}`,
671
+ message: message,
616
672
  });
617
673
  this.deleteState.fail();
618
674
  } finally {