mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-01-27 13:44:12 +00:00
Merge branch 'master' of https://github.com/Azure/cosmos-explorer into users/jawelton/reenable-keys-mongocassandratests-122325
This commit is contained in:
@@ -218,6 +218,7 @@ a:focus {
|
|||||||
|
|
||||||
.tabPanesContainer {
|
.tabPanesContainer {
|
||||||
overflow: auto !important;
|
overflow: auto !important;
|
||||||
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabs-container {
|
.tabs-container {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { configContext } from "ConfigContext";
|
||||||
import { ApiType, userContext } from "UserContext";
|
import { ApiType, userContext } from "UserContext";
|
||||||
import * as NotificationConsoleUtils from "Utils/NotificationConsoleUtils";
|
import * as NotificationConsoleUtils from "Utils/NotificationConsoleUtils";
|
||||||
import {
|
import {
|
||||||
@@ -14,9 +15,12 @@ import {
|
|||||||
DataTransferJobFeedResults,
|
DataTransferJobFeedResults,
|
||||||
DataTransferJobGetResults,
|
DataTransferJobGetResults,
|
||||||
} from "Utils/arm/generatedClients/dataTransferService/types";
|
} from "Utils/arm/generatedClients/dataTransferService/types";
|
||||||
|
import { armRequest } from "Utils/arm/request";
|
||||||
import { addToPolling, removeFromPolling, updateDataTransferJob, useDataTransferJobs } from "hooks/useDataTransferJobs";
|
import { addToPolling, removeFromPolling, updateDataTransferJob, useDataTransferJobs } from "hooks/useDataTransferJobs";
|
||||||
import promiseRetry, { AbortError, FailedAttemptError } from "p-retry";
|
import promiseRetry, { AbortError, FailedAttemptError } from "p-retry";
|
||||||
|
|
||||||
|
export const DATA_TRANSFER_JOB_API_VERSION = "2025-05-01-preview";
|
||||||
|
|
||||||
export interface DataTransferParams {
|
export interface DataTransferParams {
|
||||||
jobName: string;
|
jobName: string;
|
||||||
apiType: ApiType;
|
apiType: ApiType;
|
||||||
@@ -33,26 +37,34 @@ export const getDataTransferJobs = async (
|
|||||||
subscriptionId: string,
|
subscriptionId: string,
|
||||||
resourceGroup: string,
|
resourceGroup: string,
|
||||||
accountName: string,
|
accountName: string,
|
||||||
|
signal?: AbortSignal,
|
||||||
): Promise<DataTransferJobGetResults[]> => {
|
): Promise<DataTransferJobGetResults[]> => {
|
||||||
let dataTransferJobs: DataTransferJobGetResults[] = [];
|
let dataTransferJobs: DataTransferJobGetResults[] = [];
|
||||||
let dataTransferFeeds: DataTransferJobFeedResults = await listByDatabaseAccount(
|
let dataTransferFeeds: DataTransferJobFeedResults = await listByDatabaseAccount(
|
||||||
subscriptionId,
|
subscriptionId,
|
||||||
resourceGroup,
|
resourceGroup,
|
||||||
accountName,
|
accountName,
|
||||||
|
signal,
|
||||||
);
|
);
|
||||||
dataTransferJobs = [...dataTransferJobs, ...(dataTransferFeeds?.value || [])];
|
dataTransferJobs = [...dataTransferJobs, ...(dataTransferFeeds?.value || [])];
|
||||||
while (dataTransferFeeds?.nextLink) {
|
while (dataTransferFeeds?.nextLink) {
|
||||||
const nextResponse = await window.fetch(dataTransferFeeds.nextLink, {
|
/**
|
||||||
headers: {
|
* The `nextLink` URL returned by the Cosmos DB SQL API pointed to an incorrect endpoint, causing timeouts.
|
||||||
Authorization: userContext.authorizationToken,
|
* (i.e: https://cdbmgmtprodby.documents.azure.com:450/subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.DocumentDB/databaseAccounts/{account}/sql/dataTransferJobs?$top=100&$skiptoken=...)
|
||||||
},
|
* We manipulate the URL by parsing it to extract the path and query parameters,
|
||||||
|
* then construct the correct URL for the Azure Resource Manager (ARM) API.
|
||||||
|
* This ensures that the request is made to the correct base URL (`configContext.ARM_ENDPOINT`),
|
||||||
|
* which is required for ARM operations.
|
||||||
|
*/
|
||||||
|
const parsedUrl = new URL(dataTransferFeeds.nextLink);
|
||||||
|
const nextUrlPath = parsedUrl.pathname + parsedUrl.search;
|
||||||
|
dataTransferFeeds = await armRequest({
|
||||||
|
host: configContext.ARM_ENDPOINT,
|
||||||
|
path: nextUrlPath,
|
||||||
|
method: "GET",
|
||||||
|
apiVersion: DATA_TRANSFER_JOB_API_VERSION,
|
||||||
});
|
});
|
||||||
if (nextResponse.ok) {
|
dataTransferJobs.push(...(dataTransferFeeds?.value || []));
|
||||||
dataTransferFeeds = await nextResponse.json();
|
|
||||||
dataTransferJobs = [...dataTransferJobs, ...(dataTransferFeeds?.value || [])];
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return dataTransferJobs;
|
return dataTransferJobs;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -125,7 +125,10 @@ const App = (): JSX.Element => {
|
|||||||
<KeyboardShortcutRoot>
|
<KeyboardShortcutRoot>
|
||||||
<div className="flexContainer" aria-hidden="false">
|
<div className="flexContainer" aria-hidden="false">
|
||||||
{userContext.features.enableContainerCopy && userContext.apiType === "SQL" ? (
|
{userContext.features.enableContainerCopy && userContext.apiType === "SQL" ? (
|
||||||
<ContainerCopyPanel explorer={explorer} />
|
<>
|
||||||
|
<ContainerCopyPanel explorer={explorer} />
|
||||||
|
<SidePanel />
|
||||||
|
</>
|
||||||
) : (
|
) : (
|
||||||
<DivExplorer explorer={explorer} />
|
<DivExplorer explorer={explorer} />
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user