Skip to content

Commit 0ae62e6

Browse files
committed
Add duration per step
1 parent f6615c4 commit 0ae62e6

10 files changed

Lines changed: 78 additions & 52 deletions

File tree

web-common/src/features/add-data/form/ConnectorForm.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@
6161
void errorEventHandler?.fireAddDataErrorEvent(
6262
config.space,
6363
config.screen,
64-
step.schema,
6564
step.step,
65+
step.schema,
6666
e.message,
6767
);
6868
setSubmitError(form, e);

web-common/src/features/add-data/manager/AddDataManager.svelte

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,17 @@
4646
const stateManager = new AddDataStateManager();
4747
$effect(() => stateManager.setCallbacks(onDone, onClose, onStepChange));
4848
$effect(() => stateManager.setConfig(config));
49-
$effect(() => void init(initConnector, initSchema));
49+
let prevInitConnector: string | undefined;
50+
let prevInitSchema: string | undefined;
51+
$effect(() => {
52+
// This effect seems to be called even if data doesnt change. So add a safeguard for init.
53+
if (initConnector === prevInitConnector && initSchema === prevInitSchema) {
54+
return;
55+
}
56+
prevInitConnector = initConnector;
57+
prevInitSchema = initSchema;
58+
void init(prevInitConnector, prevInitSchema);
59+
});
5060
5161
const runtimeClient = useRuntimeClient();
5262

