/// <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);
                }
            }
        }
Beispiel #2
0
        /// <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));
 }