internal static()

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);
        }