Skip to content

Commit 07f8cce

Browse files
author
Timothy Mothra
authored
[AzureMonitorExporter] Refactor Statsbeat: constants (Azure#34545)
* move constants to separate file * wip * Revert "wip" This reverts commit d415ffa. * remove todo * cleanup * cleanup * rename constants
1 parent f617141 commit 07f8cce

File tree

3 files changed

+113
-113
lines changed

3 files changed

+113
-113
lines changed

sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/Statsbeat/AzureMonitorStatsbeat.cs

Lines changed: 6 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Licensed under the MIT License.
33

44
using System;
5-
using System.Collections.Generic;
65
using System.Diagnostics.Metrics;
76
using System.Globalization;
87
using System.Net.Http;
@@ -17,14 +16,6 @@ namespace Azure.Monitor.OpenTelemetry.Exporter.Internals.Statsbeat
1716
{
1817
internal sealed class AzureMonitorStatsbeat : IDisposable
1918
{
20-
internal const string Statsbeat_ConnectionString_NonEU = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://NonEU.in.applicationinsights.azure.com/";
21-
22-
internal const string Statsbeat_ConnectionString_EU = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://EU.in.applicationinsights.azure.com/";
23-
24-
private const string AMS_Url = "http://169.254.169.254/metadata/instance/compute?api-version=2017-08-01&format=json";
25-
26-
internal const int AttachStatsbeatInterval = 86400000;
27-
2819
private static readonly Meter s_myMeter = new("AttachStatsbeatMeter", "1.0");
2920

3021
internal string? _statsbeat_ConnectionString;
@@ -45,58 +36,6 @@ internal sealed class AzureMonitorStatsbeat : IDisposable
4536

4637
internal static Regex s_endpoint_pattern => new("^https?://(?:www\\.)?([^/.-]+)");
4738

48-
internal static readonly HashSet<string> s_EU_Endpoints = new()
49-
{
50-
"francecentral",
51-
"francesouth",
52-
"northeurope",
53-
"norwayeast",
54-
"norwaywest",
55-
"swedencentral",
56-
"switzerlandnorth",
57-
"switzerlandwest",
58-
"uksouth",
59-
"ukwest",
60-
"westeurope",
61-
};
62-
63-
internal static readonly HashSet<string> s_non_EU_Endpoints = new()
64-
{
65-
"australiacentral",
66-
"australiacentral2",
67-
"australiaeast",
68-
"australiasoutheast",
69-
"brazilsouth",
70-
"brazilsoutheast",
71-
"canadacentral",
72-
"canadaeast",
73-
"centralindia",
74-
"centralus",
75-
"chinaeast2",
76-
"chinaeast3",
77-
"chinanorth3",
78-
"eastasia",
79-
"eastus",
80-
"eastus2",
81-
"japaneast",
82-
"japanwest",
83-
"jioindiacentral",
84-
"jioindiawest",
85-
"koreacentral",
86-
"koreasouth",
87-
"northcentralus",
88-
"qatarcentral",
89-
"southafricanorth",
90-
"southcentralus",
91-
"southeastasia",
92-
"southindia",
93-
"uaecentral",
94-
"uaenorth",
95-
"westus",
96-
"westus2",
97-
"westus3",
98-
};
99-
10039
internal AzureMonitorStatsbeat(ConnectionVars connectionStringVars)
10140
{
10241
_statsbeat_ConnectionString = GetStatsbeatConnectionString(connectionStringVars?.IngestionEndpoint);
@@ -124,7 +63,7 @@ internal AzureMonitorStatsbeat(ConnectionVars connectionStringVars)
12463

12564
_attachStatsbeatMeterProvider = Sdk.CreateMeterProviderBuilder()
12665
.AddMeter("AttachStatsbeatMeter")
127-
.AddReader(new PeriodicExportingMetricReader(new AzureMonitorMetricExporter(exporterOptions), AttachStatsbeatInterval)
66+
.AddReader(new PeriodicExportingMetricReader(new AzureMonitorMetricExporter(exporterOptions), StatsbeatConstants.AttachStatsbeatInterval)
12867
{ TemporalityPreference = MetricReaderTemporalityPreference.Delta })
12968
.Build();
13069
}
@@ -154,13 +93,13 @@ private static string GetOS()
15493
if (patternMatch.Success)
15594
{
15695
var endpoint = patternMatch.Groups[1].Value;
157-
if (s_EU_Endpoints.Contains(endpoint))
96+
if (StatsbeatConstants.s_EU_Endpoints.Contains(endpoint))
15897
{
159-
statsbeatConnectionString = Statsbeat_ConnectionString_EU;
98+
statsbeatConnectionString = StatsbeatConstants.Statsbeat_ConnectionString_EU;
16099
}
161-
else if (s_non_EU_Endpoints.Contains(endpoint))
100+
else if (StatsbeatConstants.s_non_EU_Endpoints.Contains(endpoint))
162101
{
163-
statsbeatConnectionString = Statsbeat_ConnectionString_NonEU;
102+
statsbeatConnectionString = StatsbeatConstants.Statsbeat_ConnectionString_NonEU;
164103
}
165104
}
166105

@@ -201,7 +140,7 @@ private Measurement<int> GetAttachStatsbeat()
201140
using (var httpClient = new HttpClient())
202141
{
203142
httpClient.DefaultRequestHeaders.Add("Metadata", "True");
204-
var responseString = httpClient.GetStringAsync(AMS_Url);
143+
var responseString = httpClient.GetStringAsync(StatsbeatConstants.AMS_Url);
205144
var vmMetadata = JsonSerializer.Deserialize<VmMetadataResponse>(responseString.Result);
206145

207146
return vmMetadata;
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using System.Collections.Generic;
5+
6+
namespace Azure.Monitor.OpenTelemetry.Exporter.Internals.Statsbeat
7+
{
8+
internal static class StatsbeatConstants
9+
{
10+
internal const string Statsbeat_ConnectionString_NonEU = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://NonEU.in.applicationinsights.azure.com/";
11+
12+
internal const string Statsbeat_ConnectionString_EU = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://EU.in.applicationinsights.azure.com/";
13+
14+
internal static readonly HashSet<string> s_EU_Endpoints = new()
15+
{
16+
"francecentral",
17+
"francesouth",
18+
"northeurope",
19+
"norwayeast",
20+
"norwaywest",
21+
"swedencentral",
22+
"switzerlandnorth",
23+
"switzerlandwest",
24+
"uksouth",
25+
"ukwest",
26+
"westeurope",
27+
};
28+
29+
internal static readonly HashSet<string> s_non_EU_Endpoints = new()
30+
{
31+
"australiacentral",
32+
"australiacentral2",
33+
"australiaeast",
34+
"australiasoutheast",
35+
"brazilsouth",
36+
"brazilsoutheast",
37+
"canadacentral",
38+
"canadaeast",
39+
"centralindia",
40+
"centralus",
41+
"chinaeast2",
42+
"chinaeast3",
43+
"chinanorth3",
44+
"eastasia",
45+
"eastus",
46+
"eastus2",
47+
"japaneast",
48+
"japanwest",
49+
"jioindiacentral",
50+
"jioindiawest",
51+
"koreacentral",
52+
"koreasouth",
53+
"northcentralus",
54+
"qatarcentral",
55+
"southafricanorth",
56+
"southcentralus",
57+
"southeastasia",
58+
"southindia",
59+
"uaecentral",
60+
"uaenorth",
61+
"westus",
62+
"westus2",
63+
"westus3",
64+
};
65+
66+
/// <summary>
67+
/// <see href="https://learn.microsoft.com/azure/virtual-machines/instance-metadata-service"/>.
68+
/// </summary>
69+
internal const string AMS_Url = "http://169.254.169.254/metadata/instance/compute?api-version=2017-08-01&format=json";
70+
71+
/// <summary>
72+
/// 24 hrs == 86400000 milliseconds.
73+
/// </summary>
74+
internal const int AttachStatsbeatInterval = 86400000;
75+
}
76+
}

sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/StatsbeatTests.cs

Lines changed: 31 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT License.
33

44
using System;
5+
using System.Linq;
56
using Azure.Monitor.OpenTelemetry.Exporter.Internals.ConnectionString;
67
using Azure.Monitor.OpenTelemetry.Exporter.Internals.Statsbeat;
78
using Xunit;
@@ -10,68 +11,52 @@ namespace Azure.Monitor.OpenTelemetry.Exporter.Tests
1011
{
1112
public class StatsbeatTests
1213
{
14+
public static TheoryData<string> EuEndpoints
15+
{
16+
get
17+
{
18+
var data = new TheoryData<string>();
19+
foreach (var e in StatsbeatConstants.s_EU_Endpoints.AsEnumerable())
20+
{
21+
data.Add(e);
22+
}
23+
return data;
24+
}
25+
}
26+
27+
public static TheoryData<string> NonEuEndpoints
28+
{
29+
get
30+
{
31+
var data = new TheoryData<string>();
32+
foreach (var e in StatsbeatConstants.s_non_EU_Endpoints.AsEnumerable())
33+
{
34+
data.Add(e);
35+
}
36+
return data;
37+
}
38+
}
39+
1340
[Theory]
14-
[InlineData("francecentral")]
15-
[InlineData("francesouth")]
16-
[InlineData("northeurope")]
17-
[InlineData("norwayeast")]
18-
[InlineData("norwaywest")]
19-
[InlineData("swedencentral")]
20-
[InlineData("switzerlandnorth")]
21-
[InlineData("switzerlandwest")]
22-
[InlineData("uksouth")]
23-
[InlineData("ukwest")]
24-
[InlineData("westeurope")]
41+
[MemberData(nameof(EuEndpoints))]
2542
public void StatsbeatConnectionStringIsSetBasedOnCustomersConnectionStringEndpointInEU(string euEndpoint)
2643
{
2744
var customer_ConnectionString = $"InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://{euEndpoint}.in.applicationinsights.azure.com/";
2845
var connectionStringVars = ConnectionStringParser.GetValues(customer_ConnectionString);
2946
var statsBeatInstance = new AzureMonitorStatsbeat(connectionStringVars);
3047

31-
Assert.Equal(AzureMonitorStatsbeat.Statsbeat_ConnectionString_EU, statsBeatInstance._statsbeat_ConnectionString);
48+
Assert.Equal(StatsbeatConstants.Statsbeat_ConnectionString_EU, statsBeatInstance._statsbeat_ConnectionString);
3249
}
3350

3451
[Theory]
35-
[InlineData("australiacentral")]
36-
[InlineData("australiacentral2")]
37-
[InlineData("australiaeast")]
38-
[InlineData("australiasoutheast")]
39-
[InlineData("brazilsouth")]
40-
[InlineData("brazilsoutheast")]
41-
[InlineData("canadacentral")]
42-
[InlineData("canadaeast")]
43-
[InlineData("centralindia")]
44-
[InlineData("centralus")]
45-
[InlineData("chinaeast2")]
46-
[InlineData("chinaeast3")]
47-
[InlineData("chinanorth3")]
48-
[InlineData("eastasia")]
49-
[InlineData("eastus")]
50-
[InlineData("eastus2")]
51-
[InlineData("japaneast")]
52-
[InlineData("japanwest")]
53-
[InlineData("jioindiacentral")]
54-
[InlineData("jioindiawest")]
55-
[InlineData("koreacentral")]
56-
[InlineData("koreasouth")]
57-
[InlineData("northcentralus")]
58-
[InlineData("qatarcentral")]
59-
[InlineData("southafricanorth")]
60-
[InlineData("southcentralus")]
61-
[InlineData("southeastasia")]
62-
[InlineData("southindia")]
63-
[InlineData("uaecentral")]
64-
[InlineData("uaenorth")]
65-
[InlineData("westus")]
66-
[InlineData("westus2")]
67-
[InlineData("westus3")]
52+
[MemberData(nameof(NonEuEndpoints))]
6853
public void StatsbeatConnectionStringIsSetBasedOnCustomersConnectionStringEndpointInNonEU(string nonEUEndpoint)
6954
{
7055
var customer_ConnectionString = $"InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://{nonEUEndpoint}.in.applicationinsights.azure.com/";
7156
var connectionStringVars = ConnectionStringParser.GetValues(customer_ConnectionString);
7257
var statsBeatInstance = new AzureMonitorStatsbeat(connectionStringVars);
7358

74-
Assert.Equal(AzureMonitorStatsbeat.Statsbeat_ConnectionString_NonEU, statsBeatInstance._statsbeat_ConnectionString);
59+
Assert.Equal(StatsbeatConstants.Statsbeat_ConnectionString_NonEU, statsBeatInstance._statsbeat_ConnectionString);
7560
}
7661

7762
[Fact]

0 commit comments

Comments
 (0)