in src/Microsoft.Azure.WebJobs.Host/Scale/ScaleManager.cs [202:249]
internal static (List<IScaleMonitor>, List<ITargetScaler>) GetScalersToSample(
IScaleMonitorManager monitorManager,
ITargetScalerManager targetScalerManager,
IOptions<ScaleOptions> scaleOptions,
IConfiguration configuration)
{
var scaleMonitors = monitorManager.GetMonitors();
var targetScalers = targetScalerManager.GetTargetScalers();
var scaleMonitorsToSample = new List<IScaleMonitor>();
var targetScalersToSample = new List<ITargetScaler>();
// Check if TBS enabled on app level
if (scaleOptions.Value.IsTargetScalingEnabled)
{
HashSet<string> targetScalerFunctions = new HashSet<string>();
foreach (var scaler in targetScalers)
{
string scalerUniqueId = GetTargetScalerFunctionUniqueId(scaler);
if (!_targetScalersInError.Contains(scalerUniqueId))
{
string assemblyName = GetAssemblyName(scaler.GetType());
bool featureDisabled = configuration.GetValue<string>(assemblyName) == "0";
if (!featureDisabled)
{
targetScalersToSample.Add(scaler);
targetScalerFunctions.Add(scalerUniqueId);
}
}
}
foreach (var monitor in scaleMonitors)
{
string monitorUniqueId = GetScaleMonitorFunctionUniqueId(monitor);
// Check if target based scaler exists for the function
if (!targetScalerFunctions.Contains(monitorUniqueId))
{
scaleMonitorsToSample.Add(monitor);
}
}
}
else
{
scaleMonitorsToSample.AddRange(scaleMonitors);
}
return (scaleMonitorsToSample, targetScalersToSample);
}