internal FunctionActivityTracker(IMetricsEventGenerator generator, int metricEventIntervalInSeconds)
            {
                MetricsEventGenerator         = generator;
                _metricEventIntervalInSeconds = metricEventIntervalInSeconds;
                Task.Run(
                    async() =>
                {
                    try
                    {
                        int currentSecond = _metricEventIntervalInSeconds;
                        while (!_etwTaskCancellationSource.Token.IsCancellationRequested)
                        {
                            RaiseMetricsPerFunctionEvent();

                            if (currentSecond >= _metricEventIntervalInSeconds)
                            {
                                RaiseFunctionMetricEvents();
                                currentSecond = 0;
                            }
                            else
                            {
                                currentSecond = currentSecond + 1;
                            }

                            await Task.Delay(TimeSpan.FromSeconds(1), _etwTaskCancellationSource.Token);
                        }
                    }
                    catch (TaskCanceledException)
                    {
                        // This exception gets throws when cancellation request is raised via cancellation token.
                        // Let's eat this exception and continue
                    }
                },
                    _etwTaskCancellationSource.Token);
            }
        internal MetricsEventManager(IMetricsEventGenerator generator, int metricEventIntervalInSeconds)
        {
            // we read this in ctor (not static ctor) since it can change on the fly
            siteName = GetNormalizedString(Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME"));

            _metricsEventGenerator        = generator;
            _metricEventIntervalInSeconds = metricEventIntervalInSeconds;
        }
 public WebHostMetricsLogger(IMetricsEventGenerator metricsEventGenerator, int metricEventIntervalInSeconds)
 {
     _metricsEventManager = new MetricsEventManager(metricsEventGenerator, metricEventIntervalInSeconds);
 }
 internal MetricsEventManager(IMetricsEventGenerator generator, int metricEventIntervalInSeconds)
 {
     _metricsEventGenerator        = generator;
     _metricEventIntervalInSeconds = metricEventIntervalInSeconds;
 }