blob: 08952f6ba8af3cd7b23e69de0887e3b0ea79a084 [file] [log] [blame]
/**
* @license
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export type EventValue = string | number | {error?: Error};
// TODO(dmfilippov): TS-fix-any use more specific type instead if possible
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type EventDetails = any;
export interface Timer {
reset(): this;
end(): this;
withMaximum(maximum: number): this;
}
export interface ReportingService {
reporter(
type: string,
category: string,
eventName: string,
eventValue?: EventValue,
eventDetails?: EventDetails,
opt_noLog?: boolean
): void;
appStarted(): void;
onVisibilityChange(): void;
beforeLocationChanged(): void;
locationChanged(page: string): void;
dashboardDisplayed(): void;
changeDisplayed(): void;
changeFullyLoaded(): void;
diffViewDisplayed(): void;
diffViewFullyLoaded(): void;
diffViewContentDisplayed(): void;
fileListDisplayed(): void;
reportExtension(name: string): void;
pluginLoaded(name: string): void;
pluginsLoaded(pluginsList?: string[]): void;
error(err: unknown, reporter?: string, details?: EventDetails): void;
/**
* Reset named timer.
*/
time(name: string): void;
/**
* Finish named timer and report it to server.
*/
timeEnd(name: string, eventDetails?: EventDetails): void;
/**
* Reports just line timeEnd, but additionally reports an average given a
* denominator and a separate reporiting name for the average.
*
* @param name Timing name.
* @param averageName Average timing name.
* @param denominator Number by which to divide the total to
* compute the average.
*/
timeEndWithAverage(
name: string,
averageName: string,
denominator: number
): void;
/**
* Get a timer object to for reporing 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: 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 coe.
*
* Every execution is only reported once per session.
*/
reportExecution(id: string, details: EventDetails): void;
reportInteraction(eventName: string, details?: EventDetails): void;
/**
* A draft interaction was started. Update the time-betweeen-draft-actions
* timer.
*/
recordDraftInteraction(): void;
reportErrorDialog(message: string): void;
setRepoName(repoName: string): void;
}