Skip to content

Commit d4acb33

Browse files
committed
Exposing unique slot name and changing host ID and metrics to use the new setting
1 parent ff7d660 commit d4acb33

File tree

10 files changed

+70
-8
lines changed

10 files changed

+70
-8
lines changed

src/WebJobs.Script.WebHost/Diagnostics/MetricsEventManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class MetricsEventManager : IDisposable
3131
public MetricsEventManager(ScriptSettingsManager settingsManager, IEventGenerator generator, int functionActivityFlushIntervalSeconds, int metricsFlushIntervalMS = DefaultFlushIntervalMS)
3232
{
3333
// we read these in the ctor (not static ctor) since it can change on the fly
34-
appName = GetNormalizedString(settingsManager.AzureWebsiteDefaultSubdomain);
34+
appName = GetNormalizedString(settingsManager.AzureWebsiteUniqueSlotName);
3535
subscriptionId = Utility.GetSubscriptionId() ?? string.Empty;
3636

3737
_eventGenerator = generator;

src/WebJobs.Script.WebHost/Diagnostics/SystemTraceWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public SystemTraceWriter(TraceLevel level) : this(new EventGenerator(), ScriptSe
2222
public SystemTraceWriter(IEventGenerator eventGenerator, ScriptSettingsManager settingsManager, TraceLevel level) : base(level)
2323
{
2424
_settingsManager = settingsManager;
25-
_appName = _settingsManager.AzureWebsiteDefaultSubdomain;
25+
_appName = _settingsManager.AzureWebsiteUniqueSlotName;
2626
_subscriptionId = Utility.GetSubscriptionId();
2727
_eventGenerator = eventGenerator;
2828
}

src/WebJobs.Script/Config/ScriptSettingsManager.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,26 @@ public virtual string AzureWebsiteDefaultSubdomain
4848
}
4949
}
5050

51+
/// <summary>
52+
/// Gets a value that uniquely identifies the site and slot.
53+
/// </summary>
54+
public virtual string AzureWebsiteUniqueSlotName
55+
{
56+
get
57+
{
58+
string name = GetSetting(EnvironmentSettingNames.AzureWebsiteName);
59+
string slotName = GetSetting(EnvironmentSettingNames.AzureWebsiteSlotName);
60+
61+
if (!string.IsNullOrEmpty(slotName) &&
62+
!string.Equals(slotName, ScriptConstants.DefaultProductionSlotName, StringComparison.OrdinalIgnoreCase))
63+
{
64+
name += $"-{slotName}";
65+
}
66+
67+
return name?.ToLowerInvariant();
68+
}
69+
}
70+
5171
public virtual void Reset()
5272
{
5373
_settingsCache.Clear();

src/WebJobs.Script/EnvironmentSettingNames.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public static class EnvironmentSettingNames
99
{
1010
public const string AzureWebsiteName = "WEBSITE_SITE_NAME";
1111
public const string AzureWebsiteHostName = "WEBSITE_HOSTNAME";
12+
public const string AzureWebsiteSlotName = "WEBSITE_SLOT_NAME";
1213
public const string AzureWebsiteOwnerName = "WEBSITE_OWNER_NAME";
1314
public const string AzureWebsiteInstanceId = "WEBSITE_INSTANCE_ID";
1415
public const string AzureWebsiteSku = "WEBSITE_SKU";

src/WebJobs.Script/Host/ScriptHost.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,11 +1090,11 @@ internal static string GetDefaultHostId(ScriptSettingsManager settingsManager, S
10901090
.Aggregate(new StringBuilder(), (b, c) => b.Append(c)).ToString();
10911091
hostId = $"{sanitizedMachineName}-{Math.Abs(scriptConfig.RootScriptPath.GetHashCode())}";
10921092
}
1093-
else if (!string.IsNullOrEmpty(settingsManager.AzureWebsiteDefaultSubdomain))
1093+
else if (!string.IsNullOrEmpty(settingsManager.AzureWebsiteUniqueSlotName))
10941094
{
1095-
// If running on Azure Web App, derive the host ID from the default subdomain
1095+
// If running on Azure Web App, derive the host ID from unique site slot name
10961096
// Trim any trailing - as they can cause problems with queue names
1097-
hostId = settingsManager.AzureWebsiteDefaultSubdomain.TrimEnd('-');
1097+
hostId = settingsManager.AzureWebsiteUniqueSlotName.TrimEnd('-');
10981098
}
10991099

11001100
if (!string.IsNullOrEmpty(hostId))

src/WebJobs.Script/ScriptConstants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public static class ScriptConstants
4646
public const string AntaresLogIdHeaderName = "X-ARR-LOG-ID";
4747
public const string CheckLoadQueryParameterName = "checkLoad";
4848
public const string DynamicSku = "Dynamic";
49+
public const string DefaultProductionSlotName = "production";
4950

5051
public const string FeatureFlagDisableShadowCopy = "DisableShadowCopy";
5152

test/WebJobs.Script.Tests/Diagnostics/SystemTraceWriterTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public SystemTraceWriterTests()
2727
_settingsManager.SetSetting(EnvironmentSettingNames.AzureWebsiteOwnerName, $"{_subscriptionId}+westuswebspace");
2828

2929
_websiteName = "functionstest";
30-
_settingsManager.SetSetting(EnvironmentSettingNames.AzureWebsiteHostName, $"{_websiteName}.azurewebsites.net");
30+
_settingsManager.SetSetting(EnvironmentSettingNames.AzureWebsiteName, _websiteName);
3131

3232
_mockEventGenerator = new Mock<IEventGenerator>(MockBehavior.Strict);
3333
_traceWriter = new SystemTraceWriter(_mockEventGenerator.Object, _settingsManager, TraceLevel.Verbose);
@@ -76,7 +76,7 @@ public void Trace_Error_EmitsExpectedEvent()
7676
public void Dispose()
7777
{
7878
_settingsManager.SetSetting(EnvironmentSettingNames.AzureWebsiteOwnerName, null);
79-
_settingsManager.SetSetting(EnvironmentSettingNames.AzureWebsiteHostName, null);
79+
_settingsManager.SetSetting(EnvironmentSettingNames.AzureWebsiteName, null);
8080
}
8181
}
8282
}

