Skip to content

Commit c5d386f

Browse files
authored
Merge pull request #32168 from storybookjs/shilman/add-dev-cancel-event
Telemetry: Send index stats on dev exit
2 parents 4dad3f9 + ebc6ced commit c5d386f

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

code/core/src/core-server/dev-server.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import compression from '@polka/compression';
77
import polka from 'polka';
88
import invariant from 'tiny-invariant';
99

10+
import { telemetry } from '../telemetry';
1011
import type { StoryIndexGenerator } from './utils/StoryIndexGenerator';
1112
import { doTelemetry } from './utils/doTelemetry';
1213
import { getManagerBuilder, getPreviewBuilder } from './utils/get-builders';
@@ -19,6 +20,7 @@ import { openInBrowser } from './utils/open-in-browser';
1920
import { getServerAddresses } from './utils/server-address';
2021
import { getServer } from './utils/server-init';
2122
import { useStatics } from './utils/server-statics';
23+
import { summarizeIndex } from './utils/summarizeIndex';
2224

2325
export async function storybookDevServer(options: Options) {
2426
const [server, core] = await Promise.all([getServer(options), options.presets.apply('core')]);
@@ -130,5 +132,26 @@ export async function storybookDevServer(options: Options) {
130132
// Now the preview has successfully started, we can count this as a 'dev' event.
131133
doTelemetry(app, core, initializedStoryIndexGenerator, options);
132134

135+
async function cancelTelemetry() {
136+
const payload = { eventType: 'dev' };
137+
try {
138+
const generator = await initializedStoryIndexGenerator;
139+
const indexAndStats = await generator?.getIndexAndStats();
140+
// compute stats so we can get more accurate story counts
141+
if (indexAndStats) {
142+
Object.assign(payload, {
143+
storyIndex: summarizeIndex(indexAndStats.storyIndex),
144+
storyStats: indexAndStats.stats,
145+
});
146+
}
147+
} catch (err) {}
148+
await telemetry('canceled', payload, { immediate: true });
149+
process.exit(0);
150+
}
151+
152+
if (!core?.disableTelemetry) {
153+
process.on('SIGINT', cancelTelemetry);
154+
}
155+
133156
return { previewResult, managerResult, address, networkAddress };
134157
}

0 commit comments

Comments
 (0)