diff --git a/sdk/metricsadvisor/ai-metrics-advisor/README.md b/sdk/metricsadvisor/ai-metrics-advisor/README.md index 43a96889cb84..d23fb831b60d 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/README.md +++ b/sdk/metricsadvisor/ai-metrics-advisor/README.md @@ -113,9 +113,9 @@ const adminClient = new MetricsAdvisorAdministrationClient("", credent `MetricsAdvisorAdministrationClient` is the interface responsible for managing entities in the Metrics Advisor resources, such as managing data feeds, anomaly detection configurations, anomaly alerting configurations. -### DataFeed +### Data Feed -A `DataFeed` is what Metrics Advisor ingests from your data source, such as Cosmos DB or a SQL server. A data feed contains rows of: +A data feed is what Metrics Advisor ingests from your data source, such as Cosmos DB or a SQL server. A data feed contains rows of: - timestamps - zero or more dimensions @@ -123,7 +123,7 @@ A `DataFeed` is what Metrics Advisor ingests from your data source, such as Cosm ### Metric -A `Metric` is a quantifiable measure that is used to monitor and assess the status of a specific business process. It can be a combination of multiple time series values divided into dimensions. For example a web health metric might contain dimensions for user count and the en-us market. +A metric is a quantifiable measure that is used to monitor and assess the status of a specific business process. It can be a combination of multiple time series values divided into dimensions. For example a web health metric might contain dimensions for user count and the en-us market. ### AnomalyDetectionConfiguration @@ -131,15 +131,15 @@ A `Metric` is a quantifiable measure that is used to monitor and assess the stat ### Anomaly & Incident -After a detection configuration is applied to metrics, `Incident`s are generated whenever any series within it has an `Anomaly`. +After a detection configuration is applied to metrics, `AnomalyIncident`s are generated whenever any series within it has an `DataPointAnomaly`. ### Alert -You can configure which anomalies should trigger an `Alert`. You can set multiple alerts with different settings. For example, you could create an alert for anomalies with lower business impact, and another for more important alerts. +You can configure which anomalies should trigger an `AnomalyAlert`. You can set multiple alerts with different settings. For example, you could create an alert for anomalies with lower business impact, and another for more important alerts. ### Hook -Metrics Advisor lets you create and subscribe to real-time alerts. These alerts are sent over the internet, using a `Hook`. +Metrics Advisor lets you create and subscribe to real-time alerts. These alerts are sent over the internet, using a notification hook. Please refer to [the Metrics Advisory Glossary][metrics_advisor_glossary] documentation page for a comprehensive list of concepts. @@ -462,10 +462,10 @@ async function queryAnomaliesByAlert(client, alert) { console.log( `Listing anomalies for alert configuration '${alert.alertConfigId}' and alert '${alert.id}'` ); - const iterator = client.listAnomalies(alert); + const iterator = client.listAnomaliesForAlert(alert); for await (const anomaly of iterator) { console.log( - ` Anomaly ${anomaly.severity} ${anomaly.status} ${anomaly.seriesKey.dimension} ${anomaly.timestamp}` + ` Anomaly ${anomaly.severity} ${anomaly.status} ${anomaly.seriesKey} ${anomaly.timestamp}` ); } } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/aad_metricsadvisoradministrationclient_datafeed_datafeed/recording_creates_eventhubs_data_feed.js b/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/aad_metricsadvisoradministrationclient_datafeed_datafeed/recording_creates_eventhubs_data_feed.js index 02971c33ef58..99351b5eda14 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/aad_metricsadvisoradministrationclient_datafeed_datafeed/recording_creates_eventhubs_data_feed.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/aad_metricsadvisoradministrationclient_datafeed_datafeed/recording_creates_eventhubs_data_feed.js @@ -1,11 +1,11 @@ let nock = require('nock'); -module.exports.hash = "20a42b7c23b773a1da152bf8cfd1872b"; +module.exports.hash = "b305b062177574b168150bc47bb53ffe"; -module.exports.testInfo = {"uniqueName":{"js-test-datafeed-":"js-test-datafeed-162286538972802836","js-test-appInsightsFeed-":"js-test-appInsightsFeed-162286538972803864","js-test-sqlServerFeed-":"js-test-sqlServerFeed-162286538972807760","js-test-cosmosFeed-":"js-test-cosmosFeed-162286538972800952","js-test-dataExplorerFeed-":"js-test-dataExplorerFeed-162286538972805442","js-test-tableFeed-":"js-test-tableFeed-162286538972800856","js-test-httpRequestFeed-":"js-test-httpRequestFeed-162286538972809899","js-test-logAnalyticsFeed-":"js-test-logAnalyticsFeed-162286538972803497","js-test-influxdbFeed-":"js-test-influxdbFeed-162286538972805329","js-test-mongoDbFeed-":"js-test-mongoDbFeed-162286538972808553","js-test-mySqlFeed-":"js-test-mySqlFeed-162286538972808287","js-test-postgreSqlFeed-":"js-test-postgreSqlFeed-162286538972809007","js-test-dataLakeGenFeed-":"js-test-dataLakeGenFeed-162286538972803708"},"newDate":{}} +module.exports.testInfo = {"uniqueName":{"js-test-datafeed-":"js-test-datafeed-162456611703607360","js-test-appInsightsFeed-":"js-test-appInsightsFeed-162456611703602601","js-test-sqlServerFeed-":"js-test-sqlServerFeed-162456611703605931","js-test-cosmosFeed-":"js-test-cosmosFeed-162456611703606158","js-test-dataExplorerFeed-":"js-test-dataExplorerFeed-162456611703605594","js-test-tableFeed-":"js-test-tableFeed-162456611703601948","js-test-httpRequestFeed-":"js-test-httpRequestFeed-162456611703601598","js-test-logAnalyticsFeed-":"js-test-logAnalyticsFeed-162456611703605729","js-test-influxdbFeed-":"js-test-influxdbFeed-162456611703608797","js-test-mongoDbFeed-":"js-test-mongoDbFeed-162456611703608062","js-test-mySqlFeed-":"js-test-mySqlFeed-162456611703601892","js-test-postgreSqlFeed-":"js-test-postgreSqlFeed-162456611703605513","js-test-dataLakeGenFeed-":"js-test-dataLakeGenFeed-162456611703602792"},"newDate":{}} nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) - .post('/azure_tenant_id/oauth2/v2.0/token', "response_type=token&grant_type=client_credentials&client_id=azure_client_id&client_secret=azure_client_secret&scope=https%3A%2F%2Fsanitized%2F") + .post('/azure_tenant_id/oauth2/v2.0/token', "response_type=token&grant_type=client_credentials&client_id=azure_client_id&client_secret=azure_client_secret&scope=https%3A%2F%2Fcognitiveservices.azure.com%2F.default") .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ 'Cache-Control', 'no-store, no-cache', @@ -22,59 +22,59 @@ nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) 'P3P', 'CP="DSP CUR OTPi IND OTRi ONL FIN"', 'x-ms-request-id', - '8555f162-6194-490d-98e9-74574bef5400', + '0825421b-0412-4892-9d10-18085d133a00', 'x-ms-ests-server', - '2.1.11787.14 - WUS2 ProdSlices', + '2.1.11829.9 - SCUS ProdSlices', 'Set-Cookie', - 'fpc=AmLQSFzZ3NtIncXgUaZsx9HGLH8mAQAAAO3sTNgOAAAA; expires=Mon, 05-Jul-2021 03:56:30 GMT; path=/; secure; HttpOnly; SameSite=None', + 'fpc=Ap4NeeLKqOpIlcTRHUTrwPfGLH8mAQAAAGXgZtgOAAAA; expires=Sat, 24-Jul-2021 20:21:57 GMT; path=/; secure; HttpOnly; SameSite=None', 'Set-Cookie', 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', 'Set-Cookie', 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', 'Date', - 'Sat, 05 Jun 2021 03:56:30 GMT', + 'Thu, 24 Jun 2021 20:21:56 GMT', 'Content-Length', '1331' ]); nock('https://endpoint:443', {"encodedQueryParams":true}) - .post('/metricsadvisor/v1.0/dataFeeds', {"dataSourceType":"AzureEventHubs","dataFeedName":"js-test-httpRequestFeed-162286538972809899","dataFeedDescription":"Data feed description","granularityName":"Daily","metrics":[{"metricName":"cost","metricDisplayName":"cost","metricDescription":""},{"metricName":"revenue","metricDisplayName":"revenue","metricDescription":""}],"dimension":[{"dimensionName":"category","dimensionDisplayName":"category"},{"dimensionName":"city","dimensionDisplayName":"city"}],"dataStartFrom":"2020-08-21T00:00:00.000Z","startOffsetInSeconds":0,"maxConcurrency":-1,"minRetryIntervalInSeconds":-1,"stopRetryAfterInSeconds":-1,"needRollup":"NeedRollup","rollUpMethod":"Sum","allUpIdentification":"__CUSTOM_SUM__","fillMissingPointType":"CustomValue","fillMissingPointValue":555,"viewMode":"Private","authenticationType":"Basic","dataSourceParameter":{"connectionString":"eventhub-connection-string","consumerGroup":"consumer-group"}}) + .post('/metricsadvisor/v1.0/dataFeeds', {"dataSourceType":"AzureEventHubs","dataFeedName":"js-test-httpRequestFeed-162456611703601598","dataFeedDescription":"Data feed description","granularityName":"Daily","metrics":[{"metricName":"cost","metricDisplayName":"cost","metricDescription":""},{"metricName":"revenue","metricDisplayName":"revenue","metricDescription":""}],"dimension":[{"dimensionName":"category","dimensionDisplayName":"category"},{"dimensionName":"city","dimensionDisplayName":"city"}],"dataStartFrom":"2020-08-21T00:00:00.000Z","startOffsetInSeconds":0,"maxConcurrency":-1,"minRetryIntervalInSeconds":-1,"stopRetryAfterInSeconds":-1,"needRollup":"NeedRollup","rollUpMethod":"Sum","allUpIdentification":"__CUSTOM_SUM__","fillMissingPointType":"CustomValue","fillMissingPointValue":555,"viewMode":"Private","authenticationType":"Basic","dataSourceParameter":{"connectionString":"eventhub-connection-string","consumerGroup":"consumer-group"}}) .reply(201, "", [ 'Content-Length', '0', 'Location', - 'https://endpoint/metricsadvisor/v1.0/dataFeeds/d14eb6dc-6761-491d-bf79-d3279080f70d', + 'https://endpoint/metricsadvisor/v1.0/dataFeeds/1409ab03-d455-465e-9df0-ef5db2cdb961', 'x-request-id', - '5720d423-b94c-4644-a50a-cf33d5498f8f', + 'bf8ce3d4-e4ca-4825-9222-40ab47422d30', 'x-envoy-upstream-service-time', - '6108', + '7340', 'apim-request-id', - '5720d423-b94c-4644-a50a-cf33d5498f8f', + 'bf8ce3d4-e4ca-4825-9222-40ab47422d30', 'Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options', 'nosniff', 'Date', - 'Sat, 05 Jun 2021 03:56:36 GMT' + 'Thu, 24 Jun 2021 20:22:04 GMT' ]); nock('https://endpoint:443', {"encodedQueryParams":true}) - .get('/metricsadvisor/v1.0/dataFeeds/d14eb6dc-6761-491d-bf79-d3279080f70d') - .reply(200, {"dataFeedId":"d14eb6dc-6761-491d-bf79-d3279080f70d","dataFeedName":"js-test-httpRequestFeed-162286538972809899","metrics":[{"metricId":"da49548d-fb10-44ef-8f9f-472b7e257bbe","metricName":"cost","metricDisplayName":"cost","metricDescription":""},{"metricId":"cbea5d2b-c4af-4d97-bae0-6b21d92dfb67","metricName":"revenue","metricDisplayName":"revenue","metricDescription":""}],"dimension":[{"dimensionName":"category","dimensionDisplayName":"category"},{"dimensionName":"city","dimensionDisplayName":"city"}],"dataStartFrom":"2021-06-05T00:00:00Z","dataSourceType":"AzureEventHubs","timestampColumn":"","startOffsetInSeconds":0,"maxQueryPerMinute":30,"granularityName":"Daily","allUpIdentification":"__CUSTOM_SUM__","needRollup":"NeedRollup","fillMissingPointType":"CustomValue","fillMissingPointValue":555,"rollUpMethod":"Sum","dataFeedDescription":"Data feed description","stopRetryAfterInSeconds":-1,"minRetryIntervalInSeconds":-1,"maxConcurrency":-1,"viewMode":"Private","admins":["azure_client_id"],"viewers":[],"creator":"azure_client_id","status":"Active","createdTime":"2021-06-05T03:56:36Z","isAdmin":true,"actionLinkTemplate":"","dataSourceParameter":{"consumerGroup":"consumer-group"},"authenticationType":"Basic"}, [ + .get('/metricsadvisor/v1.0/dataFeeds/1409ab03-d455-465e-9df0-ef5db2cdb961') + .reply(200, {"dataFeedId":"1409ab03-d455-465e-9df0-ef5db2cdb961","dataFeedName":"js-test-httpRequestFeed-162456611703601598","metrics":[{"metricId":"5b7c65ed-5f79-4281-a53d-631edc294f9a","metricName":"cost","metricDisplayName":"cost","metricDescription":""},{"metricId":"6e9f6865-afa0-4524-831d-ed620e6fa5a9","metricName":"revenue","metricDisplayName":"revenue","metricDescription":""}],"dimension":[{"dimensionName":"category","dimensionDisplayName":"category"},{"dimensionName":"city","dimensionDisplayName":"city"}],"dataStartFrom":"2021-06-24T00:00:00Z","dataSourceType":"AzureEventHubs","timestampColumn":"","startOffsetInSeconds":0,"maxQueryPerMinute":30,"granularityName":"Daily","allUpIdentification":"__CUSTOM_SUM__","needRollup":"NeedRollup","fillMissingPointType":"CustomValue","fillMissingPointValue":555,"rollUpMethod":"Sum","dataFeedDescription":"Data feed description","stopRetryAfterInSeconds":-1,"minRetryIntervalInSeconds":-1,"maxConcurrency":-1,"viewMode":"Private","admins":["azure_client_id"],"viewers":[],"creator":"azure_client_id","status":"Active","createdTime":"2021-06-24T20:22:04Z","isAdmin":true,"actionLinkTemplate":"","dataSourceParameter":{"consumerGroup":"consumer-group"},"authenticationType":"Basic"}, [ 'Content-Length', '1263', 'Content-Type', 'application/json; charset=utf-8', 'x-request-id', - 'd55c046c-e32c-43ea-a89e-77cf47bb875e', + '9af44072-c58d-46ca-86a7-bab9d1e12f52', 'x-envoy-upstream-service-time', - '183', + '5334', 'apim-request-id', - 'd55c046c-e32c-43ea-a89e-77cf47bb875e', + '9af44072-c58d-46ca-86a7-bab9d1e12f52', 'Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options', 'nosniff', 'Date', - 'Sat, 05 Jun 2021 03:56:36 GMT' + 'Thu, 24 Jun 2021 20:22:10 GMT' ]); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/aad_metricsadvisoradministrationclient_datafeed_datafeed/recording_deletes_eventhubs_data_feed.js b/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/aad_metricsadvisoradministrationclient_datafeed_datafeed/recording_deletes_eventhubs_data_feed.js index b9f3a1f971dc..4dc578def2db 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/aad_metricsadvisoradministrationclient_datafeed_datafeed/recording_deletes_eventhubs_data_feed.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/aad_metricsadvisoradministrationclient_datafeed_datafeed/recording_deletes_eventhubs_data_feed.js @@ -1,11 +1,11 @@ let nock = require('nock'); -module.exports.hash = "8db789c5a43bf8d7e9c8ff57f96724c2"; +module.exports.hash = "3b26ef694bf46025b536723153ef1756"; module.exports.testInfo = {"uniqueName":{},"newDate":{}} nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) - .post('/azure_tenant_id/oauth2/v2.0/token', "response_type=token&grant_type=client_credentials&client_id=azure_client_id&client_secret=azure_client_secret&scope=https%3A%2F%2Fsanitized%2F") + .post('/azure_tenant_id/oauth2/v2.0/token', "response_type=token&grant_type=client_credentials&client_id=azure_client_id&client_secret=azure_client_secret&scope=https%3A%2F%2Fcognitiveservices.azure.com%2F.default") .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ 'Cache-Control', 'no-store, no-cache', @@ -22,57 +22,57 @@ nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) 'P3P', 'CP="DSP CUR OTPi IND OTRi ONL FIN"', 'x-ms-request-id', - 'b1e3b71e-7805-4038-a226-cc8e7c6f6500', + 'e26d6036-8ed7-4299-8775-58c73aa43600', 'x-ms-ests-server', - '2.1.11787.14 - WUS2 ProdSlices', + '2.1.11829.9 - NCUS ProdSlices', 'Set-Cookie', - 'fpc=AmLQSFzZ3NtIncXgUaZsx9HGLH8mAgAAAO3sTNgOAAAA; expires=Mon, 05-Jul-2021 03:56:37 GMT; path=/; secure; HttpOnly; SameSite=None', + 'fpc=Ap4NeeLKqOpIlcTRHUTrwPfGLH8mAgAAAGXgZtgOAAAA; expires=Sat, 24-Jul-2021 20:22:11 GMT; path=/; secure; HttpOnly; SameSite=None', 'Set-Cookie', 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', 'Set-Cookie', 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', 'Date', - 'Sat, 05 Jun 2021 03:56:37 GMT', + 'Thu, 24 Jun 2021 20:22:10 GMT', 'Content-Length', '1331' ]); nock('https://endpoint:443', {"encodedQueryParams":true}) - .delete('/metricsadvisor/v1.0/dataFeeds/d14eb6dc-6761-491d-bf79-d3279080f70d') + .delete('/metricsadvisor/v1.0/dataFeeds/1409ab03-d455-465e-9df0-ef5db2cdb961') .reply(204, "", [ 'Content-Length', '0', 'x-request-id', - '293c7964-b109-4123-86cc-ea20f39e3ef4', + '4666cc14-a826-4061-947a-085483e932ac', 'x-envoy-upstream-service-time', - '5590', + '5984', 'apim-request-id', - '293c7964-b109-4123-86cc-ea20f39e3ef4', + '4666cc14-a826-4061-947a-085483e932ac', 'Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options', 'nosniff', 'Date', - 'Sat, 05 Jun 2021 03:56:42 GMT' + 'Thu, 24 Jun 2021 20:22:16 GMT' ]); nock('https://endpoint:443', {"encodedQueryParams":true}) - .get('/metricsadvisor/v1.0/dataFeeds/d14eb6dc-6761-491d-bf79-d3279080f70d') + .get('/metricsadvisor/v1.0/dataFeeds/1409ab03-d455-465e-9df0-ef5db2cdb961') .reply(404, {"code":"404 NOT_FOUND","message":"datafeedId is invalid."}, [ 'Content-Length', '59', 'Content-Type', 'application/json; charset=utf-8', 'x-request-id', - 'fee8363d-582a-4c16-9f94-fd67d7db5423', + 'c3d92522-51c4-4c5b-8b5a-30f3808a3793', 'x-envoy-upstream-service-time', - '5138', + '5314', 'apim-request-id', - 'fee8363d-582a-4c16-9f94-fd67d7db5423', + 'c3d92522-51c4-4c5b-8b5a-30f3808a3793', 'Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options', 'nosniff', 'Date', - 'Sat, 05 Jun 2021 03:56:47 GMT' + 'Thu, 24 Jun 2021 20:22:22 GMT' ]); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/api_key_metricsadvisoradministrationclient_datafeed_datafeed/recording_creates_eventhubs_data_feed.js b/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/api_key_metricsadvisoradministrationclient_datafeed_datafeed/recording_creates_eventhubs_data_feed.js index da9fedd3e8a7..c2d1cf90604e 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/api_key_metricsadvisoradministrationclient_datafeed_datafeed/recording_creates_eventhubs_data_feed.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/api_key_metricsadvisoradministrationclient_datafeed_datafeed/recording_creates_eventhubs_data_feed.js @@ -1,47 +1,47 @@ let nock = require('nock'); -module.exports.hash = "20a42b7c23b773a1da152bf8cfd1872b"; +module.exports.hash = "b305b062177574b168150bc47bb53ffe"; -module.exports.testInfo = {"uniqueName":{"js-test-datafeed-":"js-test-datafeed-162286540825106897","js-test-appInsightsFeed-":"js-test-appInsightsFeed-162286540825103508","js-test-sqlServerFeed-":"js-test-sqlServerFeed-162286540825102841","js-test-cosmosFeed-":"js-test-cosmosFeed-162286540825109497","js-test-dataExplorerFeed-":"js-test-dataExplorerFeed-162286540825100498","js-test-tableFeed-":"js-test-tableFeed-162286540825106607","js-test-httpRequestFeed-":"js-test-httpRequestFeed-162286540825107845","js-test-logAnalyticsFeed-":"js-test-logAnalyticsFeed-162286540825103590","js-test-influxdbFeed-":"js-test-influxdbFeed-162286540825109243","js-test-mongoDbFeed-":"js-test-mongoDbFeed-162286540825106090","js-test-mySqlFeed-":"js-test-mySqlFeed-162286540825102842","js-test-postgreSqlFeed-":"js-test-postgreSqlFeed-162286540825106280","js-test-dataLakeGenFeed-":"js-test-dataLakeGenFeed-162286540825100711"},"newDate":{}} +module.exports.testInfo = {"uniqueName":{"js-test-datafeed-":"js-test-datafeed-162456614300300139","js-test-appInsightsFeed-":"js-test-appInsightsFeed-162456614300408925","js-test-sqlServerFeed-":"js-test-sqlServerFeed-162456614300402561","js-test-cosmosFeed-":"js-test-cosmosFeed-162456614300400836","js-test-dataExplorerFeed-":"js-test-dataExplorerFeed-162456614300402514","js-test-tableFeed-":"js-test-tableFeed-162456614300409086","js-test-httpRequestFeed-":"js-test-httpRequestFeed-162456614300408284","js-test-logAnalyticsFeed-":"js-test-logAnalyticsFeed-162456614300401025","js-test-influxdbFeed-":"js-test-influxdbFeed-162456614300401958","js-test-mongoDbFeed-":"js-test-mongoDbFeed-162456614300402402","js-test-mySqlFeed-":"js-test-mySqlFeed-162456614300400971","js-test-postgreSqlFeed-":"js-test-postgreSqlFeed-162456614300408445","js-test-dataLakeGenFeed-":"js-test-dataLakeGenFeed-162456614300400179"},"newDate":{}} nock('https://endpoint:443', {"encodedQueryParams":true}) - .post('/metricsadvisor/v1.0/dataFeeds', {"dataSourceType":"AzureEventHubs","dataFeedName":"js-test-httpRequestFeed-162286540825107845","dataFeedDescription":"Data feed description","granularityName":"Daily","metrics":[{"metricName":"cost","metricDisplayName":"cost","metricDescription":""},{"metricName":"revenue","metricDisplayName":"revenue","metricDescription":""}],"dimension":[{"dimensionName":"category","dimensionDisplayName":"category"},{"dimensionName":"city","dimensionDisplayName":"city"}],"dataStartFrom":"2020-08-21T00:00:00.000Z","startOffsetInSeconds":0,"maxConcurrency":-1,"minRetryIntervalInSeconds":-1,"stopRetryAfterInSeconds":-1,"needRollup":"NeedRollup","rollUpMethod":"Sum","allUpIdentification":"__CUSTOM_SUM__","fillMissingPointType":"CustomValue","fillMissingPointValue":555,"viewMode":"Private","authenticationType":"Basic","dataSourceParameter":{"connectionString":"eventhub-connection-string","consumerGroup":"consumer-group"}}) + .post('/metricsadvisor/v1.0/dataFeeds', {"dataSourceType":"AzureEventHubs","dataFeedName":"js-test-httpRequestFeed-162456614300408284","dataFeedDescription":"Data feed description","granularityName":"Daily","metrics":[{"metricName":"cost","metricDisplayName":"cost","metricDescription":""},{"metricName":"revenue","metricDisplayName":"revenue","metricDescription":""}],"dimension":[{"dimensionName":"category","dimensionDisplayName":"category"},{"dimensionName":"city","dimensionDisplayName":"city"}],"dataStartFrom":"2020-08-21T00:00:00.000Z","startOffsetInSeconds":0,"maxConcurrency":-1,"minRetryIntervalInSeconds":-1,"stopRetryAfterInSeconds":-1,"needRollup":"NeedRollup","rollUpMethod":"Sum","allUpIdentification":"__CUSTOM_SUM__","fillMissingPointType":"CustomValue","fillMissingPointValue":555,"viewMode":"Private","authenticationType":"Basic","dataSourceParameter":{"connectionString":"eventhub-connection-string","consumerGroup":"consumer-group"}}) .reply(201, "", [ 'Content-Length', '0', 'Location', - 'https://endpoint/metricsadvisor/v1.0/dataFeeds/f6e5a8cb-398a-4d5a-89e7-56d1307d72c5', + 'https://endpoint/metricsadvisor/v1.0/dataFeeds/49afdaec-205b-4211-8020-56a7458063c2', 'x-request-id', - '386f4c2e-85ca-46e5-a265-388c1387d4de', + 'fb26ee74-d492-4354-ae45-99e8253fdfb7', 'x-envoy-upstream-service-time', - '749', + '2233', 'apim-request-id', - '386f4c2e-85ca-46e5-a265-388c1387d4de', + 'fb26ee74-d492-4354-ae45-99e8253fdfb7', 'Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options', 'nosniff', 'Date', - 'Sat, 05 Jun 2021 03:56:48 GMT' + 'Thu, 24 Jun 2021 20:22:24 GMT' ]); nock('https://endpoint:443', {"encodedQueryParams":true}) - .get('/metricsadvisor/v1.0/dataFeeds/f6e5a8cb-398a-4d5a-89e7-56d1307d72c5') - .reply(200, {"dataFeedId":"f6e5a8cb-398a-4d5a-89e7-56d1307d72c5","dataFeedName":"js-test-httpRequestFeed-162286540825107845","metrics":[{"metricId":"15512319-f95c-48ae-aeca-f775497fbc35","metricName":"cost","metricDisplayName":"cost","metricDescription":""},{"metricId":"395ca396-b5d4-45a3-96fa-d0adc40873f8","metricName":"revenue","metricDisplayName":"revenue","metricDescription":""}],"dimension":[{"dimensionName":"category","dimensionDisplayName":"category"},{"dimensionName":"city","dimensionDisplayName":"city"}],"dataStartFrom":"2021-06-05T00:00:00Z","dataSourceType":"AzureEventHubs","timestampColumn":"","startOffsetInSeconds":0,"maxQueryPerMinute":30,"granularityName":"Daily","allUpIdentification":"__CUSTOM_SUM__","needRollup":"NeedRollup","fillMissingPointType":"CustomValue","fillMissingPointValue":555,"rollUpMethod":"Sum","dataFeedDescription":"Data feed description","stopRetryAfterInSeconds":-1,"minRetryIntervalInSeconds":-1,"maxConcurrency":-1,"viewMode":"Private","admins":["kaghiya@microsoft.com"],"viewers":[],"creator":"kaghiya@microsoft.com","status":"Active","createdTime":"2021-06-05T03:56:48Z","isAdmin":true,"actionLinkTemplate":"","dataSourceParameter":{"consumerGroup":"consumer-group"},"authenticationType":"Basic"}, [ + .get('/metricsadvisor/v1.0/dataFeeds/49afdaec-205b-4211-8020-56a7458063c2') + .reply(200, {"dataFeedId":"49afdaec-205b-4211-8020-56a7458063c2","dataFeedName":"js-test-httpRequestFeed-162456614300408284","metrics":[{"metricId":"f0d89260-9d15-438f-865c-877a65558832","metricName":"cost","metricDisplayName":"cost","metricDescription":""},{"metricId":"05627ee3-091c-4d8c-8263-819e6d689193","metricName":"revenue","metricDisplayName":"revenue","metricDescription":""}],"dimension":[{"dimensionName":"category","dimensionDisplayName":"category"},{"dimensionName":"city","dimensionDisplayName":"city"}],"dataStartFrom":"2021-06-24T00:00:00Z","dataSourceType":"AzureEventHubs","timestampColumn":"","startOffsetInSeconds":0,"maxQueryPerMinute":30,"granularityName":"Daily","allUpIdentification":"__CUSTOM_SUM__","needRollup":"NeedRollup","fillMissingPointType":"CustomValue","fillMissingPointValue":555,"rollUpMethod":"Sum","dataFeedDescription":"Data feed description","stopRetryAfterInSeconds":-1,"minRetryIntervalInSeconds":-1,"maxConcurrency":-1,"viewMode":"Private","admins":["kaghiya@microsoft.com"],"viewers":[],"creator":"kaghiya@microsoft.com","status":"Active","createdTime":"2021-06-24T20:22:24Z","isAdmin":true,"actionLinkTemplate":"","dataSourceParameter":{"consumerGroup":"consumer-group"},"authenticationType":"Basic"}, [ 'Content-Length', '1233', 'Content-Type', 'application/json; charset=utf-8', 'x-request-id', - 'a44fa8ca-54d1-48e6-b609-a38894c2d09d', + 'b8689547-dcd2-4a12-8cfd-7ebf3cf2e8d5', 'x-envoy-upstream-service-time', - '175', + '500', 'apim-request-id', - 'a44fa8ca-54d1-48e6-b609-a38894c2d09d', + 'b8689547-dcd2-4a12-8cfd-7ebf3cf2e8d5', 'Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options', 'nosniff', 'Date', - 'Sat, 05 Jun 2021 03:56:48 GMT' + 'Thu, 24 Jun 2021 20:22:25 GMT' ]); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/api_key_metricsadvisoradministrationclient_datafeed_datafeed/recording_deletes_eventhubs_data_feed.js b/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/api_key_metricsadvisoradministrationclient_datafeed_datafeed/recording_deletes_eventhubs_data_feed.js index 48650d46562b..ce36671aa4ea 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/api_key_metricsadvisoradministrationclient_datafeed_datafeed/recording_deletes_eventhubs_data_feed.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/recordings/node/api_key_metricsadvisoradministrationclient_datafeed_datafeed/recording_deletes_eventhubs_data_feed.js @@ -1,45 +1,45 @@ let nock = require('nock'); -module.exports.hash = "8db789c5a43bf8d7e9c8ff57f96724c2"; +module.exports.hash = "3b26ef694bf46025b536723153ef1756"; module.exports.testInfo = {"uniqueName":{},"newDate":{}} nock('https://endpoint:443', {"encodedQueryParams":true}) - .delete('/metricsadvisor/v1.0/dataFeeds/f6e5a8cb-398a-4d5a-89e7-56d1307d72c5') + .delete('/metricsadvisor/v1.0/dataFeeds/49afdaec-205b-4211-8020-56a7458063c2') .reply(204, "", [ 'Content-Length', '0', 'x-request-id', - 'bdbfaac7-2008-4713-866a-abbb8a6787c2', + '24dfcbc6-ba4c-45b4-9f19-98c141b9c83a', 'x-envoy-upstream-service-time', - '431', + '6082', 'apim-request-id', - 'bdbfaac7-2008-4713-866a-abbb8a6787c2', + '24dfcbc6-ba4c-45b4-9f19-98c141b9c83a', 'Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options', 'nosniff', 'Date', - 'Sat, 05 Jun 2021 03:56:48 GMT' + 'Thu, 24 Jun 2021 20:22:31 GMT' ]); nock('https://endpoint:443', {"encodedQueryParams":true}) - .get('/metricsadvisor/v1.0/dataFeeds/f6e5a8cb-398a-4d5a-89e7-56d1307d72c5') + .get('/metricsadvisor/v1.0/dataFeeds/49afdaec-205b-4211-8020-56a7458063c2') .reply(404, {"code":"404 NOT_FOUND","message":"datafeedId is invalid."}, [ 'Content-Length', '59', 'Content-Type', 'application/json; charset=utf-8', 'x-request-id', - 'fce9dd4e-f02f-47b4-a626-c5afd5251b74', + 'b53ca28c-fbaf-4a8c-b738-d26533679f90', 'x-envoy-upstream-service-time', - '139', + '192', 'apim-request-id', - 'fce9dd4e-f02f-47b4-a626-c5afd5251b74', + 'b53ca28c-fbaf-4a8c-b738-d26533679f90', 'Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options', 'nosniff', 'Date', - 'Sat, 05 Jun 2021 03:56:49 GMT' + 'Thu, 24 Jun 2021 20:22:31 GMT' ]); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/review/ai-metrics-advisor.api.md b/sdk/metricsadvisor/ai-metrics-advisor/review/ai-metrics-advisor.api.md index 0962f302827e..7747aa7b95fc 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/review/ai-metrics-advisor.api.md +++ b/sdk/metricsadvisor/ai-metrics-advisor/review/ai-metrics-advisor.api.md @@ -53,11 +53,11 @@ export interface AnomalyAlert { export interface AnomalyAlertConfiguration { crossMetricsOperator?: MetricAnomalyAlertConfigurationsOperator; description?: string; + dimensionsToSplitAlert?: string[]; hookIds: string[]; id: string; metricAlertConfigurations: MetricAlertConfiguration[]; name: string; - splitAlertByDimensions?: string[]; } // @public @@ -230,7 +230,7 @@ export interface CreateDataFeedOptions extends OperationOptions { } // @public -export interface CredentialsPageResponse extends Array { +export interface CredentialsPageResponse extends Array { continuationToken?: string; _response: coreHttp.HttpResponse & { bodyAsText: string; @@ -239,32 +239,13 @@ export interface CredentialsPageResponse extends Array; - granularity: DataFeedGranularity; - ingestionSettings: DataFeedIngestionSettings; - description?: string; - rollupSettings?: DataFeedRollupSettings; - missingDataPointFillSettings?: DataFeedMissingDataPointFillSettings; - accessMode?: DataFeedAccessMode; - adminEmails?: string[]; - viewerEmails?: string[]; - actionLinkTemplate?: string; -}; +export type DataFeedAccessMode = "Private" | "Public"; // @public -export type DataFeedAccessMode = "Private" | "Public"; +export type DataFeedAutoRollupMethod = "None" | "Sum" | "Max" | "Min" | "Avg" | "Count"; // @public -export type DataFeedDescriptor = Omit; +export type DataFeedDescriptor = Omit; // @public export type DataFeedDetailStatus = "Active" | "Paused"; @@ -277,13 +258,13 @@ export interface DataFeedDimension { // @public export type DataFeedGranularity = { - granularityType: "Yearly" | "Monthly" | "Weekly" | "Daily" | "Hourly" | "PerMinute" | "PerSecond"; + granularityType: "Yearly" | "Monthly" | "Weekly" | "Daily" | "Hourly" | "PerMinute"; } | { granularityType: "Custom"; customGranularityValue: number; }; -// @public (undocumented) +// @public export interface DataFeedIngestionProgress { readonly latestActiveTimestamp?: Date; readonly latestSuccessTimestamp?: Date; @@ -332,9 +313,6 @@ export type DataFeedPatch = { status?: DataFeedDetailStatus; }; -// @public -export type DataFeedRollupMethod = "None" | "Sum" | "Max" | "Min" | "Avg" | "Count"; - // @public export type DataFeedRollupSettings = { rollupType: "NoRollup"; @@ -344,7 +322,7 @@ export type DataFeedRollupSettings = { } | { rollupType: "AutoRollup"; autoRollupGroupByColumnNames?: string[]; - rollupMethod?: DataFeedRollupMethod; + rollupMethod?: DataFeedAutoRollupMethod; rollupIdentificationValue?: string; }; @@ -364,7 +342,7 @@ export type DataFeedSourcePatch = Partial & { }; // @public -export interface DataFeedsPageResponse extends Array { +export interface DataFeedsPageResponse extends Array { continuationToken?: string; _response: coreHttp.HttpResponse & { bodyAsText: string; @@ -375,20 +353,6 @@ export interface DataFeedsPageResponse extends Array { // @public export type DataFeedStatus = "Paused" | "Active"; -// @public -export interface DataLakeGen2SharedKeyDatasourceCredential extends DatasourceCredential { - accountKey: string; - type: "DataLakeGen2SharedKey"; -} - -// @public -export interface DataLakeGen2SharedKeyDatasourceCredentialPatch { - accountKey?: string; - description?: string; - name?: string; - type: "DataLakeGen2SharedKey"; -} - // @public export type DataLakeStorageGen2AuthBasic = { authenticationType: "Basic"; @@ -434,25 +398,98 @@ export interface DataPointAnomaly { } // @public -export interface DatasourceCredential { +export interface DataSourceCredentialEntity { description?: string; readonly id?: string; name: string; } // @public -export type DatasourceCredentialPatch = SqlServerConnectionStringDatasourceCredentialPatch | DataLakeGen2SharedKeyDatasourceCredentialPatch | ServicePrincipalDatasourceCredentialPatch | ServicePrincipalInKeyVaultDatasourceCredentialPatch; +export type DataSourceCredentialEntityUnion = DataSourceSqlConnectionString | DataSourceDataLakeGen2SharedKey | DataSourceServicePrincipal | DataSourceServicePrincipalInKeyVault; -// @public (undocumented) -export type DatasourceCredentialUnion = SqlServerConnectionStringDatasourceCredential | DataLakeGen2SharedKeyDatasourceCredential | ServicePrincipalDatasourceCredential | ServicePrincipalInKeyVaultDatasourceCredential; +// @public +export type DataSourceCredentialPatch = DataSourceSqlServerConnectionStringPatch | DataSourceDataLakeGen2SharedKeyPatch | DataSourceServicePrincipalPatch | DataSourceServicePrincipalInKeyVaultPatch; + +// @public +export interface DataSourceDataLakeGen2SharedKey extends DataSourceCredentialEntity { + accountKey?: string; + type: "DataLakeGen2SharedKey"; +} + +// @public +export interface DataSourceDataLakeGen2SharedKeyPatch { + accountKey?: string; + description?: string; + name?: string; + type: "DataLakeGen2SharedKey"; +} + +// @public +export interface DataSourceServicePrincipal extends DataSourceCredentialEntity { + clientId: string; + clientSecret?: string; + tenantId: string; + type: "ServicePrincipal"; +} + +// @public +export interface DataSourceServicePrincipalInKeyVault extends DataSourceCredentialEntity { + keyVaultClientId: string; + keyVaultClientSecret?: string; + keyVaultEndpoint: string; + servicePrincipalIdNameInKV: string; + servicePrincipalSecretNameInKV: string; + tenantId: string; + type: "ServicePrincipalInKV"; +} + +// @public +export interface DataSourceServicePrincipalInKeyVaultPatch { + description?: string; + keyVaultClientId?: string; + keyVaultClientSecret?: string; + keyVaultEndpoint?: string; + name?: string; + servicePrincipalIdNameInKV?: string; + servicePrincipalSecretNameInKV?: string; + tenantId?: string; + type: "ServicePrincipalInKV"; +} + +// @public +export interface DataSourceServicePrincipalPatch { + clientId?: string; + clientSecret?: string; + description?: string; + name?: string; + tenantId?: string; + type: "ServicePrincipal"; +} + +// @public +export interface DataSourceSqlConnectionString extends DataSourceCredentialEntity { + connectionString?: string; + type: "AzureSQLConnectionString"; +} + +// @public +export interface DataSourceSqlServerConnectionStringPatch { + connectionString?: string; + description?: string; + name?: string; + type: "AzureSQLConnectionString"; +} // @public export type DataSourceType = "AzureApplicationInsights" | "AzureBlob" | "AzureCosmosDB" | "AzureDataExplorer" | "AzureDataLakeStorageGen2" | "AzureEventHubs" | "AzureLogAnalytics" | "AzureTable" | "InfluxDB" | "MongoDB" | "MySql" | "PostgreSql" | "SqlServer"; +// @public +export type DetectionConditionOperator = "AND" | "OR"; + // @public export interface DetectionConditionsCommon { changeThresholdCondition?: ChangeThresholdConditionUnion; - conditionOperator?: DetectionConditionsOperator; + conditionOperator?: DetectionConditionOperator; hardThresholdCondition?: HardThresholdConditionUnion; smartDetectionCondition?: SmartDetectionCondition; } @@ -460,14 +497,11 @@ export interface DetectionConditionsCommon { // @public export interface DetectionConditionsCommonPatch { changeThresholdCondition?: Partial; - conditionOperator?: DetectionConditionsOperator; + conditionOperator?: DetectionConditionOperator; hardThresholdCondition?: Partial; smartDetectionCondition?: Partial; } -// @public -export type DetectionConditionsOperator = "AND" | "OR"; - // @public export interface DetectionConfigurationsPageResponse extends Array { _response: coreHttp.HttpResponse & { @@ -488,7 +522,7 @@ export interface DimensionValuesPageResponse extends Array { }; } -// @public (undocumented) +// @public export interface EmailHookParameter { toList: string[]; } @@ -505,7 +539,7 @@ export type EmailNotificationHookPatch = { hookParameter?: Partial; } & NotificationHookPatch; -// @public (undocumented) +// @public export interface EnrichmentStatus { readonly message?: string; readonly status?: string; @@ -519,7 +553,7 @@ export type FeedbackQueryTimeMode = "MetricTimestamp" | "FeedbackCreatedTime"; export type FeedbackType = "Anomaly" | "ChangePoint" | "Period" | "Comment"; // @public -export type GetAnomalyAlertConfigurationResponse = AnomalyAlertConfiguration & { +export type GetAlertConfigResponse = AnomalyAlertConfiguration & { _response: coreHttp.HttpResponse & { bodyAsText: string; parsedBody: any; @@ -527,7 +561,7 @@ export type GetAnomalyAlertConfigurationResponse = AnomalyAlertConfiguration & { }; // @public -export type GetAnomalyDetectionConfigurationResponse = AnomalyDetectionConfiguration & { +export type GetDataFeedResponse = MetricsAdvisorDataFeed & { _response: coreHttp.HttpResponse & { bodyAsText: string; parsedBody: any; @@ -535,7 +569,7 @@ export type GetAnomalyDetectionConfigurationResponse = AnomalyDetectionConfigura }; // @public -export type GetCredentialEntityResponse = DatasourceCredentialUnion & { +export type GetDataSourceCredentialEntityResponse = DataSourceCredentialEntityUnion & { _response: coreHttp.HttpResponse & { bodyAsText: string; parsedBody: any; @@ -543,7 +577,7 @@ export type GetCredentialEntityResponse = DatasourceCredentialUnion & { }; // @public -export type GetDataFeedResponse = DataFeed & { +export type GetDetectionConfigResponse = AnomalyDetectionConfiguration & { _response: coreHttp.HttpResponse & { bodyAsText: string; parsedBody: any; @@ -695,15 +729,14 @@ export interface ListAnomaliesForAlertConfigurationOptions extends OperationOpti // @public export interface ListAnomaliesForDetectionConfigurationOptions extends OperationOptions { - dimensionFilter?: DimensionKey[]; + seriesGroupKeys?: DimensionKey[]; severityFilter?: SeverityFilterCondition; skip?: number; } // @public export interface ListAnomalyDimensionValuesOptions extends OperationOptions { - // (undocumented) - dimensionFilter?: DimensionKey; + seriesGroupKey?: DimensionKey; skip?: number; } @@ -725,14 +758,14 @@ export interface ListDataFeedsOptions extends OperationOptions { } // @public -export interface ListDatasourceCredentialsOptions extends OperationOptions { +export interface ListDataSourceCredentialsOptions extends OperationOptions { skip?: number; } // @public export interface ListFeedbackOptions extends OperationOptions { filter?: { - dimensionFilter?: DimensionKey; + dimensionKey?: DimensionKey; feedbackType?: FeedbackType; startTime?: Date | string; endTime?: Date | string; @@ -754,7 +787,7 @@ export interface ListIncidentsForAlertOptions extends OperationOptions { // @public export interface ListIncidentsForDetectionConfigurationOptions extends OperationOptions { - dimensionFilter?: DimensionKey[]; + seriesGroupKeys?: DimensionKey[]; } // @public @@ -791,7 +824,7 @@ export type LogAnalyticsAuthServicePrincipalInKeyVault = { credentialId: string; }; -// @public (undocumented) +// @public export interface MetricAlertConfiguration { alertConditions?: MetricAnomalyAlertConditions; alertScope: MetricAnomalyAlertScope; @@ -800,7 +833,7 @@ export interface MetricAlertConfiguration { snoozeCondition?: MetricAnomalyAlertSnoozeCondition; } -// @public (undocumented) +// @public export interface MetricAnomalyAlertConditions { metricBoundaryCondition?: MetricBoundaryCondition; severityCondition?: SeverityCondition; @@ -814,13 +847,13 @@ export type MetricAnomalyAlertScope = { scopeType: "All"; } | { scopeType: "Dimension"; - dimensionAnomalyScope: DimensionKey; + seriesGroupInScope: DimensionKey; } | { scopeType: "TopN"; topNAnomalyScope: TopNGroupScope; }; -// @public (undocumented) +// @public export interface MetricAnomalyAlertSnoozeCondition { autoSnooze: number; onlyForSuccessive: boolean; @@ -886,7 +919,7 @@ export interface MetricEnrichedSeriesData { isAnomaly?: boolean[]; lowerBounds?: number[]; periods?: number[]; - series: DimensionKey; + seriesKey: DimensionKey; timestamps?: Date[]; upperBounds?: number[]; values?: number[]; @@ -932,35 +965,35 @@ export type MetricPeriodFeedback = { // @public export class MetricsAdvisorAdministrationClient { constructor(endpointUrl: string, credential: TokenCredential | MetricsAdvisorKeyCredential, options?: MetricsAdvisorAdministrationClientOptions); - createAlertConfig(config: Omit, options?: OperationOptions): Promise; + createAlertConfig(config: Omit, options?: OperationOptions): Promise; createDataFeed(feed: DataFeedDescriptor, operationOptions?: CreateDataFeedOptions): Promise; - createDatasourceCredential(datasourceCredential: DatasourceCredentialUnion, options?: OperationOptions): Promise; - createDetectionConfig(config: Omit, options?: OperationOptions): Promise; + createDataSourceCredential(dataSourceCredential: DataSourceCredentialEntityUnion, options?: OperationOptions): Promise; + createDetectionConfig(config: Omit, options?: OperationOptions): Promise; createHook(hookInfo: EmailNotificationHook | WebNotificationHook, options?: OperationOptions): Promise; deleteAlertConfig(id: string, options?: OperationOptions): Promise; deleteDataFeed(id: string, options?: OperationOptions): Promise; - deleteDatasourceCredential(id: string, options?: OperationOptions): Promise; + deleteDataSourceCredential(id: string, options?: OperationOptions): Promise; deleteDetectionConfig(id: string, options?: OperationOptions): Promise; deleteHook(id: string, options?: OperationOptions): Promise; readonly endpointUrl: string; - getAlertConfig(id: string, options?: OperationOptions): Promise; + getAlertConfig(id: string, options?: OperationOptions): Promise; getDataFeed(id: string, options?: OperationOptions): Promise; getDataFeedIngestionProgress(dataFeedId: string, options?: {}): Promise; - getDatasourceCredential(id: string, options?: OperationOptions): Promise; - getDetectionConfig(id: string, options?: OperationOptions): Promise; + getDataSourceCredential(id: string, options?: OperationOptions): Promise; + getDetectionConfig(id: string, options?: OperationOptions): Promise; getHook(id: string, options?: OperationOptions): Promise; listAlertConfigs(detectionConfigId: string, options?: OperationOptions): PagedAsyncIterableIterator; listDataFeedIngestionStatus(dataFeedId: string, startTime: Date | string, endTime: Date | string, options?: ListDataFeedIngestionStatusOptions): PagedAsyncIterableIterator; - listDataFeeds(options?: ListDataFeedsOptions): PagedAsyncIterableIterator; - listDatasourceCredential(options?: ListDatasourceCredentialsOptions): PagedAsyncIterableIterator; + listDataFeeds(options?: ListDataFeedsOptions): PagedAsyncIterableIterator; + listDataSourceCredential(options?: ListDataSourceCredentialsOptions): PagedAsyncIterableIterator; listDetectionConfigs(metricId: string, options?: OperationOptions): PagedAsyncIterableIterator; listHooks(options?: ListHooksOptions): PagedAsyncIterableIterator; refreshDataFeedIngestion(dataFeedId: string, startTime: Date | string, endTime: Date | string, options?: OperationOptions): Promise; - updateAlertConfig(id: string, patch: Partial>, options?: OperationOptions): Promise; - updateDataFeed(dataFeedId: string, patch: DataFeedPatch, options?: OperationOptions): Promise; - updateDatasourceCredential(id: string, patch: DatasourceCredentialPatch, options?: OperationOptions): Promise; - updateDetectionConfig(id: string, patch: AnomalyDetectionConfigurationPatch, options?: OperationOptions): Promise; - updateHook(id: string, patch: EmailNotificationHookPatch | WebNotificationHookPatch, options?: OperationOptions): Promise; + updateAlertConfig(id: string, patch: Partial>, options?: OperationOptions): Promise; + updateDataFeed(dataFeedId: string, patch: DataFeedPatch, options?: OperationOptions): Promise; + updateDataSourceCredential(id: string, patch: DataSourceCredentialPatch, options?: OperationOptions): Promise; + updateDetectionConfig(id: string, patch: AnomalyDetectionConfigurationPatch, options?: OperationOptions): Promise; + updateHook(id: string, patch: EmailNotificationHookPatch | WebNotificationHookPatch, options?: OperationOptions): Promise; } // @public @@ -970,19 +1003,19 @@ export interface MetricsAdvisorAdministrationClientOptions extends PipelineOptio // @public export class MetricsAdvisorClient { constructor(endpointUrl: string, credential: TokenCredential | MetricsAdvisorKeyCredential, options?: MetricsAdvisorClientOptions); - createFeedback(feedback: MetricFeedbackUnion, options?: OperationOptions): Promise; + addFeedback(feedback: MetricFeedbackUnion, options?: OperationOptions): Promise; readonly endpointUrl: string; getFeedback(id: string, options?: OperationOptions): Promise; getIncidentRootCauses(detectionConfigId: string, incidentId: string, options?: OperationOptions): Promise; - getMetricEnrichedSeriesData(detectionConfigId: string, startTime: Date | string, endTime: Date | string, seriesToFilter: DimensionKey[], options?: GetMetricEnrichedSeriesDataOptions): Promise; - getMetricSeriesData(metricId: string, startTime: Date | string, endTime: Date | string, seriesToFilter: DimensionKey[], options?: GetMetricSeriesDataOptions): Promise; + getMetricEnrichedSeriesData(detectionConfigId: string, seriesKey: DimensionKey[], startTime: Date | string, endTime: Date | string, options?: GetMetricEnrichedSeriesDataOptions): Promise; + getMetricSeriesData(metricId: string, seriesKey: DimensionKey[], startTime: Date | string, endTime: Date | string, options?: GetMetricSeriesDataOptions): Promise; listAlerts(alertConfigId: string, startTime: Date | string, endTime: Date | string, timeMode: AlertQueryTimeMode, options?: ListAlertsOptions): PagedAsyncIterableIterator; - listAnomalies(alert: AnomalyAlert, options?: ListAnomaliesForAlertConfigurationOptions): PagedAsyncIterableIterator; - listAnomalies(detectionConfigId: string, startTime: Date | string, endTime: Date | string, options?: ListAnomaliesForDetectionConfigurationOptions): PagedAsyncIterableIterator; + listAnomaliesForAlert(alert: AnomalyAlert, options?: ListAnomaliesForAlertConfigurationOptions): PagedAsyncIterableIterator; + listAnomaliesForDetectionConfiguration(detectionConfigId: string, startTime: Date | string, endTime: Date | string, options?: ListAnomaliesForDetectionConfigurationOptions): PagedAsyncIterableIterator; listAnomalyDimensionValues(detectionConfigId: string, startTime: Date | string, endTime: Date | string, dimensionName: string, options?: ListAnomalyDimensionValuesOptions): PagedAsyncIterableIterator; listFeedback(metricId: string, options?: ListFeedbackOptions): PagedAsyncIterableIterator; - listIncidents(alert: AnomalyAlert, options?: ListIncidentsForAlertOptions): PagedAsyncIterableIterator; - listIncidents(detectionConfigId: string, startTime: Date | string, endTime: Date | string, options?: ListIncidentsForDetectionConfigurationOptions): PagedAsyncIterableIterator; + listIncidentsForAlert(alert: AnomalyAlert, options?: ListIncidentsForAlertOptions): PagedAsyncIterableIterator; + listIncidentsForDetectionConfiguration(detectionConfigId: string, startTime: Date | string, endTime: Date | string, options?: ListIncidentsForDetectionConfigurationOptions): PagedAsyncIterableIterator; listMetricDimensionValues(metricId: string, dimensionName: string, options?: ListMetricDimensionValuesOptions): PagedAsyncIterableIterator; listMetricEnrichmentStatus(metricId: string, startTime: Date | string, endTime: Date | string, options?: ListMetricEnrichmentStatusOptions): PagedAsyncIterableIterator; listMetricSeriesDefinitions(metricId: string, activeSince: Date | string, options?: ListMetricSeriesDefinitionsOptions): PagedAsyncIterableIterator; @@ -992,6 +1025,28 @@ export class MetricsAdvisorClient { export interface MetricsAdvisorClientOptions extends PipelineOptions { } +// @public +export type MetricsAdvisorDataFeed = { + id: string; + name: string; + createdOn: Date; + status: DataFeedStatus; + isAdmin: boolean; + creator: string; + source: DataFeedSource; + schema: DataFeedSchema; + metricIds: Record; + granularity: DataFeedGranularity; + ingestionSettings: DataFeedIngestionSettings; + description?: string; + rollupSettings?: DataFeedRollupSettings; + missingDataPointFillSettings?: DataFeedMissingDataPointFillSettings; + accessMode?: DataFeedAccessMode; + adminEmails?: string[]; + viewerEmails?: string[]; + actionLinkTemplate?: string; +}; + // @public export class MetricsAdvisorKeyCredential { constructor(subscriptionKey: string, apiKey: string); @@ -1015,13 +1070,13 @@ export interface MetricSeriesData { // @public export interface MetricSeriesDefinition { - dimension: Record; metricId: string; + seriesKey: Record; } // @public export type MetricSeriesGroupDetectionCondition = DetectionConditionsCommon & { - group: DimensionKey; + groupKey: DimensionKey; }; // @public @@ -1035,7 +1090,7 @@ export interface MetricSeriesPageResponse extends Array // @public export type MetricSingleSeriesDetectionCondition = DetectionConditionsCommon & { - series: DimensionKey; + seriesKey: DimensionKey; }; // @public @@ -1082,68 +1137,25 @@ export type PostgreSqlDataFeedSource = { authenticationType: "Basic"; }; -// @public -export interface ServicePrincipalDatasourceCredential extends DatasourceCredential { - clientId: string; - clientSecret: string; - tenantId: string; - type: "ServicePrincipal"; -} - -// @public -export interface ServicePrincipalDatasourceCredentialPatch { - clientId?: string; - clientSecret?: string; - description?: string; - name?: string; - tenantId?: string; - type: "ServicePrincipal"; -} - -// @public -export interface ServicePrincipalInKeyVaultDatasourceCredential extends DatasourceCredential { - keyVaultClientId: string; - keyVaultClientSecret: string; - keyVaultEndpoint: string; - servicePrincipalIdNameInKV: string; - servicePrincipalSecretNameInKV: string; - tenantId: string; - type: "ServicePrincipalInKV"; -} - -// @public -export interface ServicePrincipalInKeyVaultDatasourceCredentialPatch { - description?: string; - keyVaultClientId?: string; - keyVaultClientSecret?: string; - keyVaultEndpoint?: string; - name?: string; - servicePrincipalIdNameInKV?: string; - servicePrincipalSecretNameInKV?: string; - tenantId?: string; - type: "ServicePrincipalInKV"; -} - // @public export type Severity = "Low" | "Medium" | "High"; -// @public (undocumented) +// @public export interface SeverityCondition { maxAlertSeverity: Severity; minAlertSeverity: Severity; } -// @public (undocumented) +// @public export interface SeverityFilterCondition { max: Severity; min: Severity; } -// @public (undocumented) +// @public export interface SmartDetectionCondition { anomalyDetectorDirection: AnomalyDetectorDirection; sensitivity: number; - // (undocumented) suppressCondition: SuppressCondition; } @@ -1185,33 +1197,19 @@ export interface SqlServerAuthServicePrincipalInKeyVault { // @public export type SqlServerAuthTypes = SqlServerAuthBasic | SqlServerAuthManagedIdentity | SqlServerAuthConnectionString | SqlServerAuthServicePrincipal | SqlServerAuthServicePrincipalInKeyVault; -// @public -export interface SqlServerConnectionStringDatasourceCredential extends DatasourceCredential { - connectionString: string; - type: "AzureSQLConnectionString"; -} - -// @public -export interface SqlServerConnectionStringDatasourceCredentialPatch { - connectionString?: string; - description?: string; - name?: string; - type: "AzureSQLConnectionString"; -} - // @public export type SqlServerDataFeedSource = { dataSourceType: "SqlServer"; query: string; } & SqlServerAuthTypes; -// @public (undocumented) +// @public export interface SuppressCondition { minNumber: number; minRatio: number; } -// @public (undocumented) +// @public export interface TopNGroupScope { minTopCount: number; period: number; diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/alertingConfig.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/alertingConfig.ts index 8939157c0ce5..6a94009a5592 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/alertingConfig.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/alertingConfig.ts @@ -66,7 +66,7 @@ async function createAlertConfig( detectionConfigurationId: detectionConfigId, alertScope: { scopeType: "Dimension", - dimensionAnomalyScope: { city: "Manila", category: "Handmade" } + seriesGroupInScope: { city: "Manila", category: "Handmade" } } } ], @@ -101,7 +101,7 @@ async function updateAlertConfig( detectionConfigurationId: detectionConfigId, alertScope: { scopeType: "Dimension", - dimensionAnomalyScope: { + seriesGroupInScope: { city: "Kolkata", category: "Shoes Handbags & Sunglasses" } @@ -110,8 +110,7 @@ async function updateAlertConfig( ] }; console.log(`Updating alerting configuration ${detectionConfigId}`); - await adminClient.updateAlertConfig(alertConfigId, patch); - const updated = await adminClient.getAlertConfig(alertConfigId); + const updated = await adminClient.updateAlertConfig(alertConfigId, patch); return updated; } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/dataFeed.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/dataFeed.ts index 35fa4ec65cbf..5029a2a39f59 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/dataFeed.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/dataFeed.ts @@ -164,8 +164,7 @@ async function updateDataFeed(client: MetricsAdvisorAdministrationClient, dataFe try { console.log(`Updating datafeed ${dataFeedId}...`); - await client.updateDataFeed(dataFeedId, patch); - const updated = await client.getDataFeed(dataFeedId); + const updated = await client.updateDataFeed(dataFeedId, patch); console.dir(updated); } catch (err) { console.log("Error occurred when updating data feed"); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/dataSourceCredential.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/dataSourceCredential.ts index 29319c0afff6..5aa35afb9046 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/dataSourceCredential.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/dataSourceCredential.ts @@ -13,9 +13,9 @@ dotenv.config(); import { MetricsAdvisorKeyCredential, MetricsAdvisorAdministrationClient, - GetCredentialEntityResponse, - DatasourceCredentialPatch, - SqlServerConnectionStringDatasourceCredential + GetDataSourceCredentialEntityResponse, + DataSourceCredentialPatch, + DataSourceSqlConnectionString } from "@azure/ai-metrics-advisor"; export async function main() { @@ -27,19 +27,19 @@ export async function main() { const adminClient = new MetricsAdvisorAdministrationClient(endpoint, credential); - const created = await createDatasourceCredential(adminClient); + const created = await createDataSourceCredential(adminClient); if (created.id) { - await getDatasourceCredential(adminClient, created.id); - await updateDatasourceCredential(adminClient, created.id); - await listDatasourceCredentials(adminClient); - await deleteDatasourceCredential(adminClient, created.id); + await getDataSourceCredential(adminClient, created.id); + await updateDataSourceCredential(adminClient, created.id); + await listDataSourceCredentials(adminClient); + await deleteDataSourceCredential(adminClient, created.id); } } -async function listDatasourceCredentials(client: MetricsAdvisorAdministrationClient) { - console.log("Listing Datasource credentials ..."); +async function listDataSourceCredentials(client: MetricsAdvisorAdministrationClient) { + console.log("Listing DataSource credentials ..."); console.log(" using while loop"); - const iter = client.listDatasourceCredential(); + const iter = client.listDataSourceCredential(); let result = await iter.next(); while (!result.done) { console.log(`id :${result.value.id}, name: ${result.value.name}`); @@ -48,7 +48,7 @@ async function listDatasourceCredentials(client: MetricsAdvisorAdministrationCli // second approach console.log(" using for-await-of loop"); - const iterator = client.listDatasourceCredential(); + const iterator = client.listDataSourceCredential(); for await (const datasourceCredential of iterator) { console.log( `id :${datasourceCredential.id}, name: ${datasourceCredential.name}, type: ${datasourceCredential.type}` @@ -57,7 +57,7 @@ async function listDatasourceCredentials(client: MetricsAdvisorAdministrationCli // by pages console.log(" by pages"); - const pages = client.listDatasourceCredential().byPage({ maxPageSize: 1 }); + const pages = client.listDataSourceCredential().byPage({ maxPageSize: 1 }); let page = await pages.next(); let i = 1; while (!page.done) { @@ -71,34 +71,34 @@ async function listDatasourceCredentials(client: MetricsAdvisorAdministrationCli } } -async function createDatasourceCredential( +async function createDataSourceCredential( client: MetricsAdvisorAdministrationClient -): Promise { - console.log("Creating Datasource credential..."); - const datasourceCredential: SqlServerConnectionStringDatasourceCredential = { +): Promise { + console.log("Creating DataSource credential..."); + const datasourceCredential: DataSourceSqlConnectionString = { name: "Sql-server-cred", description: "an example sql server credential", type: "AzureSQLConnectionString", connectionString: "connection-string" }; - const result = await client.createDatasourceCredential(datasourceCredential); + const result = await client.createDataSourceCredential(datasourceCredential); console.dir(result); return result; } -async function getDatasourceCredential( +async function getDataSourceCredential( client: MetricsAdvisorAdministrationClient, datasourceCredentialId: string ) { console.log("Retrieving datasourceCredential by id..."); - const result = await client.getDatasourceCredential(datasourceCredentialId); + const result = await client.getDataSourceCredential(datasourceCredentialId); console.log("datasource credential result is as follows - "); console.log(` id: ${result.id}`); console.log(` datasource credential type: ${result.type}`); console.log(` name: ${result.name}`); } -async function updateDatasourceCredential( +async function updateDataSourceCredential( client: MetricsAdvisorAdministrationClient, credentialId: string ) { @@ -107,12 +107,11 @@ async function updateDatasourceCredential( description: "updated-description", type: "AzureSQLConnectionString", connectionString: "connection-string" - } as DatasourceCredentialPatch; + } as DataSourceCredentialPatch; try { console.log(`Updating credential ${credentialId}...`); - await client.updateDatasourceCredential(credentialId, patch); - const updated = await client.getDataFeed(credentialId); + const updated = await client.updateDataSourceCredential(credentialId, patch); console.dir(updated); } catch (err) { console.log("Error occurred when updating credential"); @@ -120,12 +119,12 @@ async function updateDatasourceCredential( } } -async function deleteDatasourceCredential( +async function deleteDataSourceCredential( client: MetricsAdvisorAdministrationClient, credentialId: string ) { console.log(`Deleting datasource credential ${credentialId}...`); - await client.deleteDatasourceCredential(credentialId); + await client.deleteDataSourceCredential(credentialId); } main() diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/detectionConfig.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/detectionConfig.ts index d48ab3a87976..62c462e92f26 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/detectionConfig.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/detectionConfig.ts @@ -92,7 +92,7 @@ async function createDetectionConfig( }; const seriesGroupDetectionConditions: MetricSeriesGroupDetectionCondition[] = [ { - group: { city: "Manila" }, + groupKey: { city: "Manila" }, conditionOperator: "AND", changeThresholdCondition: { anomalyDetectorDirection: "Both", @@ -105,7 +105,7 @@ async function createDetectionConfig( ]; const seriesDetectionConditions: MetricSingleSeriesDetectionCondition[] = [ { - series: { city: "Manila", category: "Handmade" }, + seriesKey: { city: "Manila", category: "Handmade" }, conditionOperator: "AND", hardThresholdCondition: { anomalyDetectorDirection: "Up", @@ -152,7 +152,7 @@ async function updateDetectionConfig( }, seriesGroupDetectionConditions: [ { - group: { city: "Manila" }, + groupKey: { city: "Manila" }, conditionOperator: "AND", hardThresholdCondition: { anomalyDetectorDirection: "Up", @@ -163,7 +163,7 @@ async function updateDetectionConfig( ], seriesDetectionConditions: [ { - series: { city: "Manila", category: "Handmade" }, + seriesKey: { city: "Manila", category: "Handmade" }, conditionOperator: "OR", changeThresholdCondition: { anomalyDetectorDirection: "Both", @@ -176,8 +176,7 @@ async function updateDetectionConfig( ] }; console.log(`Updating existing detection configuration '${configId}'`); - await adminClient.updateDetectionConfig(configId, patch); - const result = adminClient.getDetectionConfig(configId); + const result = await adminClient.updateDetectionConfig(configId, patch); console.log(result); return result; } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/hooks.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/hooks.ts index 6269498a1537..e1e63f4890a2 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/hooks.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/hooks.ts @@ -93,8 +93,7 @@ async function updateEmailHook(client: MetricsAdvisorAdministrationClient, hookI toList: ["test2@example.com", "test3@example.com"] } }; - await client.updateHook(hookId, emailPatch); - const response = await client.getHook(hookId); + const response = await client.updateHook(hookId, emailPatch); console.log(response); return response; } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/incidentsAndAlerts.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/incidentsAndAlerts.ts index fb2806793efa..a849dd398a2e 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/incidentsAndAlerts.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/incidentsAndAlerts.ts @@ -76,12 +76,12 @@ async function listIncidentsForDetectionConfig( ) { console.log(`Listing incidents for detection config '${detectionConfigId}'`); console.log(" using for-await-of syntax"); - const listIterator = client.listIncidents( + const listIterator = client.listIncidentsForDetectionConfiguration( detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020"), { - dimensionFilter: [{ city: "Manila", category: "Shoes Handbags & Sunglasses" }] + seriesGroupKeys: [{ city: "Manila", category: "Shoes Handbags & Sunglasses" }] } ); for await (const incident of listIterator) { @@ -97,7 +97,11 @@ async function listIncidentsForDetectionConfig( console.log(` by pages`); const iterator = client - .listIncidents(detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020")) + .listIncidentsForDetectionConfiguration( + detectionConfigId, + new Date("10/22/2020"), + new Date("10/24/2020") + ) .byPage({ maxPageSize: 20 }); let result = await iterator.next(); @@ -121,7 +125,7 @@ async function listAnomaliesForDetectionConfig( detectionConfigId: string ) { console.log(`Listing anomalies for detection config '${detectionConfigId}'`); - const listIterator = client.listAnomalies( + const listIterator = client.listAnomaliesForDetectionConfiguration( detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020"), @@ -143,9 +147,14 @@ async function listAnomaliesForDetectionConfig( console.log(` by pages`); const iterator = client - .listAnomalies(detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020"), { - severityFilter: { min: "Medium", max: "High" } - }) + .listAnomaliesForDetectionConfiguration( + detectionConfigId, + new Date("10/22/2020"), + new Date("10/24/2020"), + { + severityFilter: { min: "Medium", max: "High" } + } + ) .byPage({ maxPageSize: 20 }); let result = await iterator.next(); @@ -223,7 +232,7 @@ async function listIncidentsForAlert( `Listing incidents for alert configuration '${alertConfigId}' and alert '${alertId}'` ); console.log(" using for-await-of syntax"); - const listIterator = client.listIncidents({ alertConfigId, id: alertId }); + const listIterator = client.listIncidentsForAlert({ alertConfigId, id: alertId }); for await (const incident of listIterator) { console.log(" Incident"); console.log(` id: ${incident.id}`); @@ -236,7 +245,9 @@ async function listIncidentsForAlert( } console.log(` by pages`); - const iterator = client.listIncidents({ alertConfigId, id: alertId }).byPage({ maxPageSize: 20 }); + const iterator = client + .listIncidentsForAlert({ alertConfigId, id: alertId }) + .byPage({ maxPageSize: 20 }); let result = await iterator.next(); while (!result.done) { @@ -263,7 +274,7 @@ async function listAnomaliesForAlert( `Listing anomalies for alert configuration '${alertConfigId}' and alert '${alertId}'` ); console.log(" using for-await-of syntax"); - const listIterator = client.listAnomalies({ alertConfigId, id: alertId }); + const listIterator = client.listAnomaliesForAlert({ alertConfigId, id: alertId }); for await (const anomaly of listIterator) { console.log(" Anomaly"); console.log(` timestamp: ${anomaly.timestamp}`); @@ -272,7 +283,9 @@ async function listAnomaliesForAlert( } console.log(` by pages`); - const iterator = client.listAnomalies({ alertConfigId, id: alertId }).byPage({ maxPageSize: 20 }); + const iterator = client + .listAnomaliesForAlert({ alertConfigId, id: alertId }) + .byPage({ maxPageSize: 20 }); let result = await iterator.next(); while (!result.done) { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/metricFeedback.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/metricFeedback.ts index 10b1a48fbfad..2d63c94b4cdc 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/metricFeedback.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/metricFeedback.ts @@ -48,7 +48,7 @@ async function provideAnomalyFeedback(client: MetricsAdvisorClient, metricId: st value: "NotAnomaly", dimensionKey: { city: "Manila", category: "Handmade" } }; - return await client.createFeedback(anomalyFeedback); + return await client.addFeedback(anomalyFeedback); } async function providePeriodFeedback(client: MetricsAdvisorClient, metricId: string) { @@ -60,7 +60,7 @@ async function providePeriodFeedback(client: MetricsAdvisorClient, metricId: str periodValue: 4, dimensionKey: { city: "Manila", category: "Handmade" } }; - return await client.createFeedback(periodFeedback); + return await client.addFeedback(periodFeedback); } async function provideChangePointFeedback(client: MetricsAdvisorClient, metricId: string) { @@ -72,7 +72,7 @@ async function provideChangePointFeedback(client: MetricsAdvisorClient, metricId value: "ChangePoint", dimensionKey: { city: "Manila", category: "Handmade" } }; - return await client.createFeedback(changePointFeedback); + return await client.addFeedback(changePointFeedback); } async function provideCommentFeedback(client: MetricsAdvisorClient, metricId: string) { @@ -83,7 +83,7 @@ async function provideCommentFeedback(client: MetricsAdvisorClient, metricId: st dimensionKey: { city: "Manila", category: "Handmade" }, comment: "This is a comment" }; - return await client.createFeedback(commendFeedback); + return await client.addFeedback(commendFeedback); } async function getFeedback(client: MetricsAdvisorClient, feedbackId: string) { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/quickstart.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/quickstart.ts index 6332c87cffa9..dfc923d27f41 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/quickstart.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/quickstart.ts @@ -277,7 +277,7 @@ async function queryAnomaliesByAlert(client: MetricsAdvisorClient, alert: Anomal console.log( `Listing anomalies for alert configuration '${alert.alertConfigId}' and alert '${alert.id}'` ); - const listIterator = client.listAnomalies(alert); + const listIterator = client.listAnomaliesForAlert(alert); for await (const anomaly of listIterator) { console.log( ` Anomaly ${anomaly.severity} ${anomaly.status} ${anomaly.seriesKey.dimension} ${anomaly.timestamp}` diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/seriesData.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/seriesData.ts index 584bcf8e8592..a6cee81fd8ce 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/seriesData.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples-dev/seriesData.ts @@ -36,17 +36,17 @@ async function getEnrichedSeriesData(client: MetricsAdvisorClient, detectionConf try { const result = await client.getMetricEnrichedSeriesData( detectionConfigId, - new Date("09/01/2020"), - new Date("09/12/2020"), [ { city: "Manila", category: "Handmade" }, { city: "Shanghai", category: "Shoes Handbags & Sunglasses" } - ] + ], + new Date("09/01/2020"), + new Date("09/12/2020") ); for (const enriched of result) { console.log("enriched series:"); - console.log(enriched.series); + console.log(enriched.seriesKey); if (enriched.timestamps && enriched.timestamps.length > 0) { for (let i = 0; i < enriched.timestamps.length; i++) { console.log(" ----"); @@ -71,12 +71,12 @@ async function getMetricSeriesData(client: MetricsAdvisorClient, metricId: strin try { const result = await client.getMetricSeriesData( metricId, - new Date("09/01/2020"), - new Date("09/12/2020"), [ { city: "Manila", category: "Handmade" }, { city: "Shanghai", category: "Shoes Handbags & Sunglasses" } - ] + ], + new Date("09/01/2020"), + new Date("09/12/2020") ); for (const series of result) { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/alertingConfig.js b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/alertingConfig.js index ee70cf4d5380..483361d32cae 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/alertingConfig.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/alertingConfig.js @@ -61,7 +61,7 @@ async function createAlertConfig(adminClient, detectionConfigId) { detectionConfigurationId: detectionConfigId, alertScope: { scopeType: "Dimension", - dimensionAnomalyScope: { city: "Manila", category: "Handmade" } + seriesGroupInScope: { city: "Manila", category: "Handmade" } } } ], @@ -91,7 +91,7 @@ async function updateAlertConfig(adminClient, alertConfigId, detectionConfigId, detectionConfigurationId: detectionConfigId, alertScope: { scopeType: "Dimension", - dimensionAnomalyScope: { + seriesGroupInScope: { city: "Kolkata", category: "Shoes Handbags & Sunglasses" } @@ -100,8 +100,7 @@ async function updateAlertConfig(adminClient, alertConfigId, detectionConfigId, ] }; console.log(`Updating alerting configuration ${detectionConfigId}`); - await adminClient.updateAlertConfig(alertConfigId, patch); - const updated = await adminClient.getAlertConfig(alertConfigId); + const updated = await adminClient.updateAlertConfig(alertConfigId, patch); return updated; } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/dataFeed.js b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/dataFeed.js index 690caa3adbbf..787af32b5e5f 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/dataFeed.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/dataFeed.js @@ -158,8 +158,7 @@ async function updateDataFeed(client, dataFeedId) { try { console.log(`Updating datafeed ${dataFeedId}...`); - await client.updateDataFeed(dataFeedId, patch); - const updated = await client.getDataFeed(dataFeedId); + const updated = await client.updateDataFeed(dataFeedId, patch); console.dir(updated); } catch (err) { console.log("Error occurred when updating data feed"); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/dataSourceCredential.js b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/dataSourceCredential.js index 2e2629eb0b05..e50cf6f6266a 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/dataSourceCredential.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/dataSourceCredential.js @@ -23,19 +23,19 @@ async function main() { const adminClient = new MetricsAdvisorAdministrationClient(endpoint, credential); - const created = await createDatasourceCredential(adminClient); + const created = await createDataSourceCredential(adminClient); if (created.id) { - await getDatasourceCredential(adminClient, created.id); - await updateDatasourceCredential(adminClient, created.id); - await listDatasourceCredentials(adminClient); - await deleteDatasourceCredential(adminClient, created.id); + await getDataSourceCredential(adminClient, created.id); + await updateDataSourceCredential(adminClient, created.id); + await listDataSourceCredentials(adminClient); + await deleteDataSourceCredential(adminClient, created.id); } } -async function listDatasourceCredentials(client) { - console.log("Listing Datasource credentials ..."); +async function listDataSourceCredentials(client) { + console.log("Listing DataSource credentials ..."); console.log(" using while loop"); - const iter = client.listDatasourceCredential(); + const iter = client.listDataSourceCredential(); let result = await iter.next(); while (!result.done) { console.log(`id :${result.value.id}, name: ${result.value.name}`); @@ -44,7 +44,7 @@ async function listDatasourceCredentials(client) { // second approach console.log(" using for-await-of loop"); - const iterator = client.listDatasourceCredential(); + const iterator = client.listDataSourceCredential(); for await (const datasourceCredential of iterator) { console.log( `id :${datasourceCredential.id}, name: ${datasourceCredential.name}, type: ${datasourceCredential.type}` @@ -53,7 +53,7 @@ async function listDatasourceCredentials(client) { // by pages console.log(" by pages"); - const pages = client.listDatasourceCredential().byPage({ maxPageSize: 1 }); + const pages = client.listDataSourceCredential().byPage({ maxPageSize: 1 }); let page = await pages.next(); let i = 1; while (!page.done) { @@ -67,29 +67,29 @@ async function listDatasourceCredentials(client) { } } -async function createDatasourceCredential(client) { - console.log("Creating Datasource credential..."); +async function createDataSourceCredential(client) { + console.log("Creating DataSource credential..."); const datasourceCredential = { name: "Sql-server-cred", description: "an example sql server credential", type: "AzureSQLConnectionString", connectionString: "connection-string" }; - const result = await client.createDatasourceCredential(datasourceCredential); + const result = await client.createDataSourceCredential(datasourceCredential); console.dir(result); return result; } -async function getDatasourceCredential(client, datasourceCredentialId) { +async function getDataSourceCredential(client, datasourceCredentialId) { console.log("Retrieving datasourceCredential by id..."); - const result = await client.getDatasourceCredential(datasourceCredentialId); + const result = await client.getDataSourceCredential(datasourceCredentialId); console.log("datasource credential result is as follows - "); console.log(` id: ${result.id}`); console.log(` datasource credential type: ${result.type}`); console.log(` name: ${result.name}`); } -async function updateDatasourceCredential(client, credentialId) { +async function updateDataSourceCredential(client, credentialId) { const patch = { name: "update-credential-name", description: "updated-description", @@ -99,8 +99,7 @@ async function updateDatasourceCredential(client, credentialId) { try { console.log(`Updating credential ${credentialId}...`); - await client.updateDatasourceCredential(credentialId, patch); - const updated = await client.getDataFeed(credentialId); + const updated = await client.updateDataSourceCredential(credentialId, patch); console.dir(updated); } catch (err) { console.log("Error occurred when updating credential"); @@ -108,9 +107,9 @@ async function updateDatasourceCredential(client, credentialId) { } } -async function deleteDatasourceCredential(client, credentialId) { +async function deleteDataSourceCredential(client, credentialId) { console.log(`Deleting datasource credential ${credentialId}...`); - await client.deleteDatasourceCredential(credentialId); + await client.deleteDataSourceCredential(credentialId); } main() diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/detectionConfig.js b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/detectionConfig.js index e11642fdca75..77cf92447b5e 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/detectionConfig.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/detectionConfig.js @@ -81,7 +81,7 @@ async function createDetectionConfig(adminClient, metricId) { }; const seriesGroupDetectionConditions = [ { - group: { city: "Manila" }, + groupKey: { city: "Manila" }, conditionOperator: "AND", changeThresholdCondition: { anomalyDetectorDirection: "Both", @@ -94,7 +94,7 @@ async function createDetectionConfig(adminClient, metricId) { ]; const seriesDetectionConditions = [ { - series: { city: "Manila", category: "Handmade" }, + seriesKey: { city: "Manila", category: "Handmade" }, conditionOperator: "AND", hardThresholdCondition: { anomalyDetectorDirection: "Up", @@ -138,7 +138,7 @@ async function updateDetectionConfig(adminClient, configId) { }, seriesGroupDetectionConditions: [ { - group: { city: "Manila" }, + groupKey: { city: "Manila" }, conditionOperator: "AND", hardThresholdCondition: { anomalyDetectorDirection: "Up", @@ -149,7 +149,7 @@ async function updateDetectionConfig(adminClient, configId) { ], seriesDetectionConditions: [ { - series: { city: "Manila", category: "Handmade" }, + seriesKey: { city: "Manila", category: "Handmade" }, conditionOperator: "OR", changeThresholdCondition: { anomalyDetectorDirection: "Both", @@ -162,8 +162,7 @@ async function updateDetectionConfig(adminClient, configId) { ] }; console.log(`Updating existing detection configuration '${configId}'`); - await adminClient.updateDetectionConfig(configId, patch); - const result = adminClient.getDetectionConfig(configId); + const result = await adminClient.updateDetectionConfig(configId, patch); console.log(result); return result; } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/hooks.js b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/hooks.js index 21655d74db6e..8207f3778086 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/hooks.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/hooks.js @@ -89,8 +89,7 @@ async function updateEmailHook(client, hookId) { toList: ["test2@example.com", "test3@example.com"] } }; - await client.updateHook(hookId, emailPatch); - const response = await client.getHook(hookId); + const response = await client.updateHook(hookId, emailPatch); console.log(response); return response; } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/incidentsAndAlerts.js b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/incidentsAndAlerts.js index 1b49d871ecc8..c1f7a754ffc4 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/incidentsAndAlerts.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/incidentsAndAlerts.js @@ -72,12 +72,12 @@ async function listAnomalyDimensionValues(client, detectionConfigId) { async function listIncidentsForDetectionConfig(client, detectionConfigId) { console.log(`Listing incidents for detection config '${detectionConfigId}'`); console.log(" using for-await-of syntax"); - const listIterator = client.listIncidents( + const listIterator = client.listIncidentsForDetectionConfiguration( detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020"), { - dimensionFilter: [{ city: "Manila", category: "Shoes Handbags & Sunglasses" }] + seriesGroupKeys: [{ city: "Manila", category: "Shoes Handbags & Sunglasses" }] } ); for await (const incident of listIterator) { @@ -93,7 +93,11 @@ async function listIncidentsForDetectionConfig(client, detectionConfigId) { console.log(` by pages`); const iterator = client - .listIncidents(detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020")) + .listIncidentsForDetectionConfiguration( + detectionConfigId, + new Date("10/22/2020"), + new Date("10/24/2020") + ) .byPage({ maxPageSize: 20 }); let result = await iterator.next(); @@ -114,7 +118,7 @@ async function listIncidentsForDetectionConfig(client, detectionConfigId) { async function listAnomaliesForDetectionConfig(client, detectionConfigId) { console.log(`Listing anomalies for detection config '${detectionConfigId}'`); - const listIterator = client.listAnomalies( + const listIterator = client.listAnomaliesForDetectionConfiguration( detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020"), @@ -136,9 +140,14 @@ async function listAnomaliesForDetectionConfig(client, detectionConfigId) { console.log(` by pages`); const iterator = client - .listAnomalies(detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020"), { - severityFilter: { min: "Medium", max: "High" } - }) + .listAnomaliesForDetectionConfiguration( + detectionConfigId, + new Date("10/22/2020"), + new Date("10/24/2020"), + { + severityFilter: { min: "Medium", max: "High" } + } + ) .byPage({ maxPageSize: 20 }); let result = await iterator.next(); @@ -208,7 +217,7 @@ async function listIncidentsForAlert(client, alertConfigId, alertId) { `Listing incidents for alert configuration '${alertConfigId}' and alert '${alertId}'` ); console.log(" using for-await-of syntax"); - const listIterator = client.listIncidents({ alertConfigId, id: alertId }); + const listIterator = client.listIncidentsForAlert({ alertConfigId, id: alertId }); for await (const incident of listIterator) { console.log(" Incident"); console.log(` id: ${incident.id}`); @@ -221,7 +230,9 @@ async function listIncidentsForAlert(client, alertConfigId, alertId) { } console.log(` by pages`); - const iterator = client.listIncidents({ alertConfigId, id: alertId }).byPage({ maxPageSize: 20 }); + const iterator = client + .listIncidentsForAlert({ alertConfigId, id: alertId }) + .byPage({ maxPageSize: 20 }); let result = await iterator.next(); while (!result.done) { @@ -244,7 +255,7 @@ async function listAnomaliesForAlert(client, alertConfigId, alertId) { `Listing anomalies for alert configuration '${alertConfigId}' and alert '${alertId}'` ); console.log(" using for-await-of syntax"); - const listIterator = client.listAnomalies({ alertConfigId, id: alertId }); + const listIterator = client.listAnomaliesForAlert({ alertConfigId, id: alertId }); for await (const anomaly of listIterator) { console.log(" Anomaly"); console.log(` timestamp: ${anomaly.timestamp}`); @@ -253,7 +264,9 @@ async function listAnomaliesForAlert(client, alertConfigId, alertId) { } console.log(` by pages`); - const iterator = client.listAnomalies({ alertConfigId, id: alertId }).byPage({ maxPageSize: 20 }); + const iterator = client + .listAnomaliesForAlert({ alertConfigId, id: alertId }) + .byPage({ maxPageSize: 20 }); let result = await iterator.next(); while (!result.done) { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/metricFeedback.js b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/metricFeedback.js index 22b4797b5a96..de3dad02aa88 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/metricFeedback.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/metricFeedback.js @@ -40,7 +40,7 @@ async function provideAnomalyFeedback(client, metricId) { value: "NotAnomaly", dimensionKey: { city: "Manila", category: "Handmade" } }; - return await client.createFeedback(anomalyFeedback); + return await client.addFeedback(anomalyFeedback); } async function providePeriodFeedback(client, metricId) { @@ -52,7 +52,7 @@ async function providePeriodFeedback(client, metricId) { periodValue: 4, dimensionKey: { city: "Manila", category: "Handmade" } }; - return await client.createFeedback(periodFeedback); + return await client.addFeedback(periodFeedback); } async function provideChangePointFeedback(client, metricId) { @@ -64,7 +64,7 @@ async function provideChangePointFeedback(client, metricId) { value: "ChangePoint", dimensionKey: { city: "Manila", category: "Handmade" } }; - return await client.createFeedback(changePointFeedback); + return await client.addFeedback(changePointFeedback); } async function provideCommentFeedback(client, metricId) { @@ -75,7 +75,7 @@ async function provideCommentFeedback(client, metricId) { dimensionKey: { city: "Manila", category: "Handmade" }, comment: "This is a comment" }; - return await client.createFeedback(commendFeedback); + return await client.addFeedback(commendFeedback); } async function getFeedback(client, feedbackId) { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/package.json b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/package.json index f1604dcfc47d..416299d7c1c5 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/package.json +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/package.json @@ -26,7 +26,7 @@ }, "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/metricsadvisor/ai-metrics-advisor", "dependencies": { - "@azure/ai-metrics-advisor": "next", + "@azure/ai-metrics-advisor": "latest", "dotenv": "latest" } } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/quickstart.js b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/quickstart.js index 702ec997d49f..3572bdd03e09 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/quickstart.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/quickstart.js @@ -249,7 +249,7 @@ async function queryAnomaliesByAlert(client, alert) { console.log( `Listing anomalies for alert configuration '${alert.alertConfigId}' and alert '${alert.id}'` ); - const listIterator = client.listAnomalies(alert); + const listIterator = client.listAnomaliesForAlert(alert); for await (const anomaly of listIterator) { console.log( ` Anomaly ${anomaly.severity} ${anomaly.status} ${anomaly.seriesKey.dimension} ${anomaly.timestamp}` diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/sample.env b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/sample.env index 262d9f416c00..31e59787777d 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/sample.env +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/sample.env @@ -3,6 +3,13 @@ METRICS_ADVISOR_ENDPOINT=https://.cognitiveservices.azure.com/ METRICS_ADVISOR_SUBSCRIPTION_KEY= METRICS_ADVISOR_API_KEY= +# METRICS_ADVISOR_METRIC_ID= +# METRICS_ADVISOR_DETECTION_CONFIG_ID= +# METRICS_ADVISOR_HOOK_ID= +# METRICS_ADVISOR_DATAFEED_ID= +# METRICS_ADVISOR_INCIDENT_ID= +# METRICS_ADVISOR_SQL_SERVER_CONNECTION_STRING= +# METRICS_ADVISOR_AZURE_SQL_SERVER_QUERY= # Our tests assume that TEST_MODE is "playback" by default. You can # change it to "record" to generate new recordings, or "live" to bypass the recorder entirely. diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/seriesData.js b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/seriesData.js index f2deedc78da1..e1258231dd9b 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/seriesData.js +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/javascript/seriesData.js @@ -35,17 +35,17 @@ async function getEnrichedSeriesData(client, detectionConfigId) { try { const result = await client.getMetricEnrichedSeriesData( detectionConfigId, - new Date("09/01/2020"), - new Date("09/12/2020"), [ { city: "Manila", category: "Handmade" }, { city: "Shanghai", category: "Shoes Handbags & Sunglasses" } - ] + ], + new Date("09/01/2020"), + new Date("09/12/2020") ); for (const enriched of result) { console.log("enriched series:"); - console.log(enriched.series); + console.log(enriched.seriesKey); if (enriched.timestamps && enriched.timestamps.length > 0) { for (let i = 0; i < enriched.timestamps.length; i++) { console.log(" ----"); @@ -70,12 +70,12 @@ async function getMetricSeriesData(client, metricId) { try { const result = await client.getMetricSeriesData( metricId, - new Date("09/01/2020"), - new Date("09/12/2020"), [ { city: "Manila", category: "Handmade" }, { city: "Shanghai", category: "Shoes Handbags & Sunglasses" } - ] + ], + new Date("09/01/2020"), + new Date("09/12/2020") ); for (const series of result) { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/package.json b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/package.json index 84f08b6a568d..f6ed801f3c17 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/package.json +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/package.json @@ -30,7 +30,7 @@ }, "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/metricsadvisor/ai-metrics-advisor", "dependencies": { - "@azure/ai-metrics-advisor": "next", + "@azure/ai-metrics-advisor": "latest", "dotenv": "latest" }, "devDependencies": { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/sample.env b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/sample.env index 262d9f416c00..31e59787777d 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/sample.env +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/sample.env @@ -3,6 +3,13 @@ METRICS_ADVISOR_ENDPOINT=https://.cognitiveservices.azure.com/ METRICS_ADVISOR_SUBSCRIPTION_KEY= METRICS_ADVISOR_API_KEY= +# METRICS_ADVISOR_METRIC_ID= +# METRICS_ADVISOR_DETECTION_CONFIG_ID= +# METRICS_ADVISOR_HOOK_ID= +# METRICS_ADVISOR_DATAFEED_ID= +# METRICS_ADVISOR_INCIDENT_ID= +# METRICS_ADVISOR_SQL_SERVER_CONNECTION_STRING= +# METRICS_ADVISOR_AZURE_SQL_SERVER_QUERY= # Our tests assume that TEST_MODE is "playback" by default. You can # change it to "record" to generate new recordings, or "live" to bypass the recorder entirely. diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/alertingConfig.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/alertingConfig.ts index d6c21dc47373..0bac19e8ca0e 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/alertingConfig.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/alertingConfig.ts @@ -65,7 +65,7 @@ async function createAlertConfig( detectionConfigurationId: detectionConfigId, alertScope: { scopeType: "Dimension", - dimensionAnomalyScope: { city: "Manila", category: "Handmade" } + seriesGroupInScope: { city: "Manila", category: "Handmade" } } } ], @@ -100,7 +100,7 @@ async function updateAlertConfig( detectionConfigurationId: detectionConfigId, alertScope: { scopeType: "Dimension", - dimensionAnomalyScope: { + seriesGroupInScope: { city: "Kolkata", category: "Shoes Handbags & Sunglasses" } @@ -109,8 +109,7 @@ async function updateAlertConfig( ] }; console.log(`Updating alerting configuration ${detectionConfigId}`); - await adminClient.updateAlertConfig(alertConfigId, patch); - const updated = await adminClient.getAlertConfig(alertConfigId); + const updated = await adminClient.updateAlertConfig(alertConfigId, patch); return updated; } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/dataFeed.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/dataFeed.ts index cc23cc0fdca0..a059fb5781d7 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/dataFeed.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/dataFeed.ts @@ -163,8 +163,7 @@ async function updateDataFeed(client: MetricsAdvisorAdministrationClient, dataFe try { console.log(`Updating datafeed ${dataFeedId}...`); - await client.updateDataFeed(dataFeedId, patch); - const updated = await client.getDataFeed(dataFeedId); + const updated = await client.updateDataFeed(dataFeedId, patch); console.dir(updated); } catch (err) { console.log("Error occurred when updating data feed"); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/dataSourceCredential.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/dataSourceCredential.ts index cfff021626e2..3df297155ccd 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/dataSourceCredential.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/dataSourceCredential.ts @@ -12,9 +12,9 @@ dotenv.config(); import { MetricsAdvisorKeyCredential, MetricsAdvisorAdministrationClient, - GetCredentialEntityResponse, - DatasourceCredentialPatch, - SqlServerConnectionStringDatasourceCredential + GetDataSourceCredentialEntityResponse, + DataSourceCredentialPatch, + DataSourceSqlConnectionString } from "@azure/ai-metrics-advisor"; export async function main() { @@ -26,19 +26,19 @@ export async function main() { const adminClient = new MetricsAdvisorAdministrationClient(endpoint, credential); - const created = await createDatasourceCredential(adminClient); + const created = await createDataSourceCredential(adminClient); if (created.id) { - await getDatasourceCredential(adminClient, created.id); - await updateDatasourceCredential(adminClient, created.id); - await listDatasourceCredentials(adminClient); - await deleteDatasourceCredential(adminClient, created.id); + await getDataSourceCredential(adminClient, created.id); + await updateDataSourceCredential(adminClient, created.id); + await listDataSourceCredentials(adminClient); + await deleteDataSourceCredential(adminClient, created.id); } } -async function listDatasourceCredentials(client: MetricsAdvisorAdministrationClient) { - console.log("Listing Datasource credentials ..."); +async function listDataSourceCredentials(client: MetricsAdvisorAdministrationClient) { + console.log("Listing DataSource credentials ..."); console.log(" using while loop"); - const iter = client.listDatasourceCredential(); + const iter = client.listDataSourceCredential(); let result = await iter.next(); while (!result.done) { console.log(`id :${result.value.id}, name: ${result.value.name}`); @@ -47,7 +47,7 @@ async function listDatasourceCredentials(client: MetricsAdvisorAdministrationCli // second approach console.log(" using for-await-of loop"); - const iterator = client.listDatasourceCredential(); + const iterator = client.listDataSourceCredential(); for await (const datasourceCredential of iterator) { console.log( `id :${datasourceCredential.id}, name: ${datasourceCredential.name}, type: ${datasourceCredential.type}` @@ -56,7 +56,7 @@ async function listDatasourceCredentials(client: MetricsAdvisorAdministrationCli // by pages console.log(" by pages"); - const pages = client.listDatasourceCredential().byPage({ maxPageSize: 1 }); + const pages = client.listDataSourceCredential().byPage({ maxPageSize: 1 }); let page = await pages.next(); let i = 1; while (!page.done) { @@ -70,34 +70,34 @@ async function listDatasourceCredentials(client: MetricsAdvisorAdministrationCli } } -async function createDatasourceCredential( +async function createDataSourceCredential( client: MetricsAdvisorAdministrationClient -): Promise { - console.log("Creating Datasource credential..."); - const datasourceCredential: SqlServerConnectionStringDatasourceCredential = { +): Promise { + console.log("Creating DataSource credential..."); + const datasourceCredential: DataSourceSqlConnectionString = { name: "Sql-server-cred", description: "an example sql server credential", type: "AzureSQLConnectionString", connectionString: "connection-string" }; - const result = await client.createDatasourceCredential(datasourceCredential); + const result = await client.createDataSourceCredential(datasourceCredential); console.dir(result); return result; } -async function getDatasourceCredential( +async function getDataSourceCredential( client: MetricsAdvisorAdministrationClient, datasourceCredentialId: string ) { console.log("Retrieving datasourceCredential by id..."); - const result = await client.getDatasourceCredential(datasourceCredentialId); + const result = await client.getDataSourceCredential(datasourceCredentialId); console.log("datasource credential result is as follows - "); console.log(` id: ${result.id}`); console.log(` datasource credential type: ${result.type}`); console.log(` name: ${result.name}`); } -async function updateDatasourceCredential( +async function updateDataSourceCredential( client: MetricsAdvisorAdministrationClient, credentialId: string ) { @@ -106,12 +106,11 @@ async function updateDatasourceCredential( description: "updated-description", type: "AzureSQLConnectionString", connectionString: "connection-string" - } as DatasourceCredentialPatch; + } as DataSourceCredentialPatch; try { console.log(`Updating credential ${credentialId}...`); - await client.updateDatasourceCredential(credentialId, patch); - const updated = await client.getDataFeed(credentialId); + const updated = await client.updateDataSourceCredential(credentialId, patch); console.dir(updated); } catch (err) { console.log("Error occurred when updating credential"); @@ -119,12 +118,12 @@ async function updateDatasourceCredential( } } -async function deleteDatasourceCredential( +async function deleteDataSourceCredential( client: MetricsAdvisorAdministrationClient, credentialId: string ) { console.log(`Deleting datasource credential ${credentialId}...`); - await client.deleteDatasourceCredential(credentialId); + await client.deleteDataSourceCredential(credentialId); } main() diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/detectionConfig.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/detectionConfig.ts index 9d50179736e2..07c2ee7be3e8 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/detectionConfig.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/detectionConfig.ts @@ -91,7 +91,7 @@ async function createDetectionConfig( }; const seriesGroupDetectionConditions: MetricSeriesGroupDetectionCondition[] = [ { - group: { city: "Manila" }, + groupKey: { city: "Manila" }, conditionOperator: "AND", changeThresholdCondition: { anomalyDetectorDirection: "Both", @@ -104,7 +104,7 @@ async function createDetectionConfig( ]; const seriesDetectionConditions: MetricSingleSeriesDetectionCondition[] = [ { - series: { city: "Manila", category: "Handmade" }, + seriesKey: { city: "Manila", category: "Handmade" }, conditionOperator: "AND", hardThresholdCondition: { anomalyDetectorDirection: "Up", @@ -151,7 +151,7 @@ async function updateDetectionConfig( }, seriesGroupDetectionConditions: [ { - group: { city: "Manila" }, + groupKey: { city: "Manila" }, conditionOperator: "AND", hardThresholdCondition: { anomalyDetectorDirection: "Up", @@ -162,7 +162,7 @@ async function updateDetectionConfig( ], seriesDetectionConditions: [ { - series: { city: "Manila", category: "Handmade" }, + seriesKey: { city: "Manila", category: "Handmade" }, conditionOperator: "OR", changeThresholdCondition: { anomalyDetectorDirection: "Both", @@ -175,8 +175,7 @@ async function updateDetectionConfig( ] }; console.log(`Updating existing detection configuration '${configId}'`); - await adminClient.updateDetectionConfig(configId, patch); - const result = adminClient.getDetectionConfig(configId); + const result = await adminClient.updateDetectionConfig(configId, patch); console.log(result); return result; } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/hooks.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/hooks.ts index d5de92b2b880..5e8a44790ceb 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/hooks.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/hooks.ts @@ -92,8 +92,7 @@ async function updateEmailHook(client: MetricsAdvisorAdministrationClient, hookI toList: ["test2@example.com", "test3@example.com"] } }; - await client.updateHook(hookId, emailPatch); - const response = await client.getHook(hookId); + const response = await client.updateHook(hookId, emailPatch); console.log(response); return response; } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/incidentsAndAlerts.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/incidentsAndAlerts.ts index 5f38dc1f79bc..752344d33afc 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/incidentsAndAlerts.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/incidentsAndAlerts.ts @@ -75,12 +75,12 @@ async function listIncidentsForDetectionConfig( ) { console.log(`Listing incidents for detection config '${detectionConfigId}'`); console.log(" using for-await-of syntax"); - const listIterator = client.listIncidents( + const listIterator = client.listIncidentsForDetectionConfiguration( detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020"), { - dimensionFilter: [{ city: "Manila", category: "Shoes Handbags & Sunglasses" }] + seriesGroupKeys: [{ city: "Manila", category: "Shoes Handbags & Sunglasses" }] } ); for await (const incident of listIterator) { @@ -96,7 +96,11 @@ async function listIncidentsForDetectionConfig( console.log(` by pages`); const iterator = client - .listIncidents(detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020")) + .listIncidentsForDetectionConfiguration( + detectionConfigId, + new Date("10/22/2020"), + new Date("10/24/2020") + ) .byPage({ maxPageSize: 20 }); let result = await iterator.next(); @@ -120,7 +124,7 @@ async function listAnomaliesForDetectionConfig( detectionConfigId: string ) { console.log(`Listing anomalies for detection config '${detectionConfigId}'`); - const listIterator = client.listAnomalies( + const listIterator = client.listAnomaliesForDetectionConfiguration( detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020"), @@ -142,9 +146,14 @@ async function listAnomaliesForDetectionConfig( console.log(` by pages`); const iterator = client - .listAnomalies(detectionConfigId, new Date("10/22/2020"), new Date("10/24/2020"), { - severityFilter: { min: "Medium", max: "High" } - }) + .listAnomaliesForDetectionConfiguration( + detectionConfigId, + new Date("10/22/2020"), + new Date("10/24/2020"), + { + severityFilter: { min: "Medium", max: "High" } + } + ) .byPage({ maxPageSize: 20 }); let result = await iterator.next(); @@ -222,7 +231,7 @@ async function listIncidentsForAlert( `Listing incidents for alert configuration '${alertConfigId}' and alert '${alertId}'` ); console.log(" using for-await-of syntax"); - const listIterator = client.listIncidents({ alertConfigId, id: alertId }); + const listIterator = client.listIncidentsForAlert({ alertConfigId, id: alertId }); for await (const incident of listIterator) { console.log(" Incident"); console.log(` id: ${incident.id}`); @@ -235,7 +244,9 @@ async function listIncidentsForAlert( } console.log(` by pages`); - const iterator = client.listIncidents({ alertConfigId, id: alertId }).byPage({ maxPageSize: 20 }); + const iterator = client + .listIncidentsForAlert({ alertConfigId, id: alertId }) + .byPage({ maxPageSize: 20 }); let result = await iterator.next(); while (!result.done) { @@ -262,7 +273,7 @@ async function listAnomaliesForAlert( `Listing anomalies for alert configuration '${alertConfigId}' and alert '${alertId}'` ); console.log(" using for-await-of syntax"); - const listIterator = client.listAnomalies({ alertConfigId, id: alertId }); + const listIterator = client.listAnomaliesForAlert({ alertConfigId, id: alertId }); for await (const anomaly of listIterator) { console.log(" Anomaly"); console.log(` timestamp: ${anomaly.timestamp}`); @@ -271,7 +282,9 @@ async function listAnomaliesForAlert( } console.log(` by pages`); - const iterator = client.listAnomalies({ alertConfigId, id: alertId }).byPage({ maxPageSize: 20 }); + const iterator = client + .listAnomaliesForAlert({ alertConfigId, id: alertId }) + .byPage({ maxPageSize: 20 }); let result = await iterator.next(); while (!result.done) { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/metricFeedback.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/metricFeedback.ts index 9580f3a87870..452299361631 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/metricFeedback.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/metricFeedback.ts @@ -47,7 +47,7 @@ async function provideAnomalyFeedback(client: MetricsAdvisorClient, metricId: st value: "NotAnomaly", dimensionKey: { city: "Manila", category: "Handmade" } }; - return await client.createFeedback(anomalyFeedback); + return await client.addFeedback(anomalyFeedback); } async function providePeriodFeedback(client: MetricsAdvisorClient, metricId: string) { @@ -59,7 +59,7 @@ async function providePeriodFeedback(client: MetricsAdvisorClient, metricId: str periodValue: 4, dimensionKey: { city: "Manila", category: "Handmade" } }; - return await client.createFeedback(periodFeedback); + return await client.addFeedback(periodFeedback); } async function provideChangePointFeedback(client: MetricsAdvisorClient, metricId: string) { @@ -71,7 +71,7 @@ async function provideChangePointFeedback(client: MetricsAdvisorClient, metricId value: "ChangePoint", dimensionKey: { city: "Manila", category: "Handmade" } }; - return await client.createFeedback(changePointFeedback); + return await client.addFeedback(changePointFeedback); } async function provideCommentFeedback(client: MetricsAdvisorClient, metricId: string) { @@ -82,7 +82,7 @@ async function provideCommentFeedback(client: MetricsAdvisorClient, metricId: st dimensionKey: { city: "Manila", category: "Handmade" }, comment: "This is a comment" }; - return await client.createFeedback(commendFeedback); + return await client.addFeedback(commendFeedback); } async function getFeedback(client: MetricsAdvisorClient, feedbackId: string) { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/quickstart.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/quickstart.ts index ef829470a5a7..dd79a66c9a16 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/quickstart.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/quickstart.ts @@ -276,7 +276,7 @@ async function queryAnomaliesByAlert(client: MetricsAdvisorClient, alert: Anomal console.log( `Listing anomalies for alert configuration '${alert.alertConfigId}' and alert '${alert.id}'` ); - const listIterator = client.listAnomalies(alert); + const listIterator = client.listAnomaliesForAlert(alert); for await (const anomaly of listIterator) { console.log( ` Anomaly ${anomaly.severity} ${anomaly.status} ${anomaly.seriesKey.dimension} ${anomaly.timestamp}` diff --git a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/seriesData.ts b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/seriesData.ts index faf08b2cee71..6cb67fea44a3 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/seriesData.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/samples/v1/typescript/src/seriesData.ts @@ -35,17 +35,17 @@ async function getEnrichedSeriesData(client: MetricsAdvisorClient, detectionConf try { const result = await client.getMetricEnrichedSeriesData( detectionConfigId, - new Date("09/01/2020"), - new Date("09/12/2020"), [ { city: "Manila", category: "Handmade" }, { city: "Shanghai", category: "Shoes Handbags & Sunglasses" } - ] + ], + new Date("09/01/2020"), + new Date("09/12/2020") ); for (const enriched of result) { console.log("enriched series:"); - console.log(enriched.series); + console.log(enriched.seriesKey); if (enriched.timestamps && enriched.timestamps.length > 0) { for (let i = 0; i < enriched.timestamps.length; i++) { console.log(" ----"); @@ -70,12 +70,12 @@ async function getMetricSeriesData(client: MetricsAdvisorClient, metricId: strin try { const result = await client.getMetricSeriesData( metricId, - new Date("09/01/2020"), - new Date("09/12/2020"), [ { city: "Manila", category: "Handmade" }, { city: "Shanghai", category: "Shoes Handbags & Sunglasses" } - ] + ], + new Date("09/01/2020"), + new Date("09/12/2020") ); for (const series of result) { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/index.ts b/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/index.ts index 5d45f053674e..444c049becdb 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/index.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/index.ts @@ -127,8 +127,11 @@ export interface MetricAlertingConfiguration { /** Negation operation */ negationOperation?: boolean; dimensionAnomalyScope?: DimensionGroupIdentity; + /** Group Scope for Top N values */ topNAnomalyScope?: TopNGroupScope; + /** Alert Severity Condition */ severityFilter?: SeverityCondition; + /** Represents Conditions to snooze Alerts */ snoozeFilter?: AlertSnoozeCondition; valueFilter?: ValueCondition; } @@ -138,6 +141,7 @@ export interface DimensionGroupIdentity { dimension: { [propertyName: string]: string }; } +/** Group Scope for Top N values */ export interface TopNGroupScope { /** top N, value range : [1, +∞) */ top: number; @@ -151,6 +155,7 @@ export interface TopNGroupScope { minTopCount: number; } +/** Alert Severity Condition */ export interface SeverityCondition { /** min alert severity */ minAlertSeverity: Severity; @@ -158,6 +163,7 @@ export interface SeverityCondition { maxAlertSeverity: Severity; } +/** Represents Conditions to snooze Alerts */ export interface AlertSnoozeCondition { /** snooze point count, value range : [0, +∞) */ autoSnooze: number; @@ -409,19 +415,23 @@ export interface WholeMetricConfiguration { * should be specified when combining multiple detection conditions */ conditionOperator?: AnomalyDetectionConfigurationLogicType; + /** Represents Smart Condition */ smartDetectionCondition?: SmartDetectionCondition; hardThresholdCondition?: HardThresholdCondition; changeThresholdCondition?: ChangeThresholdCondition; } +/** Represents Smart Condition */ export interface SmartDetectionCondition { /** sensitivity, value range : (0, 100] */ sensitivity: number; /** detection direction */ anomalyDetectorDirection: AnomalyDetectorDirection; + /** Represents Suppress Condition */ suppressCondition: SuppressCondition; } +/** Represents Suppress Condition */ export interface SuppressCondition { /** min point number, value range : [1, +∞) */ minNumber: number; @@ -444,6 +454,7 @@ export interface HardThresholdCondition { upperBound?: number; /** detection direction */ anomalyDetectorDirection: AnomalyDetectorDirection; + /** Represents Suppress Condition */ suppressCondition: SuppressCondition; } @@ -459,6 +470,7 @@ export interface ChangeThresholdCondition { withinRange: boolean; /** detection direction */ anomalyDetectorDirection: AnomalyDetectorDirection; + /** Represents Suppress Condition */ suppressCondition: SuppressCondition; } @@ -470,6 +482,7 @@ export interface DimensionGroupConfiguration { * should be specified when combining multiple detection conditions */ conditionOperator?: AnomalyDetectionConfigurationLogicType; + /** Represents Smart Condition */ smartDetectionCondition?: SmartDetectionCondition; hardThresholdCondition?: HardThresholdCondition; changeThresholdCondition?: ChangeThresholdCondition; @@ -483,6 +496,7 @@ export interface SeriesConfiguration { * should be specified when combining multiple detection conditions */ conditionOperator?: AnomalyDetectionConfigurationLogicType; + /** Represents Smart Condition */ smartDetectionCondition?: SmartDetectionCondition; hardThresholdCondition?: HardThresholdCondition; changeThresholdCondition?: ChangeThresholdCondition; @@ -609,9 +623,11 @@ export interface DetectionAnomalyResultQuery { export interface DetectionAnomalyFilterCondition { /** dimension filter */ dimensionFilter?: DimensionGroupIdentity[]; + /** Represents Conditions to filter severity */ severityFilter?: SeverityFilterCondition; } +/** Represents Conditions to filter severity */ export interface SeverityFilterCondition { /** min severity */ min: Severity; @@ -982,6 +998,7 @@ export interface IngestionStatusList { readonly value?: IngestionStatus[]; } +/** Ingestion Status */ export interface IngestionStatus { /** * data slice timestamp. @@ -1007,6 +1024,7 @@ export interface IngestionProgressResetOptions { endTime: Date; } +/** Track the progress for Datafeed Ingestion */ export interface DataFeedIngestionProgress { /** * the timestamp of latest success ingestion job. @@ -1132,19 +1150,19 @@ export interface EnrichmentStatus { export interface AzureSQLConnectionStringParam { /** The connection string to access the Azure SQL. */ - connectionString: string; + connectionString?: string; } export interface DataLakeGen2SharedKeyParam { /** The account key to access the Azure Data Lake Storage Gen2. */ - accountKey: string; + accountKey?: string; } export interface ServicePrincipalParam { /** The client id of the service principal. */ clientId: string; /** The client secret of the service principal. */ - clientSecret: string; + clientSecret?: string; /** The tenant id of the service principal. */ tenantId: string; } @@ -1155,7 +1173,7 @@ export interface ServicePrincipalInKVParam { /** The Client Id to access the Key Vault. */ keyVaultClientId: string; /** The Client Secret to access the Key Vault. */ - keyVaultClientSecret: string; + keyVaultClientSecret?: string; /** The secret name of the service principal's client Id in the Key Vault. */ servicePrincipalIdNameInKV: string; /** The secret name of the service principal's client secret in the Key Vault. */ @@ -1422,6 +1440,7 @@ export interface PeriodFeedbackValue { periodValue: number; } +/** Parameters for Email Hook */ export interface EmailHookParameter { /** Email TO: list. */ toList: string[]; @@ -1708,6 +1727,7 @@ export type PeriodFeedback = MetricFeedback & { export type EmailHookInfo = HookInfo & { /** Polymorphic discriminator, which specifies the different types this object can be */ hookType: "Email"; + /** Parameters for Email Hook */ hookParameter: EmailHookParameter; }; @@ -1816,7 +1836,6 @@ export type Granularity = | "Daily" | "Hourly" | "Minutely" - | "Secondly" | "Custom"; /** Defines values for EntityStatus. */ export type EntityStatus = "Active" | "Paused"; diff --git a/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/mappers.ts b/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/mappers.ts index 810fe6e34f8f..fd16aec04ad3 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/mappers.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/mappers.ts @@ -2047,7 +2047,6 @@ export const DataFeedDetail: coreHttp.CompositeMapper = { "Daily", "Hourly", "Minutely", - "Secondly", "Custom" ] } @@ -3327,7 +3326,6 @@ export const AzureSQLConnectionStringParam: coreHttp.CompositeMapper = { modelProperties: { connectionString: { serializedName: "connectionString", - required: true, type: { name: "String" } @@ -3343,7 +3341,6 @@ export const DataLakeGen2SharedKeyParam: coreHttp.CompositeMapper = { modelProperties: { accountKey: { serializedName: "accountKey", - required: true, type: { name: "String" } @@ -3366,7 +3363,6 @@ export const ServicePrincipalParam: coreHttp.CompositeMapper = { }, clientSecret: { serializedName: "clientSecret", - required: true, type: { name: "String" } @@ -3403,7 +3399,6 @@ export const ServicePrincipalInKVParam: coreHttp.CompositeMapper = { }, keyVaultClientSecret: { serializedName: "keyVaultClientSecret", - required: true, type: { name: "String" } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/parameters.ts b/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/parameters.ts index 3fb0143059e9..0df4e5a6357b 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/parameters.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/src/generated/models/parameters.ts @@ -262,7 +262,6 @@ export const granularityName: OperationQueryParameter = { "Daily", "Hourly", "Minutely", - "Secondly", "Custom" ] } diff --git a/sdk/metricsadvisor/ai-metrics-advisor/src/metricsAdvisorAdministrationClient.ts b/sdk/metricsadvisor/ai-metrics-advisor/src/metricsAdvisorAdministrationClient.ts index 4d9e92f078ca..fe7014943516 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/src/metricsAdvisorAdministrationClient.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/src/metricsAdvisorAdministrationClient.ts @@ -23,7 +23,7 @@ import { GeneratedClient } from "./generated/generatedClient"; import { IngestionStatus, DataFeedGranularity, - DataFeed, + MetricsAdvisorDataFeed, DataFeedPatch, WebNotificationHook, EmailNotificationHook, @@ -32,11 +32,11 @@ import { AnomalyDetectionConfiguration, AnomalyDetectionConfigurationPatch, GetDataFeedResponse, - GetAnomalyDetectionConfigurationResponse, - GetAnomalyAlertConfigurationResponse, + GetDetectionConfigResponse, + GetAlertConfigResponse, GetHookResponse, NotificationHookUnion, - DataFeedRollupMethod, + DataFeedAutoRollupMethod, DataFeedsPageResponse, IngestionStatusPageResponse, AlertConfigurationsPageResponse, @@ -45,10 +45,10 @@ import { DataFeedStatus, GetIngestionProgressResponse, AnomalyAlertConfiguration, - DatasourceCredentialUnion, - DatasourceCredentialPatch, + DataSourceCredentialEntityUnion, + DataSourceCredentialPatch, CredentialsPageResponse, - GetCredentialEntityResponse + GetDataSourceCredentialEntityResponse } from "./models"; import { DataSourceType, HookInfoUnion, NeedRollupEnum } from "./generated/models"; import { @@ -97,7 +97,7 @@ export interface ListHooksOptions extends OperationOptions { /** * Options for listing data source credentials */ -export interface ListDatasourceCredentialsOptions extends OperationOptions { +export interface ListDataSourceCredentialsOptions extends OperationOptions { /** Number of items to skip */ skip?: number; } @@ -137,7 +137,7 @@ export interface ListDataFeedsOptions extends OperationOptions { * describes the input to Create Data Feed operation */ export type DataFeedDescriptor = Omit< - DataFeed, + MetricsAdvisorDataFeed, "id" | "metricIds" | "isAdmin" | "status" | "creator" | "createdOn" >; @@ -239,7 +239,7 @@ export class MetricsAdvisorAdministrationClient { rollupSettings?.rollupType === "AutoRollup" || rollupSettings?.rollupType === "AlreadyRollup" ? rollupSettings.rollupIdentificationValue : undefined; - const rollUpMethod: DataFeedRollupMethod | undefined = + const rollUpMethod: DataFeedAutoRollupMethod | undefined = rollupSettings?.rollupType === "AutoRollup" ? rollupSettings.rollupMethod : undefined; const fillMissingPointType = missingDataPointFillSettings?.fillType; const fillMissingPointValue = @@ -307,7 +307,7 @@ export class MetricsAdvisorAdministrationClient { try { const requestOptions = operationOptionsToRequestOptionsBase(finalOptions); const result = await this.client.getDataFeedById(id, requestOptions); - const resultDataFeed: DataFeed = fromServiceDataFeedDetailUnion(result); + const resultDataFeed: MetricsAdvisorDataFeed = fromServiceDataFeedDetailUnion(result); return { ...resultDataFeed, _response: result._response }; } catch (e) { span.setStatus({ @@ -374,7 +374,7 @@ export class MetricsAdvisorAdministrationClient { */ public listDataFeeds( options: ListDataFeedsOptions = {} - ): PagedAsyncIterableIterator { + ): PagedAsyncIterableIterator { const iter = this.listItemsOfDataFeeds(options); return { /** @@ -403,7 +403,7 @@ export class MetricsAdvisorAdministrationClient { private async *listItemsOfDataFeeds( options: ListDataFeedsOptions - ): AsyncIterableIterator { + ): AsyncIterableIterator { for await (const segment of this.listSegmentsOfDataFeeds(options)) { if (segment) { yield* segment; @@ -472,7 +472,7 @@ export class MetricsAdvisorAdministrationClient { dataFeedId: string, patch: DataFeedPatch, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( "MetricsAdvisorAdministrationClient-updateDataFeed", options @@ -511,7 +511,9 @@ export class MetricsAdvisorAdministrationClient { status: patch.status, actionLinkTemplate: patch.actionLinkTemplate }; - return await this.client.updateDataFeed(dataFeedId, patchBody, requestOptions); + const result = await this.client.updateDataFeed(dataFeedId, patchBody, requestOptions); + const resultDataFeed: MetricsAdvisorDataFeed = fromServiceDataFeedDetailUnion(result); + return { ...resultDataFeed, _response: result._response }; } catch (e) { span.setStatus({ code: SpanStatusCode.ERROR, @@ -558,7 +560,7 @@ export class MetricsAdvisorAdministrationClient { public async createDetectionConfig( config: Omit, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( "MetricsAdvisorAdministrationClient-createDetectionConfig", options @@ -596,7 +598,7 @@ export class MetricsAdvisorAdministrationClient { public async getDetectionConfig( id: string, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( "MetricsAdvisorAdministrationClient-getDetectionConfig", options @@ -631,7 +633,7 @@ export class MetricsAdvisorAdministrationClient { id: string, patch: AnomalyDetectionConfigurationPatch, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( "MetricsAdvisorAdministrationClient-updateDetectionConfig", options @@ -640,7 +642,15 @@ export class MetricsAdvisorAdministrationClient { try { const requestOptions = operationOptionsToRequestOptionsBase(finalOptions); const transformed = toServiceAnomalyDetectionConfigurationPatch(patch); - return await this.client.updateAnomalyDetectionConfiguration(id, transformed, requestOptions); + const result = await this.client.updateAnomalyDetectionConfiguration( + id, + transformed, + requestOptions + ); + return { + ...fromServiceAnomalyDetectionConfiguration(result), + _response: result._response + }; } catch (e) { span.setStatus({ code: SpanStatusCode.ERROR, @@ -689,7 +699,7 @@ export class MetricsAdvisorAdministrationClient { public async createAlertConfig( config: Omit, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( "MetricsAdvisorAdministrationClient-createAlertConfig", options @@ -728,7 +738,7 @@ export class MetricsAdvisorAdministrationClient { id: string, patch: Partial>, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( "MetricsAdvisorAdministrationClient-updateAlertConfig", options @@ -737,7 +747,12 @@ export class MetricsAdvisorAdministrationClient { try { const requestOptions = operationOptionsToRequestOptionsBase(finalOptions); const transformed = toServiceAlertConfigurationPatch(patch); - return await this.client.updateAnomalyAlertingConfiguration(id, transformed, requestOptions); + const result = await this.client.updateAnomalyAlertingConfiguration( + id, + transformed, + requestOptions + ); + return { ...fromServiceAlertConfiguration(result), _response: result._response }; } catch (e) { span.setStatus({ code: SpanStatusCode.ERROR, @@ -758,7 +773,7 @@ export class MetricsAdvisorAdministrationClient { public async getAlertConfig( id: string, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( "MetricsAdvisorAdministrationClient-getAlertConfig", options @@ -1132,14 +1147,18 @@ export class MetricsAdvisorAdministrationClient { id: string, patch: EmailNotificationHookPatch | WebNotificationHookPatch, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( "MetricsAdvisorAdministrationClient-updateHook", options ); try { const requestOptions = operationOptionsToRequestOptionsBase(finalOptions); - return await this.client.updateHook(id, patch, requestOptions); + const result = await this.client.updateHook(id, patch, requestOptions); + const resultHookResponse: NotificationHookUnion = fromServiceHookInfoUnion( + result._response.parsedBody + ); + return { ...resultHookResponse, _response: result._response }; } catch (e) { span.setStatus({ code: SpanStatusCode.ERROR, @@ -1560,29 +1579,28 @@ export class MetricsAdvisorAdministrationClient { /** * Creates data source credential for the given id - * @param datasourceCredential - the credential entity object to create + * @param dataSourceCredential - the credential entity object to create * @param options - The options parameter */ - - public async createDatasourceCredential( - datasourceCredential: DatasourceCredentialUnion, + public async createDataSourceCredential( + dataSourceCredential: DataSourceCredentialEntityUnion, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( - "MetricsAdvisorAdministrationClient-createDatasourceCredential", + "MetricsAdvisorAdministrationClient-createDataSourceCredential", options ); try { const requestOptions = operationOptionsToRequestOptionsBase(finalOptions); // transformation - const transformedCred = toServiceCredential(datasourceCredential); + const transformedCred = toServiceCredential(dataSourceCredential); const result = await this.client.createCredential(transformedCred, requestOptions); if (!result.location) { throw new Error("Expected a valid location to retrieve the created credential entity"); } const lastSlashIndex = result.location.lastIndexOf("/"); const credEntityId = result.location.substring(lastSlashIndex + 1); - return this.getDatasourceCredential(credEntityId); + return this.getDataSourceCredential(credEntityId); } catch (e) { span.setStatus({ code: SpanStatusCode.ERROR, @@ -1600,12 +1618,12 @@ export class MetricsAdvisorAdministrationClient { * @param options - The options parameter */ - public async getDatasourceCredential( + public async getDataSourceCredential( id: string, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( - "MetricsAdvisorAdministrationClient-getDatasourceCredential", + "MetricsAdvisorAdministrationClient-getDataSourceCredential", options ); try { @@ -1634,18 +1652,18 @@ export class MetricsAdvisorAdministrationClient { * ```js * const client = new MetricsAdvisorAdministrationClient(endpoint, * new MetricsAdvisorKeyCredential(subscriptionKey, apiKey)); - * const datasourceCredentialList = client.listDatasourceCredential(); + * const dataSourceCredentialList = client.listDataSourceCredential(); * let i = 1; - * for await (const datasourceCredential of datasourceCredentialList){ - * console.log(`datasourceCredential ${i++}:`); - * console.log(datasourceCredential); + * for await (const dataSourceCredential of dataSourceCredentialList){ + * console.log(`dataSourceCredential ${i++}:`); + * console.log(dataSourceCredential); * } * ``` * * Example using `iter.next()`: * * ```js - * let iter = client.listDatasourceCredential(); + * let iter = client.listDataSourceCredential(); * let result = await iter.next(); * while (!result.done) { * console.dir(result); @@ -1656,14 +1674,14 @@ export class MetricsAdvisorAdministrationClient { * Example using `byPage()`: * * ```js - * const pages = client.listDatasourceCredential().byPage({ maxPageSize: 2 }); + * const pages = client.listDataSourceCredential().byPage({ maxPageSize: 2 }); * let page = await pages.next(); * let i = 1; * while (!page.done) { * if (page.value) { * console.log(`-- page ${i++}`); * for (const credential of page.value) { - * console.log("datasource credential-"); + * console.log("dataSource credential-"); * console.dir(credential); * } * } @@ -1671,10 +1689,10 @@ export class MetricsAdvisorAdministrationClient { * } * ``` */ - public listDatasourceCredential( - options: ListDatasourceCredentialsOptions = {} - ): PagedAsyncIterableIterator { - const iter = this.listItemsOfDatasourceCredentials(options); + public listDataSourceCredential( + options: ListDataSourceCredentialsOptions = {} + ): PagedAsyncIterableIterator { + const iter = this.listItemsOfDataSourceCredentials(options); return { /** * The next method, part of the iteration protocol @@ -1700,9 +1718,9 @@ export class MetricsAdvisorAdministrationClient { }; } - private async *listItemsOfDatasourceCredentials( - options: ListDatasourceCredentialsOptions - ): AsyncIterableIterator { + private async *listItemsOfDataSourceCredentials( + options: ListDataSourceCredentialsOptions + ): AsyncIterableIterator { for await (const segment of this.listSegmentsOfCredentialEntities(options)) { if (segment) { yield* segment; @@ -1711,7 +1729,7 @@ export class MetricsAdvisorAdministrationClient { } private async *listSegmentsOfCredentialEntities( - options: ListDatasourceCredentialsOptions & { maxPageSize?: number }, + options: ListDataSourceCredentialsOptions & { maxPageSize?: number }, continuationToken?: string ): AsyncIterableIterator { let segmentResponse; @@ -1763,22 +1781,24 @@ export class MetricsAdvisorAdministrationClient { * @param patch - Input to the update credential entity operation {@link DataSourceCredentialPatch} * @param options - The options parameter */ - public async updateDatasourceCredential( + public async updateDataSourceCredential( id: string, - patch: DatasourceCredentialPatch, + patch: DataSourceCredentialPatch, options: OperationOptions = {} - ): Promise { + ): Promise { const { span, updatedOptions: finalOptions } = createSpan( "MetricsAdvisorAdministrationClient-updateDataSourceCredential", options ); try { const requestOptions = operationOptionsToRequestOptionsBase(finalOptions); - return await this.client.updateCredential( + const result = await this.client.updateCredential( id, toServiceCredentialPatch(patch), requestOptions ); + const resultCred = fromServiceCredential(result); + return { ...resultCred, _response: result._response }; } catch (e) { span.setStatus({ code: SpanStatusCode.ERROR, @@ -1795,7 +1815,7 @@ export class MetricsAdvisorAdministrationClient { * @param id - id of the credential entity to delete * @param options - The options parameter */ - public async deleteDatasourceCredential( + public async deleteDataSourceCredential( id: string, options: OperationOptions = {} ): Promise { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/src/metricsAdvisorClient.ts b/sdk/metricsadvisor/ai-metrics-advisor/src/metricsAdvisorClient.ts index 0b61639d5df2..1e038aae8b55 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/src/metricsAdvisorClient.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/src/metricsAdvisorClient.ts @@ -51,7 +51,7 @@ export interface MetricsAdvisorClientOptions extends PipelineOptions {} */ export interface ListIncidentsForDetectionConfigurationOptions extends OperationOptions { /** Dimension Filter */ - dimensionFilter?: DimensionKey[]; // lifted + seriesGroupKeys?: DimensionKey[]; // lifted } /** @@ -66,7 +66,7 @@ export interface ListAnomaliesForDetectionConfigurationOptions extends Operation /** Number of items to skip */ skip?: number; /** Dimension Filter */ - dimensionFilter?: DimensionKey[]; + seriesGroupKeys?: DimensionKey[]; /** Severity Filter */ severityFilter?: SeverityFilterCondition; } @@ -93,7 +93,8 @@ export interface ListIncidentsForAlertOptions extends OperationOptions { export interface ListAnomalyDimensionValuesOptions extends OperationOptions { /** Number of items to skip */ skip?: number; - dimensionFilter?: DimensionKey; + /** Specify series group to filter results */ + seriesGroupKey?: DimensionKey; } /** @@ -106,7 +107,7 @@ export interface ListFeedbackOptions extends OperationOptions { * filter when listing feedbacks */ filter?: { - dimensionFilter?: DimensionKey; + dimensionKey?: DimensionKey; /** * filter feedbacks by type */ @@ -517,7 +518,57 @@ export class MetricsAdvisorClient { } } - private listAnomaliesForAlert( + /** + * Returns an async iterable iterator to list anamolies associated with an alert + * + * `.byPage()` returns an async iterable iterator to list the anomalies in pages. + * + * Example using `for await` syntax: + * + * ```js + * const client = new MetricsAdvisorClient(endpoint, + * new MetricsAdvisorKeyCredential(subscriptionKey, apiKey)); + * const anamolyList = client.listAnomaliesForAlert({alertConfigId, id: alertId}); + * let i = 1; + * for await (const anamoly of anamolyList){ + * console.log(`anamoly ${i++}:`); + * console.log(anamoly); + * } + * ``` + * + * Example using `iter.next()`: + * + * ```js + * let iter = client.listAnomaliesForAlert({alertConfigId, id: alertId}); + * let result = await iter.next(); + * while (!result.done) { + * console.log(` anamoly - ${result.value.metricId}, ${result.value.detectionConfigurationId} `); + * result = await iter.next(); + * } + * ``` + * + * Example using `byPage()`: + * + * ```js + * const pages = client.listAnomaliesForAlert({alertConfigId, id: alertId}).byPage({ maxPageSize: 10 }); + * let page = await pages.next(); + * let i = 1; + * while (!page.done) { + * if (page.value) { + * console.log(`-- page ${i++}`); + * for (const anomaly of page.value) { + * console.log(`${anomaly}`); + * } + * } + * page = await pages.next(); + * } + * + * ``` + * @param alert - Anomaly alert containing alertConfigId and id + * @param options - The options parameter. + */ + + public listAnomaliesForAlert( alert: AnomalyAlert, options: ListAnomaliesForAlertConfigurationOptions = {} ): PagedAsyncIterableIterator { @@ -661,7 +712,7 @@ export class MetricsAdvisorClient { * ```js * const client = new MetricsAdvisorClient(endpoint, * new MetricsAdvisorKeyCredential(subscriptionKey, apiKey)); - * const incidentList = client.listIncidents(anomalyAlert); + * const incidentList = client.listIncidentsForAlert(anomalyAlert); * let i = 1; * for await (const incident of incidentList){ * console.log(`incident ${i++}:`); @@ -672,7 +723,7 @@ export class MetricsAdvisorClient { * Example using `iter.next()`: * * ```js - * let iter = client.listIncidents(anomalyAlert); + * let iter = client.listIncidentsForAlert(anomalyAlert); * let result = await iter.next(); * while (!result.done) { * console.log(` incident - ${result.value.id}`); @@ -684,7 +735,7 @@ export class MetricsAdvisorClient { * Example using `byPage()`: * * ```js - * const pages = client.listIncidents(anomalyAlert).byPage({ maxPageSize: 10 }); + * const pages = client.listIncidentsForAlert(anomalyAlert).byPage({ maxPageSize: 10 }); * let page = await pages.next(); * let i = 1; * while (!page.done) { @@ -700,100 +751,7 @@ export class MetricsAdvisorClient { * @param alert - Anomaly alert containing alertConfigId and id * @param options - The options parameter. */ - public listIncidents( - alert: AnomalyAlert, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - options?: ListIncidentsForAlertOptions - ): PagedAsyncIterableIterator; - /** - * Returns an async iterable iterator to list incidents for an anomaly detection configuration. - * - * `.byPage()` returns an async iterable iterator to list the incidents in pages. - * - * Example using `for await` syntax: - * - * ```js - * const client = new MetricsAdvisorClient(endpoint, - * new MetricsAdvisorKeyCredential(subscriptionKey, apiKey)); - * const incidentList = client - * .listIncidents(detectionConfigId, startTime, endTime); - * let i = 1; - * for await (const incident of incidentList){ - * console.log(`incident ${i++}:`); - * console.log(incident); - * } - * ``` - * - * Example using `iter.next()`: - * - * ```js - * let iter = client.listIncidents(detectionConfigId, startTime, endTime); - * let result = await iter.next(); - * while (!result.done) { - * console.log(` incident - ${result.value.id}`); - * console.dir(result.value); - * result = await iter.next(); - * } - * ``` - * - * Example using `byPage()`: - * - * ```js - * const pages = client.listIncidents(detectionConfigId, startTime, endTime) - * .byPage({ maxPageSize: 10 }); - * let page = await pages.next(); - * let i = 1; - * while (!page.done) { - * if (page.value) { - * console.log(`-- page ${i++}`); - * for (const incident of page.value) { - * console.dir(incident); - * } - * } - * page = await pages.next(); - * } - * ``` - * @param detectionConfigId - Anomaly detection configuration id - * @param startTime - The start of time range to query for incidents - * @param endTime - The end of time range to query for incidents - * @param options - The options parameter. - */ - public listIncidents( - detectionConfigId: string, - startTime: Date | string, - endTime: Date | string, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - options?: ListIncidentsForDetectionConfigurationOptions - ): PagedAsyncIterableIterator; - - public listIncidents( - alertOrDetectionConfigId: AnomalyAlert | string, - optionsOrStartTime?: ListIncidentsForAlertOptions | Date | string, - endTime?: Date | string, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - options?: ListIncidentsForDetectionConfigurationOptions - ): PagedAsyncIterableIterator { - if (typeof alertOrDetectionConfigId === "string") { - if (!optionsOrStartTime || !endTime) { - throw new Error("Invalid startTime or endTime"); - } - return this.listIncidentsForDetectionConfiguration( - alertOrDetectionConfigId, - typeof optionsOrStartTime === "string" - ? new Date(optionsOrStartTime) - : (optionsOrStartTime as Date), - typeof endTime === "string" ? new Date(endTime) : endTime, - options || {} - ); - } else { - return this.listIncidentsForAlert( - alertOrDetectionConfigId as AnomalyAlert, - (optionsOrStartTime || {}) as ListIncidentsForAlertOptions - ); - } - } - - private listIncidentsForAlert( + public listIncidentsForAlert( alert: AnomalyAlert, options: ListIncidentsForAlertOptions = {} ): PagedAsyncIterableIterator { @@ -832,20 +790,20 @@ export class MetricsAdvisorClient { * @param detectionConfigId - Anomaly detection configuration id * @param startTime - The start of time range to query metric enriched series data * @param endTime - The end of time range to query metric enriched series data - * @param seriesToFilter - Series to retrieve their data + * @param seriesKey - Series to retrieve their data * @param options - The options parameter. */ public async getMetricEnrichedSeriesData( detectionConfigId: string, + seriesKey: DimensionKey[], startTime: Date | string, endTime: Date | string, - seriesToFilter: DimensionKey[], options: GetMetricEnrichedSeriesDataOptions = {} ): Promise { const optionsBody = { startTime: typeof startTime === "string" ? new Date(startTime) : startTime, endTime: typeof endTime === "string" ? new Date(endTime) : endTime, - series: seriesToFilter.map((s) => { + series: seriesKey.map((s) => { return { dimension: s }; }) }; @@ -856,7 +814,7 @@ export class MetricsAdvisorClient { ); const results = result.value.map((d) => { return { - series: d.series.dimension, + seriesKey: d.series.dimension, timestamps: d.timestampList, values: d.valueList, expectedValues: d.expectedValueList, @@ -889,9 +847,9 @@ export class MetricsAdvisorClient { startTime: startTime, endTime: endTime, filter: - options.dimensionFilter || options.severityFilter + options.seriesGroupKeys || options.severityFilter ? { - dimensionFilter: options.dimensionFilter?.map((d) => { + dimensionFilter: options.seriesGroupKeys?.map((d) => { return { dimension: d }; }), severityFilter: options.severityFilter @@ -985,102 +943,6 @@ export class MetricsAdvisorClient { } } - private listAnomaliesForDetectionConfiguration( - detectionConfigId: string, - startTime: Date, - endTime: Date, - options: ListAnomaliesForDetectionConfigurationOptions = {} - ): PagedAsyncIterableIterator { - const iter = this.listItemsOfAnomaliesForDetectionConfig( - detectionConfigId, - startTime, - endTime, - options - ); - return { - /** - * The next method, part of the iteration protocol - */ - next() { - return iter.next(); - }, - /** - * The connection to the async iterator, part of the iteration protocol - */ - [Symbol.asyncIterator]() { - return this; - }, - /** - * @returns An AsyncIterableIterator that works a page at a time - */ - byPage: (settings: PageSettings = {}) => { - return this.listSegmentsOfAnomaliesForDetectionConfig( - detectionConfigId, - startTime, - endTime, - settings.maxPageSize, - settings.continuationToken, - options - ); - } - }; - } - - /** - * Returns an async iterable iterator to list anamolies associated with an alert - * - * `.byPage()` returns an async iterable iterator to list the anomalies in pages. - * - * Example using `for await` syntax: - * - * ```js - * const client = new MetricsAdvisorClient(endpoint, - * new MetricsAdvisorKeyCredential(subscriptionKey, apiKey)); - * const anamolyList = client.listAnomalies({alertConfigId, id: alertId}); - * let i = 1; - * for await (const anamoly of anamolyList){ - * console.log(`anamoly ${i++}:`); - * console.log(anamoly); - * } - * ``` - * - * Example using `iter.next()`: - * - * ```js - * let iter = client.listAnomalies({alertConfigId, id: alertId}); - * let result = await iter.next(); - * while (!result.done) { - * console.log(` anamoly - ${result.value.metricId}, ${result.value.detectionConfigurationId} `); - * result = await iter.next(); - * } - * ``` - * - * Example using `byPage()`: - * - * ```js - * const pages = client.listAnomalies({alertConfigId, id: alertId}).byPage({ maxPageSize: 10 }); - * let page = await pages.next(); - * let i = 1; - * while (!page.done) { - * if (page.value) { - * console.log(`-- page ${i++}`); - * for (const anomaly of page.value) { - * console.log(`${anomaly}`); - * } - * } - * page = await pages.next(); - * } - * - * ``` - * @param alert - Anomaly alert containing alertConfigId and id - * @param options - The options parameter. - */ - public listAnomalies( - alert: AnomalyAlert, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - options?: ListAnomaliesForAlertConfigurationOptions - ): PagedAsyncIterableIterator; - /** * Returns an async iterable iterator to list anomalies for a detection configuration. * @@ -1091,7 +953,7 @@ export class MetricsAdvisorClient { * ```js * const client = new MetricsAdvisorClient(endpoint, * new MetricsAdvisorKeyCredential(subscriptionKey, apiKey)); - * const anomalies = client.listAnomalies(detectionConfigId, startTime, endTime); + * const anomalies = client.listAnomaliesForDetectionConfiguration(detectionConfigId, startTime, endTime); * let i = 1; * for await (const anomaly of anomalies) { * console.log(`anomaly ${i++}:`); @@ -1102,7 +964,7 @@ export class MetricsAdvisorClient { * Example using `iter.next()`: * * ```js - * let iter = client.listAnomalies(detectionConfigId, startTime, endTime); + * let iter = client.listAnomaliesForDetectionConfiguration(detectionConfigId, startTime, endTime); * let result = await iter.next(); * while (!result.done) { * console.log(` anomaly - ${result.value.severity} ${result.value.status}`); @@ -1114,7 +976,7 @@ export class MetricsAdvisorClient { * Example using `byPage()`: * * ```js - * const pages = client.listAnomalies(detectionConfigId, startTime, endTime) + * const pages = client.listAnomaliesForDetectionConfiguration(detectionConfigId, startTime, endTime) * .byPage({ maxPageSize: 10 }); * let page = await pages.next(); * let i = 1; @@ -1134,38 +996,47 @@ export class MetricsAdvisorClient { * @param endTime - The end of time range to query anomalies * @param options - The options parameter. */ - public listAnomalies( + public listAnomaliesForDetectionConfiguration( detectionConfigId: string, startTime: Date | string, endTime: Date | string, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - options?: ListAnomaliesForDetectionConfigurationOptions - ): PagedAsyncIterableIterator; - public listAnomalies( - alertOrDetectionConfigId: AnomalyAlert | string, - optionsOrStartTime?: ListAnomaliesForAlertConfigurationOptions | Date | string, - endTime?: Date | string, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - options?: ListAnomaliesForDetectionConfigurationOptions + options: ListAnomaliesForDetectionConfigurationOptions = {} ): PagedAsyncIterableIterator { - if (typeof alertOrDetectionConfigId === "string") { - if (!optionsOrStartTime || !endTime) { - throw new Error("Invalid startTime or endTime"); + const start: Date = typeof startTime === "string" ? new Date(startTime) : startTime; + const end: Date = typeof endTime === "string" ? new Date(endTime) : endTime; + const iter = this.listItemsOfAnomaliesForDetectionConfig( + detectionConfigId, + start, + end, + options + ); + return { + /** + * The next method, part of the iteration protocol + */ + next() { + return iter.next(); + }, + /** + * The connection to the async iterator, part of the iteration protocol + */ + [Symbol.asyncIterator]() { + return this; + }, + /** + * @returns An AsyncIterableIterator that works a page at a time + */ + byPage: (settings: PageSettings = {}) => { + return this.listSegmentsOfAnomaliesForDetectionConfig( + detectionConfigId, + start, + end, + settings.maxPageSize, + settings.continuationToken, + options + ); } - return this.listAnomaliesForDetectionConfiguration( - alertOrDetectionConfigId, - typeof optionsOrStartTime === "string" - ? new Date(optionsOrStartTime) - : (optionsOrStartTime as Date), - typeof endTime === "string" ? new Date(endTime) : endTime, - options || {} - ); - } else { - return this.listAnomaliesForAlert( - alertOrDetectionConfigId, - (optionsOrStartTime as ListAnomaliesForAlertConfigurationOptions) || {} - ); - } + }; } // ## list segments of dimension values of anomalies detected by a detection configuration @@ -1181,7 +1052,7 @@ export class MetricsAdvisorClient { let segmentResponse; const optionsBody = { ...options, - dimensionFilter: options.dimensionFilter ? { dimension: options.dimensionFilter } : undefined, + dimensionFilter: options.seriesGroupKey ? { dimension: options.seriesGroupKey } : undefined, startTime, endTime, dimensionName @@ -1367,7 +1238,7 @@ export class MetricsAdvisorClient { startTime: startTime, endTime: endTime, filter: { - dimensionFilter: options.dimensionFilter?.map((d) => { + dimensionFilter: options.seriesGroupKeys?.map((d) => { return { dimension: d }; }) } @@ -1461,16 +1332,71 @@ export class MetricsAdvisorClient { } } - private listIncidentsForDetectionConfiguration( + /** + * Returns an async iterable iterator to list incidents for an anomaly detection configuration. + * + * `.byPage()` returns an async iterable iterator to list the incidents in pages. + * + * Example using `for await` syntax: + * + * ```js + * const client = new MetricsAdvisorClient(endpoint, + * new MetricsAdvisorKeyCredential(subscriptionKey, apiKey)); + * const incidentList = client + * .listIncidentsForDetectionConfiguration(detectionConfigId, startTime, endTime); + * let i = 1; + * for await (const incident of incidentList){ + * console.log(`incident ${i++}:`); + * console.log(incident); + * } + * ``` + * + * Example using `iter.next()`: + * + * ```js + * let iter = client.listIncidentsForDetectionConfiguration(detectionConfigId, startTime, endTime); + * let result = await iter.next(); + * while (!result.done) { + * console.log(` incident - ${result.value.id}`); + * console.dir(result.value); + * result = await iter.next(); + * } + * ``` + * + * Example using `byPage()`: + * + * ```js + * const pages = client.listIncidentsForDetectionConfiguration(detectionConfigId, startTime, endTime) + * .byPage({ maxPageSize: 10 }); + * let page = await pages.next(); + * let i = 1; + * while (!page.done) { + * if (page.value) { + * console.log(`-- page ${i++}`); + * for (const incident of page.value) { + * console.dir(incident); + * } + * } + * page = await pages.next(); + * } + * ``` + * @param detectionConfigId - Anomaly detection configuration id + * @param startTime - The start of time range to query for incidents + * @param endTime - The end of time range to query for incidents + * @param options - The options parameter. + */ + public listIncidentsForDetectionConfiguration( detectionConfigId: string, - startTime: Date, - endTime: Date, + startTime: Date | string, + endTime: Date | string, options: ListIncidentsForDetectionConfigurationOptions = {} ): PagedAsyncIterableIterator { + const start: Date = typeof startTime === "string" ? new Date(startTime) : startTime; + const end: Date = typeof endTime === "string" ? new Date(endTime) : endTime; const iter = this.listItemsOfIncidentsForDetectionConfig( detectionConfigId, - startTime, - endTime, + start, + end, options ); return { @@ -1492,8 +1418,8 @@ export class MetricsAdvisorClient { byPage: (settings: PageSettings = {}) => { return this.listSegmentsOfIncidentsForDetectionConfig( detectionConfigId, - startTime, - endTime, + start, + end, settings.continuationToken, settings.maxPageSize, options @@ -1556,12 +1482,12 @@ export class MetricsAdvisorClient { * @param options - The options parameter * @returns Response with Feedback object */ - public async createFeedback( + public async addFeedback( feedback: MetricFeedbackUnion, options: OperationOptions = {} ): Promise { const { span, updatedOptions: finalOptions } = createSpan( - "MetricsAdvisorAdministrationClient-createFeedback", + "MetricsAdvisorClient-addFeedback", options ); @@ -1596,7 +1522,7 @@ export class MetricsAdvisorClient { options: OperationOptions = {} ): Promise { const { span, updatedOptions: finalOptions } = createSpan( - "MetricsAdvisorAdministrationClient-getFeedback", + "MetricsAdvisorClient-getFeedback", options ); @@ -1635,8 +1561,8 @@ export class MetricsAdvisorClient { : options.filter?.endTime; const optionsBody = { metricId, - dimensionFilter: options.filter?.dimensionFilter - ? { dimension: options.filter?.dimensionFilter } + dimensionFilter: options.filter?.dimensionKey + ? { dimension: options.filter?.dimensionKey } : undefined, feedbackType: options.filter?.feedbackType, startTime, @@ -1790,26 +1716,26 @@ export class MetricsAdvisorClient { * @param metricId - Metric id * @param startTime - The start of the time range to retrieve series data * @param endTime - The end of the time range to retrieve series data - * @param seriesToFilter - A list of time series to retrieve their data + * @param seriesKey - A list of time series to retrieve their data * @param options - The options parameter */ public async getMetricSeriesData( metricId: string, + seriesKey: DimensionKey[], startTime: Date | string, endTime: Date | string, - seriesToFilter: DimensionKey[], options: GetMetricSeriesDataOptions = {} ): Promise { const optionsBody = { startTime: typeof startTime === "string" ? new Date(startTime) : startTime, endTime: typeof endTime === "string" ? new Date(endTime) : endTime, - series: seriesToFilter + series: seriesKey }; const result = await this.client.getMetricData(metricId, optionsBody, options); const resultArray = result.value?.map((s) => { return { - definition: { metricId: s.id!.metricId!, dimension: s.id!.dimension! }, + definition: { metricId: s.id!.metricId!, seriesKey: s.id!.dimension! }, timestamps: s.timestampList, values: s.valueList }; @@ -1842,7 +1768,7 @@ export class MetricsAdvisorClient { const definitions = segmentResponse.value?.map((d) => { return { metricId: d.metricId!, - dimension: d.dimension! + seriesKey: d.dimension! }; }); const resultArray = Object.defineProperty(definitions || [], "continuationToken", { @@ -1868,7 +1794,7 @@ export class MetricsAdvisorClient { const definitions = segmentResponse.value?.map((d) => { return { metricId: d.metricId!, - dimension: d.dimension! + seriesKey: d.dimension! }; }); const resultArray = Object.defineProperty(definitions || [], "continuationToken", { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/src/models.ts b/sdk/metricsadvisor/ai-metrics-advisor/src/models.ts index 9eb2eaf167a5..354ce2b6679b 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/src/models.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/src/models.ts @@ -122,9 +122,9 @@ export interface DataFeedIngestionSettings { } /** - * Defines values for DataFeedRollupMethod. + * Defines values for DataFeedAutoRollupMethod. */ -export type DataFeedRollupMethod = "None" | "Sum" | "Max" | "Min" | "Avg" | "Count"; +export type DataFeedAutoRollupMethod = "None" | "Sum" | "Max" | "Min" | "Avg" | "Count"; /** * Specifies the rollup settings for a data feed. @@ -149,7 +149,7 @@ export type DataFeedRollupSettings = /** * roll up method */ - rollupMethod?: DataFeedRollupMethod; + rollupMethod?: DataFeedAutoRollupMethod; /** * the identification value for the row of calculated all-up value. */ @@ -181,14 +181,7 @@ export type DataFeedAccessMode = "Private" | "Public"; */ export type DataFeedGranularity = | { - granularityType: - | "Yearly" - | "Monthly" - | "Weekly" - | "Daily" - | "Hourly" - | "PerMinute" - | "PerSecond"; + granularityType: "Yearly" | "Monthly" | "Weekly" | "Daily" | "Hourly" | "PerMinute"; } | { granularityType: "Custom"; @@ -201,7 +194,7 @@ export type DataFeedStatus = "Paused" | "Active"; /** * Represents a Metrics Advisor data feed. */ -export type DataFeed = { +export type MetricsAdvisorDataFeed = { /** * Unique id of the data feed. */ @@ -337,7 +330,7 @@ export type AzureCosmosDbDataFeedSource = { export interface AzureDataExplorerAuthServicePrincipal { /** Authentication Type */ authenticationType: "ServicePrincipal"; - /** datasource credential id */ + /** dataSource credential id */ credentialId: string; } @@ -347,7 +340,7 @@ export interface AzureDataExplorerAuthServicePrincipal { export interface AzureDataExplorerAuthServicePrincipalInKeyVault { /** Authentication Type */ authenticationType: "ServicePrincipalInKV"; - /** datasource credential id */ + /** dataSource credential id */ credentialId: string; } @@ -646,7 +639,7 @@ export interface SqlServerAuthManagedIdentity { export interface SqlServerAuthConnectionString { /** Azure SQL Connection String Authentication */ authenticationType: "AzureSQLConnectionString"; - /** Datasource Credential Id for Sql Server datafeed authentication */ + /** DataSource Credential Id for Sql Server datafeed authentication */ credentialId: string; } @@ -656,7 +649,7 @@ export interface SqlServerAuthConnectionString { export interface SqlServerAuthServicePrincipalInKeyVault { /** Service Principal in Keyvault Authentication */ authenticationType: "ServicePrincipalInKV"; - /** Datasource Credential Id for Sql Server datafeed authentication */ + /** DataSource Credential Id for Sql Server datafeed authentication */ credentialId: string; /** Connection string for Sql Server datafeed authentication */ connectionString: string; @@ -668,7 +661,7 @@ export interface SqlServerAuthServicePrincipalInKeyVault { export interface SqlServerAuthServicePrincipal { /** Service Principal Authentication */ authenticationType: "ServicePrincipal"; - /** Datasource Credential Id for Sql Server datafeed authentication */ + /** DataSource Credential Id for Sql Server datafeed authentication */ credentialId: string; /** Connection string for Sql Server datafeed authentication */ connectionString: string; @@ -785,7 +778,7 @@ export type DataFeedPatch = { * When changing to a different data source type, both dataSourceType and dataSourceParameter are required. */ export type DataFeedSourcePatch = Partial & { - /** datasource type for patch */ + /** dataSource type for patch */ dataSourceType: DataFeedSource["dataSourceType"]; }; @@ -797,7 +790,7 @@ export type MetricAnomalyAlertConfigurationsOperator = "AND" | "OR" | "XOR"; /** * The logical operator to apply across anomaly detection conditions. */ -export type DetectionConditionsOperator = "AND" | "OR"; +export type DetectionConditionOperator = "AND" | "OR"; /** * Represents properties common to anomaly detection conditions. @@ -806,7 +799,7 @@ export interface DetectionConditionsCommon { /** * Condition operator */ - conditionOperator?: DetectionConditionsOperator; + conditionOperator?: DetectionConditionOperator; /** * Specifies the condition for Smart Detection */ @@ -828,7 +821,7 @@ export interface DetectionConditionsCommonPatch { /** * Condition operator */ - conditionOperator?: DetectionConditionsOperator; + conditionOperator?: DetectionConditionOperator; /** * Specifies the condition for Smart Detection */ @@ -868,7 +861,7 @@ export type MetricSeriesGroupDetectionCondition = DetectionConditionsCommon & { /** * identifies the group of time series */ - group: DimensionKey; + groupKey: DimensionKey; }; /** @@ -878,7 +871,7 @@ export type MetricSingleSeriesDetectionCondition = DetectionConditionsCommon & { /** * identifies the time series */ - series: DimensionKey; + seriesKey: DimensionKey; }; /** @@ -1344,7 +1337,7 @@ export type MetricAnomalyAlertScope = /** * dimension scope */ - dimensionAnomalyScope: DimensionKey; + seriesGroupInScope: DimensionKey; } | { scopeType: "TopN"; @@ -1355,7 +1348,7 @@ export type MetricAnomalyAlertScope = }; /** - * Defines the + * Defines the Boundary Conditions for the Metric */ export type MetricBoundaryCondition = | { @@ -1435,6 +1428,10 @@ export type MetricBoundaryCondition = type?: "Value" | "Mean"; }; +/** + * Defines conditions to decide whether the detected anomalies should be + * included in an alert or not. + */ export interface MetricAnomalyAlertConditions { /** * severity condition to trigger alert @@ -1446,6 +1443,10 @@ export interface MetricAnomalyAlertConditions { metricBoundaryCondition?: MetricBoundaryCondition; } +/** + * Defines alerting settings for anomalies detected by a detection + * configuration. + */ export interface MetricAlertConfiguration { /** * Anomaly detection configuration unique id @@ -1503,7 +1504,7 @@ export interface AnomalyAlertConfiguration { /** * dimensions used to split alert */ - splitAlertByDimensions?: string[]; + dimensionsToSplitAlert?: string[]; } /** @@ -1599,7 +1600,7 @@ export interface MetricSeriesDefinition { /** * identifies a time series */ - dimension: Record; + seriesKey: Record; } /** @@ -1627,7 +1628,7 @@ export interface MetricEnrichedSeriesData { /** * identifies the time series. */ - series: DimensionKey; + seriesKey: DimensionKey; /** * timestamp list */ @@ -1663,7 +1664,7 @@ export interface MetricEnrichedSeriesData { /** * Contains response data for the getDataFeed operation. */ -export type GetDataFeedResponse = DataFeed & { +export type GetDataFeedResponse = MetricsAdvisorDataFeed & { /** * The underlying HTTP response. */ @@ -1683,7 +1684,7 @@ export type GetDataFeedResponse = DataFeed & { /** * Contains response data for the getAnomalyDetectionConfiguration operation. */ -export type GetAnomalyDetectionConfigurationResponse = AnomalyDetectionConfiguration & { +export type GetDetectionConfigResponse = AnomalyDetectionConfiguration & { /** * The underlying HTTP response. */ @@ -1703,7 +1704,7 @@ export type GetAnomalyDetectionConfigurationResponse = AnomalyDetectionConfigura /** * Contains response data for the getAnomalyAlertConfiguration operation. */ -export type GetAnomalyAlertConfigurationResponse = AnomalyAlertConfiguration & { +export type GetAlertConfigResponse = AnomalyAlertConfiguration & { /** * The underlying HTTP response. */ @@ -1743,7 +1744,7 @@ export type GetHookResponse = NotificationHookUnion & { /** * Contains response data for the getCredentialEntity operation. */ -export type GetCredentialEntityResponse = DatasourceCredentialUnion & { +export type GetDataSourceCredentialEntityResponse = DataSourceCredentialEntityUnion & { /** * The underlying HTTP response. */ @@ -1941,6 +1942,9 @@ export interface MetricSeriesPageResponse extends Array }; } +/** + * Represents Enrichment Status + */ export interface EnrichmentStatus { /** * data slice timestamp. @@ -1983,7 +1987,7 @@ export interface MetricEnrichmentStatusPageResponse extends Array { +export interface DataFeedsPageResponse extends Array { /** * Continuation token to pass to `byPage()` to resume listing of more results if available. */ @@ -2187,7 +2191,7 @@ export type GetIngestionProgressResponse = { /** * Data Source Credential */ -export interface DatasourceCredential { +export interface DataSourceCredentialEntity { /** * Unique id of data source credential * NOTE: This property will not be serialized. It can only be populated by the server. @@ -2202,49 +2206,49 @@ export interface DatasourceCredential { /** * SqlServer Data Source Credential */ -export interface SqlServerConnectionStringDatasourceCredential extends DatasourceCredential { +export interface DataSourceSqlConnectionString extends DataSourceCredentialEntity { /** Azure Sql Connection String credential */ type: "AzureSQLConnectionString"; /** The connection string for SqlServer Data Source Credential */ - connectionString: string; + connectionString?: string; } /** - * DataLake Gen2 Shared Key Datasource Credential + * DataLake Gen2 Shared Key DataSource Credential */ -export interface DataLakeGen2SharedKeyDatasourceCredential extends DatasourceCredential { - /** DataLakeGen2 Shared Key Datasource credential */ +export interface DataSourceDataLakeGen2SharedKey extends DataSourceCredentialEntity { + /** DataLakeGen2 Shared Key DataSource credential */ type: "DataLakeGen2SharedKey"; - /** The account key of the DataLake Gen2 Shared Key Datasource Credential */ - accountKey: string; + /** The account key of the DataLake Gen2 Shared Key DataSource Credential */ + accountKey?: string; } /** - * Service Principal Datasource Credential + * Service Principal DataSource Credential */ -export interface ServicePrincipalDatasourceCredential extends DatasourceCredential { - /** Service Principal Datasource Credential */ +export interface DataSourceServicePrincipal extends DataSourceCredentialEntity { + /** Service Principal DataSource Credential */ type: "ServicePrincipal"; /** The client id of the service principal. */ clientId: string; /** The client secret of the service principal. */ - clientSecret: string; + clientSecret?: string; /** The tenant id of the service principal. */ tenantId: string; } /** - * Service Principal in KeyVault Datasource Credential + * Service Principal in KeyVault DataSource Credential */ -export interface ServicePrincipalInKeyVaultDatasourceCredential extends DatasourceCredential { - /** Service Principal in KeyVault Datasource Credential */ +export interface DataSourceServicePrincipalInKeyVault extends DataSourceCredentialEntity { + /** Service Principal in KeyVault DataSource Credential */ type: "ServicePrincipalInKV"; /** The Key Vault endpoint that storing the service principal. */ keyVaultEndpoint: string; /** The Client Id to access the Key Vault. */ keyVaultClientId: string; /** The Client Secret to access the Key Vault. */ - keyVaultClientSecret: string; + keyVaultClientSecret?: string; /** The secret name of the service principal's client Id in the Key Vault. */ servicePrincipalIdNameInKV: string; /** The secret name of the service principal's client secret in the Key Vault. */ @@ -2253,16 +2257,19 @@ export interface ServicePrincipalInKeyVaultDatasourceCredential extends Datasour tenantId: string; } -export type DatasourceCredentialUnion = - | SqlServerConnectionStringDatasourceCredential - | DataLakeGen2SharedKeyDatasourceCredential - | ServicePrincipalDatasourceCredential - | ServicePrincipalInKeyVaultDatasourceCredential; +/** + * Data Source Credential Entity Union Type + */ +export type DataSourceCredentialEntityUnion = + | DataSourceSqlConnectionString + | DataSourceDataLakeGen2SharedKey + | DataSourceServicePrincipal + | DataSourceServicePrincipalInKeyVault; /** * SqlServer Data Source Credential Patch */ -export interface SqlServerConnectionStringDatasourceCredentialPatch { +export interface DataSourceSqlServerConnectionStringPatch { /** Azure Sql Connection String credential */ type: "AzureSQLConnectionString"; /** Name of data source credential */ @@ -2274,24 +2281,24 @@ export interface SqlServerConnectionStringDatasourceCredentialPatch { } /** - * DataLake Gen2 Shared Key Datasource Credential Patch + * DataLake Gen2 Shared Key DataSource Credential Patch */ -export interface DataLakeGen2SharedKeyDatasourceCredentialPatch { - /** DataLakeGen2 Shared Key Datasource credential */ +export interface DataSourceDataLakeGen2SharedKeyPatch { + /** DataLakeGen2 Shared Key DataSource credential */ type: "DataLakeGen2SharedKey"; /** Name of data source credential */ name?: string; /** Description of data source credential */ description?: string; - /** The account key of the DataLake Gen2 Shared Key Datasource Credential */ + /** The account key of the DataLake Gen2 Shared Key DataSource Credential */ accountKey?: string; } /** - * Service Principal Datasource Credential Patch + * Service Principal DataSource Credential Patch */ -export interface ServicePrincipalDatasourceCredentialPatch { - /** Service Principal Datasource Credential */ +export interface DataSourceServicePrincipalPatch { + /** Service Principal DataSource Credential */ type: "ServicePrincipal"; /** Name of data source credential */ name?: string; @@ -2306,10 +2313,10 @@ export interface ServicePrincipalDatasourceCredentialPatch { } /** - * Service Principal in KeyVault Datasource Credential Patch + * Service Principal in KeyVault DataSource Credential Patch */ -export interface ServicePrincipalInKeyVaultDatasourceCredentialPatch { - /** Service Principal in KeyVault Datasource Credential */ +export interface DataSourceServicePrincipalInKeyVaultPatch { + /** Service Principal in KeyVault DataSource Credential */ type: "ServicePrincipalInKV"; /** Name of data source credential */ name?: string; @@ -2330,18 +2337,18 @@ export interface ServicePrincipalInKeyVaultDatasourceCredentialPatch { } /** - * Datasource credential patch types + * DataSource credential patch types */ -export type DatasourceCredentialPatch = - | SqlServerConnectionStringDatasourceCredentialPatch - | DataLakeGen2SharedKeyDatasourceCredentialPatch - | ServicePrincipalDatasourceCredentialPatch - | ServicePrincipalInKeyVaultDatasourceCredentialPatch; +export type DataSourceCredentialPatch = + | DataSourceSqlServerConnectionStringPatch + | DataSourceDataLakeGen2SharedKeyPatch + | DataSourceServicePrincipalPatch + | DataSourceServicePrincipalInKeyVaultPatch; /** * Contains response data for the listCredentials operation. */ -export interface CredentialsPageResponse extends Array { +export interface CredentialsPageResponse extends Array { /** * Continuation token to pass to `byPage()` to resume listing of more results if available. */ diff --git a/sdk/metricsadvisor/ai-metrics-advisor/src/transforms.ts b/sdk/metricsadvisor/ai-metrics-advisor/src/transforms.ts index d97dbd68cd05..6119119d5e3e 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/src/transforms.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/src/transforms.ts @@ -57,7 +57,7 @@ import { MetricChangePointFeedback, MetricCommentFeedback, MetricPeriodFeedback, - DataFeed, + MetricsAdvisorDataFeed, AzureBlobDataFeedSource, AzureDataExplorerDataFeedSource, NotificationHookUnion, @@ -70,20 +70,20 @@ import { HardThresholdConditionUnion, ChangeThresholdConditionUnion, DataFeedGranularity, - DatasourceCredentialPatch, + DataSourceCredentialPatch, AzureDataExplorerAuthTypes, AzureDataLakeStorageGen2AuthTypes, AzureDataLakeStorageGen2DataFeedSource, SqlServerAuthTypes, AnomalyDetectionConfigurationPatch, - DatasourceCredentialUnion, - DatasourceCredential, + DataSourceCredentialEntityUnion, + DataSourceCredentialEntity, DataFeedSource, DataFeedSourcePatch, - SqlServerConnectionStringDatasourceCredentialPatch, - DataLakeGen2SharedKeyDatasourceCredentialPatch, - ServicePrincipalDatasourceCredentialPatch, - ServicePrincipalInKeyVaultDatasourceCredentialPatch + DataSourceSqlServerConnectionStringPatch, + DataSourceDataLakeGen2SharedKeyPatch, + DataSourceServicePrincipalPatch, + DataSourceServicePrincipalInKeyVaultPatch } from "./models"; // transform the protocol layer (codegen) service models into convenience layer models @@ -106,7 +106,7 @@ export function fromServiceAnomalyDetectionConfiguration( changeThresholdCondition } = c; return { - group: group.dimension, + groupKey: group.dimension, conditionOperator, smartDetectionCondition, hardThresholdCondition: hardThresholdCondition as HardThresholdConditionUnion, @@ -122,7 +122,7 @@ export function fromServiceAnomalyDetectionConfiguration( changeThresholdCondition } = c; return { - series: series.dimension, + seriesKey: series.dimension, conditionOperator, smartDetectionCondition, hardThresholdCondition: hardThresholdCondition as HardThresholdConditionUnion, @@ -142,14 +142,14 @@ export function toServiceAnomalyDetectionConfiguration( wholeMetricConfiguration: from.wholeSeriesDetectionCondition, dimensionGroupOverrideConfigurations: from.seriesGroupDetectionConditions?.map((c) => { const { - group, + groupKey, conditionOperator, smartDetectionCondition, hardThresholdCondition, changeThresholdCondition } = c; return { - group: { dimension: group }, + group: { dimension: groupKey }, conditionOperator, smartDetectionCondition, hardThresholdCondition, @@ -158,14 +158,14 @@ export function toServiceAnomalyDetectionConfiguration( }), seriesOverrideConfigurations: from.seriesDetectionConditions?.map((c) => { const { - series, + seriesKey, conditionOperator, smartDetectionCondition, hardThresholdCondition, changeThresholdCondition } = c; return { - series: { dimension: series }, + series: { dimension: seriesKey }, conditionOperator, smartDetectionCondition, hardThresholdCondition, @@ -184,14 +184,14 @@ export function toServiceAnomalyDetectionConfigurationPatch( wholeMetricConfiguration: from.wholeSeriesDetectionCondition, dimensionGroupOverrideConfigurations: from.seriesGroupDetectionConditions?.map((c) => { const { - group, + groupKey, conditionOperator, smartDetectionCondition, hardThresholdCondition, changeThresholdCondition } = c; return { - group: { dimension: group }, + group: { dimension: groupKey }, conditionOperator, smartDetectionCondition, hardThresholdCondition, @@ -200,14 +200,14 @@ export function toServiceAnomalyDetectionConfigurationPatch( }), seriesOverrideConfigurations: from.seriesDetectionConditions?.map((c) => { const { - series, + seriesKey, conditionOperator, smartDetectionCondition, hardThresholdCondition, changeThresholdCondition } = c; return { - series: { dimension: series }, + series: { dimension: seriesKey }, conditionOperator, smartDetectionCondition, hardThresholdCondition, @@ -341,8 +341,6 @@ function fromServiceGranularity(original: ServiceGranularity, value?: number): D switch (original) { case "Minutely": return { granularityType: "PerMinute" }; - case "Secondly": - return { granularityType: "PerSecond" }; case "Custom": return { granularityType: "Custom", customGranularityValue: value! }; default: @@ -361,8 +359,6 @@ export function toServiceGranularity( return { granularityName: "Custom", granularityAmount: model.customGranularityValue }; case "PerMinute": return { granularityName: "Minutely" }; - case "PerSecond": - return { granularityName: "Secondly" }; default: return { granularityName: model.granularityType }; } @@ -889,7 +885,9 @@ export function toServiceDataFeedSourcePatch( } } -export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUnion): DataFeed { +export function fromServiceDataFeedDetailUnion( + original: ServiceDataFeedDetailUnion +): MetricsAdvisorDataFeed { const metricMap: Record = {}; for (const metric of original.metrics) { metricMap[metric.name] = metric.id!; @@ -935,7 +933,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn switch (original.dataSourceType) { case "AzureApplicationInsights": { const orig = original as ServiceAzureApplicationInsightsDataFeed; - const result1: DataFeed = { + const result1: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "AzureApplicationInsights", @@ -968,7 +966,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn container: orig2.dataSourceParameter.container, ...auth }; - const result2: DataFeed = { + const result2: MetricsAdvisorDataFeed = { ...common, source }; @@ -976,7 +974,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn } case "AzureCosmosDB": { const orig3 = original as ServiceAzureCosmosDBDataFeed; - const result3: DataFeed = { + const result3: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "AzureCosmosDB", @@ -1013,7 +1011,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn query: orig4.dataSourceParameter.query, ...auth }; - const result4: DataFeed = { + const result4: MetricsAdvisorDataFeed = { ...common, source }; @@ -1046,7 +1044,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn fileTemplate: orig5.dataSourceParameter.fileTemplate, ...auth }; - const result5: DataFeed = { + const result5: MetricsAdvisorDataFeed = { ...common, source }; @@ -1054,7 +1052,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn } case "AzureTable": { const orig6 = original as ServiceAzureTableDataFeed; - const result6: DataFeed = { + const result6: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "AzureTable", @@ -1068,7 +1066,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn } case "InfluxDB": { const orig8 = original as ServiceInfluxDBDataFeed; - const result8: DataFeed = { + const result8: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "InfluxDB", @@ -1084,7 +1082,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn } case "MongoDB": { const orig9 = original as ServiceMongoDBDataFeed; - const result9: DataFeed = { + const result9: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "MongoDB", @@ -1098,7 +1096,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn } case "MySql": { const orig10 = original as ServiceMySqlDataFeed; - const result10: DataFeed = { + const result10: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "MySql", @@ -1111,7 +1109,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn } case "PostgreSql": { const orig11 = original as ServicePostgreSqlDataFeed; - const result11: DataFeed = { + const result11: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "PostgreSql", @@ -1156,7 +1154,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn } else { throw new Error(`Unexpected authentication type: '${original.authenticationType}'`); } - const result12: DataFeed = { + const result12: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "SqlServer", @@ -1168,7 +1166,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn } case "AzureEventHubs": { const orig13 = original as ServiceAzureEventHubsDataFeed; - const result13: DataFeed = { + const result13: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "AzureEventHubs", @@ -1181,7 +1179,7 @@ export function fromServiceDataFeedDetailUnion(original: ServiceDataFeedDetailUn } case "AzureLogAnalytics": { const orig14 = original as ServiceAzureLogAnalyticsDataFeed; - const result14: DataFeed = { + const result14: MetricsAdvisorDataFeed = { ...common, source: { dataSourceType: "AzureLogAnalytics", @@ -1305,7 +1303,7 @@ export function fromServiceAlertConfiguration( c.anomalyScopeType === "All" ? { scopeType: "All" } : c.anomalyScopeType === "Dimension" - ? { scopeType: "Dimension", dimensionAnomalyScope: c.dimensionAnomalyScope!.dimension } + ? { scopeType: "Dimension", seriesGroupInScope: c.dimensionAnomalyScope!.dimension } : { scopeType: "TopN", topNAnomalyScope: c.topNAnomalyScope! }; return { detectionConfigurationId: c.anomalyDetectionConfigurationId, @@ -1318,7 +1316,7 @@ export function fromServiceAlertConfiguration( } }; }), - splitAlertByDimensions: result.splitAlertByDimensions + dimensionsToSplitAlert: result.splitAlertByDimensions }; } @@ -1337,7 +1335,7 @@ export function toServiceAlertConfiguration( : c.alertScope.scopeType === "Dimension" ? { anomalyScopeType: "Dimension", - dimensionAnomalyScope: { dimension: c.alertScope.dimensionAnomalyScope } + dimensionAnomalyScope: { dimension: c.alertScope.seriesGroupInScope } } : { anomalyScopeType: "TopN", topNAnomalyScope: c.alertScope.topNAnomalyScope }; return { @@ -1351,7 +1349,7 @@ export function toServiceAlertConfiguration( valueFilter: c.alertConditions?.metricBoundaryCondition }; }), - splitAlertByDimensions: from.splitAlertByDimensions + splitAlertByDimensions: from.dimensionsToSplitAlert }; } @@ -1370,7 +1368,7 @@ export function toServiceAlertConfigurationPatch( : c.alertScope.scopeType === "Dimension" ? { anomalyScopeType: "Dimension", - dimensionAnomalyScope: { dimension: c.alertScope.dimensionAnomalyScope } + dimensionAnomalyScope: { dimension: c.alertScope.seriesGroupInScope } } : { anomalyScopeType: "TopN", topNAnomalyScope: c.alertScope.topNAnomalyScope }; return { @@ -1384,14 +1382,14 @@ export function toServiceAlertConfigurationPatch( valueFilter: c.alertConditions?.metricBoundaryCondition }; }), - splitAlertByDimensions: from.splitAlertByDimensions + splitAlertByDimensions: from.dimensionsToSplitAlert }; } export function fromServiceCredential( result: ServiceDataSourceCredentialUnion -): DatasourceCredentialUnion { - const common: DatasourceCredential = { +): DataSourceCredentialEntityUnion { + const common: DataSourceCredentialEntity = { description: result.dataSourceCredentialDescription, id: result.dataSourceCredentialId, name: result.dataSourceCredentialName @@ -1433,7 +1431,7 @@ export function fromServiceCredential( } export function toServiceCredential( - from: DatasourceCredentialUnion + from: DataSourceCredentialEntityUnion ): ServiceDataSourceCredentialUnion { const common = { dataSourceCredentialName: from.name, @@ -1492,7 +1490,7 @@ export function toServiceCredential( } export function toServiceCredentialPatch( - from: DatasourceCredentialPatch + from: DataSourceCredentialPatch ): ServiceDataSourceCredentialPatch { const common = { dataSourceCredentialName: from.name, @@ -1500,7 +1498,7 @@ export function toServiceCredentialPatch( }; switch (from.type) { case "AzureSQLConnectionString": { - const cred1 = from as SqlServerConnectionStringDatasourceCredentialPatch; + const cred1 = from as DataSourceSqlServerConnectionStringPatch; return { ...common, dataSourceCredentialType: from.type, @@ -1510,7 +1508,7 @@ export function toServiceCredentialPatch( }; } case "DataLakeGen2SharedKey": { - const cred2 = from as DataLakeGen2SharedKeyDatasourceCredentialPatch; + const cred2 = from as DataSourceDataLakeGen2SharedKeyPatch; return { ...common, dataSourceCredentialType: from.type, @@ -1520,7 +1518,7 @@ export function toServiceCredentialPatch( }; } case "ServicePrincipal": { - const cred3 = from as ServicePrincipalDatasourceCredentialPatch; + const cred3 = from as DataSourceServicePrincipalPatch; return { ...common, dataSourceCredentialType: from.type, @@ -1532,7 +1530,7 @@ export function toServiceCredentialPatch( }; } case "ServicePrincipalInKV": { - const cred4 = from as ServicePrincipalInKeyVaultDatasourceCredentialPatch; + const cred4 = from as DataSourceServicePrincipalInKeyVaultPatch; return { ...common, dataSourceCredentialType: from.type, diff --git a/sdk/metricsadvisor/ai-metrics-advisor/swagger/README.md b/sdk/metricsadvisor/ai-metrics-advisor/swagger/README.md index 2cf37ff3b2d0..e03bab257f7e 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/swagger/README.md +++ b/sdk/metricsadvisor/ai-metrics-advisor/swagger/README.md @@ -14,7 +14,7 @@ license-header: MICROSOFT_MIT_NO_VERSION output-folder: ../ source-code-folder-path: ./src/generated # openapi v2 in PR -input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/7efe0ae6a89c93a915c85af1e2f871501adac0c9/specification/cognitiveservices/data-plane/MetricsAdvisor/preview/v1.0/MetricsAdvisor.json +input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/08f5e391f2153a99580b458cc71ef88e45dd0531/specification/cognitiveservices/data-plane/MetricsAdvisor/preview/v1.0/MetricsAdvisor.json add-credentials: false override-client-name: GeneratedClient use-extension: @@ -689,3 +689,53 @@ directive: } } ``` + +### Add description for `SmartDetectionCondition` + +```yaml +directive: + - from: swagger-document + where: $.definitions.SmartDetectionCondition + transform: > + $.description = "Represents Smart Condition" + - from: swagger-document + where: $.definitions.SuppressCondition + transform: > + $.description = "Represents Suppress Condition" + - from: swagger-document + where: $.definitions.AlertSnoozeCondition + transform: > + $.description = "Represents Conditions to snooze Alerts" + - from: swagger-document + where: $.definitions.SeverityFilterCondition + transform: > + $.description = "Represents Conditions to filter severity" + - from: swagger-document + where: $.definitions.DataFeedIngestionProgress + transform: > + $.description = "Track the progress for Datafeed Ingestion" + - from: swagger-document + where: $.definitions.EmailHookParameter + transform: > + $.description = "Parameters for Email Hook" + - from: swagger-document + where: $.definitions.EmailHookParameter + transform: > + $.description = "Parameters for Email Hook" + - from: swagger-document + where: $.definitions.WebHookParameter + transform: > + $.description = "Parameters for Web Hook" + - from: swagger-document + where: $.definitions.IngestionStatus + transform: > + $.description = "Ingestion Status" + - from: swagger-document + where: $.definitions.SeverityCondition + transform: > + $.description = "Alert Severity Condition" + - from: swagger-document + where: $.definitions.TopNGroupScope + transform: > + $.description = "Group Scope for Top N values" +``` diff --git a/sdk/metricsadvisor/ai-metrics-advisor/test/internal/transforms.spec.ts b/sdk/metricsadvisor/ai-metrics-advisor/test/internal/transforms.spec.ts index 4c8c7e87a346..5c9a1b6929bd 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/test/internal/transforms.spec.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/test/internal/transforms.spec.ts @@ -217,7 +217,6 @@ describe("Transforms", () => { [ { original: "Yearly", expected: "Yearly" }, { original: "Daily", expected: "Daily" }, - { original: "Secondly", expected: "PerSecond" }, { original: "Minutely", expected: "PerMinute" } ].forEach((granularity) => { it(`fromServiceDataFeedDetailUnion() on granularity ${granularity.original}`, () => { @@ -246,7 +245,6 @@ describe("Transforms", () => { [ { original: "Yearly", expected: "Yearly" }, { original: "Daily", expected: "Daily" }, - { original: "PerSecond", expected: "Secondly" }, { original: "PerMinute", expected: "Minutely" } ].forEach((granularity) => { it(`toServiceGranularity() on granularity ${granularity.original}`, () => { diff --git a/sdk/metricsadvisor/ai-metrics-advisor/test/public/adminclient.spec.ts b/sdk/metricsadvisor/ai-metrics-advisor/test/public/adminclient.spec.ts index 72e218197a77..c83f66dd11c4 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/test/public/adminclient.spec.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/test/public/adminclient.spec.ts @@ -179,7 +179,7 @@ matrix([[true, false]] as const, async (useAad) => { }, seriesGroupDetectionConditions: [ { - group: { city: "Mumbai" }, + groupKey: { city: "Mumbai" }, hardThresholdCondition: { anomalyDetectorDirection: "Up", upperBound: 400, @@ -189,7 +189,7 @@ matrix([[true, false]] as const, async (useAad) => { ], seriesDetectionConditions: [ { - series: { city: "Kolkata", category: "Handmade" }, + seriesKey: { city: "Kolkata", category: "Handmade" }, changeThresholdCondition: { anomalyDetectorDirection: "Both", shiftPoint: 1, @@ -201,8 +201,7 @@ matrix([[true, false]] as const, async (useAad) => { ] }; - await client.updateDetectionConfig(createdDetectionConfigId, expected); - const actual = await client.getDetectionConfig(createdDetectionConfigId); + const actual = await client.updateDetectionConfig(createdDetectionConfigId, expected); assert.ok(actual.id, "Expecting valid detection config"); createdDetectionConfigId = actual.id!; @@ -217,18 +216,18 @@ matrix([[true, false]] as const, async (useAad) => { "Expecting valid seriesGroupDetectionConditions" ); assert.deepStrictEqual( - actual.seriesGroupDetectionConditions![0].group, - expected.seriesGroupDetectionConditions![0].group + actual.seriesGroupDetectionConditions![0].groupKey, + expected.seriesGroupDetectionConditions![0].groupKey ); assert.deepStrictEqual( actual.seriesGroupDetectionConditions![0].hardThresholdCondition, expected.seriesGroupDetectionConditions![0].hardThresholdCondition ); assert.ok(actual.seriesDetectionConditions, "Expecting valid seriesDetectionConditions"); - delete (actual.seriesDetectionConditions![0].series as any).seriesId; // workaround service issue + delete (actual.seriesDetectionConditions![0].seriesKey as any).seriesId; // workaround service issue assert.deepStrictEqual( - actual.seriesDetectionConditions![0].series, - expected.seriesDetectionConditions![0].series + actual.seriesDetectionConditions![0].seriesKey, + expected.seriesDetectionConditions![0].seriesKey ); assert.deepStrictEqual( actual.seriesDetectionConditions![0].changeThresholdCondition, @@ -277,7 +276,7 @@ matrix([[true, false]] as const, async (useAad) => { crossMetricsOperator: "AND", metricAlertConfigurations: [metricAlertConfig, metricAlertConfig], hookIds: [], - splitAlertByDimensions: [] + dimensionsToSplitAlert: [] }; const actual = await client.createAlertConfig(expectedAlertConfig); @@ -293,8 +292,8 @@ matrix([[true, false]] as const, async (useAad) => { ); assert.deepStrictEqual(actual.hookIds, expectedAlertConfig.hookIds); assert.deepStrictEqual( - actual.splitAlertByDimensions, - expectedAlertConfig.splitAlertByDimensions + actual.dimensionsToSplitAlert, + expectedAlertConfig.dimensionsToSplitAlert ); }); @@ -325,8 +324,7 @@ matrix([[true, false]] as const, async (useAad) => { metricAlertConfigurations: [metricAlertConfig, metricAlertConfig] }; - await client.updateAlertConfig(createdAlertConfigId, patch); - const actual = await client.getAlertConfig(createdAlertConfigId); + const actual = await client.updateAlertConfig(createdAlertConfigId, patch); assert.ok(actual.id, "Expecting valid alerting config"); assert.equal(actual.name, "new alert config name"); assert.equal(actual.description, "new alert config description"); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/test/public/advisorclient.spec.ts b/sdk/metricsadvisor/ai-metrics-advisor/test/public/advisorclient.spec.ts index 57020a6ee465..c68166d66640 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/test/public/advisorclient.spec.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/test/public/advisorclient.spec.ts @@ -32,7 +32,7 @@ matrix([[true, false]] as const, async (useAad) => { }); it("listAnomaliesForDetectionConfiguration()", async function() { - const iterator = client.listAnomalies( + const iterator = client.listAnomaliesForDetectionConfiguration( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, new Date(Date.UTC(2020, 0, 5)), new Date(Date.UTC(2020, 10, 5)) @@ -45,7 +45,7 @@ matrix([[true, false]] as const, async (useAad) => { it("listAnomaliesForDetectionConfiguration() by page", async function() { const iterator = client - .listAnomalies( + .listAnomaliesForDetectionConfiguration( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, new Date(Date.UTC(2020, 0, 5)), new Date(Date.UTC(2020, 10, 5)) @@ -58,7 +58,7 @@ matrix([[true, false]] as const, async (useAad) => { }); it("listAnomaliesForDetectionConfiguration() with datetime strings", async function() { - const iterator = client.listAnomalies( + const iterator = client.listAnomaliesForDetectionConfiguration( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, "2020-01-05T00:00:00.000Z", "2020-11-05T00:00:00.000Z" @@ -71,7 +71,7 @@ matrix([[true, false]] as const, async (useAad) => { it("listAnomaliesForDetectionConfiguration() throws for invalid datetime strings", async function() { try { - const iterator = client.listAnomalies( + const iterator = client.listAnomaliesForDetectionConfiguration( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, "startTime", "endTime" @@ -84,7 +84,7 @@ matrix([[true, false]] as const, async (useAad) => { }); it("listIncidentsForDetectionConfiguration()", async function() { - const iterator = client.listIncidents( + const iterator = client.listIncidentsForDetectionConfiguration( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, new Date(Date.UTC(2020, 0, 5)), new Date(Date.UTC(2020, 10, 5)) @@ -97,7 +97,7 @@ matrix([[true, false]] as const, async (useAad) => { it("listIncidentsForDetectionConfiguration() by page", async function() { const iterator = client - .listIncidents( + .listIncidentsForDetectionConfiguration( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, new Date(Date.UTC(2020, 0, 5)), new Date(Date.UTC(2020, 10, 5)) @@ -110,7 +110,7 @@ matrix([[true, false]] as const, async (useAad) => { }); it("listIncidentsForDetectionConfiguration() with datetime strings", async function() { - const iterator = client.listIncidents( + const iterator = client.listIncidentsForDetectionConfiguration( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, "2020-01-05T00:00:00.000Z", "2020-11-05T00:00:00.000Z" @@ -123,7 +123,7 @@ matrix([[true, false]] as const, async (useAad) => { it("listIncidentsForDetectionConfiguration() throws for invalid datetime string", async function() { try { - const iterator = client.listIncidents( + const iterator = client.listIncidentsForDetectionConfiguration( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, "startTime", "endTime" @@ -218,7 +218,7 @@ matrix([[true, false]] as const, async (useAad) => { }); it("lists anomalies for alert", async function() { - const iterator = client.listAnomalies({ + const iterator = client.listAnomaliesForAlert({ alertConfigId: testEnv.METRICS_ADVISOR_ALERT_CONFIG_ID, id: testEnv.METRICS_ADVISOR_ALERT_ID }); @@ -230,7 +230,7 @@ matrix([[true, false]] as const, async (useAad) => { it("lists anomalies for alert by page", async function() { const iterator = client - .listAnomalies({ + .listAnomaliesForAlert({ alertConfigId: testEnv.METRICS_ADVISOR_ALERT_CONFIG_ID, id: testEnv.METRICS_ADVISOR_ALERT_ID }) @@ -242,7 +242,7 @@ matrix([[true, false]] as const, async (useAad) => { }); it("lists incidents for alert", async function() { - const iterator = client.listIncidents({ + const iterator = client.listIncidentsForAlert({ alertConfigId: testEnv.METRICS_ADVISOR_ALERT_CONFIG_ID, id: testEnv.METRICS_ADVISOR_ALERT_ID }); @@ -254,7 +254,7 @@ matrix([[true, false]] as const, async (useAad) => { it("lists incidents for alert by page", async function() { const iterator = client - .listIncidents({ + .listIncidentsForAlert({ alertConfigId: testEnv.METRICS_ADVISOR_ALERT_CONFIG_ID, id: testEnv.METRICS_ADVISOR_ALERT_ID }) @@ -271,9 +271,9 @@ matrix([[true, false]] as const, async (useAad) => { new Date(Date.UTC(2020, 7, 5)) ); let result = await iterator.next(); - assert.ok(result.value.dimension, "Expecting first definition"); + assert.ok(result.value.seriesKey, "Expecting first definition"); result = await iterator.next(); - assert.ok(result.value.dimension, "Expecting second definition"); + assert.ok(result.value.seriesKey, "Expecting second definition"); }); it("listMetricSeriesDefinitions() with datetime string", async function() { @@ -282,9 +282,9 @@ matrix([[true, false]] as const, async (useAad) => { "2020-08-05T00:00:00.000Z" ); let result = await iterator.next(); - assert.ok(result.value.dimension, "Expecting first definition"); + assert.ok(result.value.seriesKey, "Expecting first definition"); result = await iterator.next(); - assert.ok(result.value.dimension, "Expecting second definition"); + assert.ok(result.value.seriesKey, "Expecting second definition"); }); it("listMetricSeriesDefinitions() by page", async function() { @@ -324,19 +324,19 @@ matrix([[true, false]] as const, async (useAad) => { it("lists series data for a metric", async function() { const data = await client.getMetricSeriesData( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_METRIC_ID_1, - new Date(Date.UTC(2020, 7, 5)), - new Date(Date.UTC(2020, 8, 5)), [ { city: "Manila", category: "Shoes Handbags & Sunglasses" }, { city: "Cairo", category: "Home & Garden" } - ] + ], + new Date(Date.UTC(2020, 7, 5)), + new Date(Date.UTC(2020, 8, 5)) ); assert.ok(data && data!.length === 2, "Expecting data for two time series"); assert.equal( data![0].definition.metricId, testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_METRIC_ID_1 ); - assert.deepStrictEqual(data![0].definition.dimension, { + assert.deepStrictEqual(data![0].definition.seriesKey, { city: "Manila", category: "Shoes Handbags & Sunglasses" }); @@ -353,7 +353,7 @@ matrix([[true, false]] as const, async (useAad) => { data![1].definition.metricId, testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_METRIC_ID_1 ); - assert.deepStrictEqual(data![1].definition.dimension, { + assert.deepStrictEqual(data![1].definition.seriesKey, { city: "Cairo", category: "Home & Garden" }); @@ -370,19 +370,19 @@ matrix([[true, false]] as const, async (useAad) => { it("lists series data for a metric with datetime strings", async function() { const data = await client.getMetricSeriesData( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_METRIC_ID_1, - "2020-08-05T00:00:00.000Z", - "2020-09-05T00:00:00.000Z", [ { city: "Cairo", category: "Home & Garden" }, { city: "Manila", category: "Shoes Handbags & Sunglasses" } - ] + ], + "2020-08-05T00:00:00.000Z", + "2020-09-05T00:00:00.000Z" ); assert.ok(data && data!.length === 2, "Expecting data for two time series"); assert.equal( data![0].definition.metricId, testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_METRIC_ID_1 ); - assert.deepStrictEqual(data![0].definition.dimension, { + assert.deepStrictEqual(data![0].definition.seriesKey, { city: "Cairo", category: "Home & Garden" }); @@ -399,16 +399,16 @@ matrix([[true, false]] as const, async (useAad) => { it("list enriched data for a detection configuration", async function() { const data = await client.getMetricEnrichedSeriesData( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, - new Date(Date.UTC(2020, 7, 1)), - new Date(Date.UTC(2020, 7, 27)), [ { city: "Manila", category: "Shoes Handbags & Sunglasses" }, { city: "Cairo", category: "Home & Garden" } - ] + ], + new Date(Date.UTC(2020, 7, 1)), + new Date(Date.UTC(2020, 7, 27)) ); assert.ok(data && data!.length === 2, "Expecting data for two time series"); - assert.deepStrictEqual(data![0].series, { + assert.deepStrictEqual(data![0].seriesKey, { city: "Manila", category: "Shoes Handbags & Sunglasses" }); @@ -423,7 +423,7 @@ matrix([[true, false]] as const, async (useAad) => { "Expecting enriched data for the first time series" ); - assert.deepStrictEqual(data![1].series, { + assert.deepStrictEqual(data![1].seriesKey, { city: "Cairo", category: "Home & Garden" }); @@ -442,16 +442,16 @@ matrix([[true, false]] as const, async (useAad) => { it("list enriched data for a detection configuration with datetime strings", async function() { const data = await client.getMetricEnrichedSeriesData( testEnv.METRICS_ADVISOR_AZURE_SQLSERVER_DETECTION_CONFIG_ID, - "2020-08-01T00:00:00.000Z", - "2020-08-27T00:00:00.000Z", [ { city: "Manila", category: "Shoes Handbags & Sunglasses" }, { city: "Cairo", category: "Home & Garden" } - ] + ], + "2020-08-01T00:00:00.000Z", + "2020-08-27T00:00:00.000Z" ); assert.ok(data && data!.length === 2, "Expecting data for two time series"); - assert.deepStrictEqual(data![0].series, { + assert.deepStrictEqual(data![0].seriesKey, { city: "Manila", category: "Shoes Handbags & Sunglasses" }); @@ -525,7 +525,7 @@ matrix([[true, false]] as const, async (useAad) => { value: "NotAnomaly", dimensionKey: { city: "Cairo", category: "Home & Garden" } }; - const actual = await client.createFeedback(anomalyFeedback); + const actual = await client.addFeedback(anomalyFeedback); assert.ok(actual.id, "Expecting valid feedback"); createdFeedbackId = actual.id!; @@ -543,7 +543,7 @@ matrix([[true, false]] as const, async (useAad) => { value: "ChangePoint", dimensionKey: { city: "Cairo", category: "Home & Garden" } }; - const actual = await client.createFeedback(changePointFeedback); + const actual = await client.addFeedback(changePointFeedback); assert.ok(actual.id, "Expecting valid feedback"); createdFeedbackId = actual.id!; @@ -561,7 +561,7 @@ matrix([[true, false]] as const, async (useAad) => { periodValue: 4, dimensionKey: { city: "Cairo", category: "Home & Garden" } }; - const actual = await client.createFeedback(periodFeedback); + const actual = await client.addFeedback(periodFeedback); assert.ok(actual.id, "Expecting valid feedback"); createdFeedbackId = actual.id!; @@ -580,7 +580,7 @@ matrix([[true, false]] as const, async (useAad) => { comment: "This is a comment" }; - const actual = await client.createFeedback(expectedCommentFeedback); + const actual = await client.addFeedback(expectedCommentFeedback); assert.ok(actual.id, "Expecting valid feedback"); createdFeedbackId = actual.id!; diff --git a/sdk/metricsadvisor/ai-metrics-advisor/test/public/dataSourceCred.spec.ts b/sdk/metricsadvisor/ai-metrics-advisor/test/public/dataSourceCred.spec.ts index 9e4dd81097a7..b806c8d5306b 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/test/public/dataSourceCred.spec.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/test/public/dataSourceCred.spec.ts @@ -4,15 +4,15 @@ import { assert } from "chai"; import { Context } from "mocha"; import { - DataLakeGen2SharedKeyDatasourceCredential, - DataLakeGen2SharedKeyDatasourceCredentialPatch, + DataSourceDataLakeGen2SharedKey, + DataSourceDataLakeGen2SharedKeyPatch, MetricsAdvisorAdministrationClient, - ServicePrincipalDatasourceCredential, - ServicePrincipalDatasourceCredentialPatch, - ServicePrincipalInKeyVaultDatasourceCredential, - ServicePrincipalInKeyVaultDatasourceCredentialPatch, - SqlServerConnectionStringDatasourceCredential, - SqlServerConnectionStringDatasourceCredentialPatch + DataSourceServicePrincipal, + DataSourceServicePrincipalPatch, + DataSourceServicePrincipalInKeyVault, + DataSourceServicePrincipalInKeyVaultPatch, + DataSourceSqlConnectionString, + DataSourceSqlServerConnectionStringPatch } from "../../src"; import { createRecordedAdminClient, makeCredential } from "./util/recordedClients"; import { Recorder } from "@azure/test-utils-recorder"; @@ -31,7 +31,7 @@ describe("DataSourceCredential", () => { } }); describe("dataSource credential CRUD operations", async function() { - const datasourceCredential = { + const dataSourceCredential = { description: "used for testing purposes only" }; @@ -41,14 +41,14 @@ describe("DataSourceCredential", () => { let createdServicePrincipalInKVCredId: string; it("creates sql server connection string credential", async function() { - const sqlServerCredential: SqlServerConnectionStringDatasourceCredential = { - ...datasourceCredential, + const sqlServerCredential: DataSourceSqlConnectionString = { + ...dataSourceCredential, name: "ExampleSQLCredential", type: "AzureSQLConnectionString", connectionString: "sql-server-connection-string" }; - const createdSqlServerCred = await client.createDatasourceCredential(sqlServerCredential); - assert.ok(createdSqlServerCred.id, "Expecting valid datasource credential"); + const createdSqlServerCred = await client.createDataSourceCredential(sqlServerCredential); + assert.ok(createdSqlServerCred.id, "Expecting valid dataSource credential"); createdSqlServerCredId = createdSqlServerCred.id!; assert.equal(createdSqlServerCred.name, sqlServerCredential.name); assert.equal(createdSqlServerCred.description, sqlServerCredential.description); @@ -59,30 +59,32 @@ describe("DataSourceCredential", () => { if (!createdSqlServerCredId) { this.skip(); } - const sqlServerCredentialPatch: SqlServerConnectionStringDatasourceCredentialPatch = { + const sqlServerCredentialPatch: DataSourceSqlServerConnectionStringPatch = { name: "UpdatedSqlCred", description: "updated description", connectionString: "updated-string", type: "AzureSQLConnectionString" }; - await client.updateDatasourceCredential(createdSqlServerCredId, sqlServerCredentialPatch); - const updated = await client.getDatasourceCredential(createdSqlServerCredId); - assert.ok(updated.id, "Expecting valid datasource credential"); + const updated = await client.updateDataSourceCredential( + createdSqlServerCredId, + sqlServerCredentialPatch + ); + assert.ok(updated.id, "Expecting valid dataSource credential"); assert.equal(updated.description, sqlServerCredentialPatch.description); assert.equal(updated.type, sqlServerCredentialPatch.type); assert.equal(updated.name, sqlServerCredentialPatch.name); }); it("creates datalake gen2 shared key credential", async function() { - const datalakeCred: DataLakeGen2SharedKeyDatasourceCredential = { - ...datasourceCredential, + const datalakeCred: DataSourceDataLakeGen2SharedKey = { + ...dataSourceCredential, name: "ExampleDLCredential", type: "DataLakeGen2SharedKey", accountKey: "account-key" }; - const createdDatalakeCred = await client.createDatasourceCredential(datalakeCred); - assert.ok(createdDatalakeCred.id, "Expecting valid datasource credential"); + const createdDatalakeCred = await client.createDataSourceCredential(datalakeCred); + assert.ok(createdDatalakeCred.id, "Expecting valid dataSource credential"); createdDatalakeCredId = createdDatalakeCred.id!; assert.equal(createdDatalakeCred.name, datalakeCred.name); assert.equal(createdDatalakeCred.description, datalakeCred.description); @@ -93,23 +95,25 @@ describe("DataSourceCredential", () => { if (!createdDatalakeCredId) { this.skip(); } - const dataLakeCredentialPatch: DataLakeGen2SharedKeyDatasourceCredentialPatch = { + const dataLakeCredentialPatch: DataSourceDataLakeGen2SharedKeyPatch = { name: "UpdatedDataLakeCred", description: "updated description", accountKey: "updated account key", type: "DataLakeGen2SharedKey" }; - await client.updateDatasourceCredential(createdDatalakeCredId, dataLakeCredentialPatch); - const updated = await client.getDatasourceCredential(createdDatalakeCredId); - assert.ok(updated.id, "Expecting valid datasource credential"); + const updated = await client.updateDataSourceCredential( + createdDatalakeCredId, + dataLakeCredentialPatch + ); + assert.ok(updated.id, "Expecting valid dataSource credential"); assert.equal(updated.description, dataLakeCredentialPatch.description); assert.equal(updated.type, dataLakeCredentialPatch.type); assert.equal(updated.name, dataLakeCredentialPatch.name); }); it("creates service principal credential", async function() { - const servicePrincipalCred: ServicePrincipalDatasourceCredential = { - ...datasourceCredential, + const servicePrincipalCred: DataSourceServicePrincipal = { + ...dataSourceCredential, name: "ExampleSPCredential", type: "ServicePrincipal", clientId: "client-id", @@ -117,10 +121,10 @@ describe("DataSourceCredential", () => { tenantId: "tenant-id" }; - const createdServicePrincipalCred = await client.createDatasourceCredential( + const createdServicePrincipalCred = await client.createDataSourceCredential( servicePrincipalCred ); - assert.ok(createdServicePrincipalCred.id, "Expecting valid sql server datasource credential"); + assert.ok(createdServicePrincipalCred.id, "Expecting valid sql server dataSource credential"); createdServicePrincipalCredId = createdServicePrincipalCred.id!; assert.equal(createdServicePrincipalCred.name, servicePrincipalCred.name); assert.equal(createdServicePrincipalCred.description, servicePrincipalCred.description); @@ -131,7 +135,7 @@ describe("DataSourceCredential", () => { if (!createdServicePrincipalCredId) { this.skip(); } - const servicePrincipalCredentialPatch: ServicePrincipalDatasourceCredentialPatch = { + const servicePrincipalCredentialPatch: DataSourceServicePrincipalPatch = { name: "UpdatedSPCred", description: "updated description", clientId: "updated-client", @@ -139,24 +143,23 @@ describe("DataSourceCredential", () => { tenantId: "updated-tenant", type: "ServicePrincipal" }; - await client.updateDatasourceCredential( + const updated = await client.updateDataSourceCredential( createdServicePrincipalCredId, servicePrincipalCredentialPatch ); - const updated = await client.getDatasourceCredential(createdServicePrincipalCredId); - assert.ok(updated.id, "Expecting valid datasource credential"); + assert.ok(updated.id, "Expecting valid dataSource credential"); assert.equal(updated.description, servicePrincipalCredentialPatch.description); assert.equal(updated.type, servicePrincipalCredentialPatch.type); assert.equal(updated.name, servicePrincipalCredentialPatch.name); assert.equal( - (updated as ServicePrincipalDatasourceCredentialPatch).clientId, + (updated as DataSourceServicePrincipalPatch).clientId, servicePrincipalCredentialPatch.clientId ); }); it("creates service principal in keyvault credential", async function() { - const servicePrincipalInKVCred: ServicePrincipalInKeyVaultDatasourceCredential = { - ...datasourceCredential, + const servicePrincipalInKVCred: DataSourceServicePrincipalInKeyVault = { + ...dataSourceCredential, name: "ExampleSPinKVCredential", type: "ServicePrincipalInKV", tenantId: "tenant-id", @@ -167,10 +170,10 @@ describe("DataSourceCredential", () => { servicePrincipalSecretNameInKV: "service-principal-secret-name-in-kv" }; - const createdServicePrincipalInKVCred = await client.createDatasourceCredential( + const createdServicePrincipalInKVCred = await client.createDataSourceCredential( servicePrincipalInKVCred ); - assert.ok(createdServicePrincipalInKVCred.id, "Expecting valid datasource credential"); + assert.ok(createdServicePrincipalInKVCred.id, "Expecting valid dataSource credential"); createdServicePrincipalInKVCredId = createdServicePrincipalInKVCred.id!; assert.equal(createdServicePrincipalInKVCred.name, servicePrincipalInKVCred.name); assert.equal( @@ -184,7 +187,7 @@ describe("DataSourceCredential", () => { if (!createdServicePrincipalInKVCredId) { this.skip(); } - const servicePrincipalInKVCredentialPatch: ServicePrincipalInKeyVaultDatasourceCredentialPatch = { + const servicePrincipalInKVCredentialPatch: DataSourceServicePrincipalInKeyVaultPatch = { name: "UpdatedSPinKVCred", description: "updated description", keyVaultEndpoint: "updated-keyvault-endpoint", @@ -196,88 +199,86 @@ describe("DataSourceCredential", () => { type: "ServicePrincipalInKV" }; - await client.updateDatasourceCredential( + const updated = await client.updateDataSourceCredential( createdServicePrincipalInKVCredId, servicePrincipalInKVCredentialPatch ); - const updated = await client.getDatasourceCredential(createdServicePrincipalInKVCredId); - assert.ok(updated.id, "Expecting valid datasource credential"); + assert.ok(updated.id, "Expecting valid dataSource credential"); assert.equal(updated.description, servicePrincipalInKVCredentialPatch.description); assert.equal(updated.type, servicePrincipalInKVCredentialPatch.type); assert.equal(updated.name, servicePrincipalInKVCredentialPatch.name); assert.equal( - (updated as ServicePrincipalDatasourceCredentialPatch).tenantId, + (updated as DataSourceServicePrincipalPatch).tenantId, servicePrincipalInKVCredentialPatch.tenantId ); assert.equal( - (updated as ServicePrincipalInKeyVaultDatasourceCredentialPatch).keyVaultClientId, + (updated as DataSourceServicePrincipalInKeyVaultPatch).keyVaultClientId, servicePrincipalInKVCredentialPatch.keyVaultClientId ); assert.equal( - (updated as ServicePrincipalInKeyVaultDatasourceCredentialPatch).servicePrincipalIdNameInKV, + (updated as DataSourceServicePrincipalInKeyVaultPatch).servicePrincipalIdNameInKV, servicePrincipalInKVCredentialPatch.servicePrincipalIdNameInKV ); }); - it("lists datasource credentials one by one and by pages", async function() { - const iterator = client.listDatasourceCredential(); + it("lists dataSource credentials one by one and by pages", async function() { + const iterator = client.listDataSourceCredential(); let result = await iterator.next(); - assert.ok(result.value.id, "Expecting first datasource credential"); + assert.ok(result.value.id, "Expecting first dataSource credential"); result = await iterator.next(); - assert.ok(result.value.id, "Expecting second datasource credential"); + assert.ok(result.value.id, "Expecting second dataSource credential"); - const pageIterator = client.listDatasourceCredential().byPage({ maxPageSize: 2 }); + const pageIterator = client.listDataSourceCredential().byPage({ maxPageSize: 2 }); let pageResult = await pageIterator.next(); assert.equal(pageResult.value.length, 2, "Expecting two entries in first page"); pageResult = await pageIterator.next(); assert.equal(pageResult.value.length, 2, "Expecting two entries in second page"); }); - it("deletes sqlserver datasource credential", async function(this: Context) { + it("deletes sqlserver dataSource credential", async function(this: Context) { if (!createdSqlServerCredId) { this.skip(); } - await verifyDatasourceCredentialDeletion(client, createdSqlServerCredId); + await verifyDataSourceCredentialDeletion(this, client, createdSqlServerCredId); }); - it("deletes datalake gen2 shared key datasource credential", async function(this: Context) { + it("deletes datalake gen2 shared key dataSource credential", async function(this: Context) { if (!createdDatalakeCredId) { this.skip(); } - await verifyDatasourceCredentialDeletion(client, createdDatalakeCredId); + await verifyDataSourceCredentialDeletion(this, client, createdDatalakeCredId); }); - it("deletes service principal datasource credential", async function(this: Context) { + it("deletes service principal dataSource credential", async function(this: Context) { if (!createdServicePrincipalCredId) { this.skip(); } - await verifyDatasourceCredentialDeletion(client, createdServicePrincipalCredId); + await verifyDataSourceCredentialDeletion(this, client, createdServicePrincipalCredId); }); - it("deletes service principal in KeyVault datasource credential", async function(this: Context) { + it("deletes service principal in KeyVault dataSource credential", async function(this: Context) { if (!createdServicePrincipalInKVCredId) { this.skip(); } - await verifyDatasourceCredentialDeletion(client, createdServicePrincipalInKVCredId); + await verifyDataSourceCredentialDeletion(this, client, createdServicePrincipalInKVCredId); }); }); }).timeout(60000); -export async function verifyDatasourceCredentialDeletion( - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - this: any, +export async function verifyDataSourceCredentialDeletion( + context: Context, client: MetricsAdvisorAdministrationClient, - createdDatasourceCredentialId: string + createdDataSourceCredentialId: string ): Promise { - if (!createdDatasourceCredentialId) { - this.skip(); + if (!createdDataSourceCredentialId) { + context.skip(); } - await client.deleteDatasourceCredential(createdDatasourceCredentialId); + await client.deleteDataSourceCredential(createdDataSourceCredentialId); try { - await client.getDatasourceCredential(createdDatasourceCredentialId); - assert.fail("Expecting error getting datasource credential"); + await client.getDataSourceCredential(createdDataSourceCredentialId); + assert.fail("Expecting error getting dataSource credential"); } catch (error) { assert.equal((error as any).code, "404 NOT_FOUND"); assert.equal((error as any).message, "credentialId is invalid."); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/test/public/datafeed.spec.ts b/sdk/metricsadvisor/ai-metrics-advisor/test/public/datafeed.spec.ts index 1c737edc6372..1158bf677da6 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/test/public/datafeed.spec.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/test/public/datafeed.spec.ts @@ -346,8 +346,7 @@ matrix([[true, false]] as const, async (useAad) => { viewerEmails: ["viewer1@example.com"], actionLinkTemplate: "Updated Azure Blob action link template" }; - await client.updateDataFeed(createdAzureBlobDataFeedId, patch); - const updated = await client.getDataFeed(createdAzureBlobDataFeedId); + const updated = await client.updateDataFeed(createdAzureBlobDataFeedId, patch); assert.ok(updated.id, "Expecting valid data feed"); assert.equal(updated.source.dataSourceType, "AzureBlob"); assert.deepStrictEqual( @@ -461,16 +460,16 @@ matrix([[true, false]] as const, async (useAad) => { assert.equal(result.value.length, 1, "Expecting one entry in second page"); }); - it("deletes an Azure Blob datafeed", async function() { - await verifyDataFeedDeletion(client, createdAzureBlobDataFeedId); + it("deletes an Azure Blob datafeed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdAzureBlobDataFeedId); }); - it("deletes an Azure Application Insights feed", async function() { - await verifyDataFeedDeletion(client, createdAppFeedId); + it("deletes an Azure Application Insights feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdAppFeedId); }); - it("deletes an Azure SQL Server feed", async function() { - await verifyDataFeedDeletion(client, createdSqlServerFeedId); + it("deletes an Azure SQL Server feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdSqlServerFeedId); }); it("creates an Azure Cosmos DB Feed", async () => { @@ -506,8 +505,8 @@ matrix([[true, false]] as const, async (useAad) => { } }); - it("deletes an Azure Cosmos DB", async function() { - await verifyDataFeedDeletion(client, createdCosmosFeedId); + it("deletes an Azure Cosmos DB", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdCosmosFeedId); }); it("creates an Azure Data Explorer feed", async () => { @@ -539,8 +538,8 @@ matrix([[true, false]] as const, async (useAad) => { } }); - it("deletes an Azure Data Explorer feed", async function() { - await verifyDataFeedDeletion(client, createdAzureDataExplorerFeedId); + it("deletes an Azure Data Explorer feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdAzureDataExplorerFeedId); }); it("creates an Azure Table feed", async () => { @@ -571,8 +570,8 @@ matrix([[true, false]] as const, async (useAad) => { } }); - it("deletes an Azure Table feed", async function() { - await verifyDataFeedDeletion(client, createdAzureTableFeedId); + it("deletes an Azure Table feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdAzureTableFeedId); }); it("creates InfluxDB data feed", async () => { @@ -606,8 +605,8 @@ matrix([[true, false]] as const, async (useAad) => { } }); - it("deletes InfluxDB data feed", async function() { - await verifyDataFeedDeletion(client, createdInfluxFeedId); + it("deletes InfluxDB data feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdInfluxFeedId); }); it("creates MongoDB data feed", async () => { @@ -641,8 +640,8 @@ matrix([[true, false]] as const, async (useAad) => { } }); - it("deletes MongoDB data feed", async function() { - await verifyDataFeedDeletion(client, createdMongoDbFeedId); + it("deletes MongoDB data feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdMongoDbFeedId); }); it("creates MySQL data feed", async () => { @@ -674,8 +673,8 @@ matrix([[true, false]] as const, async (useAad) => { } }); - it("deletes MySQL data feed", async function() { - await verifyDataFeedDeletion(client, createdMySqlFeedId); + it("deletes MySQL data feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdMySqlFeedId); }); it("creates Datalake Gen 2 data feed", async () => { @@ -709,8 +708,8 @@ matrix([[true, false]] as const, async (useAad) => { } }); - it("deletes Datalake Gen 2 data feed", async function() { - await verifyDataFeedDeletion(client, createdDataLakeGenId); + it("deletes Datalake Gen 2 data feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdDataLakeGenId); }); it.skip("creates Eventhubs data feed", async () => { @@ -739,8 +738,8 @@ matrix([[true, false]] as const, async (useAad) => { } }); - it.skip("deletes Eventhubs data feed", async function() { - await verifyDataFeedDeletion(client, createdEventhubsId); + it.skip("deletes Eventhubs data feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdEventhubsId); }); it("creates Log Analytics data feed", async () => { @@ -775,8 +774,8 @@ matrix([[true, false]] as const, async (useAad) => { } }); - it("deletes Log Analytics data feed", async function() { - await verifyDataFeedDeletion(client, createdLogAnalyticsId); + it("deletes Log Analytics data feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdLogAnalyticsId); }); it("creates PostgreSQL data feed", async () => { @@ -827,8 +826,7 @@ matrix([[true, false]] as const, async (useAad) => { authenticationType: "Basic" } }; - await client.updateDataFeed(createdPostGreSqlId, patch); - const updated = await client.getDataFeed(createdPostGreSqlId); + const updated = await client.updateDataFeed(createdPostGreSqlId, patch); assert.ok(updated.id, "Expecting valid data feed"); assert.equal(updated.source.dataSourceType, "MongoDB"); @@ -838,8 +836,8 @@ matrix([[true, false]] as const, async (useAad) => { ); }); - it("deletes PostgreSQL data feed", async function() { - await verifyDataFeedDeletion(client, createdPostGreSqlId); + it("deletes PostgreSQL data feed", async function(this: Context) { + await verifyDataFeedDeletion(this, client, createdPostGreSqlId); }); it("creates Unknown data feed", async () => { @@ -887,15 +885,13 @@ matrix([[true, false]] as const, async (useAad) => { }); }); -// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export async function verifyDataFeedDeletion( - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - this: any, + context: Context, client: MetricsAdvisorAdministrationClient, createdDataFeedId: string ): Promise { if (!createdDataFeedId) { - this.skip(); + context.skip(); } await client.deleteDataFeed(createdDataFeedId); diff --git a/sdk/metricsadvisor/ai-metrics-advisor/test/public/hookTests.spec.ts b/sdk/metricsadvisor/ai-metrics-advisor/test/public/hookTests.spec.ts index ecebce41f3c6..6d601483e1a0 100644 --- a/sdk/metricsadvisor/ai-metrics-advisor/test/public/hookTests.spec.ts +++ b/sdk/metricsadvisor/ai-metrics-advisor/test/public/hookTests.spec.ts @@ -78,8 +78,7 @@ matrix([[true, false]] as const, async (useAad) => { toList: ["test2@example.com", "test3@example.com"] } }; - await client.updateHook(createdEmailHookId, emailPatch); - const updated = await client.getHook(createdEmailHookId); + const updated = await client.updateHook(createdEmailHookId, emailPatch); assert.equal(updated.hookType, emailPatch.hookType); const emailHook = updated as EmailNotificationHook; assert.deepEqual(emailHook.hookParameter?.toList, [ @@ -97,8 +96,7 @@ matrix([[true, false]] as const, async (useAad) => { password: "pass123" } }; - await client.updateHook(createdWebHookId, webPatch); - const updated = await client.getHook(createdWebHookId); + const updated = await client.updateHook(createdWebHookId, webPatch); assert.equal(updated.hookType, webPatch.hookType); const webHook = updated as WebNotificationHook; assert.equal(webHook.hookParameter?.username, "user1");