Refactor telemetry usage flow (#7522)
This commit is contained in:
parent
5b1745bf31
commit
fcba0f0199
15 changed files with 18 additions and 49 deletions
|
@ -1375,7 +1375,6 @@ export interface AstroSettings {
|
||||||
tsConfig: TsConfigJson | undefined;
|
tsConfig: TsConfigJson | undefined;
|
||||||
tsConfigPath: string | undefined;
|
tsConfigPath: string | undefined;
|
||||||
watchFiles: string[];
|
watchFiles: string[];
|
||||||
forceDisableTelemetry: boolean;
|
|
||||||
timer: AstroTimer;
|
timer: AstroTimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -148,7 +148,7 @@ async function runCommand(cmd: string, flags: yargs.Arguments) {
|
||||||
|
|
||||||
telemetry.record(event.eventCliSession(cmd));
|
telemetry.record(event.eventCliSession(cmd));
|
||||||
const packages = flags._.slice(3) as string[];
|
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': {
|
case 'docs': {
|
||||||
telemetry.record(event.eventCliSession(cmd));
|
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,
|
// Do not track session start, since the user may be trying to enable,
|
||||||
// disable, or modify telemetry settings.
|
// disable, or modify telemetry settings.
|
||||||
const subcommand = flags._[3]?.toString();
|
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,
|
configFlagPath,
|
||||||
flags,
|
flags,
|
||||||
logging,
|
logging,
|
||||||
telemetry,
|
|
||||||
handleConfigError(e) {
|
handleConfigError(e) {
|
||||||
handleConfigError(e, { cmd, cwd: root, flags, logging });
|
handleConfigError(e, { cmd, cwd: root, flags, logging });
|
||||||
info(logging, 'astro', 'Continuing with previous valid configuration\n');
|
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, {
|
return await build(settings, {
|
||||||
flags,
|
flags,
|
||||||
logging,
|
logging,
|
||||||
telemetry,
|
|
||||||
teardownCompiler: true,
|
teardownCompiler: true,
|
||||||
mode: flags.mode,
|
mode: flags.mode,
|
||||||
});
|
});
|
||||||
|
@ -256,7 +254,7 @@ async function runCommand(cmd: string, flags: yargs.Arguments) {
|
||||||
case 'preview': {
|
case 'preview': {
|
||||||
const { default: preview } = await import('../core/preview/index.js');
|
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) {
|
if (server) {
|
||||||
return await server.closed(); // keep alive until the server is closed
|
return await server.closed(); // keep alive until the server is closed
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
import type { AstroTelemetry } from '@astrojs/telemetry';
|
|
||||||
import type yargs from 'yargs-parser';
|
import type yargs from 'yargs-parser';
|
||||||
import * as msg from '../core/messages.js';
|
import * as msg from '../core/messages.js';
|
||||||
|
import { telemetry } from '../events/index.js';
|
||||||
|
|
||||||
export interface TelemetryOptions {
|
export interface TelemetryOptions {
|
||||||
flags: yargs.Arguments;
|
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);
|
const isValid = ['enable', 'disable', 'reset'].includes(subcommand);
|
||||||
|
|
||||||
if (flags.help || flags.h || !isValid) {
|
if (flags.help || flags.h || !isValid) {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import type { AstroTelemetry } from '@astrojs/telemetry';
|
|
||||||
import boxen from 'boxen';
|
import boxen from 'boxen';
|
||||||
import { diffWords } from 'diff';
|
import { diffWords } from 'diff';
|
||||||
import { execa } from 'execa';
|
import { execa } from 'execa';
|
||||||
|
@ -30,7 +29,6 @@ import { wrapDefaultExport } from './wrapper.js';
|
||||||
export interface AddOptions {
|
export interface AddOptions {
|
||||||
logging: LogOptions;
|
logging: LogOptions;
|
||||||
flags: yargs.Arguments;
|
flags: yargs.Arguments;
|
||||||
telemetry: AstroTelemetry;
|
|
||||||
cwd?: string;
|
cwd?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +81,7 @@ async function getRegistry(): Promise<string> {
|
||||||
return stdout || 'https://registry.npmjs.org';
|
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();
|
applyPolyfill();
|
||||||
if (flags.help || names.length === 0) {
|
if (flags.help || names.length === 0) {
|
||||||
printHelp({
|
printHelp({
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import type { AstroTelemetry } from '@astrojs/telemetry';
|
|
||||||
import type { AstroConfig, AstroSettings, ManifestData, RuntimeMode } from '../../@types/astro';
|
import type { AstroConfig, AstroSettings, ManifestData, RuntimeMode } from '../../@types/astro';
|
||||||
|
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
@ -26,7 +25,6 @@ import { getTimeStat } from './util.js';
|
||||||
export interface BuildOptions {
|
export interface BuildOptions {
|
||||||
mode?: RuntimeMode;
|
mode?: RuntimeMode;
|
||||||
logging: LogOptions;
|
logging: LogOptions;
|
||||||
telemetry: AstroTelemetry;
|
|
||||||
/**
|
/**
|
||||||
* Teardown the compiler WASM instance after build. This can improve performance when
|
* 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.
|
* building once, but may cause a performance hit if building multiple times in a row.
|
||||||
|
|
|
@ -104,7 +104,6 @@ export function createBaseSettings(config: AstroConfig): AstroSettings {
|
||||||
scripts: [],
|
scripts: [],
|
||||||
clientDirectives: getDefaultClientDirectives(),
|
clientDirectives: getDefaultClientDirectives(),
|
||||||
watchFiles: [],
|
watchFiles: [],
|
||||||
forceDisableTelemetry: false,
|
|
||||||
timer: new AstroTimer(),
|
timer: new AstroTimer(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,6 @@ export interface CreateContainerParams {
|
||||||
// The string passed to --config and the resolved path
|
// The string passed to --config and the resolved path
|
||||||
configFlag?: string;
|
configFlag?: string;
|
||||||
configFlagPath?: string;
|
configFlagPath?: string;
|
||||||
disableTelemetry?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createContainer(params: CreateContainerParams = {}): Promise<Container> {
|
export async function createContainer(params: CreateContainerParams = {}): Promise<Container> {
|
||||||
|
@ -55,13 +54,8 @@ export async function createContainer(params: CreateContainerParams = {}): Promi
|
||||||
logging = defaultLogging,
|
logging = defaultLogging,
|
||||||
settings = await createDefaultDevSettings(params.userConfig, params.root),
|
settings = await createDefaultDevSettings(params.userConfig, params.root),
|
||||||
fs = nodeFs,
|
fs = nodeFs,
|
||||||
disableTelemetry,
|
|
||||||
} = params;
|
} = params;
|
||||||
|
|
||||||
if (disableTelemetry) {
|
|
||||||
settings.forceDisableTelemetry = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize
|
// Initialize
|
||||||
applyPolyfill();
|
applyPolyfill();
|
||||||
settings = await runHookConfigSetup({
|
settings = await runHookConfigSetup({
|
||||||
|
@ -149,7 +143,7 @@ export async function runInContainer(
|
||||||
params: CreateContainerParams,
|
params: CreateContainerParams,
|
||||||
callback: (container: Container) => Promise<void> | void
|
callback: (container: Container) => Promise<void> | void
|
||||||
) {
|
) {
|
||||||
const container = await createContainer({ ...params, disableTelemetry: true });
|
const container = await createContainer(params);
|
||||||
try {
|
try {
|
||||||
await callback(container);
|
await callback(container);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import type { AstroTelemetry } from '@astrojs/telemetry';
|
|
||||||
import type http from 'http';
|
import type http from 'http';
|
||||||
import { cyan } from 'kleur/colors';
|
import { cyan } from 'kleur/colors';
|
||||||
import type { AddressInfo } from 'net';
|
import type { AddressInfo } from 'net';
|
||||||
|
@ -7,6 +6,7 @@ import type * as vite from 'vite';
|
||||||
import type yargs from 'yargs-parser';
|
import type yargs from 'yargs-parser';
|
||||||
import type { AstroSettings } from '../../@types/astro';
|
import type { AstroSettings } from '../../@types/astro';
|
||||||
import { attachContentServerListeners } from '../../content/index.js';
|
import { attachContentServerListeners } from '../../content/index.js';
|
||||||
|
import { telemetry } from '../../events/index.js';
|
||||||
import { info, warn, type LogOptions } from '../logger/core.js';
|
import { info, warn, type LogOptions } from '../logger/core.js';
|
||||||
import * as msg from '../messages.js';
|
import * as msg from '../messages.js';
|
||||||
import { printHelp } from '../messages.js';
|
import { printHelp } from '../messages.js';
|
||||||
|
@ -18,7 +18,6 @@ export interface DevOptions {
|
||||||
configFlagPath: string | undefined;
|
configFlagPath: string | undefined;
|
||||||
flags?: yargs.Arguments;
|
flags?: yargs.Arguments;
|
||||||
logging: LogOptions;
|
logging: LogOptions;
|
||||||
telemetry: AstroTelemetry;
|
|
||||||
handleConfigError: (error: Error) => void;
|
handleConfigError: (error: Error) => void;
|
||||||
isRestart?: boolean;
|
isRestart?: boolean;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +55,7 @@ export default async function dev(
|
||||||
}
|
}
|
||||||
|
|
||||||
const devStart = performance.now();
|
const devStart = performance.now();
|
||||||
await options.telemetry.record([]);
|
await telemetry.record([]);
|
||||||
|
|
||||||
// Create a container which sets up the Vite server.
|
// Create a container which sets up the Vite server.
|
||||||
const restart = await createContainerWithAutomaticRestart({
|
const restart = await createContainerWithAutomaticRestart({
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import type { AstroTelemetry } from '@astrojs/telemetry';
|
|
||||||
import { cyan } from 'kleur/colors';
|
import { cyan } from 'kleur/colors';
|
||||||
import { createRequire } from 'module';
|
import { createRequire } from 'module';
|
||||||
import { pathToFileURL } from 'url';
|
import { pathToFileURL } from 'url';
|
||||||
|
@ -12,7 +11,6 @@ import { getResolvedHostForHttpServer } from './util.js';
|
||||||
|
|
||||||
interface PreviewOptions {
|
interface PreviewOptions {
|
||||||
logging: LogOptions;
|
logging: LogOptions;
|
||||||
telemetry: AstroTelemetry;
|
|
||||||
flags?: Arguments;
|
flags?: Arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,6 @@ export function createDevelopmentEnvironment(
|
||||||
site: settings.config.site,
|
site: settings.config.site,
|
||||||
ssr: isServerLikeOutput(settings.config),
|
ssr: isServerLikeOutput(settings.config),
|
||||||
streaming: true,
|
streaming: true,
|
||||||
telemetry: Boolean(settings.forceDisableTelemetry),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -23,7 +23,6 @@ export interface Environment {
|
||||||
site?: string;
|
site?: string;
|
||||||
ssr: boolean;
|
ssr: boolean;
|
||||||
streaming: boolean;
|
streaming: boolean;
|
||||||
telemetry?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export type CreateEnvironmentArgs = Environment;
|
export type CreateEnvironmentArgs = Environment;
|
||||||
|
@ -53,6 +52,5 @@ export function createBasicEnvironment(options: CreateBasicEnvironmentArgs): Env
|
||||||
routeCache: new RouteCache(options.logging, mode),
|
routeCache: new RouteCache(options.logging, mode),
|
||||||
ssr: options.ssr ?? true,
|
ssr: options.ssr ?? true,
|
||||||
streaming: options.streaming ?? true,
|
streaming: options.streaming ?? true,
|
||||||
telemetry: false,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
// Our error should already be complete, but let's try to add a bit more through some guesswork
|
||||||
const errorWithMetadata = collectErrorMetadata(err, config.root);
|
const errorWithMetadata = collectErrorMetadata(err, config.root);
|
||||||
|
|
||||||
if (env.telemetry !== false) {
|
telemetry.record(eventError({ cmd: 'dev', err: errorWithMetadata, isFatal: false }));
|
||||||
telemetry.record(eventError({ cmd: 'dev', err: errorWithMetadata, isFatal: false }));
|
|
||||||
}
|
|
||||||
|
|
||||||
error(env.logging, null, msg.formatErrorMessage(errorWithMetadata));
|
error(env.logging, null, msg.formatErrorMessage(errorWithMetadata));
|
||||||
handle500Response(moduleLoader, res, errorWithMetadata);
|
handle500Response(moduleLoader, res, errorWithMetadata);
|
||||||
|
|
|
@ -22,6 +22,9 @@ polyfill(globalThis, {
|
||||||
exclude: 'window document',
|
exclude: 'window document',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Disable telemetry when running tests
|
||||||
|
process.env.ASTRO_TELEMETRY_DISABLED = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {import('undici').Response} Response
|
* @typedef {import('undici').Response} Response
|
||||||
* @typedef {import('../src/core/dev/dev').DedvServer} DevServer
|
* @typedef {import('../src/core/dev/dev').DedvServer} DevServer
|
||||||
|
@ -146,13 +149,6 @@ export async function loadFixture(inlineConfig) {
|
||||||
return settings;
|
return settings;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @type {import('@astrojs/telemetry').AstroTelemetry} */
|
|
||||||
const telemetry = {
|
|
||||||
record() {
|
|
||||||
return Promise.resolve();
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const resolveUrl = (url) =>
|
const resolveUrl = (url) =>
|
||||||
`http://${config.server.host || 'localhost'}:${config.server.port}${url.replace(/^\/?/, '/')}`;
|
`http://${config.server.host || 'localhost'}:${config.server.port}${url.replace(/^\/?/, '/')}`;
|
||||||
|
|
||||||
|
@ -184,7 +180,7 @@ export async function loadFixture(inlineConfig) {
|
||||||
return {
|
return {
|
||||||
build: async (opts = {}) => {
|
build: async (opts = {}) => {
|
||||||
process.env.NODE_ENV = 'production';
|
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 }),
|
sync: async (opts) => sync(await getSettings(), { logging, fs, ...opts }),
|
||||||
check: async (opts) => {
|
check: async (opts) => {
|
||||||
|
@ -192,7 +188,7 @@ export async function loadFixture(inlineConfig) {
|
||||||
},
|
},
|
||||||
startDevServer: async (opts = {}) => {
|
startDevServer: async (opts = {}) => {
|
||||||
process.env.NODE_ENV = 'development';
|
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.host = parseAddressToHost(devServer.address.address); // update host
|
||||||
config.server.port = devServer.address.port; // update port
|
config.server.port = devServer.address.port; // update port
|
||||||
return devServer;
|
return devServer;
|
||||||
|
@ -214,11 +210,7 @@ export async function loadFixture(inlineConfig) {
|
||||||
},
|
},
|
||||||
preview: async (opts = {}) => {
|
preview: async (opts = {}) => {
|
||||||
process.env.NODE_ENV = 'production';
|
process.env.NODE_ENV = 'production';
|
||||||
const previewServer = await preview(await getSettings(), {
|
const previewServer = await preview(await getSettings(), { logging, ...opts });
|
||||||
logging,
|
|
||||||
telemetry,
|
|
||||||
...opts,
|
|
||||||
});
|
|
||||||
config.server.host = parseAddressToHost(previewServer.host); // update host
|
config.server.host = parseAddressToHost(previewServer.host); // update host
|
||||||
config.server.port = previewServer.port; // update port
|
config.server.port = previewServer.port; // update port
|
||||||
return previewServer;
|
return previewServer;
|
||||||
|
|
|
@ -135,7 +135,6 @@ describe('Route matching', () => {
|
||||||
output: 'hybrid',
|
output: 'hybrid',
|
||||||
adapter: testAdapter(),
|
adapter: testAdapter(),
|
||||||
},
|
},
|
||||||
disableTelemetry: true,
|
|
||||||
});
|
});
|
||||||
settings = container.settings;
|
settings = container.settings;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ describe('<Code />', () => {
|
||||||
let container;
|
let container;
|
||||||
let mod;
|
let mod;
|
||||||
before(async () => {
|
before(async () => {
|
||||||
container = await createContainer({ root, disableTelemetry: true });
|
container = await createContainer({ root });
|
||||||
const loader = createViteLoader(container.viteServer);
|
const loader = createViteLoader(container.viteServer);
|
||||||
mod = await loader.import('astro/components/Shiki.js');
|
mod = await loader.import('astro/components/Shiki.js');
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue