From 10776759c7e908abaeb5cf098fffaae2fbf6120b Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 17 Jan 2023 12:55:50 +0000 Subject: [PATCH 1/4] Support telemetry from local results view --- extensions/ql-vscode/src/interface.ts | 4 ++++ extensions/ql-vscode/src/pure/interface-types.ts | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/extensions/ql-vscode/src/interface.ts b/extensions/ql-vscode/src/interface.ts index 179e6dced56..4a168388e92 100644 --- a/extensions/ql-vscode/src/interface.ts +++ b/extensions/ql-vscode/src/interface.ts @@ -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 @@ -282,6 +283,9 @@ export class ResultsView extends AbstractWebview< case "openFile": await this.openFile(msg.filePath); break; + case "telemetry": + telemetryListener?.sendUIInteraction(msg.action); + break; default: assertNever(msg); } diff --git a/extensions/ql-vscode/src/pure/interface-types.ts b/extensions/ql-vscode/src/pure/interface-types.ts index dabf31369fb..39850e7c324 100644 --- a/extensions/ql-vscode/src/pure/interface-types.ts +++ b/extensions/ql-vscode/src/pure/interface-types.ts @@ -200,7 +200,8 @@ export type FromResultsViewMsg = | ChangeInterpretedResultsSortMsg | ViewLoadedMsg | ChangePage - | OpenFileMsg; + | OpenFileMsg + | TelemetryMessage; /** * Message from the results view to open a database source From f1dbc22a9a7f5a9c53d08fcec5cf5726b29ba047 Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 17 Jan 2023 12:58:11 +0000 Subject: [PATCH 2/4] output telemtry from local results view on state changes --- .../ql-vscode/src/view/results/alert-table.tsx | 5 +++++ .../ql-vscode/src/view/results/raw-results-table.tsx | 2 ++ .../ql-vscode/src/view/results/result-tables.tsx | 12 ++++++++++++ 3 files changed, 19 insertions(+) diff --git a/extensions/ql-vscode/src/view/results/alert-table.tsx b/extensions/ql-vscode/src/view/results/alert-table.tsx index 88b85885f58..f9945f51868 100644 --- a/extensions/ql-vscode/src/view/results/alert-table.tsx +++ b/extensions/ql-vscode/src/view/results/alert-table.tsx @@ -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; @@ -64,6 +65,9 @@ export class PathTable extends React.Component { 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 { ...previousState, selectedItem: resultKey, })); + sendTelemetry("local-results-alert-table-path-selected"); }; }; diff --git a/extensions/ql-vscode/src/view/results/raw-results-table.tsx b/extensions/ql-vscode/src/view/results/raw-results-table.tsx index c30005bbea0..76ddad3b7de 100644 --- a/extensions/ql-vscode/src/view/results/raw-results-table.tsx +++ b/extensions/ql-vscode/src/view/results/raw-results-table.tsx @@ -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 { ...prev, selectedItem: { row, column }, })); + sendTelemetry("local-results-raw-results-table-selected"); } render(): React.ReactNode { diff --git a/extensions/ql-vscode/src/view/results/result-tables.tsx b/extensions/ql-vscode/src/view/results/result-tables.tsx index 476ab9bcb06..6d9bc55afe4 100644 --- a/extensions/ql-vscode/src/view/results/result-tables.tsx +++ b/extensions/ql-vscode/src/view/results/result-tables.tsx @@ -26,6 +26,7 @@ import { openFile, } from "./result-table-utils"; import { vscode } from "../vscode-api"; +import { sendTelemetry } from "../common/telemetry"; const FILE_PATH_REGEX = /^(?:.+[\\/])*(.+)$/; @@ -165,6 +166,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 +203,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 +225,7 @@ export class ResultTables extends React.Component< const onChange = (e: React.ChangeEvent) => { this.setState({ selectedPage: e.target.value }); + this.sendResultsPageChangedTelemetry(); }; const choosePage = (input: string) => { const pageNumber = parseInt(input); @@ -239,6 +248,7 @@ export class ResultTables extends React.Component< pageNumber: Math.max(parsedResultSets.pageNumber - 1, 0), selectedTable, }); + this.sendResultsPageChangedTelemetry(); }; const nextPage = (e: React.MouseEvent) => { vscode.postMessage({ @@ -246,6 +256,7 @@ export class ResultTables extends React.Component< pageNumber: Math.min(parsedResultSets.pageNumber + 1, numPages - 1), selectedTable, }); + this.sendResultsPageChangedTelemetry(); }; const openQuery = () => { @@ -334,6 +345,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()} /> From 4009f03dd214e596723d7d0f7e62fcf150d665c8 Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 17 Jan 2023 15:49:50 +0000 Subject: [PATCH 3/4] Send telementry on other links and UI elements --- .../ql-vscode/src/view/results/RawTableHeader.tsx | 2 ++ .../ql-vscode/src/view/results/result-table-utils.tsx | 10 +++++++++- .../ql-vscode/src/view/results/result-tables.tsx | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/extensions/ql-vscode/src/view/results/RawTableHeader.tsx b/extensions/ql-vscode/src/view/results/RawTableHeader.tsx index d9aea703a3a..59712f44596 100644 --- a/extensions/ql-vscode/src/view/results/RawTableHeader.tsx +++ b/extensions/ql-vscode/src/view/results/RawTableHeader.tsx @@ -4,6 +4,7 @@ import { vscode } from "../vscode-api"; import { RawResultsSortState, SortDirection } from "../../pure/interface-types"; import { nextSortDirection } from "./result-table-utils"; import { Column } from "../../pure/bqrs-cli-types"; +import { sendTelemetry } from "../common/telemetry"; interface Props { readonly columns: readonly Column[]; @@ -39,6 +40,7 @@ function toggleSortStateForColumn( resultSetName: schemaName, sortState: nextSortState, }); + sendTelemetry("local-results-column-sorting"); } export default function RawTableHeader(props: Props) { diff --git a/extensions/ql-vscode/src/view/results/result-table-utils.tsx b/extensions/ql-vscode/src/view/results/result-table-utils.tsx index 417667177fd..af1037dd1fd 100644 --- a/extensions/ql-vscode/src/view/results/result-table-utils.tsx +++ b/extensions/ql-vscode/src/view/results/result-table-utils.tsx @@ -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 (
This query returned no results. If this isn't what you were expecting, and for effective query-writing tips, check out the{" "} - + CodeQL language guides . diff --git a/extensions/ql-vscode/src/view/results/result-tables.tsx b/extensions/ql-vscode/src/view/results/result-tables.tsx index 6d9bc55afe4..43de84f9f00 100644 --- a/extensions/ql-vscode/src/view/results/result-tables.tsx +++ b/extensions/ql-vscode/src/view/results/result-tables.tsx @@ -154,6 +154,7 @@ export class ResultTables extends React.Component< pageNumber: 0, selectedTable, }); + sendTelemetry("local-results-table-selection"); }; private alertTableExtras(): JSX.Element | undefined { @@ -261,6 +262,7 @@ export class ResultTables extends React.Component< const openQuery = () => { openFile(this.props.queryPath); + sendTelemetry("local-results-open-query-file"); }; const fileName = FILE_PATH_REGEX.exec(this.props.queryPath)?.[1] || "query"; From 37e3e041e83367803b5334d3ec4c621c145dd588 Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 17 Jan 2023 16:46:02 +0000 Subject: [PATCH 4/4] Piggyback on changeSort message --- extensions/ql-vscode/src/interface.ts | 1 + extensions/ql-vscode/src/view/results/RawTableHeader.tsx | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/extensions/ql-vscode/src/interface.ts b/extensions/ql-vscode/src/interface.ts index 4a168388e92..c27cb1b83e1 100644 --- a/extensions/ql-vscode/src/interface.ts +++ b/extensions/ql-vscode/src/interface.ts @@ -256,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); diff --git a/extensions/ql-vscode/src/view/results/RawTableHeader.tsx b/extensions/ql-vscode/src/view/results/RawTableHeader.tsx index 59712f44596..d9aea703a3a 100644 --- a/extensions/ql-vscode/src/view/results/RawTableHeader.tsx +++ b/extensions/ql-vscode/src/view/results/RawTableHeader.tsx @@ -4,7 +4,6 @@ import { vscode } from "../vscode-api"; import { RawResultsSortState, SortDirection } from "../../pure/interface-types"; import { nextSortDirection } from "./result-table-utils"; import { Column } from "../../pure/bqrs-cli-types"; -import { sendTelemetry } from "../common/telemetry"; interface Props { readonly columns: readonly Column[]; @@ -40,7 +39,6 @@ function toggleSortStateForColumn( resultSetName: schemaName, sortState: nextSortState, }); - sendTelemetry("local-results-column-sorting"); } export default function RawTableHeader(props: Props) {