import { AsyncParallelHook } from 'tapable';
/**
 * @public
 */
export interface IMetricsData {
    /**
     * The command that was executed.
     */
    command: string;
    /**
     * Whether or not the command ran into errors
     */
    encounteredError?: boolean;
    /**
     * The total execution duration of all user-defined tasks from `heft.json`, in milliseconds.
     * This metric is for measuring the cumulative time spent on the underlying build steps for a project.
     * If running in watch mode, this will be the duration of the most recent incremental build.
     */
    taskTotalExecutionMs: number;
    /**
     * The total duration before Heft started executing user-defined tasks, in milliseconds.
     * This metric is for tracking the contribution of Heft itself to total build duration.
     */
    bootDurationMs: number;
    /**
     * How long the process has been alive, in milliseconds.
     * This metric is for watch mode, to analyze how long developers leave individual Heft sessions running.
     */
    totalUptimeMs: number;
    /**
     * The name of the operating system provided by NodeJS.
     */
    machineOs: string;
    /**
     * The processor's architecture.
     */
    machineArch: string;
    /**
     * The number of processor cores.
     */
    machineCores: number;
    /**
     * The processor's model name.
     */
    machineProcessor: string;
    /**
     * The total amount of memory the machine has, in megabytes.
     */
    machineTotalMemoryMB: number;
    /**
     * A map of commandline parameter names to their effective values
     */
    commandParameters: Record<string, string>;
}
/**
 * @public
 */
export interface IHeftRecordMetricsHookOptions {
    /**
     * @public
     */
    metricName: string;
    /**
     * @public
     */
    metricData: IMetricsData;
}
/**
 * @internal
 */
export interface IPerformanceData {
    taskTotalExecutionMs: number;
    encounteredError?: boolean;
}
/**
 * @internal
 * A simple performance metrics collector. A plugin is required to pipe data anywhere.
 */
export declare class MetricsCollector {
    readonly recordMetricsHook: AsyncParallelHook<IHeftRecordMetricsHookOptions>;
    private _bootDurationMs;
    private _startTimeMs;
    /**
     * Start metrics log timer.
     */
    setStartTime(): void;
    /**
     * Record metrics to the installed plugin(s).
     *
     * @param command - Describe the user command, e.g. `start` or `build`
     * @param parameterMap - Optional map of parameters to their values
     * @param performanceData - Optional performance data
     */
    recordAsync(command: string, performanceData?: Partial<IPerformanceData>, parameters?: Record<string, string>): Promise<void>;
}
//# sourceMappingURL=MetricsCollector.d.ts.map