Skip to content

Commit 62aa143

Browse files
committed
Integrate host health monitoring in startup path (#1999)
1 parent cb31e70 commit 62aa143

24 files changed

+218
-147
lines changed

src/WebJobs.Script.WebHost/App_Start/AutofacBootstrap.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
using Autofac;
55
using Microsoft.Azure.WebJobs.Host;
66
using Microsoft.Azure.WebJobs.Script.Config;
7-
using Microsoft.Azure.WebJobs.Script.Diagnostics;
87
using Microsoft.Azure.WebJobs.Script.Eventing;
8+
using Microsoft.Azure.WebJobs.Script.Scale;
99
using Microsoft.Azure.WebJobs.Script.WebHost.WebHooks;
1010
using Microsoft.Extensions.Logging;
1111

@@ -29,7 +29,6 @@ internal static void Initialize(ScriptSettingsManager settingsManager, Container
2929
builder.Register<ISwaggerDocumentManager>(ct => ct.Resolve<WebHostResolver>().GetSwaggerDocumentManager(settings)).ExternallyOwned();
3030
builder.Register<WebScriptHostManager>(ct => ct.Resolve<WebHostResolver>().GetWebScriptHostManager(settings)).ExternallyOwned();
3131
builder.Register<WebHookReceiverManager>(ct => ct.Resolve<WebHostResolver>().GetWebHookReceiverManager(settings)).ExternallyOwned();
32-
builder.Register<HostPerformanceManager>(ct => ct.Resolve<WebHostResolver>().GetPerformanceManager(settings)).ExternallyOwned();
3332
builder.Register<ILoggerFactory>(ct => ct.Resolve<WebHostResolver>().GetScriptHostConfiguration(settings).HostConfig.LoggerFactory).ExternallyOwned();
3433
}
3534
}

src/WebJobs.Script.WebHost/App_Start/WebHostResolver.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using System.IO;
77
using System.Threading.Tasks;
88
using Microsoft.Azure.WebJobs.Script.Config;
9-
using Microsoft.Azure.WebJobs.Script.Diagnostics;
109
using Microsoft.Azure.WebJobs.Script.Eventing;
1110
using Microsoft.Azure.WebJobs.Script.WebHost.Properties;
1211
using Microsoft.Azure.WebJobs.Script.WebHost.WebHooks;
@@ -61,11 +60,6 @@ public ISecretManager GetSecretManager(WebHostSettings settings)
6160
return GetWebScriptHostManager(settings).SecretManager;
6261
}
6362

64-
public HostPerformanceManager GetPerformanceManager(WebHostSettings settings)
65-
{
66-
return GetWebScriptHostManager(settings).PerformanceManager;
67-
}
68-
6963
public WebScriptHostManager GetWebScriptHostManager(WebHostSettings settings)
7064
{
7165
if (_activeHostManager != null)

src/WebJobs.Script.WebHost/Controllers/AdminController.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,6 @@ public IHttpActionResult GetHostStatus()
117117
status.Errors.Add(Utility.FlattenException(lastError));
118118
}
119119

120-
var parameters = Request.GetQueryParameterDictionary();
121-
string value = null;
122-
if (parameters.TryGetValue(ScriptConstants.CheckLoadQueryParameterName, out value) && value == "1")
123-
{
124-
status.Load = new LoadStatus
125-
{
126-
IsHigh = _scriptHostManager.PerformanceManager.IsUnderHighLoad()
127-
};
128-
}
129-
130120
string message = $"Host Status: {JsonConvert.SerializeObject(status, Formatting.Indented)}";
131121
_traceWriter.Info(message);
132122
_logger?.LogInformation(message);

