mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-04-19 12:59:12 +01:00
Frontend performance metrics (#2439)
* Added enriched metrics * Add more traces for observability
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user