// DO NOT EDIT. This file is automatically generated.

export namespace pivot {
	export interface Request {
		group_by: string[] | null;
		operation: pivot.Operation;
		summary: pivot.Operation[] | null;
	}
}

export interface Go2TS {
	GenerateNominalTypes: boolean;
}

export interface Alert {
	id_as_string: string;
	display_name: string;
	query: string;
	alert: string;
	issue_tracker_component: SerializesToString;
	interesting: number;
	bug_uri_template: string;
	algo: ClusterAlgo;
	step: StepDetection;
	state: ConfigState;
	owner: string;
	step_up_only: boolean;
	direction: Direction;
	radius: number;
	k: number;
	group_by: string;
	sparse: boolean;
	minimum_num: number;
	category: string;
	action?: AlertAction;
	sub_name?: string;
	sub_revision?: string;
}

export interface AlertsStatus {
	alerts: number;
}

export interface RevisionInfo {
	master: string;
	bot: string;
	benchmark: string;
	start_revision: number;
	end_revision: number;
	test: string;
	is_improvement: boolean;
	bug_id: string;
	explore_url: string;
}

export interface ValuePercent {
	value: string;
	percent: number;
}

export interface StepFit {
	least_squares: number;
	turning_point: number;
	step_size: number;
	regression: number;
	status: StepFitStatus;
}

export interface ColumnHeader {
	offset: CommitNumber;
	timestamp: TimestampSeconds;
}

export interface ClusterSummary {
	centroid: number[] | null;
	shortcut: string;
	param_summaries2: ValuePercent[] | null;
	step_fit: StepFit | null;
	step_point: ColumnHeader | null;
	num: number;
	ts: string;
	notification_id?: string;
}

export interface FavoritesSectionLinkConfig {
	text: string;
	href: string;
	description: string;
}

export interface FavoritesSectionConfig {
	name: string;
	links: FavoritesSectionLinkConfig[] | null;
}

export interface Favorites {
	sections: FavoritesSectionConfig[] | null;
}

export interface QueryConfig {
	include_params?: string[] | null;
	default_param_selections?: { [key: string]: string[] | null } | null;
	default_url_values?: { [key: string]: string } | null;
}

export interface Commit {
	offset: CommitNumber;
	hash: string;
	ts: number;
	author: string;
	message: string;
	url: string;
	body: string;
}

export interface DataFrame {
	traceset: TraceSet;
	header: (ColumnHeader | null)[] | null;
	paramset: ReadOnlyParamSet;
	skip: number;
}

export interface Anomaly {
	id: number;
	test_path: string;
	bug_id: number;
	start_revision: number;
	end_revision: number;
	is_improvement: boolean;
	recovered: boolean;
	state: string;
	statistic: string;
	units: string;
	degrees_of_freedom: number;
	median_before_anomaly: number;
	median_after_anomaly: number;
	p_value: number;
	segment_size_after: number;
	segment_size_before: number;
	std_dev_before_anomaly: number;
	t_statistic: number;
}

export interface FrameResponse {
	dataframe: DataFrame | null;
	skps: number[] | null;
	msg: string;
	display_mode: FrameResponseDisplayMode;
	anomalymap: AnomalyMap;
}

export interface TriageStatus {
	status: Status;
	message: string;
}

export interface Regression {
	low: ClusterSummary | null;
	high: ClusterSummary | null;
	frame: FrameResponse | null;
	low_status: TriageStatus;
	high_status: TriageStatus;
	id: string;
	commit_number: CommitNumber;
	prev_commit_number: CommitNumber;
	alert_id: number;
	creation_time: string;
	median_before: number;
	median_after: number;
	is_improvement: boolean;
	cluster_type: string;
}

export interface RegressionAtCommit {
	cid: Commit;
	regression: Regression | null;
}

export interface FrameRequest {
	begin: number;
	end: number;
	formulas: string[] | null;
	queries: string[] | null;
	keys: string;
	tz: string;
	num_commits: number;
	request_type: RequestType;
	disable_filter_parent_traces: boolean;
	pivot: pivot.Request | null;
}

export interface AlertUpdateResponse {
	IDAsString: string;
}

export interface CIDHandlerResponse {
	commitSlice: Commit[] | null;
	logEntry: string;
}

export interface ClusterStartResponse {
	id: string;
}

export interface CommitDetailsRequest {
	cid: CommitNumber;
	traceid: string;
}

export interface CountHandlerRequest {
	q: string;
	begin: number;
	end: number;
}

export interface CountHandlerResponse {
	count: number;
	paramset: ReadOnlyParamSet;
}

export interface GetGraphsShortcutRequest {
	id: string;
}

export interface NextParamListHandlerRequest {
	q: string;
}