src/WebJobs.Script.WebHost/GlobalSuppressions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,5 @@
107107
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1014:MarkAssembliesWithClsCompliant")]
108108
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Scope = "member", Target = "Microsoft.Azure.WebJobs.Script.WebHost.DefaultSecretManagerFactory.#Create(Microsoft.Azure.WebJobs.Script.Config.ScriptSettingsManager,Microsoft.Azure.WebJobs.Host.TraceWriter,Microsoft.Extensions.Logging.ILoggerFactory,Microsoft.Azure.WebJobs.Script.WebHost.ISecretsRepository)")]
109109
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors", Scope = "member", Target = "Microsoft.Azure.WebJobs.Script.WebHost.SecretManager.#.ctor(Microsoft.Azure.WebJobs.Script.WebHost.ISecretsRepository,Microsoft.Azure.WebJobs.Script.WebHost.IKeyValueConverterFactory,Microsoft.Azure.WebJobs.Host.TraceWriter,Microsoft.Extensions.Logging.ILoggerFactory,System.Boolean)")]
110-
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "host", Scope = "member", Target = "Microsoft.Azure.WebJobs.Script.WebHost.StandbyManager.#WarmUp(Microsoft.Azure.WebJobs.Script.ScriptHost)")]
110+
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "host", Scope = "member", Target = "Microsoft.Azure.WebJobs.Script.WebHost.StandbyManager.#WarmUp(Microsoft.Azure.WebJobs.Script.ScriptHost)")]
111+
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "settings", Scope = "member", Target = "Microsoft.Azure.WebJobs.Script.WebHost.WebHostResolver.#GetPerformanceManager(Microsoft.Azure.WebJobs.Script.WebHost.WebHostSettings)")]

src/WebJobs.Script.WebHost/Models/HostStatus.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,5 @@ public class HostStatus
3131
/// </summary>
3232
[JsonProperty(PropertyName = "errors", DefaultValueHandling = DefaultValueHandling.Ignore)]
3333
public Collection<string> Errors { get; set; }
34-
35-
/// <summary>
36-
/// Gets or sets a the <see cref="LoadStatus"/>.
37-
/// </summary>
38-
[JsonProperty(PropertyName = "load", DefaultValueHandling = DefaultValueHandling.Ignore)]
39-
public LoadStatus Load { get; set; }
4034
}
4135
}

src/WebJobs.Script.WebHost/Models/LoadStatus.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/WebJobs.Script.WebHost/WebJobs.Script.WebHost.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,6 @@
451451
<Compile Include="Models\Swagger\HttpOperationInfo.cs" />
452452
<Compile Include="Models\Swagger\HttpOperationParameterInfo.cs" />
453453
<Compile Include="Models\Link.cs" />
454-
<Compile Include="Models\LoadStatus.cs" />
455454
<Compile Include="Models\Swagger\SwaggerInfo.cs" />
456455
<Compile Include="OperationResult.cs" />
457456
<Compile Include="Properties\Resources.Designer.cs">
@@ -579,7 +578,7 @@
579578
<VisualStudio>
580579
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
581580
<WebProjectProperties>
582-
<UseIIS>True</UseIIS>
581+
<UseIIS>False</UseIIS>
583582
<AutoAssignPort>True</AutoAssignPort>
584583
<DevelopmentServerPort>28549</DevelopmentServerPort>
585584
<DevelopmentServerVPath>/</DevelopmentServerVPath>

