From 15bfcd8a7687c18185d64dd099f7144e49064649 Mon Sep 17 00:00:00 2001 From: Matthew Podwysocki Date: Wed, 5 Oct 2022 17:18:16 -0400 Subject: [PATCH] [monitor-query] Add version string to options endpoint (#23383) --- sdk/monitor/monitor-query/CHANGELOG.md | 8 ++----- .../src/internal/logQueryOptionUtils.ts | 15 +++++++++++++ .../monitor-query/src/logsQueryClient.ts | 9 +++++--- .../internal/unit/logQueryOptionUtils.spec.ts | 22 +++++++++++++++++++ .../unit/logsQueryClient.unittest.spec.ts | 4 ++-- 5 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 sdk/monitor/monitor-query/src/internal/logQueryOptionUtils.ts create mode 100644 sdk/monitor/monitor-query/test/internal/unit/logQueryOptionUtils.spec.ts diff --git a/sdk/monitor/monitor-query/CHANGELOG.md b/sdk/monitor/monitor-query/CHANGELOG.md index 556a0c27cf03..e469ebea38c0 100644 --- a/sdk/monitor/monitor-query/CHANGELOG.md +++ b/sdk/monitor/monitor-query/CHANGELOG.md @@ -1,14 +1,10 @@ # Release History -## 1.0.3 (Unreleased) - -### Features Added - -### Breaking Changes +## 1.0.3 (2022-10-05) ### Bugs Fixed -### Other Changes +- #23349 Fixed endpoint resolution to allow endpoints from sovereign clouds ## 1.0.2 (2022-06-07) diff --git a/sdk/monitor/monitor-query/src/internal/logQueryOptionUtils.ts b/sdk/monitor/monitor-query/src/internal/logQueryOptionUtils.ts new file mode 100644 index 000000000000..0bc28d3ca815 --- /dev/null +++ b/sdk/monitor/monitor-query/src/internal/logQueryOptionUtils.ts @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { LogsQueryClientOptions } from "../logsQueryClient"; + +export function getLogQueryEndpoint(options: LogsQueryClientOptions): string { + if (!options.endpoint) { + throw new Error("options.endpoint is required"); + } + + const url = new URL(options.endpoint); + url.pathname = "/v1"; + + return url.toString(); +} diff --git a/sdk/monitor/monitor-query/src/logsQueryClient.ts b/sdk/monitor/monitor-query/src/logsQueryClient.ts index 11b279b2d8d1..89039b873d70 100644 --- a/sdk/monitor/monitor-query/src/logsQueryClient.ts +++ b/sdk/monitor/monitor-query/src/logsQueryClient.ts @@ -27,6 +27,7 @@ import { QueryTimeInterval } from "./models/timeInterval"; import { convertTimespanToInterval } from "./timespanConversion"; import { SDK_VERSION } from "./constants"; import { tracingClient } from "./tracing"; +import { getLogQueryEndpoint } from "./internal/logQueryOptionUtils"; const defaultMonitorScope = "https://api.loganalytics.io/.default"; @@ -56,8 +57,10 @@ export class LogsQueryClient { // This client defaults to using 'https://api.loganalytics.io/' as the // host. let scope; + let endpoint = options?.endpoint; if (options?.endpoint) { - scope = `${options?.endpoint}/.default`; + scope = `${options.endpoint}/.default`; + endpoint = getLogQueryEndpoint(options); } const credentialOptions = { credentialScopes: scope, @@ -69,8 +72,8 @@ export class LogsQueryClient { : `${packageDetails}`; this._logAnalytics = new AzureLogAnalytics({ ...options, - $host: options?.endpoint, - endpoint: options?.endpoint, + $host: endpoint, + endpoint: endpoint, credentialScopes: credentialOptions?.credentialScopes ?? defaultMonitorScope, credential: tokenCredential, userAgentOptions: { diff --git a/sdk/monitor/monitor-query/test/internal/unit/logQueryOptionUtils.spec.ts b/sdk/monitor/monitor-query/test/internal/unit/logQueryOptionUtils.spec.ts new file mode 100644 index 000000000000..d42606d9ef1d --- /dev/null +++ b/sdk/monitor/monitor-query/test/internal/unit/logQueryOptionUtils.spec.ts @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { assert } from "@azure/test-utils"; +import { getLogQueryEndpoint } from "../../../src/internal/logQueryOptionUtils"; + +describe("logQueryOptionsUtils", () => { + describe("getLogQueryEndpoint", () => { + it("should return the endpoint with the version", () => { + const expected = "http://microsoft.com/v1"; + + const endpoint1 = "http://microsoft.com/"; + const endpoint2 = "http://microsoft.com"; + + const result1 = getLogQueryEndpoint({ endpoint: endpoint1 }); + const result2 = getLogQueryEndpoint({ endpoint: endpoint2 }); + + assert.equal(result1, expected); + assert.equal(result2, expected); + }); + }); +}); diff --git a/sdk/monitor/monitor-query/test/internal/unit/logsQueryClient.unittest.spec.ts b/sdk/monitor/monitor-query/test/internal/unit/logsQueryClient.unittest.spec.ts index ca33ed2056a4..7b2925d1cd59 100644 --- a/sdk/monitor/monitor-query/test/internal/unit/logsQueryClient.unittest.spec.ts +++ b/sdk/monitor/monitor-query/test/internal/unit/logsQueryClient.unittest.spec.ts @@ -32,8 +32,8 @@ describe("LogsQueryClient unit tests", () => { endpoint: "https://customEndpoint1", }); - assert.equal(client["_logAnalytics"].$host, "https://customEndpoint1"); - assert.equal(client["_logAnalytics"]["_endpoint"], "https://customEndpoint1"); + assert.equal(client["_logAnalytics"].$host, "https://customendpoint1/v1"); + assert.equal(client["_logAnalytics"]["_endpoint"], "https://customendpoint1/v1"); try { await client.queryWorkspace("workspaceId", "query", { duration: Durations.fiveMinutes });