From fa1805261ff27aa3a163ae5494dbb3faecbdc327 Mon Sep 17 00:00:00 2001 From: Anu Thomas Chandy Date: Mon, 26 Oct 2020 17:13:14 -0700 Subject: [PATCH] Metric Advisor: Replace reflection based private field setting with helper pattern (#16781) --- .../MetricsAdvisorAsyncClient.java | 107 ++---------------- .../util/AlertConfigurationTransforms.java | 19 ++-- .../util/AnomalyAlertConfigurationHelper.java | 36 ++++++ .../AnomalyDetectionConfigurationHelper.java | 41 +++++++ .../implementation/util/AnomalyHelper.java | 75 ++++++++++++ .../util/AnomalyTransforms.java | 24 ++-- .../implementation/util/DataFeedHelper.java | 70 ++++++++++++ .../util/DataFeedTransforms.java | 20 ++-- .../DetectionConfigurationTransforms.java | 6 +- .../implementation/util/HookHelper.java | 42 +++++++ .../implementation/util/HookTransforms.java | 16 +-- .../implementation/util/IncidentHelper.java | 75 ++++++++++++ .../util/IncidentRootCauseHelper.java | 53 +++++++++ .../util/IncidentRootCauseTransforms.java | 52 +++++++++ .../util/IncidentTransforms.java | 22 ++-- .../util/MetricAnomalyFeedbackHelper.java | 37 ++++++ .../util/MetricBoundaryConditionHelper.java | 47 ++++++++ .../util/MetricEnrichedSeriesDataHelper.java | 74 ++++++++++++ ...tricEnrichedSeriesDataTransformations.java | 24 ++-- .../util/MetricFeedbackHelper.java | 58 ++++++++++ .../util/MetricFeedbackTransforms.java | 30 ++--- .../util/MetricSeriesDataHelper.java | 54 +++++++++ .../util/MetricSeriesDataTransforms.java | 51 +++++++++ .../util/MetricSeriesDefinitionHelper.java | 41 +++++++ .../MetricSeriesDefinitionTransforms.java | 48 ++++++++ .../util/PrivateFieldAccessHelper.java | 83 -------------- .../ai/metricsadvisor/models/Anomaly.java | 79 +++++++++++++ .../models/AnomalyAlertConfiguration.java | 11 ++ .../models/AnomalyDetectionConfiguration.java | 25 ++++ .../ai/metricsadvisor/models/DataFeed.java | 67 +++++++++++ .../ai/metricsadvisor/models/EmailHook.java | 12 -- .../azure/ai/metricsadvisor/models/Hook.java | 35 +++++- .../ai/metricsadvisor/models/Incident.java | 77 +++++++++++++ .../models/IncidentRootCause.java | 43 +++++++ .../models/MetricAnomalyFeedback.java | 14 +++ .../models/MetricBoundaryCondition.java | 33 ++++++ .../models/MetricEnrichedSeriesData.java | 79 +++++++++++++ .../metricsadvisor/models/MetricFeedback.java | 51 +++++++++ .../models/MetricSeriesData.java | 42 +++++++ .../models/MetricSeriesDefinition.java | 24 ++++ .../ai/metricsadvisor/models/WebHook.java | 14 --- .../IncidentRootCauseTestBase.java | 25 ++-- 42 files changed, 1519 insertions(+), 317 deletions(-) create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyAlertConfigurationHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyDetectionConfigurationHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/DataFeedHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/HookHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentRootCauseHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentRootCauseTransforms.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricAnomalyFeedbackHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricBoundaryConditionHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricEnrichedSeriesDataHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricFeedbackHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDataHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDataTransforms.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDefinitionHelper.java create mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDefinitionTransforms.java delete mode 100644 sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/PrivateFieldAccessHelper.java diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/MetricsAdvisorAsyncClient.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/MetricsAdvisorAsyncClient.java index 7344fc52ca0c..a75477a1ec2f 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/MetricsAdvisorAsyncClient.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/MetricsAdvisorAsyncClient.java @@ -6,6 +6,8 @@ import com.azure.ai.metricsadvisor.implementation.util.AnomalyTransforms; import com.azure.ai.metricsadvisor.implementation.AzureCognitiveServiceMetricsAdvisorRestAPIOpenAPIV2Impl; import com.azure.ai.metricsadvisor.implementation.util.DetectionConfigurationTransforms; +import com.azure.ai.metricsadvisor.implementation.util.IncidentHelper; +import com.azure.ai.metricsadvisor.implementation.util.IncidentRootCauseTransforms; import com.azure.ai.metricsadvisor.implementation.util.IncidentTransforms; import com.azure.ai.metricsadvisor.implementation.util.MetricEnrichedSeriesDataTransformations; import com.azure.ai.metricsadvisor.implementation.models.AlertingResultQuery; @@ -24,18 +26,16 @@ import com.azure.ai.metricsadvisor.implementation.models.DimensionGroupIdentity; import com.azure.ai.metricsadvisor.implementation.models.EnrichmentStatusQueryOption; import com.azure.ai.metricsadvisor.implementation.models.FeedbackDimensionFilter; -import com.azure.ai.metricsadvisor.implementation.models.MetricDataList; import com.azure.ai.metricsadvisor.implementation.models.MetricDataQueryOptions; import com.azure.ai.metricsadvisor.implementation.models.MetricDimensionQueryOptions; import com.azure.ai.metricsadvisor.implementation.models.MetricFeedbackFilter; -import com.azure.ai.metricsadvisor.implementation.models.MetricSeriesItem; import com.azure.ai.metricsadvisor.implementation.models.MetricSeriesQueryOptions; import com.azure.ai.metricsadvisor.implementation.models.PeriodFeedback; import com.azure.ai.metricsadvisor.implementation.models.PeriodFeedbackValue; -import com.azure.ai.metricsadvisor.implementation.models.RootCause; import com.azure.ai.metricsadvisor.implementation.models.SeriesIdentity; import com.azure.ai.metricsadvisor.implementation.util.MetricFeedbackTransforms; -import com.azure.ai.metricsadvisor.implementation.util.PrivateFieldAccessHelper; +import com.azure.ai.metricsadvisor.implementation.util.MetricSeriesDataTransforms; +import com.azure.ai.metricsadvisor.implementation.util.MetricSeriesDefinitionTransforms; import com.azure.ai.metricsadvisor.models.Alert; import com.azure.ai.metricsadvisor.models.Anomaly; import com.azure.ai.metricsadvisor.models.DimensionKey; @@ -171,13 +171,7 @@ private Mono> listMetricSeriesDefinitionSi .doOnRequest(ignoredValue -> logger.info("Listing information metric series definitions")) .doOnSuccess(response -> logger.info("Listed metric series definitions - {}", response)) .doOnError(error -> logger.warning("Failed to list metric series definitions information - {}", error)) - .map(res -> new PagedResponseBase<>( - res.getRequest(), - res.getStatusCode(), - res.getHeaders(), - toMetricSeriesDefinition(res.getValue()), - res.getContinuationToken(), - null)); + .map(res -> MetricSeriesDefinitionTransforms.fromInnerResponse(res)); } private Mono> listMetricSeriesDefinitionNextPageAsync(String nextPageLink, @@ -197,34 +191,7 @@ private Mono> listMetricSeriesDefinitionNe .doOnSuccess(response -> logger.info("Retrieved the next listing page - Page {}", nextPageLink)) .doOnError(error -> logger.warning("Failed to retrieve the next listing page - Page {}", nextPageLink, error)) - .map(res -> new PagedResponseBase<>( - res.getRequest(), - res.getStatusCode(), - res.getHeaders(), - toMetricSeriesDefinition(res.getValue()), - res.getContinuationToken(), - null)); - } - - /** - * Helper method to convert service {@link com.azure.ai.metricsadvisor.implementation.models.MetricSeriesItem} - * to {@link MetricSeriesDefinition}. - * - * @param serviceSeriesDefinitions the - * service {@link com.azure.ai.metricsadvisor.implementation.models.MetricSeriesItem} - * - * @return {@link MetricSeriesDefinition} - */ - private static List - toMetricSeriesDefinition(List serviceSeriesDefinitions) { - return serviceSeriesDefinitions.stream().map(serviceSeriesDefinition -> { - MetricSeriesDefinition seriesDefinition = new MetricSeriesDefinition(); - PrivateFieldAccessHelper.set(seriesDefinition, "seriesKey", - new DimensionKey(serviceSeriesDefinition.getDimension())); - PrivateFieldAccessHelper.set(seriesDefinition, "metricId", - serviceSeriesDefinition.getMetricId().toString()); - return seriesDefinition; - }).collect(Collectors.toList()); + .map(res -> MetricSeriesDefinitionTransforms.fromInnerResponse(res)); } /** @@ -282,32 +249,7 @@ private Mono> listMetricSeriesDataInternal(Strin return service.getMetricDataWithResponseAsync(UUID.fromString(metricId), metricDataQueryOptions, context) - .map(response -> { - final MetricDataList result = response.getValue(); - return new PagedResponseBase<>(response.getRequest(), - response.getStatusCode(), response.getHeaders(), toMetricSeriesData(result.getValue()), null, null); - }); - } - - /** - * Transforms the service level metric series data to SDK model. - * - * @param serviceMetricSeriesData the service level metric series data - * - * @return the transformed SDK equivalent model for metric series data. - */ - private List toMetricSeriesData( - List serviceMetricSeriesData) { - return serviceMetricSeriesData.stream().map(seriesData -> { - MetricSeriesData metricSeriesData = new MetricSeriesData(); - PrivateFieldAccessHelper.set(metricSeriesData, "metricId", - seriesData.getId().getMetricId().toString()); - PrivateFieldAccessHelper.set(metricSeriesData, "seriesKey", - new DimensionKey(seriesData.getId().getDimension())); - PrivateFieldAccessHelper.set(metricSeriesData, "timestampList", seriesData.getTimestampList()); - PrivateFieldAccessHelper.set(metricSeriesData, "valueList", seriesData.getValueList()); - return metricSeriesData; - }).collect(Collectors.toList()); + .map(response -> MetricSeriesDataTransforms.fromInnerResponse(response)); } /** @@ -821,8 +763,8 @@ public PagedFlux listIncidentRootCauses( String detectionConfigurationId, String incidentId) { Incident incident = new Incident(); - PrivateFieldAccessHelper.set(incident, "id", incidentId); - PrivateFieldAccessHelper.set(incident, "detectionConfigurationId", detectionConfigurationId); + IncidentHelper.setId(incident, incidentId); + IncidentHelper.setDetectionConfigurationId(incident, detectionConfigurationId); try { return new PagedFlux<>(() -> withContext(context -> listIncidentRootCausesInternal(incident, context)), null); @@ -835,8 +777,8 @@ PagedFlux listIncidentRootCauses( String detectionConfigurationId, String incidentId, Context context) { Incident incident = new Incident(); - PrivateFieldAccessHelper.set(incident, "id", incidentId); - PrivateFieldAccessHelper.set(incident, "detectionConfigurationId", detectionConfigurationId); + IncidentHelper.setId(incident, incidentId); + IncidentHelper.setDetectionConfigurationId(incident, detectionConfigurationId); try { return new PagedFlux<>(() -> listIncidentRootCausesInternal(incident, context), null); } catch (RuntimeException ex) { @@ -887,32 +829,7 @@ private Mono> listIncidentRootCausesInternal(In .doOnSuccess(response -> logger.info("Retrieved the IncidentRootCauses - {}", response)) .doOnError(error -> logger.warning("Failed to retrieve the incident root causes - {}", incident.getDetectionConfigurationId(), error)) - .map(res -> new PagedResponseBase<>( - res.getRequest(), - res.getStatusCode(), - res.getHeaders(), - toIncidentRootCause(res.getValue().getValue()), - null, - null)); - } - - /** - * Helper method to transform {@link RootCause service reponse} to SDK level {@link IncidentRootCause} - * - * @param rootCauseList the service returned root causes object list . - * - * @return the list of {@link IncidentRootCause root causes}. - */ - private List toIncidentRootCause(List rootCauseList) { - return rootCauseList.stream().map(rootCause -> { - final IncidentRootCause incidentRootCause = new IncidentRootCause(); - PrivateFieldAccessHelper.set(incidentRootCause, "seriesKey", - new DimensionKey(rootCause.getRootCause().getDimension())); - PrivateFieldAccessHelper.set(incidentRootCause, "paths", rootCause.getPath()); - PrivateFieldAccessHelper.set(incidentRootCause, "confidenceScore", rootCause.getScore()); - PrivateFieldAccessHelper.set(incidentRootCause, "description", rootCause.getDescription()); - return incidentRootCause; - }).collect(Collectors.toList()); + .map(res -> IncidentRootCauseTransforms.fromInnerResponse(res)); } /** diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AlertConfigurationTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AlertConfigurationTransforms.java index e161098db48a..8abaebab1eed 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AlertConfigurationTransforms.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AlertConfigurationTransforms.java @@ -186,9 +186,9 @@ public static AnomalyAlertConfiguration fromInner( .getCrossMetricsOperator() .toString())); } - PrivateFieldAccessHelper.set(alertConfiguration, - "id", + AnomalyAlertConfigurationHelper.setId(alertConfiguration, innerAlertConfiguration.getAnomalyAlertingConfigurationId().toString()); + alertConfiguration.setDescription(innerAlertConfiguration.getDescription()); alertConfiguration.setIdOfHooksToAlert(innerAlertConfiguration .getHookIds() @@ -228,23 +228,18 @@ public static AnomalyAlertConfiguration fromInner( ValueCondition innerValueCondition = innerMetricAlertConfiguration.getValueFilter(); if (innerValueCondition != null) { MetricBoundaryCondition boundaryCondition = new MetricBoundaryCondition(); - PrivateFieldAccessHelper.set(boundaryCondition, - "lowerBoundary", + MetricBoundaryConditionHelper.setLowerBoundary(boundaryCondition, innerValueCondition.getLower()); - PrivateFieldAccessHelper.set(boundaryCondition, - "upperBoundary", + MetricBoundaryConditionHelper.setUpperBoundary(boundaryCondition, innerValueCondition.getUpper()); if (innerValueCondition.getDirection() == Direction.DOWN) { - PrivateFieldAccessHelper.set(boundaryCondition, - "boundaryDirection", + MetricBoundaryConditionHelper.setBoundaryDirection(boundaryCondition, BoundaryDirection.LOWER); } else if (innerValueCondition.getDirection() == Direction.UP) { - PrivateFieldAccessHelper.set(boundaryCondition, - "boundaryDirection", + MetricBoundaryConditionHelper.setBoundaryDirection(boundaryCondition, BoundaryDirection.UPPER); } else if (innerValueCondition.getDirection() == Direction.BOTH) { - PrivateFieldAccessHelper.set(boundaryCondition, - "boundaryDirection", + MetricBoundaryConditionHelper.setBoundaryDirection(boundaryCondition, BoundaryDirection.BOTH); } if (innerValueCondition.getMetricId() != null) { diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyAlertConfigurationHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyAlertConfigurationHelper.java new file mode 100644 index 000000000000..f3aaac1b9bdd --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyAlertConfigurationHelper.java @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) AutoRest Code Generator. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.models.AnomalyAlertConfiguration; + +/** + * The helper class to set the non-public properties of an {@link AnomalyAlertConfiguration} instance. + */ +public final class AnomalyAlertConfigurationHelper { + private static AnomalyAlertConfigurationAccessor accessor; + + private AnomalyAlertConfigurationHelper() { } + + /** + * Type defining the methods to set the non-public properties of an {@link AnomalyAlertConfiguration} instance. + */ + public interface AnomalyAlertConfigurationAccessor { + void setId(AnomalyAlertConfiguration configuration, String id); + } + + /** + * The method called from {@link AnomalyAlertConfiguration} to set it's accessor. + * + * @param configurationAccessor The accessor. + */ + public static void setAccessor(final AnomalyAlertConfigurationAccessor configurationAccessor) { + accessor = configurationAccessor; + } + + static void setId(AnomalyAlertConfiguration configuration, String id) { + accessor.setId(configuration, id); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyDetectionConfigurationHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyDetectionConfigurationHelper.java new file mode 100644 index 000000000000..a3e934428296 --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyDetectionConfigurationHelper.java @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.models.AnomalyDetectionConfiguration; + +/** + * The helper class to set the non-public properties of an {@link AnomalyDetectionConfiguration} instance. + */ +public final class AnomalyDetectionConfigurationHelper { + private static AnomalyDetectionConfigurationAccessor accessor; + + private AnomalyDetectionConfigurationHelper() { } + + /** + * Type defining the methods to set the non-public properties of an {@link AnomalyDetectionConfiguration} instance. + */ + public interface AnomalyDetectionConfigurationAccessor { + void setId(AnomalyDetectionConfiguration configuration, String id); + void setMetricId(AnomalyDetectionConfiguration configuration, String metricId); + } + + /** + * The method called from {@link AnomalyDetectionConfiguration} to set it's accessor. + * + * @param configurationAccessor The accessor. + */ + public static void setAccessor(final AnomalyDetectionConfigurationAccessor configurationAccessor) { + accessor = configurationAccessor; + } + + static void setId(AnomalyDetectionConfiguration configuration, String id) { + accessor.setId(configuration, id); + } + + static void setMetricId(AnomalyDetectionConfiguration configuration, String metricId) { + accessor.setMetricId(configuration, metricId); + } +} + diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyHelper.java new file mode 100644 index 000000000000..fc1f48b766da --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyHelper.java @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.models.Anomaly; +import com.azure.ai.metricsadvisor.models.AnomalyStatus; +import com.azure.ai.metricsadvisor.models.DimensionKey; +import com.azure.ai.metricsadvisor.models.Severity; + +import java.time.OffsetDateTime; + +/** + * The helper class to set the non-public properties of an {@link Anomaly} instance. + */ +public final class AnomalyHelper { + private static AnomalyAccessor accessor; + + private AnomalyHelper() { } + + /** + * Type defining the methods to set the non-public properties of an {@link Anomaly} instance. + */ + public interface AnomalyAccessor { + void setMetricId(Anomaly anomaly, String metricId); + void setSeriesKey(Anomaly anomaly, DimensionKey seriesKey); + void setDetectionConfigurationId(Anomaly anomaly, String detectionConfigurationId); + void setSeverity(Anomaly anomaly, Severity severity); + void setStatus(Anomaly anomaly, AnomalyStatus status); + void setTimeStamp(Anomaly anomaly, OffsetDateTime timeStamp); + void setCreatedTime(Anomaly anomaly, OffsetDateTime createdTime); + void setModifiedTime(Anomaly anomaly, OffsetDateTime modifiedTime); + } + + /** + * The method called from {@link Anomaly} to set it's accessor. + * + * @param anomalyAccessor The accessor. + */ + public static void setAccessor(final AnomalyAccessor anomalyAccessor) { + accessor = anomalyAccessor; + } + + static void setMetricId(Anomaly anomaly, String metricId) { + accessor.setMetricId(anomaly, metricId); + } + + static void setSeriesKey(Anomaly anomaly, DimensionKey seriesKey) { + accessor.setSeriesKey(anomaly, seriesKey); + } + + static void setDetectionConfigurationId(Anomaly anomaly, String detectionConfigurationId) { + accessor.setDetectionConfigurationId(anomaly, detectionConfigurationId); + } + + static void setSeverity(Anomaly anomaly, Severity severity) { + accessor.setSeverity(anomaly, severity); + } + + static void setStatus(Anomaly anomaly, AnomalyStatus status) { + accessor.setStatus(anomaly, status); + } + + static void setTimeStamp(Anomaly anomaly, OffsetDateTime timeStamp) { + accessor.setTimeStamp(anomaly, timeStamp); + } + + static void setCreatedTime(Anomaly anomaly, OffsetDateTime createdTime) { + accessor.setCreatedTime(anomaly, createdTime); + } + + static void setModifiedTime(Anomaly anomaly, OffsetDateTime modifiedTime) { + accessor.setModifiedTime(anomaly, modifiedTime); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyTransforms.java index 82a41b0a7f8e..fa7669470009 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyTransforms.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AnomalyTransforms.java @@ -77,31 +77,23 @@ public static PagedResponse fromInnerPagedResponse(PagedResponse metricIds); + void setCreatedTime(DataFeed feed, OffsetDateTime createdTime); + void setStatus(DataFeed feed, DataFeedStatus dataFeedStatus); + void setSourceType(DataFeed feed, DataFeedSourceType dataFeedSourceType); + void setIsAdmin(DataFeed feed, boolean isAdmin); + void setCreator(DataFeed feed, String creator); + } + + /** + * The method called from {@link DataFeed} to set it's accessor. + * + * @param feedAccessor The accessor. + */ + public static void setAccessor(final DataFeedAccessor feedAccessor) { + accessor = feedAccessor; + } + + static void setId(DataFeed feed, String id) { + accessor.setId(feed, id); + } + + static void setMetricIds(DataFeed feed, List metricIds) { + accessor.setMetricIds(feed, metricIds); + } + + static void setCreatedTime(DataFeed feed, OffsetDateTime createdTime) { + accessor.setCreatedTime(feed, createdTime); + } + + static void setStatus(DataFeed feed, DataFeedStatus dataFeedStatus) { + accessor.setStatus(feed, dataFeedStatus); + } + + static void setSourceType(DataFeed feed, DataFeedSourceType dataFeedSourceType) { + accessor.setSourceType(feed, dataFeedSourceType); + } + + static void setIsAdmin(DataFeed feed, boolean isAdmin) { + accessor.setIsAdmin(feed, isAdmin); + } + + static void setCreator(DataFeed feed, String creator) { + accessor.setCreator(feed, creator); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/DataFeedTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/DataFeedTransforms.java index 66a27845a8f8..cd4c7429e650 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/DataFeedTransforms.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/DataFeedTransforms.java @@ -90,8 +90,9 @@ private DataFeedTransforms() { public static DataFeed fromInner(final DataFeedDetail dataFeedDetail) { final DataFeedGranularity dataFeedGranularity = new DataFeedGranularity() .setGranularityType(DataFeedGranularityType.fromString(dataFeedDetail.getGranularityName().toString())); - PrivateFieldAccessHelper.set(dataFeedGranularity, "customGranularityValue", - dataFeedDetail.getGranularityAmount()); + if (dataFeedDetail.getGranularityAmount() != null) { + dataFeedGranularity.setCustomGranularityValue(dataFeedDetail.getGranularityAmount()); + } final DataFeed dataFeed = setDataFeedSourceType(dataFeedDetail); dataFeed @@ -121,13 +122,12 @@ public static DataFeed fromInner(final DataFeedDetail dataFeedDetail) { .setActionLinkTemplate(dataFeedDetail.getActionLinkTemplate()) .setViewers(dataFeedDetail.getViewers())); - PrivateFieldAccessHelper.set(dataFeed, "id", dataFeedDetail.getDataFeedId().toString()); - PrivateFieldAccessHelper.set(dataFeed, "createdTime", dataFeedDetail.getCreatedTime()); - PrivateFieldAccessHelper.set(dataFeed, "isAdmin", dataFeedDetail.isAdmin()); - PrivateFieldAccessHelper.set(dataFeed, "creator", dataFeedDetail.getCreator()); - PrivateFieldAccessHelper.set(dataFeed, "dataFeedStatus", - DataFeedStatus.fromString(dataFeedDetail.getStatus().toString())); - PrivateFieldAccessHelper.set(dataFeed, "metricIds", + DataFeedHelper.setId(dataFeed, dataFeedDetail.getDataFeedId().toString()); + DataFeedHelper.setCreatedTime(dataFeed, dataFeedDetail.getCreatedTime()); + DataFeedHelper.setIsAdmin(dataFeed, dataFeedDetail.isAdmin()); + DataFeedHelper.setCreator(dataFeed, dataFeedDetail.getCreator()); + DataFeedHelper.setStatus(dataFeed, DataFeedStatus.fromString(dataFeedDetail.getStatus().toString())); + DataFeedHelper.setMetricIds(dataFeed, dataFeedDetail.getMetrics().stream().map(Metric::getId).collect(Collectors.toList())); return dataFeed; } @@ -253,7 +253,7 @@ private static DataFeed setDataFeedSourceType(final DataFeedDetail dataFeedDetai throw LOGGER.logExceptionAsError(new RuntimeException( String.format("Data feed source type %s not supported", dataFeedDetail.getClass().getCanonicalName()))); } - PrivateFieldAccessHelper.set(dataFeed, "dataFeedSourceType", dataFeedSourceType); + DataFeedHelper.setSourceType(dataFeed, dataFeedSourceType); return dataFeed; } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/DetectionConfigurationTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/DetectionConfigurationTransforms.java index 2fd5bdebe870..3d0c2f7ee11e 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/DetectionConfigurationTransforms.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/DetectionConfigurationTransforms.java @@ -43,11 +43,9 @@ public final class DetectionConfigurationTransforms { AnomalyDetectionConfiguration configuration = new AnomalyDetectionConfiguration(innerConfiguration.getName()); - PrivateFieldAccessHelper.set(configuration, - "id", + AnomalyDetectionConfigurationHelper.setId(configuration, innerConfiguration.getAnomalyDetectionConfigurationId().toString()); - PrivateFieldAccessHelper.set(configuration, - "metricId", + AnomalyDetectionConfigurationHelper.setMetricId(configuration, innerConfiguration.getMetricId().toString()); configuration.setDescription(innerConfiguration.getDescription()); diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/HookHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/HookHelper.java new file mode 100644 index 000000000000..cffb61954f34 --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/HookHelper.java @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.models.Hook; + +import java.util.List; + +/** + * The helper class to set the non-public properties of an {@link Hook} instance. + */ +public final class HookHelper { + private static HookAccessor accessor; + + private HookHelper() { } + + /** + * Type defining the methods to set the non-public properties of an {@link Hook} instance. + */ + public interface HookAccessor { + void setId(Hook hook, String id); + void setAdmins(Hook hook, List admins); + } + + /** + * The method called from {@link Hook} to set it's accessor. + * + * @param hookAccessor The accessor. + */ + public static void setAccessor(final HookAccessor hookAccessor) { + accessor = hookAccessor; + } + + public static void setId(Hook hook, String id) { + accessor.setId(hook, id); + } + + static void setAdmins(Hook hook, List admins) { + accessor.setAdmins(hook, admins); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/HookTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/HookTransforms.java index e551ce53cfcc..5d5d28ee921b 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/HookTransforms.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/HookTransforms.java @@ -119,17 +119,13 @@ public static Hook fromInner(ClientLogger logger, HookInfo innerHook) { emailHook.setDescription(innerEmailHook.getDescription()); emailHook.setExternalLink(innerEmailHook.getExternalLink()); - PrivateFieldAccessHelper.set((Hook) emailHook, - "id", - innerEmailHook.getHookId().toString()); + HookHelper.setId(emailHook, innerEmailHook.getHookId().toString()); List adminList = innerEmailHook.getAdmins(); if (adminList == null) { adminList = new ArrayList<>(); } - PrivateFieldAccessHelper.set((Hook) emailHook, - "admins", - Collections.unmodifiableList(adminList)); + HookHelper.setAdmins(emailHook, Collections.unmodifiableList(adminList)); return emailHook; } else if (innerHook instanceof WebhookHookInfo) { @@ -151,17 +147,13 @@ public static Hook fromInner(ClientLogger logger, HookInfo innerHook) { } webHook.setHttpHeaders(new HttpHeaders(innerHeaders)); - PrivateFieldAccessHelper.set(webHook, - "id", - innerWebHook.getHookId().toString()); + HookHelper.setId(webHook, innerWebHook.getHookId().toString()); List adminList = innerWebHook.getAdmins(); if (adminList == null) { adminList = new ArrayList<>(); } - PrivateFieldAccessHelper.set(webHook, - "admins", - Collections.unmodifiableList(adminList)); + HookHelper.setAdmins(webHook, Collections.unmodifiableList(adminList)); return webHook; } else { diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentHelper.java new file mode 100644 index 000000000000..fd16ca319e95 --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentHelper.java @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.models.DimensionKey; +import com.azure.ai.metricsadvisor.models.Incident; +import com.azure.ai.metricsadvisor.models.IncidentStatus; +import com.azure.ai.metricsadvisor.models.Severity; + +import java.time.OffsetDateTime; + +/** + * The helper class to set the non-public properties of an {@link Incident} instance. + */ +public final class IncidentHelper { + private static IncidentAccessor accessor; + + private IncidentHelper() { } + + /** + * Type defining the methods to set the non-public properties of an {@link Incident} instance. + */ + public interface IncidentAccessor { + void setId(Incident incident, String id); + void setMetricId(Incident incident, String metricId); + void setDetectionConfigurationId(Incident incident, String detectionConfigurationId); + void setRootDimensionKey(Incident incident, DimensionKey rootDimensionKey); + void setSeverity(Incident incident, Severity severity); + void setStatus(Incident incident, IncidentStatus status); + void setStartTime(Incident incident, OffsetDateTime startTime); + void setLastTime(Incident incident, OffsetDateTime lastTime); + } + + /** + * The method called from {@link Incident} to set it's accessor. + * + * @param incidentAccessor The accessor. + */ + public static void setAccessor(final IncidentAccessor incidentAccessor) { + accessor = incidentAccessor; + } + + public static void setId(Incident incident, String id) { + accessor.setId(incident, id); + } + + static void setMetricId(Incident incident, String metricId) { + accessor.setMetricId(incident, metricId); + } + + public static void setDetectionConfigurationId(Incident incident, String detectionConfigurationId) { + accessor.setDetectionConfigurationId(incident, detectionConfigurationId); + } + + static void setRootDimensionKey(Incident incident, DimensionKey rootDimensionKey) { + accessor.setRootDimensionKey(incident, rootDimensionKey); + } + + static void setSeverity(Incident incident, Severity severity) { + accessor.setSeverity(incident, severity); + } + + static void setStatus(Incident incident, IncidentStatus status) { + accessor.setStatus(incident, status); + } + + static void setStartTime(Incident incident, OffsetDateTime startTime) { + accessor.setStartTime(incident, startTime); + } + + static void setLastTime(Incident incident, OffsetDateTime lastTime) { + accessor.setLastTime(incident, lastTime); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentRootCauseHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentRootCauseHelper.java new file mode 100644 index 000000000000..1d0816d61dcc --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentRootCauseHelper.java @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.models.DimensionKey; + +import java.util.List; +import com.azure.ai.metricsadvisor.models.IncidentRootCause; + +/** + * The helper class to set the non-public properties of an {@link IncidentRootCause} instance. + */ +public final class IncidentRootCauseHelper { + private static IncidentRootCauseAccessor accessor; + + private IncidentRootCauseHelper() { } + + /** + * Type defining the methods to set the non-public properties of an {@link IncidentRootCause} instance. + */ + public interface IncidentRootCauseAccessor { + void setSeriesKey(IncidentRootCause rootCause, DimensionKey seriesKey); + void setPaths(IncidentRootCause rootCause, List paths); + void setConfidenceScore(IncidentRootCause rootCause, double confidenceScore); + void setDescription(IncidentRootCause rootCause, String description); + } + + /** + * The method called from {@link IncidentRootCause} to set it's accessor. + * + * @param incidentRootCauseAccessor The accessor. + */ + public static void setAccessor(final IncidentRootCauseAccessor incidentRootCauseAccessor) { + accessor = incidentRootCauseAccessor; + } + + static void setSeriesKey(IncidentRootCause rootCause, DimensionKey seriesKey) { + accessor.setSeriesKey(rootCause, seriesKey); + } + + static void setPaths(IncidentRootCause rootCause, List paths) { + accessor.setPaths(rootCause, paths); + } + + static void setConfidenceScore(IncidentRootCause rootCause, double confidenceScore) { + accessor.setConfidenceScore(rootCause, confidenceScore); + } + + static void setDescription(IncidentRootCause rootCause, String description) { + accessor.setDescription(rootCause, description); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentRootCauseTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentRootCauseTransforms.java new file mode 100644 index 000000000000..5076e6d7de99 --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentRootCauseTransforms.java @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.implementation.models.RootCause; +import com.azure.ai.metricsadvisor.implementation.models.RootCauseList; +import com.azure.ai.metricsadvisor.models.DimensionKey; +import com.azure.ai.metricsadvisor.models.IncidentRootCause; +import com.azure.core.http.rest.PagedResponse; +import com.azure.core.http.rest.PagedResponseBase; +import com.azure.core.http.rest.Response; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class IncidentRootCauseTransforms { + public static PagedResponse fromInnerResponse(Response innerResponse) { + final RootCauseList innerRootCauseList = innerResponse.getValue(); + if (innerRootCauseList == null || innerRootCauseList.getValue() == null) { + return new PagedResponseBase<>( + innerResponse.getRequest(), + innerResponse.getStatusCode(), + innerResponse.getHeaders(), + new ArrayList<>(), + null, + null); + } else { + final List rootCauseList = innerRootCauseList.getValue() + .stream() + .map(inner -> IncidentRootCauseTransforms.fromInner(inner)) + .collect(Collectors.toList()); + return new PagedResponseBase<>( + innerResponse.getRequest(), + innerResponse.getStatusCode(), + innerResponse.getHeaders(), + rootCauseList, + null, + null); + } + } + + public static IncidentRootCause fromInner(RootCause inner) { + final IncidentRootCause incidentRootCause = new IncidentRootCause(); + IncidentRootCauseHelper.setSeriesKey(incidentRootCause, new DimensionKey(inner.getRootCause().getDimension())); + IncidentRootCauseHelper.setPaths(incidentRootCause, inner.getPath()); + IncidentRootCauseHelper.setConfidenceScore(incidentRootCause, inner.getScore()); + IncidentRootCauseHelper.setDescription(incidentRootCause, inner.getDescription()); + return incidentRootCause; + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentTransforms.java index 48657f8c9271..f19f37210f64 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentTransforms.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/IncidentTransforms.java @@ -41,31 +41,25 @@ public static PagedResponse fromInnerPagedResponse(PagedResponse timestampList); + void setValueList(MetricEnrichedSeriesData seriesData, List valueList); + void setIsAnomalyList(MetricEnrichedSeriesData seriesData, List isAnomalyList); + void setPeriodList(MetricEnrichedSeriesData seriesData, List periodList); + void setExpectedValueList(MetricEnrichedSeriesData seriesData, List expectedValueList); + void setLowerBoundaryList(MetricEnrichedSeriesData seriesData, List lowerBoundaryList); + void setUpperBoundaryList(MetricEnrichedSeriesData seriesData, List upperBoundaryList); + } + + /** + * The method called from {@link MetricEnrichedSeriesData} to set it's accessor. + * + * @param seriesDataAccessor The accessor. + */ + public static void setAccessor(final MetricEnrichedSeriesDataAccessor seriesDataAccessor) { + accessor = seriesDataAccessor; + } + + static void setSeriesKey(MetricEnrichedSeriesData seriesData, DimensionKey seriesKey) { + accessor.setSeriesKey(seriesData, seriesKey); + } + + static void setTimestampList(MetricEnrichedSeriesData seriesData, List timestampList) { + accessor.setTimestampList(seriesData, timestampList); + } + + static void setValueList(MetricEnrichedSeriesData seriesData, List valueList) { + accessor.setValueList(seriesData, valueList); + } + + static void setIsAnomalyList(MetricEnrichedSeriesData seriesData, List isAnomalyList) { + accessor.setIsAnomalyList(seriesData, isAnomalyList); + } + + static void setPeriodList(MetricEnrichedSeriesData seriesData, List periodList) { + accessor.setPeriodList(seriesData, periodList); + } + + static void setExpectedValueList(MetricEnrichedSeriesData seriesData, List expectedValueList) { + accessor.setExpectedValueList(seriesData, expectedValueList); + } + + static void setLowerBoundaryList(MetricEnrichedSeriesData seriesData, List lowerBoundaryList) { + accessor.setLowerBoundaryList(seriesData, lowerBoundaryList); + } + + static void setUpperBoundaryList(MetricEnrichedSeriesData seriesData, List upperBoundaryList) { + accessor.setUpperBoundaryList(seriesData, upperBoundaryList); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricEnrichedSeriesDataTransformations.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricEnrichedSeriesDataTransformations.java index 9fbfee88cb6a..18011e56f7db 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricEnrichedSeriesDataTransformations.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricEnrichedSeriesDataTransformations.java @@ -31,57 +31,49 @@ private static MetricEnrichedSeriesData fromInner(SeriesResult innerEnrichedSeri } else { seriesKey = new DimensionKey(); } - PrivateFieldAccessHelper.set(enrichedSeriesData, - "seriesKey", seriesKey); + MetricEnrichedSeriesDataHelper.setSeriesKey(enrichedSeriesData, seriesKey); List timestampList = innerEnrichedSeriesData.getTimestampList(); if (timestampList == null) { timestampList = new ArrayList<>(); } - PrivateFieldAccessHelper.set(enrichedSeriesData, - "timestampList", timestampList); + MetricEnrichedSeriesDataHelper.setTimestampList(enrichedSeriesData, timestampList); List valueList = innerEnrichedSeriesData.getValueList(); if (valueList == null) { valueList = new ArrayList<>(); } - PrivateFieldAccessHelper.set(enrichedSeriesData, - "valueList", valueList); + MetricEnrichedSeriesDataHelper.setValueList(enrichedSeriesData, valueList); List isAnomalyList = innerEnrichedSeriesData.getIsAnomalyList(); if (isAnomalyList == null) { isAnomalyList = new ArrayList<>(); } - PrivateFieldAccessHelper.set(enrichedSeriesData, - "isAnomalyList", isAnomalyList); + MetricEnrichedSeriesDataHelper.setIsAnomalyList(enrichedSeriesData, isAnomalyList); List periodList = innerEnrichedSeriesData.getPeriodList(); if (periodList == null) { periodList = new ArrayList<>(); } - PrivateFieldAccessHelper.set(enrichedSeriesData, - "periodList", periodList); + MetricEnrichedSeriesDataHelper.setPeriodList(enrichedSeriesData, periodList); List expectedValueList = innerEnrichedSeriesData.getExpectedValueList(); if (expectedValueList == null) { expectedValueList = new ArrayList<>(); } - PrivateFieldAccessHelper.set(enrichedSeriesData, - "expectedValueList", expectedValueList); + MetricEnrichedSeriesDataHelper.setExpectedValueList(enrichedSeriesData, expectedValueList); List lowerBoundList = innerEnrichedSeriesData.getLowerBoundaryList(); if (lowerBoundList == null) { lowerBoundList = new ArrayList<>(); } - PrivateFieldAccessHelper.set(enrichedSeriesData, - "lowerBoundaryList", lowerBoundList); + MetricEnrichedSeriesDataHelper.setLowerBoundaryList(enrichedSeriesData, lowerBoundList); List upperBoundList = innerEnrichedSeriesData.getUpperBoundaryList(); if (upperBoundList == null) { upperBoundList = new ArrayList<>(); } - PrivateFieldAccessHelper.set(enrichedSeriesData, - "upperBoundaryList", upperBoundList); + MetricEnrichedSeriesDataHelper.setUpperBoundaryList(enrichedSeriesData, upperBoundList); return enrichedSeriesData; } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricFeedbackHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricFeedbackHelper.java new file mode 100644 index 000000000000..792e4dabdd11 --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricFeedbackHelper.java @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.models.FeedbackType; +import com.azure.ai.metricsadvisor.models.MetricFeedback; + +import java.time.OffsetDateTime; + +/** + * The helper class to set the non-public properties of an {@link MetricFeedback} instance. + */ +public final class MetricFeedbackHelper { + private static MetricFeedbackAccessor accessor; + + private MetricFeedbackHelper() { } + + /** + * Type defining the methods to set the non-public properties of an {@link MetricFeedback} instance. + */ + public interface MetricFeedbackAccessor { + void setId(MetricFeedback feedback, String id); + void setMetricId(MetricFeedback feedback, String metricId); + void setCreatedTime(MetricFeedback feedback, OffsetDateTime createdTime); + void setUserPrincipal(MetricFeedback feedback, String userPrincipal); + void setFeedbackType(MetricFeedback feedback, FeedbackType feedbackType); + } + + /** + * The method called from {@link MetricFeedback} to set it's accessor. + * + * @param feedbackAccessor The accessor. + */ + public static void setAccessor(final MetricFeedbackAccessor feedbackAccessor) { + accessor = feedbackAccessor; + } + + static void setId(MetricFeedback feedback, String id) { + accessor.setId(feedback, id); + } + + static void setMetricId(MetricFeedback feedback, String metricId) { + accessor.setMetricId(feedback, metricId); + } + + static void setCreatedTime(MetricFeedback feedback, OffsetDateTime createdTime) { + accessor.setCreatedTime(feedback, createdTime); + } + + static void setUserPrincipal(MetricFeedback feedback, String userPrincipal) { + accessor.setUserPrincipal(feedback, userPrincipal); + } + + static void setFeedbackType(MetricFeedback feedback, FeedbackType feedbackType) { + accessor.setFeedbackType(feedback, feedbackType); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricFeedbackTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricFeedbackTransforms.java index 96d7791a350f..ab01a5c3dc33 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricFeedbackTransforms.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricFeedbackTransforms.java @@ -57,41 +57,41 @@ public static MetricFeedback fromInner( anomalyFeedback.getAnomalyDetectionConfigurationId() != null ? anomalyFeedback.getAnomalyDetectionConfigurationId().toString() : null); - PrivateFieldAccessHelper.set(((MetricAnomalyFeedback) metricFeedback), "detectionConfiguration", - anomalyFeedback.getAnomalyDetectionConfigurationSnapshot() != null - ? DetectionConfigurationTransforms.fromInner(anomalyFeedback.getAnomalyDetectionConfigurationSnapshot()) - : null); - PrivateFieldAccessHelper.set(metricFeedback, "feedbackType", FeedbackType.ANOMALY); + + if (anomalyFeedback.getAnomalyDetectionConfigurationSnapshot() != null) { + MetricAnomalyFeedbackHelper.setDetectionConfiguration((MetricAnomalyFeedback) metricFeedback, + DetectionConfigurationTransforms + .fromInner(anomalyFeedback.getAnomalyDetectionConfigurationSnapshot())); + } + MetricFeedbackHelper.setFeedbackType(metricFeedback, FeedbackType.ANOMALY); } else if (metricFeedbackValue instanceof ChangePointFeedback) { final ChangePointFeedback changePointFeedback = (ChangePointFeedback) metricFeedbackValue; metricFeedback = new MetricChangePointFeedback( changePointFeedback.getStartTime(), changePointFeedback.getEndTime(), ChangePointValue.fromString(changePointFeedback.getValue().getChangePointValue().toString())); - PrivateFieldAccessHelper.set(metricFeedback, "feedbackType", FeedbackType.CHANGE_POINT); + MetricFeedbackHelper.setFeedbackType(metricFeedback, FeedbackType.CHANGE_POINT); } else if (metricFeedbackValue instanceof PeriodFeedback) { final PeriodFeedback periodFeedback = (PeriodFeedback) metricFeedbackValue; metricFeedback = new MetricPeriodFeedback( PeriodType.fromString(periodFeedback.getValue().getPeriodType().toString()), periodFeedback.getValue().getPeriodValue()); - PrivateFieldAccessHelper.set(metricFeedback, "feedbackType", FeedbackType.PERIOD); + MetricFeedbackHelper.setFeedbackType(metricFeedback, FeedbackType.PERIOD); } else if (metricFeedbackValue instanceof CommentFeedback) { final CommentFeedback commentFeedback = (CommentFeedback) metricFeedbackValue; metricFeedback = new MetricCommentFeedback( commentFeedback.getStartTime(), commentFeedback.getEndTime(), commentFeedback.getValue().getCommentValue()); - PrivateFieldAccessHelper.set(metricFeedback, "feedbackType", FeedbackType.COMMENT); + MetricFeedbackHelper.setFeedbackType(metricFeedback, FeedbackType.COMMENT); } else { throw LOGGER.logExceptionAsError(new IllegalArgumentException("Unknown feedback type.")); } - PrivateFieldAccessHelper.set(metricFeedback, "id", metricFeedbackValue.getFeedbackId().toString()); - PrivateFieldAccessHelper.set(metricFeedback, "metricId", metricFeedbackValue.getMetricId().toString()); - PrivateFieldAccessHelper.set(metricFeedback, "createdTime", metricFeedbackValue.getCreatedTime()); - PrivateFieldAccessHelper.set(metricFeedback, "userPrincipal", metricFeedbackValue.getUserPrincipal()); - PrivateFieldAccessHelper.set(metricFeedback, "dimensionFilter", - new DimensionKey(metricFeedbackValue.getDimensionFilter().getDimension())); - + MetricFeedbackHelper.setId(metricFeedback, metricFeedbackValue.getFeedbackId().toString()); + MetricFeedbackHelper.setMetricId(metricFeedback, metricFeedbackValue.getMetricId().toString()); + MetricFeedbackHelper.setCreatedTime(metricFeedback, metricFeedbackValue.getCreatedTime()); + MetricFeedbackHelper.setUserPrincipal(metricFeedback, metricFeedbackValue.getUserPrincipal()); + metricFeedback.setDimensionFilter(new DimensionKey(metricFeedbackValue.getDimensionFilter().getDimension())); return metricFeedback; } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDataHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDataHelper.java new file mode 100644 index 000000000000..5496a5f40cae --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDataHelper.java @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.models.DimensionKey; +import com.azure.ai.metricsadvisor.models.MetricSeriesData; + +import java.time.OffsetDateTime; +import java.util.List; + +/** + * The helper class to set the non-public properties of an {@link MetricSeriesData} instance. + */ +public final class MetricSeriesDataHelper { + private static MetricSeriesDataAccessor accessor; + + private MetricSeriesDataHelper() { } + + /** + * Type defining the methods to set the non-public properties of an {@link MetricSeriesData} instance. + */ + public interface MetricSeriesDataAccessor { + void setMetricId(MetricSeriesData seriesData, String metricId); + void setSeriesKey(MetricSeriesData seriesData, DimensionKey seriesKey); + void setTimestampList(MetricSeriesData seriesData, List timestampList); + void setValueList(MetricSeriesData seriesData, List valueList); + } + + /** + * The method called from {@link MetricSeriesData} to set it's accessor. + * + * @param seriesDataAccessor The accessor. + */ + public static void setAccessor(final MetricSeriesDataAccessor seriesDataAccessor) { + accessor = seriesDataAccessor; + } + + static void setMetricId(MetricSeriesData seriesData, String metricId) { + accessor.setMetricId(seriesData, metricId); + } + + static void setSeriesKey(MetricSeriesData seriesData, DimensionKey seriesKey) { + accessor.setSeriesKey(seriesData, seriesKey); + } + + static void setTimestampList(MetricSeriesData seriesData, List timestampList) { + accessor.setTimestampList(seriesData, timestampList); + } + + static void setValueList(MetricSeriesData seriesData, List valueList) { + accessor.setValueList(seriesData, valueList); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDataTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDataTransforms.java new file mode 100644 index 000000000000..9757d4ed58d0 --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDataTransforms.java @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.implementation.models.MetricDataList; +import com.azure.ai.metricsadvisor.models.DimensionKey; +import com.azure.ai.metricsadvisor.models.MetricSeriesData; +import com.azure.core.http.rest.PagedResponse; +import com.azure.core.http.rest.PagedResponseBase; +import com.azure.core.http.rest.Response; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class MetricSeriesDataTransforms { + public static PagedResponse fromInnerResponse(Response innerResponse) { + final MetricDataList innerMetricDataList = innerResponse.getValue(); + if (innerMetricDataList == null || innerMetricDataList.getValue() == null) { + return new PagedResponseBase<>( + innerResponse.getRequest(), + innerResponse.getStatusCode(), + innerResponse.getHeaders(), + new ArrayList<>(), + null, + null); + } else { + final List metricSeriesDataList = innerMetricDataList.getValue() + .stream() + .map(inner -> MetricSeriesDataTransforms.fromInner(inner)) + .collect(Collectors.toList()); + return new PagedResponseBase<>( + innerResponse.getRequest(), + innerResponse.getStatusCode(), + innerResponse.getHeaders(), + metricSeriesDataList, + null, + null); + } + } + + public static MetricSeriesData fromInner(com.azure.ai.metricsadvisor.implementation.models.MetricSeriesData inner) { + MetricSeriesData metricSeriesData = new MetricSeriesData(); + MetricSeriesDataHelper.setMetricId(metricSeriesData, inner.getId().getMetricId().toString()); + MetricSeriesDataHelper.setSeriesKey(metricSeriesData, new DimensionKey(inner.getId().getDimension())); + MetricSeriesDataHelper.setTimestampList(metricSeriesData, inner.getTimestampList()); + MetricSeriesDataHelper.setValueList(metricSeriesData, inner.getValueList()); + return metricSeriesData; + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDefinitionHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDefinitionHelper.java new file mode 100644 index 000000000000..e3e891130385 --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDefinitionHelper.java @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.models.DimensionKey; +import com.azure.ai.metricsadvisor.models.MetricSeriesDefinition; + +/** + * The helper class to set the non-public properties of an {@link MetricSeriesDefinition} instance. + */ +public final class MetricSeriesDefinitionHelper { + private static MetricSeriesDefinitionAccessor accessor; + + private MetricSeriesDefinitionHelper() { } + + /** + * Type defining the methods to set the non-public properties of an {@link MetricSeriesDefinition} instance. + */ + public interface MetricSeriesDefinitionAccessor { + void setMetricId(MetricSeriesDefinition seriesDefinition, String metricId); + void setSeriesKey(MetricSeriesDefinition seriesDefinition, DimensionKey seriesKey); + } + + /** + * The method called from {@link MetricSeriesDefinition} to set it's accessor. + * + * @param seriesDefinitionAccessor The accessor. + */ + public static void setAccessor(final MetricSeriesDefinitionAccessor seriesDefinitionAccessor) { + accessor = seriesDefinitionAccessor; + } + + static void setMetricId(MetricSeriesDefinition seriesDefinition, String metricId) { + accessor.setMetricId(seriesDefinition, metricId); + } + + static void setSeriesKey(MetricSeriesDefinition seriesDefinition, DimensionKey seriesKey) { + accessor.setSeriesKey(seriesDefinition, seriesKey); + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDefinitionTransforms.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDefinitionTransforms.java new file mode 100644 index 000000000000..6c8dbf17cedc --- /dev/null +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/MetricSeriesDefinitionTransforms.java @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.metricsadvisor.implementation.util; + +import com.azure.ai.metricsadvisor.implementation.models.MetricSeriesItem; +import com.azure.ai.metricsadvisor.models.DimensionKey; +import com.azure.ai.metricsadvisor.models.MetricSeriesDefinition; +import com.azure.core.http.rest.PagedResponse; +import com.azure.core.http.rest.PagedResponseBase; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class MetricSeriesDefinitionTransforms { + public static PagedResponse fromInnerResponse( + PagedResponse innerResponse) { + final List innerMetricSeriesDefinitionList = innerResponse.getValue(); + if (innerMetricSeriesDefinitionList == null) { + return new PagedResponseBase<>( + innerResponse.getRequest(), + innerResponse.getStatusCode(), + innerResponse.getHeaders(), + new ArrayList<>(), + innerResponse.getContinuationToken(), + null); + } else { + final List metricSeriesDefinitionList = innerMetricSeriesDefinitionList.stream() + .map(inner -> MetricSeriesDefinitionTransforms.fromInner(inner)) + .collect(Collectors.toList()); + return new PagedResponseBase<>( + innerResponse.getRequest(), + innerResponse.getStatusCode(), + innerResponse.getHeaders(), + metricSeriesDefinitionList, + innerResponse.getContinuationToken(), + null); + } + } + + public static MetricSeriesDefinition fromInner(MetricSeriesItem inner) { + MetricSeriesDefinition seriesDefinition = new MetricSeriesDefinition(); + MetricSeriesDefinitionHelper.setMetricId(seriesDefinition, inner.getMetricId().toString()); + MetricSeriesDefinitionHelper.setSeriesKey(seriesDefinition, new DimensionKey(inner.getDimension())); + return seriesDefinition; + } +} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/PrivateFieldAccessHelper.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/PrivateFieldAccessHelper.java deleted file mode 100644 index 966facaabebc..000000000000 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/PrivateFieldAccessHelper.java +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.ai.metricsadvisor.implementation.util; - -import com.azure.core.util.logging.ClientLogger; - -import java.lang.reflect.Field; -import java.security.AccessController; -import java.security.PrivilegedAction; - -/** - * The helper class for getter only models converters. - */ -public final class PrivateFieldAccessHelper { - private static final ClientLogger LOGGER = new ClientLogger(PrivateFieldAccessHelper.class); - - private PrivateFieldAccessHelper() { - } - - /** - * Set value to the model private properties. - * - * @param obj The instance which sets the value to. - * @param fieldName The fieldName to set. - * @param value The value sets to the instance - * @param Generic type of models. - */ - @SuppressWarnings("unchecked") - public static void set(T obj, String fieldName, Object value) { - try { - Field field; - try { - field = obj.getClass().getDeclaredField(fieldName); - } catch (NoSuchFieldException e) { - field = obj.getClass().getSuperclass().getDeclaredField(fieldName); - } - if (!field.isAccessible()) { - final Field finalField = field; - AccessController.doPrivileged(new PrivilegedAction() { - @Override - public T run() { - finalField.setAccessible(true); - return null; - } - }); - } - field.set(obj, value); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw LOGGER.logExceptionAsError(new RuntimeException(e)); - } - } - - /** - * Get values out from private private. - * - * @param obj The instance which gets the value from. - * @param fieldName The field name to get - * @param outputClass The field property class. - * @param Generic type of models. - * @param The type of the field properties. - * @return The values of instance property. - */ - @SuppressWarnings("unchecked") - public static I get(T obj, String fieldName, Class outputClass) { - - try { - Field field = obj.getClass().getDeclaredField(fieldName); - if (!field.isAccessible()) { - AccessController.doPrivileged(new PrivilegedAction() { - @Override - public T run() { - field.setAccessible(true); - return null; - } - }); - } - return (I) field.get(obj); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw LOGGER.logExceptionAsError(new RuntimeException(e)); - } - } -} diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Anomaly.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Anomaly.java index 1872922866dd..c55eabf56844 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Anomaly.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Anomaly.java @@ -3,6 +3,8 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.AnomalyHelper; + import java.time.OffsetDateTime; /** @@ -18,6 +20,50 @@ public final class Anomaly { private OffsetDateTime createdTime; private OffsetDateTime modifiedTime; + static { + AnomalyHelper.setAccessor(new AnomalyHelper.AnomalyAccessor() { + @Override + public void setMetricId(Anomaly anomaly, String metricId) { + anomaly.setMetricId(metricId); + } + + @Override + public void setSeriesKey(Anomaly anomaly, DimensionKey seriesKey) { + anomaly.setSeriesKey(seriesKey); + } + + @Override + public void setDetectionConfigurationId(Anomaly anomaly, String detectionConfigurationId) { + anomaly.setDetectionConfigurationId(detectionConfigurationId); + } + + @Override + public void setSeverity(Anomaly anomaly, Severity severity) { + anomaly.setSeverity(severity); + } + + @Override + public void setStatus(Anomaly anomaly, AnomalyStatus status) { + anomaly.setStatus(status); + } + + @Override + public void setTimeStamp(Anomaly anomaly, OffsetDateTime timeStamp) { + anomaly.setTimeStamp(timeStamp); + } + + @Override + public void setCreatedTime(Anomaly anomaly, OffsetDateTime createdTime) { + anomaly.setCreatedTime(createdTime); + } + + @Override + public void setModifiedTime(Anomaly anomaly, OffsetDateTime modifiedTime) { + anomaly.setModifiedTime(modifiedTime); + } + }); + } + /** * Gets the metric id. * @@ -89,4 +135,37 @@ public OffsetDateTime getCreatedTime() { public OffsetDateTime getModifiedTime() { return this.modifiedTime; } + + + void setMetricId(String metricId) { + this.metricId = metricId; + } + + void setSeriesKey(DimensionKey seriesKey) { + this.seriesKey = seriesKey; + } + + void setDetectionConfigurationId(String detectionConfigurationId) { + this.detectionConfigurationId = detectionConfigurationId; + } + + void setSeverity(Severity severity) { + this.severity = severity; + } + + void setStatus(AnomalyStatus status) { + this.status = status; + } + + void setTimeStamp(OffsetDateTime timeStamp) { + this.timeStamp = timeStamp; + } + + void setCreatedTime(OffsetDateTime createdTime) { + this.createdTime = createdTime; + } + + void setModifiedTime(OffsetDateTime modifiedTime) { + this.modifiedTime = modifiedTime; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/AnomalyAlertConfiguration.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/AnomalyAlertConfiguration.java index fa75b57b944d..086de32e93e4 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/AnomalyAlertConfiguration.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/AnomalyAlertConfiguration.java @@ -3,6 +3,7 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.AnomalyAlertConfigurationHelper; import com.azure.core.annotation.Fluent; import java.util.ArrayList; @@ -21,6 +22,12 @@ public final class AnomalyAlertConfiguration { private List metricAnomalyAlertConfigurations; private List hookIds; + static { + AnomalyAlertConfigurationHelper.setAccessor((configuration, id) -> { + configuration.setId(id); + }); + } + /** * Create a new instance of AnomalyAlertConfiguration. * @@ -192,4 +199,8 @@ public AnomalyAlertConfiguration setIdOfHooksToAlert(List hookIds) { } return this; } + + void setId(String id) { + this.id = id; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/AnomalyDetectionConfiguration.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/AnomalyDetectionConfiguration.java index 4546e107f63d..c4e8ab1a95bd 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/AnomalyDetectionConfiguration.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/AnomalyDetectionConfiguration.java @@ -3,6 +3,8 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.AnomalyDetectionConfigurationHelper; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -19,6 +21,21 @@ public final class AnomalyDetectionConfiguration { private final List seriesGroupConditions; private final List seriesConditions; + static { + AnomalyDetectionConfigurationHelper + .setAccessor(new AnomalyDetectionConfigurationHelper.AnomalyDetectionConfigurationAccessor() { + @Override + public void setId(AnomalyDetectionConfiguration configuration, String id) { + configuration.setId(id); + } + + @Override + public void setMetricId(AnomalyDetectionConfiguration configuration, String metricId) { + configuration.setMetricId(metricId); + } + }); + } + /** * Create a new instance of MetricAnomalyDetectionConfiguration. * @@ -214,4 +231,12 @@ public AnomalyDetectionConfiguration removeSingleSeriesDetectionCondition( } return this; } + + void setId(String id) { + this.id = id; + } + + void setMetricId(String metricId) { + this.metricId = metricId; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/DataFeed.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/DataFeed.java index 318e0d95b279..8f67922b184a 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/DataFeed.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/DataFeed.java @@ -3,6 +3,7 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.DataFeedHelper; import com.azure.core.annotation.Fluent; import java.time.OffsetDateTime; @@ -27,6 +28,44 @@ public final class DataFeed { private String dataFeedName; private DataFeedSchema dataFeedSchema; + static { + DataFeedHelper.setAccessor(new DataFeedHelper.DataFeedAccessor() { + @Override + public void setId(DataFeed feed, String id) { + feed.setId(id); + } + + @Override + public void setMetricIds(DataFeed feed, List metricIds) { + feed.setMetricIds(metricIds); + } + + @Override + public void setCreatedTime(DataFeed feed, OffsetDateTime createdTime) { + feed.setCreatedTime(createdTime); + } + + @Override + public void setStatus(DataFeed feed, DataFeedStatus dataFeedStatus) { + feed.setStatus(dataFeedStatus); + } + + @Override + public void setSourceType(DataFeed feed, DataFeedSourceType dataFeedSourceType) { + feed.setSourceType(dataFeedSourceType); + } + + @Override + public void setIsAdmin(DataFeed feed, boolean isAdmin) { + feed.setIsAdmin(isAdmin); + } + + @Override + public void setCreator(DataFeed feed, String creator) { + feed.setCreator(creator); + } + }); + } // ReadOnly:start /** @@ -219,4 +258,32 @@ public DataFeed setOptions(DataFeedOptions dataFeedOptions) { this.dataFeedOptions = dataFeedOptions; return null; } + + void setId(String id) { + this.id = id; + } + + void setMetricIds(List metricIds) { + this.metricIds = metricIds; + } + + void setCreatedTime(OffsetDateTime createdTime) { + this.createdTime = createdTime; + } + + void setStatus(DataFeedStatus dataFeedStatus) { + this.dataFeedStatus = dataFeedStatus; + } + + void setSourceType(DataFeedSourceType dataFeedSourceType) { + this.dataFeedSourceType = dataFeedSourceType; + } + + void setIsAdmin(boolean isAdmin) { + this.isAdmin = isAdmin; + } + + void setCreator(String creator) { + this.creator = creator; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/EmailHook.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/EmailHook.java index da96238a8ba9..0fa6aca61746 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/EmailHook.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/EmailHook.java @@ -13,10 +13,8 @@ * A hook that describes email based incident alerts notification. */ public final class EmailHook extends Hook { - private String id; private String name; private String description; - private List admins; private List emailsToAlert; private String externalLink; @@ -45,11 +43,6 @@ public EmailHook(String name, List emails) { this.name = name; } - @Override - public String getId() { - return this.id; - } - @Override public String getName() { return this.name; @@ -60,11 +53,6 @@ public String getDescription() { return this.description; } - @Override - public List getAdmins() { - return this.admins; - } - /** * Gets the emails to send the alerts. * diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Hook.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Hook.java index 65d4d99dc97f..d736c2a5ab57 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Hook.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Hook.java @@ -3,18 +3,39 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.HookHelper; + import java.util.List; /** * Describes a hook that receives anomaly incident alerts. */ public abstract class Hook { + private String id; + private List admins; + + static { + HookHelper.setAccessor(new HookHelper.HookAccessor() { + @Override + public void setId(Hook hook, String id) { + hook.setId(id); + } + + @Override + public void setAdmins(Hook hook, List admins) { + hook.setAdmins(admins); + } + }); + } + /** * Gets the id. * * @return The id. */ - public abstract String getId(); + public String getId() { + return this.id; + } /** * Gets the name for the email hook. @@ -35,5 +56,15 @@ public abstract class Hook { * * @return The admins. */ - public abstract List getAdmins(); + public List getAdmins() { + return this.admins; + } + + void setId(String id) { + this.id = id; + } + + void setAdmins(List admins) { + this.admins = admins; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Incident.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Incident.java index 35a6801d6e81..6376d1edaa47 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Incident.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/Incident.java @@ -3,6 +3,8 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.IncidentHelper; + import java.time.OffsetDateTime; /** @@ -18,6 +20,49 @@ public final class Incident { private OffsetDateTime startTime; private OffsetDateTime lastTime; + static { + IncidentHelper.setAccessor(new IncidentHelper.IncidentAccessor() { + @Override + public void setId(Incident incident, String id) { + incident.setId(id); + } + + @Override + public void setMetricId(Incident incident, String metricId) { + incident.setMetricId(metricId); + } + + @Override + public void setDetectionConfigurationId(Incident incident, String detectionConfigurationId) { + incident.setDetectionConfigurationId(detectionConfigurationId); + } + + @Override + public void setRootDimensionKey(Incident incident, DimensionKey rootDimensionKey) { + incident.setRootDimensionKey(rootDimensionKey); + } + + @Override + public void setSeverity(Incident incident, Severity severity) { + incident.setSeverity(severity); + } + + @Override + public void setStatus(Incident incident, IncidentStatus status) { + incident.setStatus(status); + } + + @Override + public void setStartTime(Incident incident, OffsetDateTime startTime) { + incident.setStartTime(startTime); + } + + @Override + public void setLastTime(Incident incident, OffsetDateTime lastTime) { + incident.setLastTime(lastTime); + } + }); + } /** * Gets the incident id. * @@ -92,4 +137,36 @@ public OffsetDateTime getStartTime() { public OffsetDateTime getLastTime() { return this.lastTime; } + + void setId(String id) { + this.id = id; + } + + void setMetricId(String metricId) { + this.metricId = metricId; + } + + void setDetectionConfigurationId(String detectionConfigurationId) { + this.detectionConfigurationId = detectionConfigurationId; + } + + void setRootDimensionKey(DimensionKey rootDimensionKey) { + this.rootDimensionKey = rootDimensionKey; + } + + void setSeverity(Severity severity) { + this.severity = severity; + } + + void setStatus(IncidentStatus status) { + this.status = status; + } + + void setStartTime(OffsetDateTime startTime) { + this.startTime = startTime; + } + + void setLastTime(OffsetDateTime lastTime) { + this.lastTime = lastTime; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/IncidentRootCause.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/IncidentRootCause.java index 0e8e4f042e8c..97299df139a2 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/IncidentRootCause.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/IncidentRootCause.java @@ -3,6 +3,8 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.IncidentRootCauseHelper; + import java.util.List; /** @@ -14,6 +16,31 @@ public final class IncidentRootCause { private double confidenceScore; private String description; + static { + IncidentRootCauseHelper.setAccessor(new IncidentRootCauseHelper.IncidentRootCauseAccessor() { + @Override + public void setSeriesKey(IncidentRootCause rootCause, DimensionKey seriesKey) { + rootCause.setSeriesKey(seriesKey); + } + + @Override + public void setPaths(IncidentRootCause rootCause, List paths) { + rootCause.setPaths(paths); + + } + + @Override + public void setConfidenceScore(IncidentRootCause rootCause, double confidenceScore) { + rootCause.setConfidenceScore(confidenceScore); + } + + @Override + public void setDescription(IncidentRootCause rootCause, String description) { + rootCause.setDescription(description); + } + }); + } + /** * Get the dimension name and value pair. *

A {@link DimensionKey} can hold such a combination, for example, @@ -53,4 +80,20 @@ public double getConfidenceScore() { public String getDescription() { return this.description; } + + void setSeriesKey(DimensionKey seriesKey) { + this.seriesKey = seriesKey; + } + + void setPaths(List paths) { + this.paths = paths; + } + + void setConfidenceScore(double confidenceScore) { + this.confidenceScore = confidenceScore; + } + + void setDescription(String description) { + this.description = description; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricAnomalyFeedback.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricAnomalyFeedback.java index fb2fd6ef80ad..46162f1e7adb 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricAnomalyFeedback.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricAnomalyFeedback.java @@ -3,6 +3,7 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.MetricAnomalyFeedbackHelper; import com.azure.core.annotation.Fluent; import java.time.OffsetDateTime; @@ -18,6 +19,15 @@ public final class MetricAnomalyFeedback extends MetricFeedback { private AnomalyDetectionConfiguration detectionConfiguration; private String detectionConfigurationId; + static { + MetricAnomalyFeedbackHelper.setAccessor(new MetricAnomalyFeedbackHelper.MetricAnomalyFeedbackAccessor() { + @Override + public void setDetectionConfiguration(MetricAnomalyFeedback feedback, + AnomalyDetectionConfiguration configuration) { + feedback.setDetectionConfiguration(configuration); + } + }); + } /** * Creates an instance of MetricAnomalyFeedback. * @@ -93,4 +103,8 @@ public MetricAnomalyFeedback setDetectionConfigurationId( public String getDetectionConfigurationId() { return detectionConfigurationId; } + + void setDetectionConfiguration(AnomalyDetectionConfiguration configuration) { + this.detectionConfiguration = configuration; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricBoundaryCondition.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricBoundaryCondition.java index c619dc620916..899ce69c97f6 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricBoundaryCondition.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricBoundaryCondition.java @@ -3,6 +3,8 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.MetricBoundaryConditionHelper; + /** * Defines the boundary conditions for the anomaly (abnormal data points) * to be included in the alert. @@ -14,6 +16,25 @@ public final class MetricBoundaryCondition { private String companionMetricId; private Boolean alertIfMissing; + static { + MetricBoundaryConditionHelper.setAccessor(new MetricBoundaryConditionHelper.MetricBoundaryConditionAccessor() { + @Override + public void setLowerBoundary(MetricBoundaryCondition condition, Double lowerBoundary) { + condition.setLowerBoundary(lowerBoundary); + } + + @Override + public void setUpperBoundary(MetricBoundaryCondition condition, Double upperBoundary) { + condition.setUpperBoundary(upperBoundary); + } + + @Override + public void setBoundaryDirection(MetricBoundaryCondition condition, BoundaryDirection boundaryDirection) { + condition.setBoundaryDirection(boundaryDirection); + } + }); + } + /** * Gets the boundary direction. * @@ -145,4 +166,16 @@ public MetricBoundaryCondition setCompanionMetricId(String companionMetricId, this.alertIfMissing = alertIfMissing; return this; } + + void setLowerBoundary(Double lowerBoundary) { + this.lowerBoundary = lowerBoundary; + } + + void setUpperBoundary(Double upperBoundary) { + this.upperBoundary = upperBoundary; + } + + void setBoundaryDirection(BoundaryDirection boundaryDirection) { + this.boundaryDirection = boundaryDirection; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricEnrichedSeriesData.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricEnrichedSeriesData.java index 68d971d86366..0478f3990dba 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricEnrichedSeriesData.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricEnrichedSeriesData.java @@ -4,6 +4,8 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.MetricEnrichedSeriesDataHelper; + import java.time.OffsetDateTime; import java.util.Collections; import java.util.List; @@ -22,6 +24,51 @@ public final class MetricEnrichedSeriesData { private List lowerBoundaryList; private List upperBoundaryList; + static { + MetricEnrichedSeriesDataHelper + .setAccessor(new MetricEnrichedSeriesDataHelper.MetricEnrichedSeriesDataAccessor() { + @Override + public void setSeriesKey(MetricEnrichedSeriesData seriesData, DimensionKey seriesKey) { + seriesData.setSeriesKey(seriesKey); + } + + @Override + public void setTimestampList(MetricEnrichedSeriesData seriesData, List timestampList) { + seriesData.setTimestampList(timestampList); + } + + @Override + public void setValueList(MetricEnrichedSeriesData seriesData, List valueList) { + seriesData.setValueList(valueList); + } + + @Override + public void setIsAnomalyList(MetricEnrichedSeriesData seriesData, List isAnomalyList) { + seriesData.setIsAnomalyList(isAnomalyList); + } + + @Override + public void setPeriodList(MetricEnrichedSeriesData seriesData, List periodList) { + seriesData.setPeriodList(periodList); + } + + @Override + public void setExpectedValueList(MetricEnrichedSeriesData seriesData, List expectedValueList) { + seriesData.setExpectedValueList(expectedValueList); + } + + @Override + public void setLowerBoundaryList(MetricEnrichedSeriesData seriesData, List lowerBoundaryList) { + seriesData.setLowerBoundaryList(lowerBoundaryList); + } + + @Override + public void setUpperBoundaryList(MetricEnrichedSeriesData seriesData, List upperBoundaryList) { + seriesData.setUpperBoundaryList(upperBoundaryList); + } + }); + } + /** * Gets the key of the time series. * @@ -93,4 +140,36 @@ public List getLowerBoundaryList() { public List getUpperBoundaryList() { return Collections.unmodifiableList(this.upperBoundaryList); } + + void setSeriesKey(DimensionKey seriesKey) { + this.seriesKey = seriesKey; + } + + void setTimestampList(List timestampList) { + this.timestampList = timestampList; + } + + void setValueList(List valueList) { + this.valueList = valueList; + } + + void setIsAnomalyList(List isAnomalyList) { + this.isAnomalyList = isAnomalyList; + } + + void setPeriodList(List periodList) { + this.periodList = periodList; + } + + void setExpectedValueList(List expectedValueList) { + this.expectedValueList = expectedValueList; + } + + void setLowerBoundaryList(List lowerBoundaryList) { + this.lowerBoundaryList = lowerBoundaryList; + } + + void setUpperBoundaryList(List upperBoundaryList) { + this.upperBoundaryList = upperBoundaryList; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricFeedback.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricFeedback.java index a2580404bd66..0fd4b48c32f7 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricFeedback.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricFeedback.java @@ -3,6 +3,8 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.MetricFeedbackHelper; + import java.time.OffsetDateTime; /** @@ -16,6 +18,35 @@ public abstract class MetricFeedback { private FeedbackType feedbackType; private DimensionKey dimensionFilter; + static { + MetricFeedbackHelper.setAccessor(new MetricFeedbackHelper.MetricFeedbackAccessor() { + @Override + public void setId(MetricFeedback feedback, String id) { + feedback.setId(id); + } + + @Override + public void setMetricId(MetricFeedback feedback, String metricId) { + feedback.setMetricId(metricId); + } + + @Override + public void setCreatedTime(MetricFeedback feedback, OffsetDateTime createdTime) { + feedback.setCreatedTime(createdTime); + } + + @Override + public void setUserPrincipal(MetricFeedback feedback, String userPrincipal) { + feedback.setUserPrincipal(userPrincipal); + } + + @Override + public void setFeedbackType(MetricFeedback feedback, FeedbackType feedbackType) { + feedback.setFeedbackType(feedbackType); + } + }); + } + /** * Get the feedback unique id. * @@ -81,4 +112,24 @@ public MetricFeedback setDimensionFilter(final DimensionKey dimensionFilter) { this.dimensionFilter = dimensionFilter; return this; } + + void setId(String id) { + this.id = id; + } + + void setMetricId(String metricId) { + this.metricId = metricId; + } + + void setCreatedTime(OffsetDateTime createdTime) { + this.createdTime = createdTime; + } + + void setUserPrincipal(String userPrincipal) { + this.userPrincipal = userPrincipal; + } + + void setFeedbackType(FeedbackType feedbackType) { + this.feedbackType = feedbackType; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricSeriesData.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricSeriesData.java index ca0f8a0fea21..0218cc97ebec 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricSeriesData.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricSeriesData.java @@ -3,6 +3,8 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.MetricSeriesDataHelper; + import java.time.OffsetDateTime; import java.util.List; @@ -28,6 +30,30 @@ public final class MetricSeriesData { */ private List valueList; + static { + MetricSeriesDataHelper.setAccessor(new MetricSeriesDataHelper.MetricSeriesDataAccessor() { + @Override + public void setMetricId(MetricSeriesData seriesData, String metricId) { + seriesData.setMetricId(metricId); + } + + @Override + public void setSeriesKey(MetricSeriesData seriesData, DimensionKey seriesKey) { + seriesData.setSeriesKey(seriesKey); + } + + @Override + public void setTimestampList(MetricSeriesData seriesData, List timestampList) { + seriesData.setTimestampList(timestampList); + } + + @Override + public void setValueList(MetricSeriesData seriesData, List valueList) { + seriesData.setValueList(valueList); + } + }); + } + /** * Get the metricId property: metric unique id. * @@ -66,4 +92,20 @@ public List getTimestampList() { public List getValueList() { return this.valueList; } + + void setMetricId(String metricId) { + this.metricId = metricId; + } + + void setSeriesKey(DimensionKey seriesKey) { + this.seriesKey = seriesKey; + } + + void setTimestampList(List timestampList) { + this.timestampList = timestampList; + } + + void setValueList(List valueList) { + this.valueList = valueList; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricSeriesDefinition.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricSeriesDefinition.java index 3bf598c1b8c1..ea8450ff474e 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricSeriesDefinition.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/MetricSeriesDefinition.java @@ -4,6 +4,8 @@ package com.azure.ai.metricsadvisor.models; +import com.azure.ai.metricsadvisor.implementation.util.MetricSeriesDefinitionHelper; + /** The MetricSeriesDefinition model. */ public final class MetricSeriesDefinition { /* @@ -16,6 +18,20 @@ public final class MetricSeriesDefinition { */ private DimensionKey seriesKey; + static { + MetricSeriesDefinitionHelper.setAccessor(new MetricSeriesDefinitionHelper.MetricSeriesDefinitionAccessor() { + @Override + public void setMetricId(MetricSeriesDefinition seriesDefinition, String metricId) { + seriesDefinition.setMetricId(metricId); + } + + @Override + public void setSeriesKey(MetricSeriesDefinition seriesDefinition, DimensionKey seriesKey) { + seriesDefinition.setSeriesKey(seriesKey); + } + }); + } + /** * Get the metricId property: metric unique id. * @@ -33,4 +49,12 @@ public String getMetricId() { public DimensionKey getSeriesKey() { return this.seriesKey; } + + void setMetricId(String metricId) { + this.metricId = metricId; + } + + void setSeriesKey(DimensionKey seriesKey) { + this.seriesKey = seriesKey; + } } diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/WebHook.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/WebHook.java index 104e6b5b4ec6..ba2434551208 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/WebHook.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/models/WebHook.java @@ -5,16 +5,12 @@ import com.azure.core.http.HttpHeaders; -import java.util.List; - /** * A hook that describes web-hook based incident alerts notification. */ public final class WebHook extends Hook { - private String id; private String name; private String description; - private List admins; private String endpoint; private String externalLink; private String username; @@ -35,11 +31,6 @@ public WebHook(String name, String endpoint) { this.httpHeaders = new HttpHeaders(); } - @Override - public String getId() { - return this.id; - } - @Override public String getName() { return this.name; @@ -50,11 +41,6 @@ public String getDescription() { return this.description; } - @Override - public List getAdmins() { - return this.admins; - } - /** * Gets the web endpoint that receives incident alerts. * diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/IncidentRootCauseTestBase.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/IncidentRootCauseTestBase.java index 727160cb577b..9ed4d0b279bc 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/IncidentRootCauseTestBase.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/IncidentRootCauseTestBase.java @@ -3,8 +3,9 @@ package com.azure.ai.metricsadvisor; -import com.azure.ai.metricsadvisor.implementation.util.PrivateFieldAccessHelper; -import com.azure.ai.metricsadvisor.models.DimensionKey; +import com.azure.ai.metricsadvisor.implementation.models.DimensionGroupIdentity; +import com.azure.ai.metricsadvisor.implementation.models.RootCause; +import com.azure.ai.metricsadvisor.implementation.util.IncidentRootCauseTransforms; import com.azure.ai.metricsadvisor.models.IncidentRootCause; import com.azure.ai.metricsadvisor.models.MetricsAdvisorKeyCredential; import com.azure.ai.metricsadvisor.models.MetricsAdvisorServiceVersion; @@ -51,18 +52,18 @@ MetricsAdvisorClientBuilder getMetricsAdvisorBuilder(HttpClient httpClient, } static IncidentRootCause getExpectedIncidentRootCause() { - IncidentRootCause incidentRootCause = new IncidentRootCause(); - PrivateFieldAccessHelper.set(incidentRootCause, "seriesKey", - new DimensionKey(new HashMap() {{ + RootCause innerRootCause = new RootCause() + .setRootCause(new DimensionGroupIdentity().setDimension(new HashMap() { + { put("category", "Shoes Handbags & Sunglasses"); put("city", "Chicago"); - }})); - PrivateFieldAccessHelper.set(incidentRootCause, "paths", Collections.singletonList("category")); - PrivateFieldAccessHelper.set(incidentRootCause, "confidenceScore", 0.23402075133615907); - PrivateFieldAccessHelper.set(incidentRootCause, "description", - "Increase on category = Shoes Handbags & Sunglasses | city = Chicago contributes " - + "the most to current incident."); - return incidentRootCause; + } + })) + .setPath(Collections.singletonList("category")) + .setScore(0.23402075133615907) + .setDescription("Increase on category = Shoes Handbags & Sunglasses | city = Chicago contributes " + + "the most to current incident."); + return IncidentRootCauseTransforms.fromInner(innerRootCause); } void validateIncidentRootCauses(IncidentRootCause expectedIncidentRootCause,