Add tracing events for tracking query execution and upload documents (#2100)

* Add tracing for Execute (submit) query and Upload documents

* Trace query closer to iterator operation

* Add warnings to values used in Fabric

* Fix format

* Don't trace execute queries for filtering calls

* Remove tracing call for documents tab filtering

* Fix failing unit test.

---------

Co-authored-by: Jade Welton <jawelton@microsoft.com>
Co-authored-by: Sevo Kukol <sevoku@microsoft.com>
This commit is contained in:
Laurent Nguyen 2025-04-16 19:31:43 +02:00 committed by GitHub
parent d5fe2d9e9f
commit 27c9ea7ab6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 27 additions and 7 deletions

View File

@ -1,5 +1,8 @@
import { QueryOperationOptions } from "@azure/cosmos";
import { Action } from "Shared/Telemetry/TelemetryConstants";
import * as Constants from "../Common/Constants";
import { QueryResults } from "../Contracts/ViewModels";
import * as TelemetryProcessor from "../Shared/Telemetry/TelemetryProcessor";
interface QueryResponse {
// [Todo] remove any
@ -21,7 +24,9 @@ export function nextPage(
firstItemIndex: number,
queryOperationOptions?: QueryOperationOptions,
): Promise<QueryResults> {
TelemetryProcessor.traceStart(Action.ExecuteQuery);
return documentsIterator.fetchNext(queryOperationOptions).then((response) => {
TelemetryProcessor.traceSuccess(Action.ExecuteQuery, { dataExplorerArea: Constants.Areas.Tab });
const documents = response.resources;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const headers = (response as any).headers || {}; // TODO this is a private key. Remove any

View File

@ -1044,9 +1044,22 @@ export default class Collection implements ViewModels.Collection {
}
public async uploadFiles(files: FileList): Promise<{ data: UploadDetailsRecord[] }> {
const data = await Promise.all(Array.from(files).map((file) => this.uploadFile(file)));
return { data };
try {
TelemetryProcessor.trace(Action.UploadDocuments, ActionModifiers.Start, {
nbFiles: files.length,
});
const data = await Promise.all(Array.from(files).map((file) => this.uploadFile(file)));
TelemetryProcessor.trace(Action.UploadDocuments, ActionModifiers.Success, {
nbFiles: files.length,
});
return { data };
} catch (error) {
TelemetryProcessor.trace(Action.UploadDocuments, ActionModifiers.Failed, {
error: getErrorMessage(error),
errorStack: getErrorStack(error),
});
throw error;
}
}
private uploadFile(file: File): Promise<UploadDetailsRecord> {

View File

@ -1,17 +1,18 @@
// Data Explorer specific actions. No need to keep this in sync with the one in Portal.
// Some of the enums names are used in Fabric. Please do not rename them.
export enum Action {
CollapseTreeNode,
CreateCollection,
CreateCollection, // Used in Fabric. Please do not rename.
CreateGlobalSecondaryIndex,
CreateDocument,
CreateDocument, // Used in Fabric. Please do not rename.
CreateStoredProcedure,
CreateTrigger,
CreateUDF,
DeleteCollection,
DeleteCollection, // Used in Fabric. Please do not rename.
DeleteDatabase,
DeleteDocument,
ExpandTreeNode,
ExecuteQuery,
ExecuteQuery, // Used in Fabric. Please do not rename.
HasFeature,
GetVNETServices,
InitializeAccountLocationFromResourceGroup,
@ -144,6 +145,7 @@ export enum Action {
ReadPersistedTabState,
SavePersistedTabState,
DeletePersistedTabState,
UploadDocuments, // Used in Fabric. Please do not rename.
}
export const ActionModifiers = {