/// <summary> /// report intent as an asynchronous operation. /// </summary> /// <param name="intentTelemetryData">The intent telemetry data.</param> /// <returns>Task.</returns> /// <exception cref="Proteus.Bot.Builder.Extensions.Telemetry.TelemetryException">Failed to write to TelemetryWriters.</exception> public async Task ReportIntentAsync(IIntentTelemetryData intentTelemetryData) { try { var tasks = new List <Task>(); TelemetryWriters.ForEach(tw => { tasks.Add(tw.WriteIntentAsync(intentTelemetryData)); }); TelemetryWriters.ForEach(tw => { tasks.AddRange(ProcessEntities(intentTelemetryData.IntentEntities)); }); await Task.WhenAll(tasks); } catch (Exception e) { if (!Configuration.FailSilently) { throw new TelemetryException("Failed to write to TelemetryWriters.", e); } } }
/// <summary> /// write intent as an asynchronous operation. /// </summary> /// <param name="intentTelemetryData">The intent telemetry data.</param> /// <returns>Task.</returns> public async Task WriteIntentAsync(IIntentTelemetryData intentTelemetryData) { if (_configuration.Handles(TelemetryTypes.Intents)) { await Task.Run(() => { var properties = GetBotContextProperties(); properties.Add("json", intentTelemetryData.Json); properties.Add("name", intentTelemetryData.IntentName); properties.Add("text", intentTelemetryData.IntentText); properties.Add("hasAmbiguousEntities", intentTelemetryData.IntentHasAmbiguousEntities.ToString()); var metrics = new Dictionary <string, double> { { "score", intentTelemetryData.IntentConfidenceScore ?? 0d } }; _telemetry.TrackEvent("Intent", properties, metrics); DoPostLogActions(); }); } }
/// <summary> /// write intent as an asynchronous operation. /// </summary> /// <param name="intentTelemetryData">The intent telemetry data.</param> /// <returns>Task.</returns> public async Task WriteIntentAsync(IIntentTelemetryData intentTelemetryData) { await DoWriteTelemetry(intentTelemetryData, TelemetryTypes.Intents, OutputFormatter.FormatIntent); }
/// <summary> /// Formats the intent. /// </summary> /// <param name="intentTelemetryData">The intent telemetry data.</param> /// <returns>System.String.</returns> public string FormatIntent(IIntentTelemetryData intentTelemetryData) { return($"{GetDateTimeString()}\t{GetTelemetryContextProperties()}\tIntent: [{intentTelemetryData.IntentName} ({intentTelemetryData.IntentConfidenceScore}) / Ambiguous Entities: {intentTelemetryData.IntentHasAmbiguousEntities}] - [{intentTelemetryData.IntentText}]"); }
/// <summary> /// Writes the intent. /// </summary> /// <param name="intentTelemetryData">The intent telemetry data.</param> /// <returns>Task.</returns> public Task WriteIntentAsync(IIntentTelemetryData intentTelemetryData) { DoWriteTelemetry(intentTelemetryData, TelemetryTypes.Intents, OutputFormatter.FormatIntent); return(Task.Delay(0)); }
/// <summary> /// Formats the intent. /// </summary> /// <param name="intentTelemetryData">The intent telemetry data.</param> /// <returns>System.String.</returns> public string FormatIntent(IIntentTelemetryData intentTelemetryData) { intentTelemetryData.RecordType = "intent"; return(intentTelemetryData.AsStringWith(_context)); }