web-common/src/features/add-data/manager/AddDataStateManager.svelte.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ describe("AddDataStateManager", () => {
8181
},
8282
expectedStep: {
8383
step: AddDataStep.Import,
84+
schema: ClickhouseSchema,
8485
importStep: ImportDataStep.Init,
8586
config: ClickhouseImportConfig,
8687
},
@@ -129,6 +130,7 @@ describe("AddDataStateManager", () => {
129130
},
130131
expectedStep: {
131132
step: AddDataStep.Import,
133+
schema: ClickhouseSchema,
132134
importStep: ImportDataStep.Init,
133135
config: ClickhouseImportConfig,
134136
},
@@ -163,6 +165,7 @@ describe("AddDataStateManager", () => {
163165
},
164166
expectedStep: {
165167
step: AddDataStep.Import,
168+
schema: ClickhouseSchema,
166169
importStep: ImportDataStep.Init,
167170
config: ClickhouseImportConfig,
168171
},

web-common/src/features/add-data/manager/AddDataStateManager.svelte.ts

Lines changed: 53 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ export class AddDataStateManager {
5959
private onStepChange: ((step: AddDataStep) => void) | undefined = undefined;
6060
private config: AddDataConfig | undefined = undefined;
6161

62+
private lastTransitionTime: number = 0;
63+
6264
public setCallbacks(
6365
onDone: (() => void) | undefined,
6466
onClose: (() => void) | undefined,
@@ -98,7 +100,7 @@ export class AddDataStateManager {
98100
case AddDataStep.SelectConnector: {
99101
if (event.type === TransitionEventType.Back) {
100102
this.popState();
101-
return;
103+
break;
102104
}
103105
if (event.type !== TransitionEventType.SchemaSelected) return;
104106
const newState = getStepForSchema(event.schema, event.driver);
@@ -115,7 +117,7 @@ export class AddDataStateManager {
115117
{ step: AddDataStep.CreateConnector, schema: this.state.schema },
116118
);
117119
this.popState();
118-
return;
120+
break;
119121
}
120122
if (event.type !== TransitionEventType.ConnectorSelected) return;
121123
const newState = getStepForConnector(
@@ -144,7 +146,7 @@ export class AddDataStateManager {
144146
},
145147
);
146148
this.popState();
147-
return;
149+
break;
148150

149151
// CreateModel/ExploreConnector =={ImportConfigured event}=> Import
150152
case TransitionEventType.ImportConfigured:
@@ -190,7 +192,7 @@ export class AddDataStateManager {
190192
});
191193
// Can be back to Init/CreateModel/ExploreConnector
192194
this.popState();
193-
return;
195+
break;
194196
}
195197
if (event.type !== TransitionEventType.Imported) return;
196198
this.pushState({
@@ -199,44 +201,51 @@ export class AddDataStateManager {
199201
break;
200202
}
201203

202-
switch (this.state.step) {
203-
case AddDataStep.CreateConnector:
204-
this.fireBehaviourEvent(
205-
BehaviourEventAction.ConnectorConfigurationStarted,
206-
{
207-
step: AddDataStep.CreateConnector,
208-
schema: this.state.schema,
209-
},
210-
);
211-
break;
204+
if (event.type !== TransitionEventType.Back) {
205+
switch (this.state.step) {
206+
case AddDataStep.CreateConnector:
207+
this.fireBehaviourEvent(
208+
BehaviourEventAction.ConnectorConfigurationStarted,
209+
{
210+
step: AddDataStep.CreateConnector,
211+
schema: this.state.schema,
212+
},
213+
);
214+
break;
212215

213-
case AddDataStep.CreateModel:
214-
this.fireBehaviourEvent(
215-
BehaviourEventAction.ModelConfigurationStarted,
216-
{
217-
step: AddDataStep.CreateModel,
218-
schema: this.state.schema,
219-
connector: this.state.connector,
220-
},
221-
);
222-
break;
216+
case AddDataStep.CreateModel:
217+
this.fireBehaviourEvent(
218+
BehaviourEventAction.ModelConfigurationStarted,
219+
{
220+
step: AddDataStep.CreateModel,
221+
schema: this.state.schema,
222+
connector: this.state.connector,
223+
},
224+
);
225+
break;
223226

224-
case AddDataStep.ExploreConnector:
225-
this.fireBehaviourEvent(BehaviourEventAction.ConnectorExploreStarted, {
226-
step: AddDataStep.Import,
227-
schema: this.state.schema,
228-
connector: this.state.connector,
229-
});
230-
break;
227+
case AddDataStep.ExploreConnector:
228+
this.fireBehaviourEvent(
229+
BehaviourEventAction.ConnectorExploreStarted,
230+
{
231+
step: AddDataStep.Import,
232+
schema: this.state.schema,
233+
connector: this.state.connector,
234+
},
235+
);
236+
break;
231237

232-
case AddDataStep.Import:
233-
this.fireBehaviourEvent(BehaviourEventAction.ImportStarted, {
234-
step: AddDataStep.Import,
235-
schema: this.state.schema,
236-
connector: this.state.config.connector,
237-
});
238-
break;
238+
case AddDataStep.Import:
239+
this.fireBehaviourEvent(BehaviourEventAction.ImportStarted, {
240+
step: AddDataStep.Import,
241+
schema: this.state.schema,
242+
connector: this.state.config.connector,
243+
});
244+
break;
245+
}
239246
}
247+
248+
this.lastTransitionTime = Date.now();
240249
}
241250

242251
private pushState(state: AddDataState) {
@@ -252,6 +261,8 @@ export class AddDataStateManager {
252261
this.state = this.stateStack.pop() ?? { step: AddDataStep.Init };
253262
if (this.stateStack.length === 0) this.onClose?.();
254263
this.onStepChange?.(this.state.step);
264+
265+
this.lastTransitionTime = Date.now();
255266
}
256267

257268
// For lateral state change, going back is not supported.
@@ -265,12 +276,15 @@ export class AddDataStateManager {
265276
fields: AddDataBehaviourEventFields,
266277
) {
267278
if (!this.config) return;
279+
const duration = this.lastTransitionTime
280+
? Date.now() - this.lastTransitionTime
281+
: 0;
268282
void behaviourEvent?.fireAddDataStepEvent(
269283
action,
270284
this.config.medium,
271285
this.config.space,
272286
this.config.screen,
273-
fields,
287+
{ ...fields, duration },
274288
);
275289
}
276290
}

web-common/src/features/add-data/manager/GenerateDashboardStatus.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@
8383
void errorEventHandler?.fireAddDataErrorEvent(
8484
config.space,
8585
config.screen,
86-
importAddDataStep.config.connector,
8786
importStep,
87+
importAddDataStep.config.connector,
8888
error!,
8989
);
9090
}

web-common/src/features/add-data/manager/steps/import.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export async function runImportSteps(
6464
break;
6565
}
6666
}
67+
fireImportStepEvent(addDataConfig, addDataStep, ImportDataStep.Done);
6768
onProgress(ImportDataStep.Done, undefined);
6869
}
6970

web-common/src/features/entity-management/add/AddAssetButton.svelte

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
import { getScreenNameFromPage } from "@rilldata/web-common/features/file-explorer/telemetry.ts";
1616
import GenerateSampleData from "@rilldata/web-common/features/sample-data/GenerateSampleData.svelte";
1717
import CaretDownIcon from "../../../components/icons/CaretDownIcon.svelte";
18-
import { behaviourEvent } from "../../../metrics/initMetrics.ts";
19-
import {
20-
BehaviourEventAction,
21-
BehaviourEventMedium,
22-
} from "../../../metrics/service/BehaviourEventTypes.ts";
18+
import { BehaviourEventMedium } from "../../../metrics/service/BehaviourEventTypes.ts";
2319
import {
2420
MetricsEventScreenName,
2521
MetricsEventSpace,

web-common/src/metrics/ErrorEventHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@ export class ErrorEventHandler {
126126
this.commonUserMetrics,
127127
space,
128128
screen_name,
129-
code,
130129
step,
131130
schema,
131+
code,
132132
]);
133133
}
134134

web-common/src/metrics/service/ErrorEventFactory.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,22 +86,22 @@ export class ErrorEventFactory extends MetricsEventFactory {
8686
commonUserFields: CommonUserFields,
8787
space: MetricsEventSpace,
8888
screen_name: MetricsEventScreenName,
89-
error_code: SourceErrorCodes,
9089
step: string,
9190
schema: string,
91+
error_code: SourceErrorCodes,
9292
) {
9393
const event = this.getBaseMetricsEvent(
9494
"error",
95-
ErrorEventAction.SourceError,
95+
ErrorEventAction.ConnectorError,
9696
commonFields,
9797
commonUserFields,
9898
) as AddDataErrorEvent;
9999
event.action = ErrorEventAction.SourceError;
100100
event.space = space;
101101
event.screen_name = screen_name;
102-
event.error_code = error_code;
103102
event.step = step;
104103
event.schema = schema;
104+
event.error_code = error_code;
105105
return event;
106106
}
107107

web-local/src/routes/(misc)/welcome/+page.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
MetricsEventScreenName,
1515
MetricsEventSpace,
1616
} from "@rilldata/web-common/metrics/service/MetricsTypes.ts";
17+
import { waitUntil } from "@rilldata/web-common/lib/waitUtils.ts";
1718
18-
onMount(() => {
19+
onMount(async () => {
20+
await waitUntil(() => !!behaviourEvent);
1921
void behaviourEvent?.fireAddDataStepEvent(
2022
BehaviourEventAction.WelcomePageViewed,
2123
BehaviourEventMedium.Card,

0 commit comments

Comments
 (0)