diff --git a/package-lock.json b/package-lock.json index c05feec0a..9e441ab35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "dependencies": { "@azure/arm-cosmosdb": "9.1.0", - "@azure/cosmos": "4.2.0-beta.1", + "@azure/cosmos": "4.2.0", "@azure/cosmos-language-service": "0.0.5", "@azure/identity": "1.5.2", "@azure/ms-rest-nodeauth": "3.1.1", @@ -378,9 +378,9 @@ "license": "0BSD" }, "node_modules/@azure/cosmos": { - "version": "4.2.0-beta.1", - "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-4.2.0-beta.1.tgz", - "integrity": "sha512-mREONehm1DxjEKXGaNU6Wmpf9Ckb9IrhKFXhDFVs45pxmoEb3y2s/Ub0owuFmqlphpcS1zgtYQn5exn+lwnJuQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-4.2.0.tgz", + "integrity": "sha512-acfAQTYLxgB/iZK7XvTVYe9NPk6DECEgcIXDQhyn7Uo4dGxeeW5D3YqLjLJrrzND5Iawer3eUQ5/iiLWvTGAxQ==", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.7.1", diff --git a/package.json b/package.json index 755254b2b..4a046a012 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "dependencies": { "@azure/arm-cosmosdb": "9.1.0", - "@azure/cosmos": "4.2.0-beta.1", + "@azure/cosmos": "4.2.0", "@azure/cosmos-language-service": "0.0.5", "@azure/identity": "1.5.2", "@azure/ms-rest-nodeauth": "3.1.1", diff --git a/src/Common/IteratorUtilities.ts b/src/Common/IteratorUtilities.ts index 6283488b8..f85ad7fb2 100644 --- a/src/Common/IteratorUtilities.ts +++ b/src/Common/IteratorUtilities.ts @@ -1,4 +1,3 @@ -import { QueryOperationOptions } from "@azure/cosmos"; import { QueryResults } from "../Contracts/ViewModels"; interface QueryResponse { @@ -11,17 +10,13 @@ interface QueryResponse { } export interface MinimalQueryIterator { - fetchNext: (queryOperationOptions?: QueryOperationOptions) => Promise; + fetchNext: () => Promise; } // Pick, "fetchNext">; -export function nextPage( - documentsIterator: MinimalQueryIterator, - firstItemIndex: number, - queryOperationOptions?: QueryOperationOptions, -): Promise { - return documentsIterator.fetchNext(queryOperationOptions).then((response) => { +export function nextPage(documentsIterator: MinimalQueryIterator, firstItemIndex: number): Promise { + return documentsIterator.fetchNext().then((response) => { 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 diff --git a/src/Common/dataAccess/queryDocuments.ts b/src/Common/dataAccess/queryDocuments.ts index 223fe987d..0fc30fc73 100644 --- a/src/Common/dataAccess/queryDocuments.ts +++ b/src/Common/dataAccess/queryDocuments.ts @@ -28,5 +28,9 @@ export const getCommonQueryOptions = (options: FeedOptions): FeedOptions => { Queries.itemsPerPage; options.maxDegreeOfParallelism = LocalStorageUtility.getEntryNumber(StorageKey.MaxDegreeOfParellism); options.disableNonStreamingOrderByQuery = !isVectorSearchEnabled(); + options.initialHeaders = { + ...options.initialHeaders, + "x-ms-cosmos-throughput-bucket": "1", + }; return options; }; diff --git a/src/Common/dataAccess/queryDocumentsPage.ts b/src/Common/dataAccess/queryDocumentsPage.ts index 17e84ba28..556ed290c 100644 --- a/src/Common/dataAccess/queryDocumentsPage.ts +++ b/src/Common/dataAccess/queryDocumentsPage.ts @@ -1,4 +1,3 @@ -import { QueryOperationOptions } from "@azure/cosmos"; import { QueryResults } from "../../Contracts/ViewModels"; import { logConsoleInfo, logConsoleProgress } from "../../Utils/NotificationConsoleUtils"; import { getEntityName } from "../DocumentUtility"; @@ -9,13 +8,12 @@ export const queryDocumentsPage = async ( resourceName: string, documentsIterator: MinimalQueryIterator, firstItemIndex: number, - queryOperationOptions?: QueryOperationOptions, ): Promise => { const entityName = getEntityName(); const clearMessage = logConsoleProgress(`Querying ${entityName} for container ${resourceName}`); try { - const result: QueryResults = await nextPage(documentsIterator, firstItemIndex, queryOperationOptions); + const result: QueryResults = await nextPage(documentsIterator, firstItemIndex); const itemCount = (result.documents && result.documents.length) || 0; logConsoleInfo(`Successfully fetched ${itemCount} ${entityName} for container ${resourceName}`); return result; diff --git a/src/Common/dataAccess/readCollectionOffer.ts b/src/Common/dataAccess/readCollectionOffer.ts index e52df1f60..6fb6e9e4b 100644 --- a/src/Common/dataAccess/readCollectionOffer.ts +++ b/src/Common/dataAccess/readCollectionOffer.ts @@ -105,6 +105,8 @@ const readCollectionOfferWithARM = async (databaseId: string, collectionId: stri ? parseInt(resource.softAllowedMaximumThroughput) : resource.softAllowedMaximumThroughput; + const throughputBuckets = resource?.throughputBuckets; + if (autoscaleSettings) { return { id: offerId, @@ -114,6 +116,7 @@ const readCollectionOfferWithARM = async (databaseId: string, collectionId: stri offerReplacePending: resource.offerReplacePending === "true", instantMaximumThroughput, softAllowedMaximumThroughput, + throughputBuckets, }; } @@ -125,6 +128,7 @@ const readCollectionOfferWithARM = async (databaseId: string, collectionId: stri offerReplacePending: resource.offerReplacePending === "true", instantMaximumThroughput, softAllowedMaximumThroughput, + throughputBuckets, }; } diff --git a/src/Common/dataAccess/updateOffer.ts b/src/Common/dataAccess/updateOffer.ts index 0e507ce37..4d26ca68d 100644 --- a/src/Common/dataAccess/updateOffer.ts +++ b/src/Common/dataAccess/updateOffer.ts @@ -1,6 +1,6 @@ import { OfferDefinition, RequestOptions } from "@azure/cosmos"; import { AuthType } from "../../AuthType"; -import { Offer, SDKOfferDefinition, UpdateOfferParams } from "../../Contracts/DataModels"; +import { Offer, SDKOfferDefinition, ThroughputBucket, UpdateOfferParams } from "../../Contracts/DataModels"; import { userContext } from "../../UserContext"; import { migrateCassandraKeyspaceToAutoscale, @@ -359,6 +359,13 @@ const createUpdateOfferBody = (params: UpdateOfferParams): ThroughputSettingsUpd body.properties.resource.throughput = params.manualThroughput; } + if (params.throughputBuckets) { + const throughputBuckets = params.throughputBuckets.filter( + (bucket: ThroughputBucket) => bucket.maxThroughputPercentage !== 100, + ); + body.properties.resource.throughputBuckets = throughputBuckets; + } + return body; }; diff --git a/src/Contracts/DataModels.ts b/src/Contracts/DataModels.ts index da6ddd28d..a6e635ae3 100644 --- a/src/Contracts/DataModels.ts +++ b/src/Contracts/DataModels.ts @@ -274,6 +274,12 @@ export interface Offer { offerReplacePending: boolean; instantMaximumThroughput?: number; softAllowedMaximumThroughput?: number; + throughputBuckets?: ThroughputBucket[]; +} + +export interface ThroughputBucket { + id: number; + maxThroughputPercentage: number; } export interface SDKOfferDefinition extends Resource { @@ -396,6 +402,7 @@ export interface UpdateOfferParams { collectionId?: string; migrateToAutoPilot?: boolean; migrateToManual?: boolean; + throughputBuckets?: ThroughputBucket[]; } export interface Notification { diff --git a/src/Explorer/Controls/Settings/SettingsComponent.tsx b/src/Explorer/Controls/Settings/SettingsComponent.tsx index 57bf5b13e..3230f9b14 100644 --- a/src/Explorer/Controls/Settings/SettingsComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsComponent.tsx @@ -86,6 +86,8 @@ export interface SettingsComponentState { wasAutopilotOriginallySet: boolean; isScaleSaveable: boolean; isScaleDiscardable: boolean; + throughputBuckets: DataModels.ThroughputBucket[]; + throughputBucketsBaseline: DataModels.ThroughputBucket[]; throughputError: string; timeToLive: TtlType; @@ -158,6 +160,7 @@ export class SettingsComponent extends React.Component { + this.setState({ throughputBuckets }); + }; + private onAutoPilotSelected = (isAutoPilotSelected: boolean): void => this.setState({ isAutoPilotSelected: isAutoPilotSelected }); @@ -1036,6 +1053,7 @@ export class SettingsComponent extends React.Component void; onScaleSaveableChange: (isScaleSaveable: boolean) => void; onScaleDiscardableChange: (isScaleDiscardable: boolean) => void; + throughputBuckets: DataModels.ThroughputBucket[]; + throughputBucketsBaseline: DataModels.ThroughputBucket[]; + enableThroughputBuckets: boolean; + onThroughputBucketChange: (throughputBuckets: DataModels.ThroughputBucket[]) => void; throughputError?: string; } -export class ScaleComponent extends React.Component { +interface ScaleComponentState { + isThroughputSaveable: boolean; + isBucketsSaveable: boolean; + isThroughputDiscardable: boolean; + isBucketsDiscardable: boolean; +} + +export class ScaleComponent extends React.Component { private isEmulator: boolean; private offer: DataModels.Offer; private databaseId: string; @@ -48,6 +60,13 @@ export class ScaleComponent extends React.Component { this.offer = this.props.database?.offer() || this.props.collection?.offer(); this.databaseId = this.props.database?.id() || this.props.collection.databaseId; this.collectionId = this.props.collection?.id(); + this.state = { + isThroughputSaveable: false, + isBucketsSaveable: false, + isThroughputDiscardable: false, + isBucketsDiscardable: false, + }; + console.log(this.offer); } public isAutoScaleEnabled = (): boolean => { @@ -137,8 +156,8 @@ export class ScaleComponent extends React.Component { maxAutoPilotThroughputBaseline={this.props.autoPilotThroughputBaseline} onMaxAutoPilotThroughputChange={this.props.onMaxAutoPilotThroughputChange} spendAckChecked={false} - onScaleSaveableChange={this.props.onScaleSaveableChange} - onScaleDiscardableChange={this.props.onScaleDiscardableChange} + onScaleSaveableChange={this.handleThroughputSaveableChange} + onScaleDiscardableChange={this.handleThroughputDiscardableChange} usageSizeInKB={this.props.collection?.usageSizeInKB()} throughputError={this.props.throughputError} instantMaximumThroughput={this.offer?.instantMaximumThroughput} @@ -167,6 +186,39 @@ export class ScaleComponent extends React.Component { ); } + private updateScaleSettingsState = (updates: Partial) => { + this.setState( + (prevState) => { + const hasChanges = Object.keys(updates).some( + (key) => prevState[key as keyof ScaleComponentState] !== updates[key as keyof ScaleComponentState], + ); + return hasChanges ? { ...prevState, ...updates } : null; + }, + () => { + const isSaveable = this.state.isThroughputSaveable || this.state.isBucketsSaveable; + const isDiscardable = this.state.isThroughputDiscardable || this.state.isBucketsDiscardable; + this.props.onScaleSaveableChange(isSaveable); + this.props.onScaleDiscardableChange(isDiscardable); + }, + ); + }; + + private handleThroughputSaveableChange = (isSaveable: boolean) => { + this.updateScaleSettingsState({ isThroughputSaveable: isSaveable }); + }; + + private handleThroughputDiscardableChange = (isDiscardable: boolean) => { + this.updateScaleSettingsState({ isThroughputDiscardable: isDiscardable }); + }; + + private handleBucketsSaveableChange = (isSaveable: boolean) => { + this.updateScaleSettingsState({ isBucketsSaveable: isSaveable }); + }; + + private handleBucketsDiscardableChange = (isDiscardable: boolean) => { + this.updateScaleSettingsState({ isBucketsDiscardable: isDiscardable }); + }; + public render(): JSX.Element { return ( @@ -182,6 +234,15 @@ export class ScaleComponent extends React.Component { {this.getInitialNotificationElement()} )} {!this.isAutoScaleEnabled() && {this.getThroughputInputComponent()}} + {this.props.enableThroughputBuckets && ( + + )} {/* TODO: Replace link with call to the Azure Support blade */} {this.isAutoScaleEnabled() && ( diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.test.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.test.tsx new file mode 100644 index 000000000..998014179 --- /dev/null +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.test.tsx @@ -0,0 +1,129 @@ +import "@testing-library/jest-dom"; +import { fireEvent, render, screen } from "@testing-library/react"; +import React from "react"; +import { ThroughputBucketsComponent } from "./ThroughputBucketsComponent"; + +describe("ThroughputBucketsComponent", () => { + const mockOnBucketsChange = jest.fn(); + const mockOnSaveableChange = jest.fn(); + const mockOnDiscardableChange = jest.fn(); + + const defaultProps = { + currentBuckets: [ + { id: 1, maxThroughputPercentage: 50 }, + { id: 2, maxThroughputPercentage: 60 }, + ], + throughputBucketsBaseline: [ + { id: 1, maxThroughputPercentage: 40 }, + { id: 2, maxThroughputPercentage: 50 }, + ], + onBucketsChange: mockOnBucketsChange, + onSaveableChange: mockOnSaveableChange, + onDiscardableChange: mockOnDiscardableChange, + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("renders 5 buckets with default values when input buckets are missing", () => { + render(); + + expect(screen.getAllByText(/Bucket \d+/)).toHaveLength(5); + expect(screen.getByDisplayValue("50")).toBeInTheDocument(); + expect(screen.getAllByDisplayValue("100").length).toBe(4); + }); + + it("renders buckets in the correct order even if input is unordered", () => { + const unorderedBuckets = [ + { id: 2, maxThroughputPercentage: 60 }, + { id: 1, maxThroughputPercentage: 50 }, + ]; + render(); + + const bucketLabels = screen.getAllByText(/Bucket \d+/).map((el) => el.textContent); + expect(bucketLabels).toEqual(["Bucket 1", "Bucket 2", "Bucket 3", "Bucket 4", "Bucket 5"]); + expect(screen.getByDisplayValue("50")).toBeInTheDocument(); + expect(screen.getByDisplayValue("60")).toBeInTheDocument(); + expect(screen.getAllByDisplayValue("100").length).toBe(3); + }); + + it("calls onBucketsChange when a bucket value changes", () => { + render(); + + const input = screen.getByDisplayValue("50"); + fireEvent.change(input, { target: { value: "70" } }); + + expect(mockOnBucketsChange).toHaveBeenCalledWith([ + { id: 1, maxThroughputPercentage: 70 }, + { id: 2, maxThroughputPercentage: 60 }, + { id: 3, maxThroughputPercentage: 100 }, + { id: 4, maxThroughputPercentage: 100 }, + { id: 5, maxThroughputPercentage: 100 }, + ]); + }); + + it("triggers onSaveableChange and onDiscardableChange when values change", () => { + render(); + + const input = screen.getByDisplayValue("50"); + fireEvent.change(input, { target: { value: "80" } }); + + expect(mockOnSaveableChange).toHaveBeenCalledWith(true); + expect(mockOnDiscardableChange).toHaveBeenCalledWith(true); + }); + + it("ensures buckets revert to default when no buckets are provided", () => { + render(); + + expect(screen.getAllByText(/Bucket \d+/)).toHaveLength(5); + expect(screen.getAllByDisplayValue("100")).toHaveLength(5); + }); + + it("updates state consistently after multiple changes to different buckets", () => { + render(); + + const input1 = screen.getByDisplayValue("50"); + fireEvent.change(input1, { target: { value: "70" } }); + + const input2 = screen.getByDisplayValue("60"); + fireEvent.change(input2, { target: { value: "80" } }); + + expect(mockOnBucketsChange).toHaveBeenCalledWith([ + { id: 1, maxThroughputPercentage: 70 }, + { id: 2, maxThroughputPercentage: 80 }, + { id: 3, maxThroughputPercentage: 100 }, + { id: 4, maxThroughputPercentage: 100 }, + { id: 5, maxThroughputPercentage: 100 }, + ]); + }); + + it("resets to baseline when currentBuckets are reset", () => { + const { rerender } = render(); + + const input1 = screen.getByDisplayValue("50"); + fireEvent.change(input1, { target: { value: "70" } }); + + expect(mockOnBucketsChange).toHaveBeenCalledWith([ + { id: 1, maxThroughputPercentage: 70 }, + { id: 2, maxThroughputPercentage: 60 }, + { id: 3, maxThroughputPercentage: 100 }, + { id: 4, maxThroughputPercentage: 100 }, + { id: 5, maxThroughputPercentage: 100 }, + ]); + + rerender(); + + expect(screen.getByDisplayValue("40")).toBeInTheDocument(); + expect(screen.getByDisplayValue("50")).toBeInTheDocument(); + }); + + it("does not call onBucketsChange when value remains unchanged", () => { + render(); + + const input = screen.getByDisplayValue("50"); + fireEvent.change(input, { target: { value: "50" } }); + + expect(mockOnBucketsChange).not.toHaveBeenCalled(); + }); +}); diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.tsx new file mode 100644 index 000000000..32d203c33 --- /dev/null +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.tsx @@ -0,0 +1,92 @@ +import { Icon, Label, Slider, Stack, TextField } from "@fluentui/react"; +import { ThroughputBucket } from "Contracts/DataModels"; +import React, { FC, useEffect, useState } from "react"; +import { isDirty } from "../../SettingsUtils"; + +const MAX_BUCKET_SIZES = 5; + +const DEFAULT_BUCKETS = Array.from({ length: MAX_BUCKET_SIZES }, (_, i) => ({ + id: i + 1, + maxThroughputPercentage: 100, +})); + +interface ThroughputBucketsComponentProps { + currentBuckets: ThroughputBucket[]; + throughputBucketsBaseline: ThroughputBucket[]; + onBucketsChange: (updatedBuckets: ThroughputBucket[]) => void; + onSaveableChange: (isSaveable: boolean) => void; + onDiscardableChange: (isDiscardable: boolean) => void; +} + +export const ThroughputBucketsComponent: FC = ({ + currentBuckets, + throughputBucketsBaseline, + onBucketsChange, + onSaveableChange, + onDiscardableChange, +}) => { + const getThroughputBuckets = (buckets: ThroughputBucket[]): ThroughputBucket[] => { + return DEFAULT_BUCKETS.map( + (defaultBucket) => buckets.find((bucket) => bucket.id === defaultBucket.id) || defaultBucket, + ); + }; + + const [throughputBuckets, setThroughputBuckets] = useState(getThroughputBuckets(currentBuckets)); + + useEffect(() => { + const isChanged = isDirty(currentBuckets, getThroughputBuckets(throughputBucketsBaseline)); + isChanged && setThroughputBuckets(getThroughputBuckets(currentBuckets)); + }, [currentBuckets]); + + useEffect(() => { + const isChanged = isDirty(throughputBuckets, getThroughputBuckets(throughputBucketsBaseline)); + onSaveableChange(isChanged); + onDiscardableChange(isChanged); + }, [throughputBuckets]); + + const handleBucketChange = (id: number, newValue: number) => { + const updatedBuckets = throughputBuckets.map((bucket) => + bucket.id === id ? { ...bucket, maxThroughputPercentage: newValue } : bucket, + ); + setThroughputBuckets(updatedBuckets); + const settingsChanged = isDirty(updatedBuckets, throughputBuckets); + settingsChanged && onBucketsChange(updatedBuckets); + }; + + return ( + + + + {throughputBuckets?.map((bucket) => ( + + handleBucketChange(bucket.id, newValue)} + showValue={false} + label={`Bucket ${bucket.id}`} + styles={{ root: { flex: 2, maxWidth: 400 } }} + /> + handleBucketChange(bucket.id, parseInt(newValue || "0", 10))} + type="number" + suffix="%" + styles={{ + fieldGroup: { width: 80 }, + }} + /> + {bucket.id === 1 && ( + + + Data Explorer Query Bucket + + )} + + ))} + + + ); +}; diff --git a/src/Explorer/Controls/Settings/SettingsUtils.tsx b/src/Explorer/Controls/Settings/SettingsUtils.tsx index fa8360b9b..5b2f7ca8e 100644 --- a/src/Explorer/Controls/Settings/SettingsUtils.tsx +++ b/src/Explorer/Controls/Settings/SettingsUtils.tsx @@ -11,7 +11,8 @@ export type isDirtyTypes = | DataModels.IndexingPolicy | DataModels.ComputedProperties | DataModels.VectorEmbedding[] - | DataModels.FullTextPolicy; + | DataModels.FullTextPolicy + | DataModels.ThroughputBucket[]; export const TtlOff = "off"; export const TtlOn = "on"; export const TtlOnNoDefault = "on-nodefault"; diff --git a/src/Explorer/Tabs/QueryTab/QueryTabComponent.tsx b/src/Explorer/Tabs/QueryTab/QueryTabComponent.tsx index 2347e0822..0ad3e20e0 100644 --- a/src/Explorer/Tabs/QueryTab/QueryTabComponent.tsx +++ b/src/Explorer/Tabs/QueryTab/QueryTabComponent.tsx @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable no-console */ -import { FeedOptions, QueryOperationOptions } from "@azure/cosmos"; +import { FeedOptions } from "@azure/cosmos"; import QueryError, { createMonacoErrorLocationResolver, createMonacoMarkersForQueryErrors } from "Common/QueryError"; import { SplitterDirection } from "Common/Splitter"; import { Platform, configContext } from "ConfigContext"; @@ -18,7 +18,7 @@ import { CosmosFluentProvider } from "Explorer/Theme/ThemeUtil"; import { useSelectedNode } from "Explorer/useSelectedNode"; import { KeyboardAction } from "KeyboardShortcuts"; import { QueryConstants } from "Shared/Constants"; -import { LocalStorageUtility, StorageKey, getRUThreshold, ruThresholdEnabled } from "Shared/StorageUtility"; +import { LocalStorageUtility, StorageKey } from "Shared/StorageUtility"; import { Action } from "Shared/Telemetry/TelemetryConstants"; import { Allotment } from "allotment"; import { QueryCopilotState, useQueryCopilot } from "hooks/useQueryCopilot"; @@ -368,20 +368,8 @@ class QueryTabComponentImpl extends React.Component - await queryDocumentsPage( - this.props.collection && this.props.collection.id(), - this._iterator, - firstItemIndex, - queryOperationOptions, - ); + await queryDocumentsPage(this.props.collection && this.props.collection.id(), this._iterator, firstItemIndex); this.props.tabsBaseInstance.isExecuting(true); this.setState({ isExecuting: true, diff --git a/src/Platform/Hosted/extractFeatures.ts b/src/Platform/Hosted/extractFeatures.ts index e26cb9c12..025cc0d03 100644 --- a/src/Platform/Hosted/extractFeatures.ts +++ b/src/Platform/Hosted/extractFeatures.ts @@ -16,6 +16,7 @@ export type Features = { readonly enableAadDataPlane: boolean; readonly enableResourceGraph: boolean; readonly enableKoResourceTree: boolean; + readonly enableThroughputBuckets: boolean; readonly hostedDataExplorer: boolean; readonly junoEndpoint?: string; readonly phoenixEndpoint?: string; @@ -82,6 +83,7 @@ export function extractFeatures(given = new URLSearchParams(window.location.sear enableSpark: "true" === get("enablespark"), enableTtl: "true" === get("enablettl"), enableKoResourceTree: "true" === get("enablekoresourcetree"), + enableThroughputBuckets: "true" === get("enablethroughputbuckets"), executeSproc: "true" === get("dataexplorerexecutesproc"), hostedDataExplorer: "true" === get("hosteddataexplorerenabled"), mongoProxyEndpoint: get("mongoproxyendpoint"), diff --git a/src/Utils/arm/generatedClients/cosmos/cassandraResources.ts b/src/Utils/arm/generatedClients/cosmos/cassandraResources.ts index 461e516bf..9c573b9ad 100644 --- a/src/Utils/arm/generatedClients/cosmos/cassandraResources.ts +++ b/src/Utils/arm/generatedClients/cosmos/cassandraResources.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Lists the Cassandra keyspaces under an existing Azure Cosmos DB database account. */ export async function listCassandraKeyspaces( diff --git a/src/Utils/arm/generatedClients/cosmos/collection.ts b/src/Utils/arm/generatedClients/cosmos/collection.ts index 4a9a9c198..da781b9f4 100644 --- a/src/Utils/arm/generatedClients/cosmos/collection.ts +++ b/src/Utils/arm/generatedClients/cosmos/collection.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given database account and collection. */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/collectionPartition.ts b/src/Utils/arm/generatedClients/cosmos/collectionPartition.ts index 6fed487b6..7996d9f15 100644 --- a/src/Utils/arm/generatedClients/cosmos/collectionPartition.ts +++ b/src/Utils/arm/generatedClients/cosmos/collectionPartition.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given collection, split by partition. */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/collectionPartitionRegion.ts b/src/Utils/arm/generatedClients/cosmos/collectionPartitionRegion.ts index b33c904d9..5e6f65265 100644 --- a/src/Utils/arm/generatedClients/cosmos/collectionPartitionRegion.ts +++ b/src/Utils/arm/generatedClients/cosmos/collectionPartitionRegion.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given collection and region, split by partition. */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/collectionRegion.ts b/src/Utils/arm/generatedClients/cosmos/collectionRegion.ts index 984cb146a..03da69029 100644 --- a/src/Utils/arm/generatedClients/cosmos/collectionRegion.ts +++ b/src/Utils/arm/generatedClients/cosmos/collectionRegion.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given database account, collection and region. */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/database.ts b/src/Utils/arm/generatedClients/cosmos/database.ts index 7b286c4ec..4cf7df0ef 100644 --- a/src/Utils/arm/generatedClients/cosmos/database.ts +++ b/src/Utils/arm/generatedClients/cosmos/database.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given database account and database. */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/databaseAccountRegion.ts b/src/Utils/arm/generatedClients/cosmos/databaseAccountRegion.ts index 09f17c35b..bc9a611b8 100644 --- a/src/Utils/arm/generatedClients/cosmos/databaseAccountRegion.ts +++ b/src/Utils/arm/generatedClients/cosmos/databaseAccountRegion.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given database account and region. */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/databaseAccounts.ts b/src/Utils/arm/generatedClients/cosmos/databaseAccounts.ts index 4b52b631b..f4b35a0a2 100644 --- a/src/Utils/arm/generatedClients/cosmos/databaseAccounts.ts +++ b/src/Utils/arm/generatedClients/cosmos/databaseAccounts.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the properties of an existing Azure Cosmos DB database account. */ export async function get( diff --git a/src/Utils/arm/generatedClients/cosmos/graphResources.ts b/src/Utils/arm/generatedClients/cosmos/graphResources.ts index d51d44d77..b304ff3e1 100644 --- a/src/Utils/arm/generatedClients/cosmos/graphResources.ts +++ b/src/Utils/arm/generatedClients/cosmos/graphResources.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Lists the graphs under an existing Azure Cosmos DB database account. */ export async function listGraphs( diff --git a/src/Utils/arm/generatedClients/cosmos/gremlinResources.ts b/src/Utils/arm/generatedClients/cosmos/gremlinResources.ts index 6e8656400..821faa6ad 100644 --- a/src/Utils/arm/generatedClients/cosmos/gremlinResources.ts +++ b/src/Utils/arm/generatedClients/cosmos/gremlinResources.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Lists the Gremlin databases under an existing Azure Cosmos DB database account. */ export async function listGremlinDatabases( diff --git a/src/Utils/arm/generatedClients/cosmos/locations.ts b/src/Utils/arm/generatedClients/cosmos/locations.ts index 6ec4cdc62..00cc27092 100644 --- a/src/Utils/arm/generatedClients/cosmos/locations.ts +++ b/src/Utils/arm/generatedClients/cosmos/locations.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* List Cosmos DB locations and their properties */ export async function list(subscriptionId: string): Promise { diff --git a/src/Utils/arm/generatedClients/cosmos/mongoDBResources.ts b/src/Utils/arm/generatedClients/cosmos/mongoDBResources.ts index 22b316904..24fbae936 100644 --- a/src/Utils/arm/generatedClients/cosmos/mongoDBResources.ts +++ b/src/Utils/arm/generatedClients/cosmos/mongoDBResources.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Lists the MongoDB databases under an existing Azure Cosmos DB database account. */ export async function listMongoDBDatabases( diff --git a/src/Utils/arm/generatedClients/cosmos/operations.ts b/src/Utils/arm/generatedClients/cosmos/operations.ts index ae87fbb48..e2dd9589f 100644 --- a/src/Utils/arm/generatedClients/cosmos/operations.ts +++ b/src/Utils/arm/generatedClients/cosmos/operations.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Lists all of the available Cosmos DB Resource Provider operations. */ export async function list(): Promise { diff --git a/src/Utils/arm/generatedClients/cosmos/partitionKeyRangeId.ts b/src/Utils/arm/generatedClients/cosmos/partitionKeyRangeId.ts index d9b5d6dfa..c977f0905 100644 --- a/src/Utils/arm/generatedClients/cosmos/partitionKeyRangeId.ts +++ b/src/Utils/arm/generatedClients/cosmos/partitionKeyRangeId.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given partition key range id. */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/partitionKeyRangeIdRegion.ts b/src/Utils/arm/generatedClients/cosmos/partitionKeyRangeIdRegion.ts index 6ec2ba50a..557dfde06 100644 --- a/src/Utils/arm/generatedClients/cosmos/partitionKeyRangeIdRegion.ts +++ b/src/Utils/arm/generatedClients/cosmos/partitionKeyRangeIdRegion.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given partition key range id and region. */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/percentile.ts b/src/Utils/arm/generatedClients/cosmos/percentile.ts index cbbc751dc..03f0b3ea3 100644 --- a/src/Utils/arm/generatedClients/cosmos/percentile.ts +++ b/src/Utils/arm/generatedClients/cosmos/percentile.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given database account. This url is only for PBS and Replication Latency data */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/percentileSourceTarget.ts b/src/Utils/arm/generatedClients/cosmos/percentileSourceTarget.ts index 88c05dd11..fc1e39013 100644 --- a/src/Utils/arm/generatedClients/cosmos/percentileSourceTarget.ts +++ b/src/Utils/arm/generatedClients/cosmos/percentileSourceTarget.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given account, source and target region. This url is only for PBS and Replication Latency data */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/percentileTarget.ts b/src/Utils/arm/generatedClients/cosmos/percentileTarget.ts index 87359e9f0..eaf1f3947 100644 --- a/src/Utils/arm/generatedClients/cosmos/percentileTarget.ts +++ b/src/Utils/arm/generatedClients/cosmos/percentileTarget.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Retrieves the metrics determined by the given filter for the given account target region. This url is only for PBS and Replication Latency data */ export async function listMetrics( diff --git a/src/Utils/arm/generatedClients/cosmos/sqlResources.ts b/src/Utils/arm/generatedClients/cosmos/sqlResources.ts index 049e265e9..bcf7c6bac 100644 --- a/src/Utils/arm/generatedClients/cosmos/sqlResources.ts +++ b/src/Utils/arm/generatedClients/cosmos/sqlResources.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-05-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Lists the SQL databases under an existing Azure Cosmos DB database account. */ export async function listSqlDatabases( diff --git a/src/Utils/arm/generatedClients/cosmos/tableResources.ts b/src/Utils/arm/generatedClients/cosmos/tableResources.ts index 0da78793e..e0771c5d3 100644 --- a/src/Utils/arm/generatedClients/cosmos/tableResources.ts +++ b/src/Utils/arm/generatedClients/cosmos/tableResources.ts @@ -3,13 +3,13 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ import { configContext } from "../../../../ConfigContext"; import { armRequest } from "../../request"; import * as Types from "./types"; -const apiVersion = "2024-02-15-preview"; +const apiVersion = "2024-12-01-preview"; /* Lists the Tables under an existing Azure Cosmos DB database account. */ export async function listTables( diff --git a/src/Utils/arm/generatedClients/cosmos/types.ts b/src/Utils/arm/generatedClients/cosmos/types.ts index 1871884e0..e93facc5e 100644 --- a/src/Utils/arm/generatedClients/cosmos/types.ts +++ b/src/Utils/arm/generatedClients/cosmos/types.ts @@ -3,7 +3,7 @@ Run "npm run generateARMClients" to regenerate Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs - Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-02-15-preview/cosmos-db.json + Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2024-12-01-preview/cosmos-db.json */ /* The List operation response, that contains the client encryption keys and their properties. */ @@ -553,6 +553,12 @@ export interface DatabaseAccountGetProperties { /* The object that represents all properties related to capacity enforcement on an account. */ capacity?: Capacity; + /* Indicates the capacityMode of the Cosmos DB account. */ + capacityMode?: CapacityMode; + + /* The object that represents the migration state for the CapacityMode of the Cosmos DB account. */ + capacityModeChangeTransitionState?: CapacityModeChangeTransitionState; + /* Flag to indicate whether to enable MaterializedViews on the Cosmos DB account */ enableMaterializedViews?: boolean; /* The object that represents the metadata for the Account Keys of the Cosmos DB account. */ @@ -652,6 +658,9 @@ export interface DatabaseAccountCreateUpdateProperties { /* The object that represents all properties related to capacity enforcement on an account. */ capacity?: Capacity; + /* Indicates the capacityMode of the Cosmos DB account. */ + capacityMode?: CapacityMode; + /* Flag to indicate whether to enable MaterializedViews on the Cosmos DB account */ enableMaterializedViews?: boolean; /* This property is ignored during the update/create operation, as the metadata is read-only. The object represents the metadata for the Account Keys of the Cosmos DB account. */ @@ -754,6 +763,9 @@ export interface DatabaseAccountUpdateProperties { /* The object that represents all properties related to capacity enforcement on an account. */ capacity?: Capacity; + /* Indicates the capacityMode of the Cosmos DB account. */ + capacityMode?: CapacityMode; + /* Flag to indicate whether to enable MaterializedViews on the Cosmos DB account */ enableMaterializedViews?: boolean; /* This property is ignored during the update operation, as the metadata is read-only. The object represents the metadata for the Account Keys of the Cosmos DB account. */ @@ -1087,6 +1099,8 @@ export interface ThroughputSettingsResource { readonly instantMaximumThroughput?: string; /* The maximum throughput value or the maximum maxThroughput value (for autoscale) that can be specified */ readonly softAllowedMaximumThroughput?: string; + /* Array of Throughput Bucket limits to be applied to the Cosmos DB container */ + throughputBuckets?: ThroughputBucketResource[]; } /* Cosmos DB provisioned throughput settings object */ @@ -1114,6 +1128,14 @@ export interface ThroughputPolicyResource { incrementPercent?: number; } +/* Cosmos DB throughput bucket object */ +export interface ThroughputBucketResource { + /* Represents the throughput bucket id */ + id: number; + /* Represents maximum percentage throughput that can be used by the bucket */ + maxThroughputPercentage: number; +} + /* Cosmos DB options resource object */ export interface OptionsResource { /* Value of the Cosmos DB resource throughput or autoscaleSettings. Use the ThroughputSetting resource when retrieving offer details. */ @@ -1235,10 +1257,6 @@ export interface SqlDatabaseResource { export interface SqlContainerResource { /* Name of the Cosmos DB SQL container */ id: string; - - vectorEmbeddingPolicy?: VectorEmbeddingPolicy; - fullTextPolicy?: FullTextPolicy; - /* The configuration of the indexing policy. By default, the indexing is automatic for all document paths within the container */ indexingPolicy?: IndexingPolicy; @@ -1269,39 +1287,9 @@ export interface SqlContainerResource { /* List of computed properties */ computedProperties?: ComputedProperty[]; -} -export interface VectorEmbeddingPolicy { - vectorEmbeddings: VectorEmbedding[]; -} - -export interface VectorEmbedding { - path?: string; - dataType?: string; - dimensions?: number; - distanceFunction?: string; -} - -export interface FullTextPolicy { - /** - * The default language for the full text . - */ - defaultLanguage: string; - /** - * The paths to be indexed for full text search. - */ - fullTextPaths: FullTextPath[]; -} - -export interface FullTextPath { - /** - * The path to be indexed for full text search. - */ - path: string; - /** - * The language for the full text path. - */ - language: string; + /* The vector embedding policy for the container. */ + vectorEmbeddingPolicy?: VectorEmbeddingPolicy; } /* Cosmos DB indexing policy */ @@ -1323,19 +1311,14 @@ export interface IndexingPolicy { /* List of spatial specifics */ spatialIndexes?: SpatialSpec[]; + /* List of paths to include in the vector indexing */ vectorIndexes?: VectorIndex[]; - - fullTextIndexes?: FullTextIndex[]; } -export interface VectorIndex { - path?: string; - type?: string; -} - -export interface FullTextIndex { - /** The path in the JSON document to index. */ - path: string; +/* Cosmos DB Vector Embedding Policy */ +export interface VectorEmbeddingPolicy { + /* List of vector embeddings */ + vectorEmbeddings?: VectorEmbedding[]; } /* undocumented */ @@ -1363,6 +1346,28 @@ export interface Indexes { kind?: "Hash" | "Range" | "Spatial"; } +/* undocumented */ +export interface VectorIndex { + /* The path to the vector field in the document. */ + path: string; + /* The index type of the vector. Currently, flat, diskANN, and quantizedFlat are supported. */ + type: "flat" | "diskANN" | "quantizedFlat"; +} + +/* Represents a vector embedding. A vector embedding is used to define a vector field in the documents. */ +export interface VectorEmbedding { + /* The path to the vector field in the document. */ + path: string; + /* Indicates the data type of vector. */ + dataType: "float32" | "uint8" | "int8"; + + /* The distance function to use for distance calculation in between vectors. */ + distanceFunction: "euclidean" | "cosine" | "dotproduct"; + + /* The number of dimensions in the vector. */ + dimensions: number; +} + /* List of composite path */ export type CompositePathList = CompositePath[]; @@ -1688,6 +1693,28 @@ export interface Capacity { totalThroughputLimit?: number; } +/* Indicates the capacity mode of the account. */ +export type CapacityMode = "None" | "Provisioned" | "Serverless"; + +/* The transition state information related capacity mode change with update request. */ +export interface CapacityModeChangeTransitionState { + /* The transition status of capacity mode. */ + capacityModeTransitionStatus?: "Invalid" | "Initialized" | "InProgress" | "Completed" | "Failed"; + + /* Indicates the current capacity mode of the account. */ + currentCapacityMode?: "None" | "Provisioned" | "Serverless"; + + /* Indicates the previous capacity mode of the account before successful transition. */ + previousCapacityMode?: "None" | "Provisioned" | "Serverless"; + + /* Begin time in UTC of the capacity mode change. */ + readonly capacityModeTransitionBeginTimestamp?: string; + /* End time in UTC of the capacity mode change. */ + readonly capacityModeTransitionEndTimestamp?: string; + /* End time in UTC of the last successful capacity mode change. */ + readonly capacityModeLastSuccessfulTransitionEndTimestamp?: string; +} + /* Tags are a list of key-value pairs that describe the resource. These tags can be used in viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key no greater than 128 characters and value no greater than 256 characters. For example, the default experience for a template type is set with "defaultExperience": "Cassandra". Current "defaultExperience" values also include "Table", "Graph", "DocumentDB", and "MongoDB". */ export type Tags = { [key: string]: string }; @@ -1953,8 +1980,8 @@ export type PublicNetworkAccess = "Enabled" | "Disabled" | "SecuredByPerimeter"; /* undocumented */ export interface ApiProperties { - /* Describes the ServerVersion of an a MongoDB account. */ - serverVersion?: "3.2" | "3.6" | "4.0" | "4.2"; + /* Describes the version of the MongoDB account. */ + serverVersion?: "3.2" | "3.6" | "4.0" | "4.2" | "5.0" | "6.0" | "7.0"; } /* Analytical storage specific properties. */ diff --git a/utils/armClientGenerator/generator.ts b/utils/armClientGenerator/generator.ts index 1a50e9082..69c86c41a 100644 --- a/utils/armClientGenerator/generator.ts +++ b/utils/armClientGenerator/generator.ts @@ -16,13 +16,13 @@ Results of this file should be checked into the repo. */ // CHANGE THESE VALUES TO GENERATE NEW CLIENTS -const version = "2024-02-15-preview"; -/* The following are legal options for resourceName but you generally will only use cosmos-db: -"cosmos-db" | "managedCassandra" | "mongorbac" | "notebook" | "privateEndpointConnection" | "privateLinkResources" | +const version = "2024-12-01-preview"; +/* The following are legal options for resourceName but you generally will only use cosmos: +"cosmos" | "managedCassandra" | "mongorbac" | "notebook" | "privateEndpointConnection" | "privateLinkResources" | "rbac" | "restorable" | "services" | "dataTransferService" */ const githubResourceName = "cosmos-db"; -const deResourceName = "cosmos-db"; +const deResourceName = "cosmos"; const schemaURL = `https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/${version}/${githubResourceName}.json`; const outputDir = path.join(__dirname, `../../src/Utils/arm/generatedClients/${deResourceName}`);