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