using System; using System.Collections.Generic; using ABB.Ability.Cloud.DCS.Core.ApplicationTracking; using ABB.Ability.Common.Logging; using Microsoft.ApplicationInsights; namespace ABB.Ability.Cloud.DCS.PlatformEventProcessor.Handler { public class MeasureAndLogTimer : IDisposable { private readonly TelemetryClient _telemetryClient; private readonly string _correlationId; private readonly Microsoft.Extensions.Logging.ILogger _logger; private readonly IStopwatch _stopwatch; private readonly DateTime _startTime; public MeasureAndLogTimer(string correlationId, TelemetryClient telemetryClientProvider, Microsoft.Extensions.Logging.ILogger logger, IStopwatch stopwatch) { _correlationId = correlationId; _telemetryClient = telemetryClientProvider; _logger = logger; _stopwatch = stopwatch; _startTime = _stopwatch.Start(); _logger.Info(correlationId, $"Start processing time: {_startTime}"); } public void Dispose() { DateTime endTime = _stopwatch.Stop(); TimeSpan elapsedTimeSpan = _stopwatch.Elapsed(); _logger.Info(_correlationId, $"Stop processing time: { endTime }. " + $"Duration processing time: { elapsedTimeSpan }"); var properties = InitializeDictionary(_startTime, endTime, elapsedTimeSpan); _telemetryClient.TrackEvent("Processing time: ", properties); _telemetryClient.Flush(); } private Dictionary InitializeDictionary(DateTime startTime, DateTime endTime, TimeSpan elapsedTimeSpan) { var properties = new Dictionary() { {"StartTime", startTime.ToString()}, {"EndTime", endTime.ToString()}, {"Duration", elapsedTimeSpan.ToString()} }; return properties; } } }