test/WebJobs.Script.Tests/ScriptHostTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1060,7 +1060,7 @@ public void GetDefaultHostId_AzureHost_ReturnsExpectedResult()
10601060
var config = new ScriptHostConfiguration();
10611061
string subdomain = "TEST-FUNCTIONS--";
10621062
var scriptSettingsManagerMock = new Mock<ScriptSettingsManager>(MockBehavior.Strict);
1063-
scriptSettingsManagerMock.SetupGet(p => p.AzureWebsiteDefaultSubdomain).Returns(() => subdomain);
1063+
scriptSettingsManagerMock.SetupGet(p => p.AzureWebsiteUniqueSlotName).Returns(() => subdomain);
10641064

10651065
string hostId = ScriptHost.GetDefaultHostId(scriptSettingsManagerMock.Object, config);
10661066
Assert.Equal("test-functions", hostId);
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the MIT License. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Linq;
7+
using System.Text;
8+
using System.Threading.Tasks;
9+
using Microsoft.Azure.WebJobs.Script.Config;
10+
using Xunit;
11+
12+
namespace Microsoft.Azure.WebJobs.Script.Tests
13+
{
14+
public class ScriptSettingsManagerTests
15+
{
16+
[Theory]
17+
[InlineData("testsite", "production", "testsite")]
18+
[InlineData("testsite", "Production", "testsite")]
19+
[InlineData("testsite", null, "testsite")]
20+
[InlineData("testsite", "staging", "testsite-staging")]
21+
[InlineData("testsite", "dev", "testsite-dev")]
22+
[InlineData("TestSite", "Dev", "testsite-dev")]
23+
public void UniqueSlotName_ReturnsExpectedValue(string siteName, string slotName, string expectedValue)
24+
{
25+
var settingsManager = ScriptSettingsManager.Instance;
26+
27+
var variables = new Dictionary<string, string>
28+
{
29+
{ EnvironmentSettingNames.AzureWebsiteName, siteName },
30+
{ EnvironmentSettingNames.AzureWebsiteSlotName, slotName },
31+
};
32+
33+
using (var tempVariables = new TestScopedEnvironmentVariable(variables))
34+
{
35+
Assert.Equal(expectedValue, ScriptSettingsManager.Instance.AzureWebsiteUniqueSlotName);
36+
}
37+
}
38+
}
39+
}

test/WebJobs.Script.Tests/WebJobs.Script.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@
474474
<DependentUpon>Resources.resx</DependentUpon>
475475
</Compile>
476476
<Compile Include="ScriptHostTests.cs" />
477+
<Compile Include="ScriptSettingsManagerTests.cs" />
477478
<Compile Include="Security\SecretsRepositoryTests.cs" />
478479
<Compile Include="Security\ScriptSecretSerializerTests.cs" />
479480
<Compile Include="Security\DataProtectionKeyValueConverterTests.cs" />

0 commit comments

Comments
 (0)