export interface NextParamListHandlerResponse {
	count: number;
	paramset: ReadOnlyParamSet;
}

export interface RangeRequest {
	offset: CommitNumber;
	begin: number;
	end: number;
}

export interface RegressionRangeRequest {
	begin: number;
	end: number;
	subset: Subset;
	alert_filter: string;
}

export interface RegressionRow {
	cid: Commit;
	columns: (Regression | null)[] | null;
}

export interface RegressionRangeResponse {
	header: (Alert | null)[] | null;
	table: (RegressionRow | null)[] | null;
	categories: string[] | null;
}

export interface ShiftRequest {
	begin: CommitNumber;
	end: CommitNumber;
}

export interface ShiftResponse {
	begin: number;
	end: number;
}

export interface SkPerfConfig {
	radius: number;
	key_order: string[] | null;
	num_shift: number;
	interesting: number;
	step_up_only: boolean;
	commit_range_url: string;
	demo: boolean;
	display_group_by: boolean;
	hide_list_of_commits_on_explore: boolean;
	notifications: NotifierTypes;
	fetch_chrome_perf_anomalies: boolean;
	feedback_url: string;
	chat_url: string;
	help_url_override: string;
	trace_format: TraceFormat;
	need_alert_action: boolean;
	bug_host_url: string;
}

export interface TriageRequest {
	cid: CommitNumber;
	alert: Alert;
	triage: TriageStatus;
	cluster_type: string;
}

export interface TriageResponse {
	bug: string;
}

export interface TryBugRequest {
	bug_uri_template: string;
}

export interface TryBugResponse {
	url: string;
}

export interface GraphConfig {
	queries: string[] | null;
	formulas: string[] | null;
	keys: string;
}

export interface GraphsShortcut {
	graphs: GraphConfig[] | null;
}

export interface CreateBisectRequest {
	comparison_mode: string;
	start_git_hash: string;
	end_git_hash: string;
	configuration: string;
	benchmark: string;
	story: string;
	chart: string;
	statistic: string;
	comparison_magnitude: string;
	pin: string;
	project: string;
	bug_id: string;
	user: string;
}

export interface CreateBisectResponse {
	jobId: string;
	jobUrl: string;
}

export interface FullSummary {
	summary: ClusterSummary;
	triage: TriageStatus;
	frame: FrameResponse;
}

export interface Domain {
	n: number;
	end: string;
	offset: number;
}

export interface RegressionDetectionRequest {
	alert: Alert | null;
	domain: Domain;
	step: number;
	total_queries: number;
}

export interface ClusterSummaries {
	Clusters: (ClusterSummary | null)[] | null;
	StdDevThreshold: number;
	K: number;
}

export interface RegressionDetectionResponse {
	summary: ClusterSummaries | null;
	frame: FrameResponse | null;
}

export interface TryBotRequest {
	kind: TryBotRequestKind;
	cl: CL;
	patch_number: number;
	commit_number: CommitNumber;
	query: string;
}

export interface TryBotResult {
	params: Params;
	median: number;
	lower: number;
	upper: number;
	stddevRatio: number;
	values: number[] | null;
}

export interface TryBotResponse {
	header: (ColumnHeader | null)[] | null;
	results: TryBotResult[] | null;
	paramset: ReadOnlyParamSet;
}

export interface Subscription {
	name?: string;
	revision?: string;
	bug_labels?: string[] | null;
	hotlists?: string[] | null;
	bug_component?: string;
	bug_priority?: number;
	bug_severity?: number;
	bug_cc_emails?: string[] | null;
	contact_email?: string;
}

export namespace progress {
	export interface Message {
		key: string;
		value: string;
	}
}

export namespace progress {
	export interface SerializedProgress {
		status: progress.Status;
		messages: progress.Message[];
		results?: any;
		url: string;
	}
}

export namespace ingest {
	export interface SingleMeasurement {
		value: string;
		measurement: number;
	}
}

export namespace ingest {
	export interface Result {
		key: { [key: string]: string } | null;
		measurement?: number;
		measurements?: { [key: string]: ingest.SingleMeasurement[] | null } | null;
	}
}

export namespace ingest {
	export interface Format {
		version: number;
		git_hash: string;
		issue?: CL;
		patchset?: string;
		key?: { [key: string]: string } | null;
		results: ingest.Result[] | null;
		links?: { [key: string]: string } | null;
	}
}

export type Params = { [key: string]: string } & {
	/**
	* WARNING: Do not reference this field from application code.
	*
	* This field exists solely to provide nominal typing. For reference, see
	* https://www.typescriptlang.org/play#example/nominal-typing.
	*/
	_paramsBrand: 'type alias for { [key: string]: string }'
};

export function Params(v: { [key: string]: string }): Params {
	return v as Params;
};

