blob: 9b08a6e739766cbf298482b884267dbf24c518dc [file] [log] [blame]
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import {Finalizable} from '../registry';
import {NumericChangeId} from '../../types/common';
import {EventDetails, ReportingOptions} from '../../api/reporting';
import {PluginApi} from '../../api/plugin';
import {
Execution,
Interaction,
LifeCycle,
Timing,
} from '../../constants/reporting';
export type EventValue = string | number | {error?: Error};
export interface Timer {
reset(): this;
end(eventDetails?: EventDetails): this;
withMaximum(maximum: number): this;
}
export interface ReportingService extends Finalizable {
reporter(
type: string,
category: string,
eventName: string,
eventValue?: EventValue,
eventDetails?: EventDetails,
noLog?: boolean
): void;
appStarted(): void;
onVisibilityChange(): void;
onFocusChange(): void;
beforeLocationChanged(): void;
locationChanged(page: string): void;
dashboardDisplayed(): void;
changeDisplayed(eventDetails?: EventDetails): void;
changeFullyLoaded(): void;
diffViewDisplayed(): void;
diffViewContentDisplayed(): void;
fileListDisplayed(): void;
reportExtension(name: string): void;
pluginLoaded(name: string): void;
pluginsLoaded(pluginsList?: string[]): void;
pluginsFailed(pluginsList?: string[]): void;
error(errorSource: string, error: Error, details?: EventDetails): void;
/**
* Reset named timer.
*/
time(name: Timing): void;
/**
* Finish named timer and report it to server.
*/
timeEnd(name: Timing, eventDetails?: EventDetails): void;
/**
* Get a timer object for reporting a user timing. The start time will be
* the time that the object has been created, and the end time will be the
* time that the "end" method is called on the object.
*/
getTimer(name: string): Timer;
/**
* Log timing information for an RPC.
*
* @param anonymizedUrl The URL of the RPC with tokens obfuscated.
* @param elapsed The time elapsed of the RPC.
*/
reportRpcTiming(anonymizedUrl: string, elapsed: number): void;
reportLifeCycle(eventName: LifeCycle, details?: EventDetails): void;
reportPluginLifeCycleLog(eventName: string, details?: EventDetails): void;
reportPluginInteractionLog(eventName: string, details?: EventDetails): void;
/**
* Use this method, if you want to check/count how often a certain code path
* is executed. For example you can use this method to prove that certain code
* paths are dead: Add reportExecution(), check the logs a week later, then
* safely remove the code.
*
* Every execution is only reported once per session.
*/
reportExecution(id: Execution, details?: EventDetails): void;
trackApi(
plugin: Pick<PluginApi, 'getPluginName'>,
object: string,
method: string
): void;
reportInteraction(
eventName: string | Interaction,
details?: EventDetails,
options?: ReportingOptions
): void;
reportErrorDialog(message: string): void;
setRepoName(repoName: string): void;
setChangeId(changeId: NumericChangeId): void;
}