Skip to content

Commit 17fa075

Browse files
committed
fix(create-cloudflare): report effective telemetry status
1 parent b1b7b22 commit 17fa075

2 files changed

Lines changed: 58 additions & 16 deletions

File tree

packages/create-cloudflare/src/__tests__/metrics.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,8 @@ describe("runTelemetryCommand", () => {
567567

568568
afterEach(() => {
569569
vi.useRealTimers();
570+
vi.clearAllMocks();
571+
vi.unstubAllEnvs();
570572
});
571573

572574
test("run telemetry status when c3permission is disabled", async ({
@@ -607,6 +609,36 @@ describe("runTelemetryCommand", () => {
607609
`);
608610
});
609611

612+
test("run telemetry status when DO_NOT_TRACK is enabled", ({ expect }) => {
613+
vi.stubEnv("DO_NOT_TRACK", "1");
614+
615+
runTelemetryCommand("status");
616+
617+
expect(readMetricsConfig).not.toHaveBeenCalled();
618+
expect(writeMetricsConfig).not.toHaveBeenCalled();
619+
expect(normalizeOutput(std.out)).toMatchInlineSnapshot(`
620+
"Status: Disabled (set by DO_NOT_TRACK)
621+
622+
"
623+
`);
624+
});
625+
626+
test("run telemetry status when CREATE_CLOUDFLARE_TELEMETRY_DISABLED is enabled", ({
627+
expect,
628+
}) => {
629+
vi.stubEnv("CREATE_CLOUDFLARE_TELEMETRY_DISABLED", "1");
630+
631+
runTelemetryCommand("status");
632+
633+
expect(readMetricsConfig).not.toHaveBeenCalled();
634+
expect(writeMetricsConfig).not.toHaveBeenCalled();
635+
expect(normalizeOutput(std.out)).toMatchInlineSnapshot(`
636+
"Status: Disabled (set by CREATE_CLOUDFLARE_TELEMETRY_DISABLED)
637+
638+
"
639+
`);
640+
});
641+
610642
test("run telemetry enable when c3permission is disabled", async ({
611643
expect,
612644
}) => {

packages/create-cloudflare/src/metrics.ts

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,23 @@ export function getPlatform() {
5959
}
6060
}
6161

62+
function resolveTelemetryStatus():
63+
| { enabled: boolean; source: string }
64+
| undefined {
65+
if (isDoNotTrackEnabled()) {
66+
return { enabled: false, source: "DO_NOT_TRACK" };
67+
}
68+
69+
if (process.env.CREATE_CLOUDFLARE_TELEMETRY_DISABLED === "1") {
70+
return {
71+
enabled: false,
72+
source: "CREATE_CLOUDFLARE_TELEMETRY_DISABLED",
73+
};
74+
}
75+
76+
return undefined;
77+
}
78+
6279
export function createReporter() {
6380
const events: Array<Promise<void>> = [];
6481
const als = new AsyncLocalStorage<{
@@ -67,7 +84,9 @@ export function createReporter() {
6784

6885
const config = readMetricsConfig() ?? {};
6986
const isFirstUsage = config.c3permission === undefined;
70-
const isEnabled = isTelemetryEnabled();
87+
const isEnabled =
88+
resolveTelemetryStatus()?.enabled ??
89+
(sparrow.hasSparrowSourceKey() && getC3Permission(config).enabled);
7190
const deviceId = getDeviceId(config);
7291
const packageManager = detectPackageManager();
7392
const platform = getPlatform();
@@ -110,17 +129,6 @@ export function createReporter() {
110129
events.push(request);
111130
}
112131

113-
function isTelemetryEnabled() {
114-
if (
115-
isDoNotTrackEnabled() ||
116-
process.env.CREATE_CLOUDFLARE_TELEMETRY_DISABLED === "1"
117-
) {
118-
return false;
119-
}
120-
121-
return sparrow.hasSparrowSourceKey() && getC3Permission(config).enabled;
122-
}
123-
124132
async function waitForAllEventsSettled(): Promise<void> {
125133
await Promise.allSettled(events);
126134
}
@@ -296,8 +304,9 @@ function updateC3Permission(enabled: boolean) {
296304
writeMetricsConfig(config);
297305
}
298306

299-
function logTelemetryStatus(enabled: boolean) {
300-
logRaw(`Status: ${enabled ? "Enabled" : "Disabled"}`);
307+
function logTelemetryStatus(enabled: boolean, source?: string) {
308+
const sourceMessage = source === undefined ? "" : ` (set by ${source})`;
309+
logRaw(`Status: ${enabled ? "Enabled" : "Disabled"}${sourceMessage}`);
301310
logRaw("");
302311
}
303312

@@ -320,9 +329,10 @@ export const runTelemetryCommand = (
320329
break;
321330
}
322331
case "status": {
323-
const telemetry = getC3Permission();
332+
const telemetry = resolveTelemetryStatus();
333+
const enabled = telemetry?.enabled ?? getC3Permission().enabled;
324334

325-
logTelemetryStatus(telemetry.enabled);
335+
logTelemetryStatus(enabled, telemetry?.source);
326336
break;
327337
}
328338
}

0 commit comments

Comments
 (0)