Merge pull request #1976 from github/robertbrignull/local_results_telemetry

Emit telemetry for user interactions in the local results view
This commit is contained in:
Robert
2023-01-18 10:13:20 +00:00
committed by GitHub
6 changed files with 37 additions and 2 deletions

View File

@@ -65,6 +65,7 @@ import {
import { AbstractWebview, WebviewPanelConfig } from "./abstract-webview";
import { PAGE_SIZE } from "./config";
import { HistoryItemLabelProvider } from "./history-item-label-provider";
import { telemetryListener } from "./telemetry";
/**
* interface.ts
@@ -255,6 +256,7 @@ export class ResultsView extends AbstractWebview<
}
case "changeSort":
await this.changeRawSortState(msg.resultSetName, msg.sortState);
telemetryListener?.sendUIInteraction("local-results-column-sorting");
break;
case "changeInterpretedSort":
await this.changeInterpretedSortState(msg.sortState);
@@ -282,6 +284,9 @@ export class ResultsView extends AbstractWebview<
case "openFile":
await this.openFile(msg.filePath);
break;
case "telemetry":
telemetryListener?.sendUIInteraction(msg.action);
break;
default:
assertNever(msg);
}

View File

@@ -200,7 +200,8 @@ export type FromResultsViewMsg =
| ChangeInterpretedResultsSortMsg
| ViewLoadedMsg
| ChangePage
| OpenFileMsg;
| OpenFileMsg
| TelemetryMessage;
/**
* Message from the results view to open a database source

View File

@@ -30,6 +30,7 @@ import {
import { vscode } from "../vscode-api";
import { isWholeFileLoc, isLineColumnLoc } from "../../pure/bqrs-utils";
import { ScrollIntoViewHelper } from "./scroll-into-view-helper";
import { sendTelemetry } from "../common/telemetry";
export type PathTableProps = ResultTableProps & {
resultSet: InterpretedResultSet<SarifInterpretationData>;
@@ -64,6 +65,9 @@ export class PathTable extends React.Component<PathTableProps, PathTableState> {
expanded.add(str);
}
}
if (expanded) {
sendTelemetry("local-results-alert-table-path-expanded");
}
return { expanded };
});
e.stopPropagation();
@@ -185,6 +189,7 @@ export class PathTable extends React.Component<PathTableProps, PathTableState> {
...previousState,
selectedItem: resultKey,
}));
sendTelemetry("local-results-alert-table-path-selected");
};
};

View File

@@ -18,6 +18,7 @@ import { ResultRow } from "../../pure/bqrs-cli-types";
import { onNavigation } from "./results";
import { tryGetResolvableLocation } from "../../pure/bqrs-utils";
import { ScrollIntoViewHelper } from "./scroll-into-view-helper";
import { sendTelemetry } from "../common/telemetry";
export type RawTableProps = ResultTableProps & {
resultSet: RawTableResultSet;
@@ -44,6 +45,7 @@ export class RawTable extends React.Component<RawTableProps, RawTableState> {
...prev,
selectedItem: { row, column },
}));
sendTelemetry("local-results-raw-results-table-selected");
}
render(): React.ReactNode {

View File

@@ -10,6 +10,7 @@ import {
import { assertNever } from "../../pure/helpers-pure";
import { vscode } from "../vscode-api";
import { convertNonPrintableChars } from "../../text-utils";
import { sendTelemetry } from "../common/telemetry";
export interface ResultTableProps {
resultSet: ResultSet;
@@ -160,13 +161,20 @@ export function nextSortDirection(
}
}
function sendCodeQLLanguageGuidesTelemetry() {
sendTelemetry("codeql-language-guides-link");
}
export function emptyQueryResultsMessage(): JSX.Element {
return (
<div className="vscode-codeql__empty-query-message">
<span>
This query returned no results. If this isn&apos;t what you were
expecting, and for effective query-writing tips, check out the{" "}
<a href="https://codeql.github.com/docs/codeql-language-guides/">
<a
href="https://codeql.github.com/docs/codeql-language-guides/"
onClick={sendCodeQLLanguageGuidesTelemetry}
>
CodeQL language guides
</a>
.

View File

@@ -26,6 +26,7 @@ import {
openFile,
} from "./result-table-utils";
import { vscode } from "../vscode-api";
import { sendTelemetry } from "../common/telemetry";
const FILE_PATH_REGEX = /^(?:.+[\\/])*(.+)$/;
@@ -153,6 +154,7 @@ export class ResultTables extends React.Component<
pageNumber: 0,
selectedTable,
});
sendTelemetry("local-results-table-selection");
};
private alertTableExtras(): JSX.Element | undefined {
@@ -165,6 +167,9 @@ export class ResultTables extends React.Component<
this.setState({
problemsViewSelected: e.target.checked,
});
if (e.target.checked) {
sendTelemetry("local-results-show-results-in-problems-view");
}
if (resultsPath !== undefined) {
vscode.postMessage({
t: "toggleDiagnostics",
@@ -199,6 +204,10 @@ export class ResultTables extends React.Component<
return parsedResultSets.pageNumber * parsedResultSets.pageSize;
}
sendResultsPageChangedTelemetry() {
sendTelemetry("local-results-alert-table-page-changed");
}
renderPageButtons(): JSX.Element {
const { parsedResultSets } = this.props;
const selectedTable = this.state.selectedTable;
@@ -217,6 +226,7 @@ export class ResultTables extends React.Component<
const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
this.setState({ selectedPage: e.target.value });
this.sendResultsPageChangedTelemetry();
};
const choosePage = (input: string) => {
const pageNumber = parseInt(input);
@@ -239,6 +249,7 @@ export class ResultTables extends React.Component<
pageNumber: Math.max(parsedResultSets.pageNumber - 1, 0),
selectedTable,
});
this.sendResultsPageChangedTelemetry();
};
const nextPage = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
vscode.postMessage({
@@ -246,10 +257,12 @@ export class ResultTables extends React.Component<
pageNumber: Math.min(parsedResultSets.pageNumber + 1, numPages - 1),
selectedTable,
});
this.sendResultsPageChangedTelemetry();
};
const openQuery = () => {
openFile(this.props.queryPath);
sendTelemetry("local-results-open-query-file");
};
const fileName = FILE_PATH_REGEX.exec(this.props.queryPath)?.[1] || "query";
@@ -334,6 +347,7 @@ export class ResultTables extends React.Component<
nonemptyRawResults={nonemptyRawResults}
showRawResults={() => {
this.setState({ selectedTable: SELECT_TABLE_NAME });
sendTelemetry("local-results-show-raw-results");
}}
offset={this.getOffset()}
/>