Refactor telemetry usage flow (#7522)

This commit is contained in:
Bjorn Lu 2023-06-30 17:28:17 +08:00 committed by GitHub
parent 5b1745bf31
commit fcba0f0199
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 18 additions and 49 deletions

View file

@ -1375,7 +1375,6 @@ export interface AstroSettings {
tsConfig: TsConfigJson | undefined;
tsConfigPath: string | undefined;
watchFiles: string[];
forceDisableTelemetry: boolean;
timer: AstroTimer;
}

View file

@ -148,7 +148,7 @@ async function runCommand(cmd: string, flags: yargs.Arguments) {
telemetry.record(event.eventCliSession(cmd));
const packages = flags._.slice(3) as string[];
return await add(packages, { cwd: root, flags, logging, telemetry });
return await add(packages, { cwd: root, flags, logging });
}
case 'docs': {
telemetry.record(event.eventCliSession(cmd));
@ -170,7 +170,7 @@ async function runCommand(cmd: string, flags: yargs.Arguments) {
// Do not track session start, since the user may be trying to enable,
// disable, or modify telemetry settings.
const subcommand = flags._[3]?.toString();
return await telemetryHandler.update(subcommand, { flags, telemetry });
return await telemetryHandler.update(subcommand, { flags });
}
}
@ -209,7 +209,6 @@ async function runCommand(cmd: string, flags: yargs.Arguments) {
configFlagPath,
flags,
logging,
telemetry,
handleConfigError(e) {
handleConfigError(e, { cmd, cwd: root, flags, logging });
info(logging, 'astro', 'Continuing with previous valid configuration\n');
@ -224,7 +223,6 @@ async function runCommand(cmd: string, flags: yargs.Arguments) {
return await build(settings, {
flags,
logging,
telemetry,
teardownCompiler: true,
mode: flags.mode,
});
@ -256,7 +254,7 @@ async function runCommand(cmd: string, flags: yargs.Arguments) {
case 'preview': {
const { default: preview } = await import('../core/preview/index.js');
const server = await preview(settings, { logging, telemetry, flags });
const server = await preview(settings, { logging, flags });
if (server) {
return await server.closed(); // keep alive until the server is closed
}

View file

@ -1,13 +1,13 @@
/* eslint-disable no-console */
import type { AstroTelemetry } from '@astrojs/telemetry';
import type yargs from 'yargs-parser';
import * as msg from '../core/messages.js';
import { telemetry } from '../events/index.js';
export interface TelemetryOptions {
flags: yargs.Arguments;
telemetry: AstroTelemetry;
}
export async function update(subcommand: string, { flags, telemetry }: TelemetryOptions) {
export async function update(subcommand: string, { flags }: TelemetryOptions) {
const isValid = ['enable', 'disable', 'reset'].includes(subcommand);
if (flags.help || flags.h || !isValid) {

View file

@ -1,4 +1,3 @@
import type { AstroTelemetry } from '@astrojs/telemetry';
import boxen from 'boxen';
import { diffWords } from 'diff';
import { execa } from 'execa';
@ -30,7 +29,6 @@ import { wrapDefaultExport } from './wrapper.js';
export interface AddOptions {
logging: LogOptions;
flags: yargs.Arguments;
telemetry: AstroTelemetry;
cwd?: string;
}
@ -83,7 +81,7 @@ async function getRegistry(): Promise<string> {
return stdout || 'https://registry.npmjs.org';
}
export default async function add(names: string[], { cwd, flags, logging, telemetry }: AddOptions) {
export default async function add(names: string[], { cwd, flags, logging }: AddOptions) {
applyPolyfill();
if (flags.help || names.length === 0) {
printHelp({

View file

@ -1,4 +1,3 @@
import type { AstroTelemetry } from '@astrojs/telemetry';
import type { AstroConfig, AstroSettings, ManifestData, RuntimeMode } from '../../@types/astro';
import fs from 'fs';
@ -26,7 +25,6 @@ import { getTimeStat } from './util.js';
export interface BuildOptions {
mode?: RuntimeMode;
logging: LogOptions;
telemetry: AstroTelemetry;
/**
* Teardown the compiler WASM instance after build. This can improve performance when
* building once, but may cause a performance hit if building multiple times in a row.

View file

@ -104,7 +104,6 @@ export function createBaseSettings(config: AstroConfig): AstroSettings {
scripts: [],
clientDirectives: getDefaultClientDirectives(),
watchFiles: [],
forceDisableTelemetry: false,
timer: new AstroTimer(),
};
}

View file

@ -46,7 +46,6 @@ export interface CreateContainerParams {
// The string passed to --config and the resolved path
configFlag?: string;
configFlagPath?: string;
disableTelemetry?: boolean;
}
export async function createContainer(params: CreateContainerParams = {}): Promise<Container> {
@ -55,13 +54,8 @@ export async function createContainer(params: CreateContainerParams = {}): Promi
logging = defaultLogging,
settings = await createDefaultDevSettings(params.userConfig, params.root),
fs = nodeFs,
disableTelemetry,
} = params;
if (disableTelemetry) {
settings.forceDisableTelemetry = true;
}
// Initialize
applyPolyfill();
settings = await runHookConfigSetup({
@ -149,7 +143,7 @@ export async function runInContainer(
params: CreateContainerParams,
callback: (container: Container) => Promise<void> | void
) {
const container = await createContainer({ ...params, disableTelemetry: true });
const container = await createContainer(params);
try {
await callback(container);
} finally {

View file

@ -1,4 +1,3 @@
import type { AstroTelemetry } from '@astrojs/telemetry';
import type http from 'http';
import { cyan } from 'kleur/colors';
import type { AddressInfo } from 'net';
@ -7,6 +6,7 @@ import type * as vite from 'vite';
import type yargs from 'yargs-parser';
import type { AstroSettings } from '../../@types/astro';
import { attachContentServerListeners } from '../../content/index.js';
import { telemetry } from '../../events/index.js';
import { info, warn, type LogOptions } from '../logger/core.js';
import * as msg from '../messages.js';
import { printHelp } from '../messages.js';
@ -18,7 +18,6 @@ export interface DevOptions {
configFlagPath: string | undefined;
flags?: yargs.Arguments;
logging: LogOptions;
telemetry: AstroTelemetry;
handleConfigError: (error: Error) => void;
isRestart?: boolean;
}
@ -56,7 +55,7 @@ export default async function dev(
}
const devStart = performance.now();
await options.telemetry.record([]);
await telemetry.record([]);
// Create a container which sets up the Vite server.
const restart = await createContainerWithAutomaticRestart({

View file

@ -1,4 +1,3 @@
import type { AstroTelemetry } from '@astrojs/telemetry';
import { cyan } from 'kleur/colors';
import { createRequire } from 'module';
import { pathToFileURL } from 'url';
@ -12,7 +11,6 @@ import { getResolvedHostForHttpServer } from './util.js';
interface PreviewOptions {
logging: LogOptions;
telemetry: AstroTelemetry;
flags?: Arguments;
}

View file

@ -32,7 +32,6 @@ export function createDevelopmentEnvironment(
site: settings.config.site,
ssr: isServerLikeOutput(settings.config),
streaming: true,
telemetry: Boolean(settings.forceDisableTelemetry),
});
return {

View file

@ -23,7 +23,6 @@ export interface Environment {
site?: string;
ssr: boolean;
streaming: boolean;
telemetry?: boolean;
}
export type CreateEnvironmentArgs = Environment;
@ -53,6 +52,5 @@ export function createBasicEnvironment(options: CreateBasicEnvironmentArgs): Env
routeCache: new RouteCache(options.logging, mode),
ssr: options.ssr ?? true,
streaming: options.streaming ?? true,
telemetry: false,
});
}

View file

@ -91,9 +91,7 @@ export async function handleRequest(
// Our error should already be complete, but let's try to add a bit more through some guesswork
const errorWithMetadata = collectErrorMetadata(err, config.root);
if (env.telemetry !== false) {
telemetry.record(eventError({ cmd: 'dev', err: errorWithMetadata, isFatal: false }));
}
error(env.logging, null, msg.formatErrorMessage(errorWithMetadata));
handle500Response(moduleLoader, res, errorWithMetadata);

View file

@ -22,6 +22,9 @@ polyfill(globalThis, {
exclude: 'window document',
});
// Disable telemetry when running tests
process.env.ASTRO_TELEMETRY_DISABLED = true;
/**
* @typedef {import('undici').Response} Response
* @typedef {import('../src/core/dev/dev').DedvServer} DevServer
@ -146,13 +149,6 @@ export async function loadFixture(inlineConfig) {
return settings;
};
/** @type {import('@astrojs/telemetry').AstroTelemetry} */
const telemetry = {
record() {
return Promise.resolve();
},
};
const resolveUrl = (url) =>
`http://${config.server.host || 'localhost'}:${config.server.port}${url.replace(/^\/?/, '/')}`;
@ -184,7 +180,7 @@ export async function loadFixture(inlineConfig) {
return {
build: async (opts = {}) => {
process.env.NODE_ENV = 'production';
return build(await getSettings(), { logging, telemetry, ...opts });
return build(await getSettings(), { logging, ...opts });
},
sync: async (opts) => sync(await getSettings(), { logging, fs, ...opts }),
check: async (opts) => {
@ -192,7 +188,7 @@ export async function loadFixture(inlineConfig) {
},
startDevServer: async (opts = {}) => {
process.env.NODE_ENV = 'development';
devServer = await dev(await getSettings(), { logging, telemetry, ...opts });
devServer = await dev(await getSettings(), { logging, ...opts });
config.server.host = parseAddressToHost(devServer.address.address); // update host
config.server.port = devServer.address.port; // update port
return devServer;
@ -214,11 +210,7 @@ export async function loadFixture(inlineConfig) {
},
preview: async (opts = {}) => {
process.env.NODE_ENV = 'production';
const previewServer = await preview(await getSettings(), {
logging,
telemetry,
...opts,
});
const previewServer = await preview(await getSettings(), { logging, ...opts });
config.server.host = parseAddressToHost(previewServer.host); // update host
config.server.port = previewServer.port; // update port
return previewServer;

View file

@ -135,7 +135,6 @@ describe('Route matching', () => {
output: 'hybrid',
adapter: testAdapter(),
},
disableTelemetry: true,
});
settings = container.settings;

View file

@ -9,7 +9,7 @@ describe('<Code />', () => {
let container;
let mod;
before(async () => {
container = await createContainer({ root, disableTelemetry: true });
container = await createContainer({ root });
const loader = createViteLoader(container.viteServer);
mod = await loader.import('astro/components/Shiki.js');
});