Frontend performance metrics (#2439)

* Added enriched metrics

* Add more traces for observability
This commit is contained in:
sunghyunkang1111
2026-04-01 09:42:32 -05:00
committed by GitHub
parent eac5842176
commit 2ba58cd1a5
14 changed files with 363 additions and 103 deletions

View File

@@ -5,6 +5,8 @@ import { CosmosDbArtifactType } from "Contracts/FabricMessagesContract";
import { isFabric, isFabricMirroredKey } from "Platform/Fabric/FabricUtil";
import { AuthType } from "../../AuthType";
import * as DataModels from "../../Contracts/DataModels";
import { Action } from "../../Shared/Telemetry/TelemetryConstants";
import { traceFailure, traceStart, traceSuccess } from "../../Shared/Telemetry/TelemetryProcessor";
import { FabricArtifactInfo, userContext } from "../../UserContext";
import { logConsoleProgress } from "../../Utils/NotificationConsoleUtils";
import { listCassandraTables } from "../../Utils/arm/generatedClients/cosmos/cassandraResources";
@@ -17,6 +19,11 @@ import { handleError } from "../ErrorHandlingUtils";
export async function readCollections(databaseId: string): Promise<DataModels.Collection[]> {
const clearMessage = logConsoleProgress(`Querying containers for database ${databaseId}`);
const startKey = traceStart(Action.ReadCollections, {
dataExplorerArea: "ResourceTree",
databaseId,
apiType: userContext.apiType,
});
if (isFabricMirroredKey() && userContext.fabricContext?.databaseName === databaseId) {
const collections: DataModels.Collection[] = [];
@@ -43,8 +50,10 @@ export async function readCollections(databaseId: string): Promise<DataModels.Co
// Sort collections by id before returning
collections.sort((a, b) => a.id.localeCompare(b.id));
traceSuccess(Action.ReadCollections, { databaseId, collectionCount: collections.length }, startKey);
return collections;
} catch (error) {
traceFailure(Action.ReadCollections, { databaseId, error: error?.message }, startKey);
handleError(error, "ReadCollections", `Error while querying containers for database ${databaseId}`);
throw error;
} finally {
@@ -59,7 +68,9 @@ export async function readCollections(databaseId: string): Promise<DataModels.Co
userContext.apiType !== "Tables" &&
!isFabric()
) {
return await readCollectionsWithARM(databaseId);
const result = await readCollectionsWithARM(databaseId);
traceSuccess(Action.ReadCollections, { databaseId, collectionCount: result?.length, path: "ARM" }, startKey);
return result;
}
Logger.logInfo(`readCollections: calling fetchAll for database ${databaseId}`, "readCollections");
@@ -70,8 +81,14 @@ export async function readCollections(databaseId: string): Promise<DataModels.Co
?.length}, durationMs=${Date.now() - fetchAllStart}`,
"readCollections",
);
traceSuccess(
Action.ReadCollections,
{ databaseId, collectionCount: sdkResponse.resources?.length, path: "SDK" },
startKey,
);
return sdkResponse.resources as DataModels.Collection[];
} catch (error) {
traceFailure(Action.ReadCollections, { databaseId, error: error?.message }, startKey);
handleError(error, "ReadCollections", `Error while querying containers for database ${databaseId}`);
throw error;
} finally {
@@ -84,6 +101,11 @@ export async function readCollectionsWithPagination(
continuationToken?: string,
): Promise<DataModels.CollectionsWithPagination> {
const clearMessage = logConsoleProgress(`Querying containers for database ${databaseId}`);
const startKey = traceStart(Action.ReadCollections, {
dataExplorerArea: "ResourceTree",
databaseId,
paginated: true,
});
try {
const sdkResponse = await client()
.database(databaseId)
@@ -99,8 +121,14 @@ export async function readCollectionsWithPagination(
collections: sdkResponse.resources as DataModels.Collection[],
continuationToken: sdkResponse.continuationToken,
};
traceSuccess(
Action.ReadCollections,
{ databaseId, collectionCount: collectionsWithPagination.collections?.length, paginated: true },
startKey,
);
return collectionsWithPagination;
} catch (error) {
traceFailure(Action.ReadCollections, { databaseId, error: error?.message, paginated: true }, startKey);
handleError(error, "ReadCollections", `Error while querying containers for database ${databaseId}`);
throw error;
} finally {

View File

@@ -2,6 +2,8 @@ import { CosmosDbArtifactType } from "Contracts/FabricMessagesContract";
import { isFabric, isFabricMirroredKey, isFabricNative } from "Platform/Fabric/FabricUtil";
import { AuthType } from "../../AuthType";
import * as DataModels from "../../Contracts/DataModels";
import { Action } from "../../Shared/Telemetry/TelemetryConstants";
import { traceFailure, traceStart, traceSuccess } from "../../Shared/Telemetry/TelemetryProcessor";
import { FabricArtifactInfo, userContext } from "../../UserContext";
import { logConsoleProgress } from "../../Utils/NotificationConsoleUtils";
import { listCassandraKeyspaces } from "../../Utils/arm/generatedClients/cosmos/cassandraResources";
@@ -14,6 +16,10 @@ import { handleError } from "../ErrorHandlingUtils";
export async function readDatabases(): Promise<DataModels.Database[]> {
let databases: DataModels.Database[];
const clearMessage = logConsoleProgress(`Querying databases`);
const startKey = traceStart(Action.ReadDatabases, {
dataExplorerArea: "ResourceTree",
apiType: userContext.apiType,
});
if (
isFabricMirroredKey() &&
@@ -81,9 +87,11 @@ export async function readDatabases(): Promise<DataModels.Database[]> {
databases = sdkResponse.resources as DataModels.Database[];
}
} catch (error) {
traceFailure(Action.ReadDatabases, { error: error?.message }, startKey);
handleError(error, "ReadDatabases", `Error while querying databases`);
throw error;
}
traceSuccess(Action.ReadDatabases, { databaseCount: databases?.length }, startKey);
clearMessage();
return databases;
}