Skip to content

Commit

Permalink
[MetricsAdvisor] Moving to new MA resource (#25406)
Browse files Browse the repository at this point in the history
  • Loading branch information
kinelski authored Nov 18, 2021
1 parent 62ea45e commit 5a3e03a
Show file tree
Hide file tree
Showing 128 changed files with 27,203 additions and 295,363 deletions.
2 changes: 1 addition & 1 deletion sdk/metricsadvisor/Azure.AI.MetricsAdvisor/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ dataFeed.Schema = new DataFeedSchema();
dataFeed.Schema.MetricColumns.Add(new DataFeedMetric("cost"));
dataFeed.Schema.MetricColumns.Add(new DataFeedMetric("revenue"));
dataFeed.Schema.DimensionColumns.Add(new DataFeedDimension("category"));
dataFeed.Schema.DimensionColumns.Add(new DataFeedDimension("city"));
dataFeed.Schema.DimensionColumns.Add(new DataFeedDimension("region"));

dataFeed.IngestionSettings = new DataFeedIngestionSettings(DateTimeOffset.Parse("2020-01-01T00:00:00Z"));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ public async Task GetAnomaliesForDetectionConfigurationWithOptionalFilter()
Filter = new AnomalyFilter(AnomalySeverity.Medium, AnomalySeverity.Medium)
};

var dimensions = new Dictionary<string, string>() { { "city", "Delhi" }, { "category", "Handmade" } };
var dimensions = new Dictionary<string, string>() { { "region", "Delhi" }, { "category", "Handmade" } };
var groupKey1 = new DimensionKey(dimensions);

dimensions = new Dictionary<string, string>() { { "city", "Kolkata" } };
dimensions = new Dictionary<string, string>() { { "region", "Kolkata" } };
var groupKey2 = new DimensionKey(dimensions);

options.Filter.DimensionKeys.Add(groupKey1);
Expand All @@ -88,10 +88,10 @@ public async Task GetAnomaliesForDetectionConfigurationWithOptionalFilter()

ValidateSeriesKey(anomaly.SeriesKey);

anomaly.SeriesKey.TryGetValue("city", out string city);
anomaly.SeriesKey.TryGetValue("region", out string region);
anomaly.SeriesKey.TryGetValue("category", out string category);

Assert.That((city == "Delhi" && category == "Handmade") || city == "Kolkata");
Assert.That((region == "Delhi" && category == "Handmade") || region == "Kolkata");

