Exemplo n.º 1
0
        public MetricsEventManager(IOptionsMonitor <AppServiceOptions> appServiceOptions, IEventGenerator generator, int functionActivityFlushIntervalSeconds, IMetricsPublisher metricsPublisher, ILinuxContainerActivityPublisher linuxContainerActivityPublisher, ILogger <MetricsEventManager> logger, int metricsFlushIntervalMS = DefaultFlushIntervalMS)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));

            // we read these in the ctor (not static ctor) since it can change on the fly
            _appServiceOptions = appServiceOptions;
            _eventGenerator    = generator;
            _functionActivityFlushIntervalSeconds = functionActivityFlushIntervalSeconds;
            QueuedEvents = new ConcurrentDictionary <string, SystemMetricEvent>(StringComparer.OrdinalIgnoreCase);

            // Initialize the periodic log flush timer
            _metricsFlushTimer = new Timer(TimerFlush, null, metricsFlushIntervalMS, metricsFlushIntervalMS);

            _metricsPublisher = metricsPublisher;
            _linuxContainerActivityPublisher = linuxContainerActivityPublisher;
        }
            internal FunctionActivityTracker(IOptionsMonitor <AppServiceOptions> appServiceOptions, IEventGenerator generator, IMetricsPublisher metricsPublisher, ILinuxContainerActivityPublisher linuxContainerActivityPublisher, int functionActivityFlushInterval)
            {
                MetricsEventGenerator          = generator;
                _appServiceOptions             = appServiceOptions;
                _functionActivityFlushInterval = functionActivityFlushInterval;

                if (linuxContainerActivityPublisher != null && linuxContainerActivityPublisher != NullLinuxContainerActivityPublisher.Instance)
                {
                    _linuxContainerActivityPublisher = linuxContainerActivityPublisher;
                }

                if (metricsPublisher != null && metricsPublisher != NullMetricsPublisher.Instance)
                {
                    _metricsPublisher = metricsPublisher;
                }

                Task.Run(
                    async() =>
                {
                    try
                    {
                        int currentSecond = _functionActivityFlushInterval;
                        while (!_etwTaskCancellationSource.Token.IsCancellationRequested)
                        {
                            RaiseMetricsPerFunctionEvent();

                            if (currentSecond >= _functionActivityFlushInterval)
                            {
                                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);
            }
Exemplo n.º 3
0
            internal FunctionActivityTracker(IOptionsMonitor <AppServiceOptions> appServiceOptions, IEventGenerator generator, IMetricsPublisher metricsPublisher, ILinuxContainerActivityPublisher linuxContainerActivityPublisher, int functionActivityFlushInterval)
            {
                MetricsEventGenerator          = generator;
                _appServiceOptions             = appServiceOptions;
                _functionActivityFlushInterval = functionActivityFlushInterval;

                if (linuxContainerActivityPublisher != null && linuxContainerActivityPublisher != NullLinuxContainerActivityPublisher.Instance)
                {
                    _linuxContainerActivityPublisher = linuxContainerActivityPublisher;
                }

                if (metricsPublisher != null && metricsPublisher != NullMetricsPublisher.Instance)
                {
                    _metricsPublisher = metricsPublisher;
                }

                StartActivityTimer();
            }
Exemplo n.º 4
0
            internal FunctionActivityTracker(IOptionsMonitor <AppServiceOptions> appServiceOptions, IEventGenerator generator, IMetricsPublisher metricsPublisher, ILinuxContainerActivityPublisher linuxContainerActivityPublisher, int functionActivityFlushInterval, ILogger <MetricsEventManager> logger)
            {
                MetricsEventGenerator          = generator;
                _appServiceOptions             = appServiceOptions;
                _functionActivityFlushInterval = functionActivityFlushInterval;

                if (linuxContainerActivityPublisher != null && linuxContainerActivityPublisher != NullLinuxContainerActivityPublisher.Instance)
                {
                    _linuxContainerActivityPublisher = linuxContainerActivityPublisher;
                }

                if (metricsPublisher != null && metricsPublisher != NullMetricsPublisher.Instance)
                {
                    _metricsPublisher = metricsPublisher;
                }

                _activityFlushCounter = _functionActivityFlushInterval;
                _activityTimer        = new Timer(TimerFlush, null, _activityTimerIntervalMS, _activityTimerIntervalMS);

                _logger = logger;
            }
Exemplo n.º 5
0
 protected WebHostMetricsLogger(IOptionsMonitor <AppServiceOptions> appServiceOptions, IEventGenerator eventGenerator, IMetricsPublisher metricsPublisher, ILinuxContainerActivityPublisher linuxContainerActivityPublisher, int metricEventIntervalInSeconds, ILoggerFactory loggerFactory)
 {
     _metricsEventManager = new MetricsEventManager(appServiceOptions, eventGenerator, metricEventIntervalInSeconds, metricsPublisher, linuxContainerActivityPublisher, loggerFactory.CreateLogger <MetricsEventManager>());
 }
Exemplo n.º 6
0
 public WebHostMetricsLogger(IOptionsMonitor <AppServiceOptions> appServiceOptions, IEventGenerator eventGenerator, IMetricsPublisher metricsPublisher, ILinuxContainerActivityPublisher linuxContainerActivityPublisher, ILoggerFactory loggerFactory)
     : this(appServiceOptions, eventGenerator, metricsPublisher, linuxContainerActivityPublisher, 5, loggerFactory)
 {
 }