src/WebJobs.Script.WebHost/WebScriptHostManager.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using Microsoft.Azure.WebJobs.Script.Description;
2525
using Microsoft.Azure.WebJobs.Script.Diagnostics;
2626
using Microsoft.Azure.WebJobs.Script.Eventing;
27+
using Microsoft.Azure.WebJobs.Script.Scale;
2728
using Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics;
2829
using Microsoft.Azure.WebJobs.Script.WebHost.Handlers;
2930
using Microsoft.Extensions.Logging;
@@ -36,7 +37,6 @@ public class WebScriptHostManager : ScriptHostManager
3637
private static bool? _standbyMode;
3738
private readonly WebHostMetricsLogger _metricsLogger;
3839
private readonly ISecretManager _secretManager;
39-
private readonly HostPerformanceManager _performanceManager;
4040
private readonly WebHostSettings _webHostSettings;
4141
private readonly IWebJobsExceptionHandler _exceptionHandler;
4242
private readonly ScriptHostConfiguration _config;
@@ -58,9 +58,10 @@ public WebScriptHostManager(ScriptHostConfiguration config,
5858
WebHostSettings webHostSettings,
5959
IScriptHostFactory scriptHostFactory = null,
6060
ISecretsRepositoryFactory secretsRepositoryFactory = null,
61+
HostPerformanceManager hostPerformanceManager = null,
6162
int hostTimeoutSeconds = WebScriptHostHandler.HostTimeoutSeconds,
6263
int hostPollingIntervalMilliseconds = WebScriptHostHandler.HostPollingIntervalMilliseconds)
63-
: base(config, settingsManager, scriptHostFactory, eventManager)
64+
: base(config, settingsManager, scriptHostFactory, eventManager, null, hostPerformanceManager)
6465
{
6566
_config = config;
6667
_metricsLogger = new WebHostMetricsLogger();
@@ -82,9 +83,9 @@ public WebScriptHostManager(ScriptHostConfiguration config,
8283

8384
config.IsSelfHost = webHostSettings.IsSelfHost;
8485

85-
_performanceManager = new HostPerformanceManager(settingsManager, config.TraceWriter);
8686
_swaggerDocumentManager = new SwaggerDocumentManager(config);
8787

88+
secretsRepositoryFactory = secretsRepositoryFactory ?? new DefaultSecretsRepositoryFactory();
8889
var secretsRepository = secretsRepositoryFactory.Create(settingsManager, webHostSettings, config);
8990
_secretManager = secretManagerFactory.Create(settingsManager, config.TraceWriter, config.HostConfig.LoggerFactory, secretsRepository);
9091

@@ -97,7 +98,7 @@ public WebScriptHostManager(ScriptHostConfiguration config,
9798
ScriptSettingsManager settingsManager,
9899
WebHostSettings webHostSettings,
99100
IScriptHostFactory scriptHostFactory)
100-
: this(config, secretManagerFactory, eventManager, settingsManager, webHostSettings, scriptHostFactory, new DefaultSecretsRepositoryFactory())
101+
: this(config, secretManagerFactory, eventManager, settingsManager, webHostSettings, scriptHostFactory, null)
101102
{
102103
}
103104

@@ -114,8 +115,6 @@ public WebScriptHostManager(ScriptHostConfiguration config,
114115

115116
public ISecretManager SecretManager => _secretManager;
116117

117-
public HostPerformanceManager PerformanceManager => _performanceManager;
118-
119118
public ISwaggerDocumentManager SwaggerDocumentManager => _swaggerDocumentManager;
120119

121120
public HttpRequestManager HttpRequestManager => _httpRequestManager;

src/WebJobs.Script.WebHost/WebScriptHostRequestManager.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.Azure.WebJobs.Host;
99
using Microsoft.Azure.WebJobs.Script.Description;
1010
using Microsoft.Azure.WebJobs.Script.Diagnostics;
11+
using Microsoft.Azure.WebJobs.Script.Scale;
1112

1213
namespace Microsoft.Azure.WebJobs.Script.WebHost
1314
{
@@ -42,7 +43,7 @@ protected override bool RejectAllRequests()
4243
_lastPerformanceCheck = DateTime.UtcNow;
4344
if (_rejectAllRequests)
4445
{
45-
TraceWriter.Info($"Thresholds for the following counters have been exceeded: {string.Join(", ", exceededCounters)}");
46+
TraceWriter.Warning($"Thresholds for the following counters have been exceeded: [{string.Join(", ", exceededCounters)}]");
4647
}
4748
}
4849

src/WebJobs.Script/Config/ScriptHostConfiguration.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public ScriptHostConfiguration()
2424
LogFilter = new LogCategoryFilter();
2525
RootExtensionsPath = ConfigurationManager.AppSettings[EnvironmentSettingNames.AzureWebJobsExtensionsPath];
2626
LoggerFactoryBuilder = new DefaultLoggerFactoryBuilder();
27+
HostHealthMonitorEnabled = true;
2728
}
2829

2930
/// <summary>
@@ -99,6 +100,12 @@ public ScriptHostConfiguration()
99100
/// </summary>
100101
public bool SwaggerEnabled { get; set; }
101102

103+
/// <summary>
104+
/// Gets or sets a value indicating whether the hosting environment will be monitored
105+
/// for health (e.g. socket thresholds, etc.). Default is true.
106+
/// </summary>
107+
public bool HostHealthMonitorEnabled { get; set; }
108+
102109
/// <summary>
103110
/// Gets or sets a value indicating whether the host is running
104111
/// outside of the normal Azure hosting environment. E.g. when running

0 commit comments

Comments
 (0)