Skip to content

Commit

Permalink
[Monitor Query] move to tracing 1.0.0 (Azure#21260)
Browse files Browse the repository at this point in the history
  • Loading branch information
KarishmaGhiya committed Jun 8, 2022
1 parent 3f74b03 commit f36d6b5
Show file tree
Hide file tree
Showing 13 changed files with 224 additions and 119 deletions.
2 changes: 1 addition & 1 deletion sdk/monitor/monitor-query/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@
"prettier": "@azure/eslint-plugin-azure-sdk/prettier.json",
"dependencies": {
"@azure/core-auth": "^1.3.0",
"@azure/core-tracing": "1.0.0-preview.13",
"@azure/core-tracing": "^1.0.0",
"@azure/core-client": "^1.0.0",
"@azure/core-rest-pipeline": "^1.1.0",
"@azure/core-paging": "^1.1.1",
Expand Down
2 changes: 1 addition & 1 deletion sdk/monitor/monitor-query/review/monitor-query.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export interface ListMetricDefinitionsOptions extends OperationOptions {
}

// @public
export interface ListMetricNamespacesOptions {
export interface ListMetricNamespacesOptions extends OperationOptions {
startTime?: string;
}

Expand Down
18 changes: 9 additions & 9 deletions sdk/monitor/monitor-query/src/internal/modelConverters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
// Licensed under the MIT license.

import {
BatchRequest as GeneratedBatchRequest,
BatchQueryRequest as GeneratedBatchQueryRequest,
QueryBatchResponse as GeneratedQueryBatchResponse,
BatchQueryResponse as GeneratedBatchQueryResponse,
QueryBody,
Table as GeneratedTable,
BatchQueryResults as GeneratedBatchQueryResults,
BatchRequest as GeneratedBatchRequest,
ErrorInfo as GeneratedErrorInfo,
QueryBatchResponse as GeneratedQueryBatchResponse,
Table as GeneratedTable,
QueryBody,
} from "../generated/logquery/src";

import {
Expand All @@ -20,28 +20,28 @@ import {
} from "../generated/metrics/src";

import {
MetricDefinitionsListOptionalParams as GeneratedMetricDefinitionsListOptionalParams,
MetricDefinition as GeneratedMetricDefinition,
MetricDefinitionsListOptionalParams as GeneratedMetricDefinitionsListOptionalParams,
} from "../generated/metricsdefinitions/src";

import { MetricNamespace as GeneratedMetricNamespace } from "../generated/metricsnamespaces/src";
import { formatPreferHeader } from "./util";

import {
QueryBatch,
ListMetricDefinitionsOptions,
LogsTable,
LogsQueryBatchResult,
LogsTable,
MetricsQueryOptions,
MetricsQueryResult,
QueryBatch,
} from "../../src";
import {
MetricNamespace,
Metric,
MetricAvailability,
MetricDefinition,
MetricNamespace,
TimeSeriesElement,
createMetricsQueryResult,
MetricAvailability,
} from "../models/publicMetricsModels";
import { FullOperationResponse } from "@azure/core-client";
import {
Expand Down
127 changes: 68 additions & 59 deletions sdk/monitor/monitor-query/src/logsQueryClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import { AzureLogAnalytics } from "./generated/logquery/src/azureLogAnalytics";
import { TokenCredential } from "@azure/core-auth";

import {
QueryBatch,
LogsQueryBatchOptions,
LogsQueryBatchResult,
LogsQueryOptions,
LogsQueryPartialResult,
LogsQueryResult,
LogsQueryResultStatus,
LogsQuerySuccessfulResult,
LogsQueryPartialResult,
QueryBatch,
} from "./models/publicLogsModels";

import {
Expand All @@ -26,6 +26,7 @@ import { CommonClientOptions, FullOperationResponse, OperationOptions } from "@a
import { QueryTimeInterval } from "./models/timeInterval";
import { convertTimespanToInterval } from "./timespanConversion";
import { SDK_VERSION } from "./constants";
import { tracingClient } from "./tracing";

const defaultMonitorScope = "https://api.loganalytics.io/.default";

Expand Down Expand Up @@ -93,61 +94,67 @@ export class LogsQueryClient {
query: string,
timespan: QueryTimeInterval,
// eslint-disable-next-line @azure/azure-sdk/ts-naming-options
options?: LogsQueryOptions
options: LogsQueryOptions = {}
): Promise<LogsQueryResult> {
let timeInterval: string = "";
if (timespan) {
timeInterval = convertTimespanToInterval(timespan);
}
const { flatResponse, rawResponse } = await getRawResponse(
(paramOptions) =>
this._logAnalytics.query.execute(
workspaceId,
return tracingClient.withSpan(
"LogsQueryClient.queryWorkspace",
options,
async (updatedOptions) => {
if (timespan) {
timeInterval = convertTimespanToInterval(timespan);
}
const { flatResponse, rawResponse } = await getRawResponse(
(paramOptions) =>
this._logAnalytics.query.execute(
workspaceId,
{
query,
timespan: timeInterval,
workspaces: options?.additionalWorkspaces,
},
paramOptions
),
{
query,
timespan: timeInterval,
workspaces: options?.additionalWorkspaces,
},
paramOptions
),
{
...options,
requestOptions: {
customHeaders: {
...formatPreferHeader(options),
},
},
}
);
...updatedOptions,
requestOptions: {
customHeaders: {
...formatPreferHeader(options),
},
},
}
);

const parsedBody = JSON.parse(rawResponse.bodyAsText!);
flatResponse.tables = parsedBody.tables;
const parsedBody = JSON.parse(rawResponse.bodyAsText!);
flatResponse.tables = parsedBody.tables;

const res = {
tables: flatResponse.tables.map(convertGeneratedTable),
statistics: flatResponse.statistics,
visualization: flatResponse.render,
};
const res = {
tables: flatResponse.tables.map(convertGeneratedTable),
statistics: flatResponse.statistics,
visualization: flatResponse.render,
};

if (!flatResponse.error) {
// if there is no error field, it is success
const result: LogsQuerySuccessfulResult = {
tables: res.tables,
statistics: res.statistics,
visualization: res.visualization,
status: LogsQueryResultStatus.Success,
};
return result;
} else {
const result: LogsQueryPartialResult = {
partialTables: res.tables,
status: LogsQueryResultStatus.PartialFailure,
partialError: mapError(flatResponse.error),
statistics: res.statistics,
visualization: res.visualization,
};
return result;
}
if (!flatResponse.error) {
// if there is no error field, it is success
const result: LogsQuerySuccessfulResult = {
tables: res.tables,
statistics: res.statistics,
visualization: res.visualization,
status: LogsQueryResultStatus.Success,
};
return result;
} else {
const result: LogsQueryPartialResult = {
partialTables: res.tables,
status: LogsQueryResultStatus.PartialFailure,
partialError: mapError(flatResponse.error),
statistics: res.statistics,
visualization: res.visualization,
};
return result;
}
}
);
}

/**
Expand All @@ -158,15 +165,17 @@ export class LogsQueryClient {
*/
async queryBatch(
batch: QueryBatch[],
options?: LogsQueryBatchOptions
options: LogsQueryBatchOptions = {}
): Promise<LogsQueryBatchResult> {
const generatedRequest = convertRequestForQueryBatch(batch);
const { flatResponse, rawResponse } = await getRawResponse(
(paramOptions) => this._logAnalytics.query.batch(generatedRequest, paramOptions),
options || {}
);
const result: LogsQueryBatchResult = convertResponseForQueryBatch(flatResponse, rawResponse);
return result;
return tracingClient.withSpan("LogsQueryClient.queryBatch", options, async (updatedOptions) => {
const generatedRequest = convertRequestForQueryBatch(batch);
const { flatResponse, rawResponse } = await getRawResponse(
(paramOptions) => this._logAnalytics.query.batch(generatedRequest, paramOptions),
updatedOptions || {}
);
const result: LogsQueryBatchResult = convertResponseForQueryBatch(flatResponse, rawResponse);
return result;
});
}
}

Expand Down
49 changes: 32 additions & 17 deletions sdk/monitor/monitor-query/src/metricsQueryClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,29 @@
import { TokenCredential } from "@azure/core-auth";
import { PagedAsyncIterableIterator } from "@azure/core-paging";
import { CommonClientOptions } from "@azure/core-client";
import { tracingClient } from "./tracing";

import {
ListMetricDefinitionsOptions,
ListMetricNamespacesOptions,
MetricsQueryOptions,
MetricsQueryResult,
MetricDefinition,
MetricNamespace,
MetricsQueryOptions,
MetricsQueryResult,
} from "./models/publicMetricsModels";

import {
KnownApiVersion201801 as MetricsApiVersion,
MonitorManagementClient as GeneratedMetricsClient,
KnownApiVersion201801 as MetricsApiVersion,
} from "./generated/metrics/src";
import {
KnownApiVersion201801 as MetricDefinitionsApiVersion,
MonitorManagementClient as GeneratedMetricsDefinitionsClient,
KnownApiVersion201801 as MetricDefinitionsApiVersion,
} from "./generated/metricsdefinitions/src";
import {
KnownApiVersion20171201Preview as MetricNamespacesApiVersion,
MonitorManagementClient as GeneratedMetricsNamespacesClient,
KnownApiVersion20171201Preview as MetricNamespacesApiVersion,
MetricNamespacesListOptionalParams,
} from "./generated/metricsnamespaces/src";
import {
convertRequestForMetrics,
Expand Down Expand Up @@ -106,14 +108,20 @@ export class MetricsQueryClient {
async queryResource(
resourceUri: string,
metricNames: string[],
options?: MetricsQueryOptions // eslint-disable-line @azure/azure-sdk/ts-naming-options
options: MetricsQueryOptions = {} // eslint-disable-line @azure/azure-sdk/ts-naming-options
): Promise<MetricsQueryResult> {
const response = await this._metricsClient.metrics.list(
resourceUri,
convertRequestForMetrics(metricNames, options)
);
return tracingClient.withSpan(
"MetricsQueryClient.queryResource",
options,
async (updatedOptions) => {
const response = await this._metricsClient.metrics.list(
resourceUri,
convertRequestForMetrics(metricNames, updatedOptions)
);

return convertResponseForMetrics(response);
return convertResponseForMetrics(response);
}
);
}

/**
Expand All @@ -123,9 +131,14 @@ export class MetricsQueryClient {
resourceUri: string,
options: ListMetricDefinitionsOptions = {}
): AsyncIterableIterator<Array<MetricDefinition>> {
const segmentResponse = await this._definitionsClient.metricDefinitions.list(
resourceUri,
convertRequestOptionsForMetricsDefinitions(options)
const segmentResponse = await tracingClient.withSpan(
"MetricsQueryClient.listSegmentOfMetricDefinitions",
options,
async (updatedOptions) =>
this._definitionsClient.metricDefinitions.list(
resourceUri,
convertRequestOptionsForMetricsDefinitions(updatedOptions)
)
);
yield convertResponseForMetricsDefinitions(segmentResponse.value);
}
Expand Down Expand Up @@ -211,9 +224,11 @@ export class MetricsQueryClient {
resourceUri: string,
options: ListMetricNamespacesOptions = {}
): AsyncIterableIterator<Array<MetricNamespace>> {
const segmentResponse = await this._namespacesClient.metricNamespaces.list(
resourceUri,
options
const segmentResponse = await tracingClient.withSpan(
"MetricsQueryClient.listSegmentOfMetricNamespaces",
options,
async (updatedOptions: MetricNamespacesListOptionalParams | undefined) =>
this._namespacesClient.metricNamespaces.list(resourceUri, updatedOptions)
);
yield convertResponseForMetricNamespaces(segmentResponse.value);
}
Expand Down
10 changes: 5 additions & 5 deletions sdk/monitor/monitor-query/src/models/publicMetricsModels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@

import { OperationOptions } from "@azure/core-client";
import {
MetricValue,
ResultType,
MetricUnit,
MetricClass,
AggregationType,
MetricClass,
MetricUnit,
MetricValue,
NamespaceClassification,
ResultType,
} from "..";
import { QueryTimeInterval } from "./timeInterval";

Expand Down Expand Up @@ -137,7 +137,7 @@ export interface ListMetricDefinitionsOptions extends OperationOptions {
/**
* Options used when getting metric namespaces.
*/
export interface ListMetricNamespacesOptions {
export interface ListMetricNamespacesOptions extends OperationOptions {
// track 2 copy of `MetricNamespacesListOptionalParams`

/** The ISO 8601 conform Date start time from which to query for metric namespaces. */
Expand Down
8 changes: 5 additions & 3 deletions sdk/monitor/monitor-query/src/tracing.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
//
import { createSpanFunction } from "@azure/core-tracing";
import { createTracingClient } from "@azure/core-tracing";
import { SDK_VERSION } from "./constants";

/**
* Creates a span using the global tracer.
Expand All @@ -11,7 +12,8 @@ import { createSpanFunction } from "@azure/core-tracing";
*
* @internal
*/
export const createSpan = createSpanFunction({
export const tracingClient = createTracingClient({
namespace: "Microsoft.Monitor",
packagePrefix: "Azure.Monitor.Query",
packageName: "@azure/monitor-query",
packageVersion: SDK_VERSION,
});
Loading

0 comments on commit f36d6b5

Please sign in to comment.