export type ParamSet = { [key: string]: string[] } & {
	/**
	* WARNING: Do not reference this field from application code.
	*
	* This field exists solely to provide nominal typing. For reference, see
	* https://www.typescriptlang.org/play#example/nominal-typing.
	*/
	_paramSetBrand: 'type alias for { [key: string]: string[] }'
};

export function ParamSet(v: { [key: string]: string[] }): ParamSet {
	return v as ParamSet;
};

export type ReadOnlyParamSet = { [key: string]: string[] } & {
	/**
	* WARNING: Do not reference this field from application code.
	*
	* This field exists solely to provide nominal typing. For reference, see
	* https://www.typescriptlang.org/play#example/nominal-typing.
	*/
	_readOnlyParamSetBrand: 'type alias for { [key: string]: string[] }'
};

export function ReadOnlyParamSet(v: { [key: string]: string[] }): ReadOnlyParamSet {
	return v as ReadOnlyParamSet;
};

export type Trace = number[] & {
	/**
	* WARNING: Do not reference this field from application code.
	*
	* This field exists solely to provide nominal typing. For reference, see
	* https://www.typescriptlang.org/play#example/nominal-typing.
	*/
	_traceBrand: 'type alias for number[]'
};

export function Trace(v: number[]): Trace {
	return v as Trace;
};

export type TraceSet = { [key: string]: Trace } & {
	/**
	* WARNING: Do not reference this field from application code.
	*
	* This field exists solely to provide nominal typing. For reference, see
	* https://www.typescriptlang.org/play#example/nominal-typing.
	*/
	_traceSetBrand: 'type alias for { [key: string]: Trace }'
};

export function TraceSet(v: { [key: string]: Trace }): TraceSet {
	return v as TraceSet;
};

export namespace pivot { export type Operation = 'sum' | 'avg' | 'geo' | 'std' | 'count' | 'min' | 'max'; }

export type SerializesToString = string & {
	/**
	* WARNING: Do not reference this field from application code.
	*
	* This field exists solely to provide nominal typing. For reference, see
	* https://www.typescriptlang.org/play#example/nominal-typing.
	*/
	_serializesToStringBrand: 'type alias for string'
};

export function SerializesToString(v: string): SerializesToString {
	return v as SerializesToString;
};

export type ClusterAlgo = 'kmeans' | 'stepfit';

export type StepDetection = '' | 'absolute' | 'const' | 'percent' | 'cohen' | 'mannwhitneyu';

export type ConfigState = 'ACTIVE' | 'DELETED';

export type Direction = 'UP' | 'DOWN' | 'BOTH';

export type AlertAction = 'noaction' | 'report' | 'bisect';

export type StepFitStatus = 'Low' | 'High' | 'Uninteresting';

export type CommitNumber = number & {
	/**
	* WARNING: Do not reference this field from application code.
	*
	* This field exists solely to provide nominal typing. For reference, see
	* https://www.typescriptlang.org/play#example/nominal-typing.
	*/
	_commitNumberBrand: 'type alias for number'
};

export function CommitNumber(v: number): CommitNumber {
	return v as CommitNumber;
};

export type TimestampSeconds = number & {
	/**
	* WARNING: Do not reference this field from application code.
	*
	* This field exists solely to provide nominal typing. For reference, see
	* https://www.typescriptlang.org/play#example/nominal-typing.
	*/
	_timestampSecondsBrand: 'type alias for number'
};

export function TimestampSeconds(v: number): TimestampSeconds {
	return v as TimestampSeconds;
};

export type FrameResponseDisplayMode = 'display_query_only' | 'display_plot' | 'display_pivot_table' | 'display_pivot_plot' | 'display_spinner';

export type CommitNumberAnomalyMap = { [key: number]: Anomaly } | null;

export type AnomalyMap = { [key: string]: CommitNumberAnomalyMap } | null;

export type Status = '' | 'positive' | 'negative' | 'untriaged';

export type RequestType = 0 | 1;

export type Subset = 'all' | 'regressions' | 'untriaged';

export type NotifierTypes = 'html_email' | 'markdown_issuetracker' | 'none';

export type TraceFormat = 'chrome' | '';

export type TryBotRequestKind = 'trybot' | 'commit';

export type CL = string & {
	/**
	* WARNING: Do not reference this field from application code.
	*
	* This field exists solely to provide nominal typing. For reference, see
	* https://www.typescriptlang.org/play#example/nominal-typing.
	*/
	_cLBrand: 'type alias for string'
};

export function CL(v: string): CL {
	return v as CL;
};

export type ProcessState = 'Running' | 'Success' | 'Error';

export namespace progress { export type Status = 'Running' | 'Finished' | 'Error'; }
