public void LogFunctionAggregate_SendsCorrectTelemetry()
        {
            DateTime now             = DateTime.UtcNow;
            var      resultAggregate = new FunctionResultAggregate
            {
                Name            = _functionFullName,
                Failures        = 4,
                Successes       = 116,
                MinDuration     = TimeSpan.FromMilliseconds(200),
                MaxDuration     = TimeSpan.FromMilliseconds(2180),
                AverageDuration = TimeSpan.FromMilliseconds(340),
                Timestamp       = now
            };

            ILogger logger = CreateLogger(LogCategories.Aggregator);

            logger.LogFunctionResultAggregate(resultAggregate);

            IEnumerable <MetricTelemetry> metrics = _channel.Telemetries.Cast <MetricTelemetry>();
            // turn them into a dictionary so we can easily validate
            IDictionary <string, MetricTelemetry> metricDict = metrics.ToDictionary(m => m.Name, m => m);

            Assert.Equal(7, metricDict.Count);

            ValidateMetric(metricDict[$"{_functionFullName} {LogConstants.FailuresKey}"], 4, LogLevel.Information);
            ValidateMetric(metricDict[$"{_functionFullName} {LogConstants.SuccessesKey}"], 116, LogLevel.Information);
            ValidateMetric(metricDict[$"{_functionFullName} {LogConstants.MinDurationKey}"], 200, LogLevel.Information);
            ValidateMetric(metricDict[$"{_functionFullName} {LogConstants.MaxDurationKey}"], 2180, LogLevel.Information);
            ValidateMetric(metricDict[$"{_functionFullName} {LogConstants.AverageDurationKey}"], 340, LogLevel.Information);
            ValidateMetric(metricDict[$"{_functionFullName} {LogConstants.SuccessRateKey}"], 96.67, LogLevel.Information);
            ValidateMetric(metricDict[$"{_functionFullName} {LogConstants.CountKey}"], 120, LogLevel.Information);
        }
        internal static void LogFunctionResultAggregate(this ILogger logger, FunctionResultAggregate resultAggregate)
        {
            // we won't output any string here, just the data
            FormattedLogValuesCollection payload = new FormattedLogValuesCollection(string.Empty, null, resultAggregate.ToReadOnlyDictionary());

            logger.Log(LogLevel.Information, 0, payload, null, (s, e) => s.ToString());
        }
        public void LogFunctionResultAggregate_CreatesCorrectState()
        {
            DateTimeOffset now      = DateTimeOffset.Now;
            int            logCount = 0;
            ILogger        logger   = CreateMockLogger <FormattedLogValuesCollection>((l, e, o, ex, f) =>
            {
                logCount++;
                Assert.Equal(LogLevel.Information, l);
                Assert.Equal(0, e);
                Assert.Null(ex);

                // nothing logged
                Assert.Equal(string.Empty, f(o, ex));

                // convert to dictionary
                var payload = o.ToDictionary(k => k.Key, v => v.Value);

                Assert.Equal(10, payload.Count);
                Assert.Equal(_functionShortName, payload[LoggingKeys.Name]);
                Assert.Equal(4, payload[LoggingKeys.Failures]);
                Assert.Equal(116, payload[LoggingKeys.Successes]);
                Assert.Equal(TimeSpan.FromMilliseconds(200), (TimeSpan)payload[LoggingKeys.MinDuration]);
                Assert.Equal(TimeSpan.FromMilliseconds(2180), (TimeSpan)payload[LoggingKeys.MaxDuration]);
                Assert.Equal(TimeSpan.FromMilliseconds(340), (TimeSpan)payload[LoggingKeys.AverageDuration]);
                Assert.Equal(now, payload[LoggingKeys.Timestamp]);
                Assert.Equal(120, payload[LoggingKeys.Count]);
                Assert.Equal(96.67, payload[LoggingKeys.SuccessRate]);

                // {OriginalFormat} is still added, even though it is empty
                Assert.Equal(string.Empty, payload[LoggingKeys.OriginalFormat]);
            });

            var resultAggregate = new FunctionResultAggregate
            {
                Name            = _functionShortName,
                Failures        = 4,
                Successes       = 116,
                MinDuration     = TimeSpan.FromMilliseconds(200),
                MaxDuration     = TimeSpan.FromMilliseconds(2180),
                AverageDuration = TimeSpan.FromMilliseconds(340),
                Timestamp       = now
            };

            logger.LogFunctionResultAggregate(resultAggregate);

            Assert.Equal(1, logCount);
        }
        public void LogFunctionResultAggregate_CreatesCorrectState()
        {
            DateTimeOffset now      = DateTimeOffset.Now;
            int            logCount = 0;
            ILogger        logger   = CreateMockLogger <IReadOnlyDictionary <string, object> >((l, e, payload, ex, f) =>
            {
                logCount++;
                Assert.Equal(LogLevel.Information, l);
                Assert.Equal(0, e);
                Assert.Null(ex);

                // nothing logged
                Assert.Null(f(payload, ex));

                Assert.Equal(9, payload.Count);
                Assert.Equal(_functionShortName, payload[LogConstants.NameKey]);
                Assert.Equal(4, payload[LogConstants.FailuresKey]);
                Assert.Equal(116, payload[LogConstants.SuccessesKey]);
                Assert.Equal(TimeSpan.FromMilliseconds(200), (TimeSpan)payload[LogConstants.MinDurationKey]);
                Assert.Equal(TimeSpan.FromMilliseconds(2180), (TimeSpan)payload[LogConstants.MaxDurationKey]);
                Assert.Equal(TimeSpan.FromMilliseconds(340), (TimeSpan)payload[LogConstants.AverageDurationKey]);
                Assert.Equal(now, payload[LogConstants.TimestampKey]);
                Assert.Equal(120, payload[LogConstants.CountKey]);
                Assert.Equal(96.67, payload[LogConstants.SuccessRateKey]);
            });

            var resultAggregate = new FunctionResultAggregate
            {
                Name            = _functionShortName,
                Failures        = 4,
                Successes       = 116,
                MinDuration     = TimeSpan.FromMilliseconds(200),
                MaxDuration     = TimeSpan.FromMilliseconds(2180),
                AverageDuration = TimeSpan.FromMilliseconds(340),
                Timestamp       = now
            };

            logger.LogFunctionResultAggregate(resultAggregate);

            Assert.Equal(1, logCount);
        }
Пример #5
0
 internal static void LogFunctionResultAggregate(this ILogger logger, FunctionResultAggregate resultAggregate)
 {
     // we won't output any string here, just the data
     logger.Log(LogLevel.Information, 0, resultAggregate.ToReadOnlyDictionary(), null, (s, e) => null);
 }