/// <summary> /// report request as an asynchronous operation. /// </summary> /// <param name="requestTelemetryData">The request telemetry data.</param> /// <returns>Task.</returns> /// <exception cref="Proteus.Bot.Builder.Extensions.Telemetry.TelemetryException">Failed to write to TelemetryWriters.</exception> public async Task ReportRequestAsync(IRequestTelemetryData requestTelemetryData) { try { var tasks = new List <Task>(); TelemetryWriters.ForEach(tw => { tasks.Add(tw.WriteRequestAsync(requestTelemetryData)); }); await Task.WhenAll(tasks); } catch (Exception e) { if (!Configuration.FailSilently) { throw new TelemetryException("Failed to write to TelemetryWriters.", e); } } }
/// <summary> /// write request as an asynchronous operation. /// </summary> /// <param name="requestTelemetryData">The request telemetry data.</param> /// <returns>Task.</returns> public async Task WriteRequestAsync(IRequestTelemetryData requestTelemetryData) { if (_configuration.Handles(TelemetryTypes.Responses)) { var duration = requestTelemetryData.RequestStartDateTime.Subtract(requestTelemetryData.RequestEndDateTime).TotalMilliseconds; await Task.Run(() => { var properties = GetBotContextProperties(); properties.Add("json", requestTelemetryData.Json); properties.Add("millisecondsDuration", $"{duration}"); properties.Add("cacheHit", $"{requestTelemetryData.RequestIsCacheHit}"); properties.Add("isAmbiguous", $"{requestTelemetryData.RequestIsAmbiguous}"); properties.Add("quality", $"{requestTelemetryData.RequestQuality}"); properties.Add("isAuthenticated", $"{requestTelemetryData.RequestIsAuthenticated}"); _telemetry.TrackEvent("Request", properties); DoPostLogActions(); }); } }
/// <summary> /// write request as an asynchronous operation. /// </summary> /// <param name="requestTelemetryData">The request telemetry data.</param> /// <returns>Task.</returns> public async Task WriteRequestAsync(IRequestTelemetryData requestTelemetryData) { await DoWriteTelemetry(requestTelemetryData, TelemetryTypes.Exceptions, OutputFormatter.FormatRequest); }
/// <summary> /// Formats the request. /// </summary> /// <param name="requestTelemetryData">The request telemetry data.</param> /// <returns>System.String.</returns> public string FormatRequest(IRequestTelemetryData requestTelemetryData) { return($"{GetDateTimeString()}\t{GetTelemetryContextProperties()}\tRequest: [Ambiguous: {requestTelemetryData.RequestIsAmbiguous} / Quality: {requestTelemetryData.RequestQuality} / Duration (ms): {requestTelemetryData.RequestMilliseconds} / cache hit?: {requestTelemetryData.RequestIsCacheHit}]"); }
/// <summary> /// Writes the request. /// </summary> /// <param name="requestTelemetryData">The request telemetry data.</param> /// <returns>Task.</returns> public Task WriteRequestAsync(IRequestTelemetryData requestTelemetryData) { DoWriteTelemetry(requestTelemetryData, TelemetryTypes.Requests, OutputFormatter.FormatRequest); return(Task.Delay(0)); }
/// <summary> /// Formats the request. /// </summary> /// <param name="requestTelemetryData">The request telemetry data.</param> /// <returns>System.String.</returns> public string FormatRequest(IRequestTelemetryData requestTelemetryData) { requestTelemetryData.RecordType = "request"; return(requestTelemetryData.AsStringWith(_context)); }