if (++anomalyCount >= MaximumSamplesCount)
{
Expand Down Expand Up @@ -144,10 +144,10 @@ public async Task GetIncidentsForDetectionConfigurationWithOptionalDimensionFilt

var options = new GetIncidentsForDetectionConfigurationOptions(SamplingStartTime, SamplingEndTime);

var dimensions = new Dictionary<string, string>() { { "city", "Delhi" }, { "category", "Handmade" } };
var dimensions = new Dictionary<string, string>() { { "region", "Delhi" }, { "category", "Handmade" } };
var groupKey1 = new DimensionKey(dimensions);

dimensions = new Dictionary<string, string>() { { "city", "Kolkata" } };
dimensions = new Dictionary<string, string>() { { "region", "Kolkata" } };
var groupKey2 = new DimensionKey(dimensions);

options.DimensionKeys.Add(groupKey1);
Expand All @@ -170,10 +170,10 @@ public async Task GetIncidentsForDetectionConfigurationWithOptionalDimensionFilt

ValidateSeriesKey(incident.RootSeriesKey);

incident.RootSeriesKey.TryGetValue("city", out string city);
incident.RootSeriesKey.TryGetValue("region", out string region);
incident.RootSeriesKey.TryGetValue("category", out string category);

Assert.That((city == "Delhi" && category == "Handmade") || city == "Kolkata");
Assert.That((region == "Delhi" && category == "Handmade") || region == "Kolkata");

if (++incidentCount >= MaximumSamplesCount)
{
Expand Down Expand Up @@ -217,7 +217,7 @@ public async Task GetIncidentRootCausesForIncidentFromDetectionConfiguration()
// We already know the the incident we want to get, so apply filters to make the
// service call cheaper.

var dimensions = new Dictionary<string, string>() { { "city", "__SUM__" }, { "category", "Grocery & Gourmet Food" } };
var dimensions = new Dictionary<string, string>() { { "region", "__SUM__" }, { "category", "Grocery & Gourmet Food" } };
var groupKey = new DimensionKey(dimensions);

options.DimensionKeys.Add(groupKey);
Expand Down Expand Up @@ -251,7 +251,7 @@ public async Task GetIncidentRootCausesForIncidentFromDetectionConfiguration()
[RecordedTest]
public async Task GetIncidentRootCausesForIncidentFromAlert()
{
const string incidentId = "5a0692283edccf37ce825b3a8d475f4e-17571a77000";
const string incidentId = "30612c95b4c216ef418956c5c6162691-17bbd8dec00";

MetricsAdvisorClient client = GetMetricsAdvisorClient();

Expand Down Expand Up @@ -293,7 +293,7 @@ public async Task GetIncidentRootCausesForIncidentFromAlert()
[TestCase(false)]
public async Task GetAnomalyDimensionValuesWithMinimumSetup(bool useTokenCredential)
{
const string dimensionName = "city";
const string dimensionName = "region";

MetricsAdvisorClient client = GetMetricsAdvisorClient(useTokenCredential);

Expand All @@ -317,7 +317,7 @@ public async Task GetAnomalyDimensionValuesWithMinimumSetup(bool useTokenCredent
[RecordedTest]
public async Task GetAnomalyDimensionValuesWithOptionalDimensionFilter()
{
const string dimensionName = "city";
const string dimensionName = "region";

MetricsAdvisorClient client = GetMetricsAdvisorClient();

Expand Down Expand Up @@ -349,10 +349,10 @@ public async Task GetMetricEnrichedSeriesData(bool useTokenCredential)
{
MetricsAdvisorClient client = GetMetricsAdvisorClient(useTokenCredential);

var dimensions = new Dictionary<string, string>() { { "city", "Delhi" }, { "category", "Handmade" } };
var dimensions = new Dictionary<string, string>() { { "region", "Delhi" }, { "category", "Handmade" } };
var seriesKey1 = new DimensionKey(dimensions);

dimensions = new Dictionary<string, string>() { { "city", "Kolkata" }, { "category", "__SUM__" } };
dimensions = new Dictionary<string, string>() { { "region", "Kolkata" }, { "category", "__SUM__" } };
var seriesKey2 = new DimensionKey(dimensions);

var seriesKeys = new List<DimensionKey>() { seriesKey1, seriesKey2 };
Expand Down Expand Up @@ -387,10 +387,19 @@ public async Task GetMetricEnrichedSeriesData(bool useTokenCredential)
returnedKeys.Add(seriesData.SeriesKey);
}

IEnumerable<List<KeyValuePair<string, string>>> expectedKvps = seriesKeys.Select(key => key.ToList());
IEnumerable<List<KeyValuePair<string, string>>> returnedKvps = returnedKeys.Select(key => key.ToList());
// Making sure count is exactly 2 because the logic below relies on that.
Assert.That(seriesKeys.Count, Is.EqualTo(2));
Assert.That(returnedKeys.Count, Is.EqualTo(2));

Assert.That(returnedKvps, Is.EquivalentTo(expectedKvps));
if (AreSame(seriesKeys[0], returnedKeys[0]))
{
Assert.That(seriesKeys[1], Is.EquivalentTo(returnedKeys[1]));
}
else
{
Assert.That(seriesKeys[0], Is.EquivalentTo(returnedKeys[1]));
Assert.That(seriesKeys[1], Is.EquivalentTo(returnedKeys[0]));
}
}

private void ValidateIncidentRootCause(IncidentRootCause rootCause)
Expand All @@ -406,5 +415,23 @@ private void ValidateIncidentRootCause(IncidentRootCause rootCause)

ValidateSeriesKey(rootCause.SeriesKey);
}

private bool AreSame(DimensionKey left, DimensionKey right)
{
if (left.Dimension.Count != right.Dimension.Count)
{
return false;
}

foreach (KeyValuePair<string, string> kvp in left)
{
if (!right.TryGetValue(kvp.Key, out string value) || value != kvp.Value)
{
return false;
}
}

return true;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ namespace Azure.AI.MetricsAdvisor.Tests
{
public class MetricFeedbackLiveTests : MetricsAdvisorLiveTestBase
{
private const string ExpectedCity = "Delhi";
private const string ExpectedRegion = "Cairo";

private const string ExpectedCategory = "Handmade";
private const string ExpectedCategory = "Shoes Handbags & Sunglasses";

public MetricFeedbackLiveTests(bool isAsync) : base(isAsync)
{
Expand All @@ -31,7 +31,7 @@ public async Task AddAndGetAnomalyFeedbackWithMinimumSetup(bool useTokenCredenti
{
MetricsAdvisorClient client = GetMetricsAdvisorClient(useTokenCredential);

var dimensions = new Dictionary<string, string>() { { "city", ExpectedCity }, { "category", ExpectedCategory } };
var dimensions = new Dictionary<string, string>() { { "region", ExpectedRegion }, { "category", ExpectedCategory } };
var dimensionKey = new DimensionKey(dimensions);

var feedbackToAdd = new MetricAnomalyFeedback(MetricId, dimensionKey, CreatedFeedbackStartTime, CreatedFeedbackEndTime, AnomalyValue.AutoDetect);
Expand All @@ -58,7 +58,7 @@ public async Task AddAndGetAnomalyFeedbackWithOptionalDetectionConfigurationFilt
{
MetricsAdvisorClient client = GetMetricsAdvisorClient();

var dimensions = new Dictionary<string, string>() { { "city", ExpectedCity }, { "category", ExpectedCategory } };
var dimensions = new Dictionary<string, string>() { { "region", ExpectedRegion }, { "category", ExpectedCategory } };
var dimensionKey = new DimensionKey(dimensions);

var feedbackToAdd = new MetricAnomalyFeedback(MetricId, dimensionKey, CreatedFeedbackStartTime, CreatedFeedbackEndTime, AnomalyValue.AutoDetect)
Expand Down Expand Up @@ -88,7 +88,7 @@ public async Task AddAndGetChangePointFeedback()
{
MetricsAdvisorClient client = GetMetricsAdvisorClient();

var dimensions = new Dictionary<string, string>() { { "city", ExpectedCity }, { "category", ExpectedCategory } };
var dimensions = new Dictionary<string, string>() { { "region", ExpectedRegion }, { "category", ExpectedCategory } };
var dimensionKey = new DimensionKey(dimensions);

var feedbackToAdd = new MetricChangePointFeedback(MetricId, dimensionKey, CreatedFeedbackStartTime, CreatedFeedbackEndTime, ChangePointValue.AutoDetect);
Expand Down Expand Up @@ -118,7 +118,7 @@ public async Task AddAndGetCommentFeedbackWithMinimumSetup()
{
MetricsAdvisorClient client = GetMetricsAdvisorClient();

var dimensions = new Dictionary<string, string>() { { "city", ExpectedCity }, { "category", ExpectedCategory } };
var dimensions = new Dictionary<string, string>() { { "region", ExpectedRegion }, { "category", ExpectedCategory } };
var dimensionKey = new DimensionKey(dimensions);

var comment = "Feedback created in a .NET test.";
Expand All @@ -145,7 +145,7 @@ public async Task AddAndGetCommentFeedbackWithOptionalTimeFilters()
{
MetricsAdvisorClient client = GetMetricsAdvisorClient();

var dimensions = new Dictionary<string, string>() { { "city", ExpectedCity }, { "category", ExpectedCategory } };
var dimensions = new Dictionary<string, string>() { { "region", ExpectedRegion }, { "category", ExpectedCategory } };
var dimensionKey = new DimensionKey(dimensions);

var comment = "Feedback created in a .NET test.";
Expand Down Expand Up @@ -176,7 +176,7 @@ public async Task AddAndGetPeriodFeedback()
{
MetricsAdvisorClient client = GetMetricsAdvisorClient();

var dimensions = new Dictionary<string, string>() { { "city", ExpectedCity }, { "category", ExpectedCategory } };
var dimensions = new Dictionary<string, string>() { { "region", ExpectedRegion }, { "category", ExpectedCategory } };
var dimensionKey = new DimensionKey(dimensions);

var periodValue = 10;
Expand Down Expand Up @@ -272,10 +272,10 @@ public async Task GetAllFeedbackWithOptionalFeedbackFilter()
// The sampling time range was chosen in a way to make sure there'll be feedback returned by the
// service call. Changing these values can make this test fail.

DateTimeOffset feedbackSamplingStartTime = DateTimeOffset.Parse("2020-12-01T00:00:00Z");
DateTimeOffset feedbackSamplingEndTime = DateTimeOffset.Parse("2020-12-31T00:00:00Z");
DateTimeOffset feedbackSamplingStartTime = DateTimeOffset.Parse("2021-10-01T00:00:00Z");
DateTimeOffset feedbackSamplingEndTime = DateTimeOffset.Parse("2021-11-20T00:00:00Z");

var dimensions = new Dictionary<string, string>() { { "city", "Delhi" } };
var dimensions = new Dictionary<string, string>() { { "region", "Karachi" } };
var options = new GetAllFeedbackOptions()
{
Filter = new FeedbackFilter()
Expand All @@ -284,7 +284,7 @@ public async Task GetAllFeedbackWithOptionalFeedbackFilter()
TimeMode = FeedbackQueryTimeMode.FeedbackCreatedOn,
StartsOn = feedbackSamplingStartTime,
EndsOn = feedbackSamplingEndTime,
FeedbackKind = MetricFeedbackKind.Comment,
FeedbackKind = MetricFeedbackKind.Anomaly
}
};

Expand All @@ -308,15 +308,15 @@ public async Task GetAllFeedbackWithOptionalFeedbackFilter()

ValidateGroupKey(dimensionKeyFilter);

Assert.That(dimensionKeyFilter.TryGetValue("city", out string city));
Assert.That(city, Is.EqualTo("Delhi"));
Assert.That(dimensionKeyFilter.TryGetValue("region", out string region));
Assert.That(region, Is.EqualTo("Karachi"));

Assert.That(feedback.FeedbackKind, Is.EqualTo(MetricFeedbackKind.Comment));
Assert.That(feedback.FeedbackKind, Is.EqualTo(MetricFeedbackKind.Anomaly));

var commentFeedback = feedback as MetricCommentFeedback;
var anomalyFeedback = feedback as MetricAnomalyFeedback;

Assert.That(commentFeedback, Is.Not.Null);
Assert.That(commentFeedback.Comment, Is.Not.Null.And.Not.Empty);
Assert.That(anomalyFeedback, Is.Not.Null);
Assert.That(anomalyFeedback.AnomalyValue, Is.Not.EqualTo(default(AnomalyValue)));

if (++feedbackCount >= MaximumSamplesCount)
{
Expand Down Expand Up @@ -344,9 +344,9 @@ private void ValidateMetricFeedback(MetricFeedback feedback)
Assert.That(dimensionFilter, Is.Not.Null);

Assert.That(Count(dimensionFilter), Is.EqualTo(2));
Assert.That(dimensionFilter.TryGetValue("city", out string city));
Assert.That(dimensionFilter.TryGetValue("region", out string region));
Assert.That(dimensionFilter.TryGetValue("category", out string category));
Assert.That(city, Is.EqualTo(ExpectedCity));
Assert.That(region, Is.EqualTo(ExpectedRegion));
Assert.That(category, Is.EqualTo(ExpectedCategory));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public TimeSeriesLiveTests(bool isAsync) : base(isAsync)
[TestCase(false)]
public async Task GetMetricDimensionValuesWithMinimumSetup(bool useTokenCredential)
{
const string dimensionName = "city";
const string dimensionName = "region";

MetricsAdvisorClient client = GetMetricsAdvisorClient(useTokenCredential);

Expand All @@ -43,7 +43,7 @@ public async Task GetMetricDimensionValuesWithMinimumSetup(bool useTokenCredenti
[RecordedTest]
public async Task GetMetricDimensionValuesWithOptionalDimensionFilter()
{
const string dimensionName = "city";
const string dimensionName = "region";
const string filter = "ba";

MetricsAdvisorClient client = GetMetricsAdvisorClient();
Expand Down Expand Up @@ -99,14 +99,14 @@ public async Task GetMetricSeriesDefinitionsWithMinimumSetup(bool useTokenCreden
[RecordedTest]
public async Task GetMetricSeriesDefinitionsWithOptionalDimensionFilter()
{
var cityFilter = new List<string>() { "Belo Horizonte", "Chennai", "Hong Kong" };
var categoryFilter = new List<string>() { "__SUM__", "Outdoors" };
var regionFilter = new List<string>() { "Cairo", "Seoul", "Beijing" };
var categoryFilter = new List<string>() { "__SUM__", "Handmade" };

MetricsAdvisorClient client = GetMetricsAdvisorClient();

var options = new GetMetricSeriesDefinitionsOptions(SamplingStartTime);

options.DimensionCombinationsFilter.Add("city", cityFilter);
options.DimensionCombinationsFilter.Add("region", regionFilter);
options.DimensionCombinationsFilter.Add("category", categoryFilter);

var definitionCount = 0;
Expand All @@ -120,10 +120,10 @@ public async Task GetMetricSeriesDefinitionsWithOptionalDimensionFilter()

DimensionKey seriesKey = definition.SeriesKey;

Assert.That(seriesKey.TryGetValue("city", out string city));
Assert.That(seriesKey.TryGetValue("region", out string region));
Assert.That(seriesKey.TryGetValue("category", out string category));

Assert.That(cityFilter.Contains(city));
Assert.That(regionFilter.Contains(region));
Assert.That(categoryFilter.Contains(category));

if (++definitionCount >= MaximumSamplesCount)
Expand All @@ -142,10 +142,10 @@ public async Task GetMetricSeriesData(bool useTokenCredential)
{
MetricsAdvisorClient client = GetMetricsAdvisorClient(useTokenCredential);

var dimensions = new Dictionary<string, string>() { { "city", "Delhi" }, { "category", "Handmade" } };
var dimensions = new Dictionary<string, string>() { { "region", "Delhi" }, { "category", "Handmade" } };
var seriesKey1 = new DimensionKey(dimensions);

dimensions = new Dictionary<string, string>() { { "city", "Kolkata" }, { "category", "__SUM__" } };
dimensions = new Dictionary<string, string>() { { "region", "Kolkata" }, { "category", "__SUM__" } };
var seriesKey2 = new DimensionKey(dimensions);

var returnedKey1 = false;
Expand Down Expand Up @@ -175,14 +175,14 @@ public async Task GetMetricSeriesData(bool useTokenCredential)

var seriesKey = seriesData.SeriesKey;

Assert.That(seriesKey.TryGetValue("city", out string city));
Assert.That(seriesKey.TryGetValue("region", out string region));
Assert.That(seriesKey.TryGetValue("category", out string category));

if (city == "Delhi" && category == "Handmade")
if (region == "Delhi" && category == "Handmade")
{
returnedKey1 = true;
}
else if (city == "Kolkata" && category == "__SUM__")
else if (region == "Kolkata" && category == "__SUM__")
{
returnedKey2 = true;
}
Expand Down
Loading

0 comments on commit 5a3e03a

Please sign in to comment.