blob: 06f1a0c5f0e7eea9ab5202424021fdad4867e655 [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
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* See the License for the specific language governing permissions and
* limitations under the License.
import {NumericChangeId} from '../../types/common';
import {EventDetails} from '../../api/reporting';
import {PluginApi} from '../../api/plugin';
import {
} 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 {
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(eventDetails?: EventDetails): void;
changeFullyLoaded(): void;
diffViewDisplayed(): void;
diffViewFullyLoaded(): void;
diffViewContentDisplayed(): void;
fileListDisplayed(): void;
reportExtension(name: string): void;
pluginLoaded(name: string): void;
pluginsLoaded(pluginsList?: string[]): void;
pluginsFailed(pluginsList?: string[]): void;
error(err: Error, reporter?: string, details?: EventDetails): void;
* Reset named timer.
time(name: Timing): void;
* Finish named timer and report it to server.
timeEnd(name: Timing, eventDetails?: EventDetails): void;
* Reports just line timeEnd, but additionally reports an average given a
* denominator and a separate reporting 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.
name: Timing,
averageName: Timing,
denominator: number
): 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;
plugin: Pick<PluginApi, 'getPluginName'>,
object: string,
method: string
): void;
eventName: string | Interaction,
details?: EventDetails
): void;
* A draft interaction was started. Update the time-between-draft-actions
* timer.
recordDraftInteraction(): void;
reportErrorDialog(message: string): void;
setRepoName(repoName: string): void;
setChangeId(changeId: NumericChangeId): void;