/// <summary> /// report service result as an asynchronous operation. /// </summary> /// <param name="serviceResultTelemetryData">The service result telemetry data.</param> /// <returns>Task.</returns> /// <exception cref="Proteus.Bot.Builder.Extensions.Telemetry.TelemetryException">Failed to write to TelemetryWriters.</exception> public async Task ReportServiceResultAsync(IServiceResultTelemetryData serviceResultTelemetryData) { try { var tasks = new List <Task>(); TelemetryWriters.ForEach(tw => { tasks.Add(tw.WriteServiceResultAsync(serviceResultTelemetryData)); }); await Task.WhenAll(tasks); } catch (Exception e) { if (!Configuration.FailSilently) { throw new TelemetryException("Failed to write to TelemetryWriters.", e); } } }
/// <summary> /// write service result as an asynchronous operation. /// </summary> /// <param name="serviceResultTelemetryData">The service result telemetry data.</param> /// <returns>Task.</returns> public async Task WriteServiceResultAsync(IServiceResultTelemetryData serviceResultTelemetryData) { if (_configuration.Handles(TelemetryTypes.ServiceResults)) { await Task.Run(() => { var properties = GetBotContextProperties(); properties.Add("json", serviceResultTelemetryData.Json); properties.Add("name", serviceResultTelemetryData.ServiceResultName); properties.Add("success", serviceResultTelemetryData.ServiceResultSuccess.ToString()); properties.Add("response", serviceResultTelemetryData.ServiceResultResponse); var metrics = new Dictionary <string, double> { { "milliseconds", serviceResultTelemetryData.ServiceResultMilliseconds } }; _telemetry.TrackEvent("ServiceResult", properties, metrics); DoPostLogActions(); }); } }
/// <summary> /// write service result as an asynchronous operation. /// </summary> /// <param name="serviceResultTelemetryData">The service result telemetry data.</param> /// <returns>Task.</returns> public async Task WriteServiceResultAsync(IServiceResultTelemetryData serviceResultTelemetryData) { await DoWriteTelemetry(serviceResultTelemetryData, TelemetryTypes.ServiceResults, OutputFormatter.FormatServiceResult); }
/// <summary> /// Formats the service result. /// </summary> /// <param name="serviceResultTelemetryData">The service result telemetry data.</param> /// <returns>System.String.</returns> public string FormatServiceResult(IServiceResultTelemetryData serviceResultTelemetryData) { return($"{GetDateTimeString()}\t{GetTelemetryContextProperties()}\tServiceResult: [{serviceResultTelemetryData.ServiceResultName}] - result: [{serviceResultTelemetryData.ServiceResultResponse}] - duration(ms): [{serviceResultTelemetryData.ServiceResultEndDateTime.Subtract(serviceResultTelemetryData.ServiceResultStartDateTime).TotalMilliseconds}] - success: [{serviceResultTelemetryData.ServiceResultSuccess}]"); }
/// <summary> /// Writes the service result. /// </summary> /// <param name="serviceResultTelemetryData">The service result telemetry data.</param> /// <returns>Task.</returns> public Task WriteServiceResultAsync(IServiceResultTelemetryData serviceResultTelemetryData) { DoWriteTelemetry(serviceResultTelemetryData, TelemetryTypes.ServiceResults, OutputFormatter.FormatServiceResult); return(Task.Delay(0)); }
/// <summary> /// Formats the service result. /// </summary> /// <param name="serviceResultTelemetryData">The service result telemetry data.</param> /// <returns>System.String.</returns> public string FormatServiceResult(IServiceResultTelemetryData serviceResultTelemetryData) { serviceResultTelemetryData.RecordType = "serviceResult"; return(serviceResultTelemetryData.AsStringWith(_context)); }