/// <summary> /// Handles a <see cref="TelemetryEvent"/> that is being streamed to Kusto. /// </summary> /// <param name="event">The event being handled.</param> internal virtual void HandleKustoEvent(TelemetryEvent @event) { var eventType = @event.GetType(); KustoQueuedIngestionProperties ingestProps; if (!KustoMappings.ContainsKey(eventType) && KustoMappings.TryAdd(eventType, new KustoQueuedIngestionProperties(KustoDbName, "Unknown"))) { ingestProps = KustoMappings[eventType]; ingestProps.TableName = KustoAdminClient.GenerateTableFromType(eventType); ingestProps.JSONMappingReference = KustoAdminClient.GenerateTableJsonMappingFromType(eventType); ingestProps.ReportLevel = IngestionReportLevel.FailuresOnly; ingestProps.ReportMethod = IngestionReportMethod.Queue; ingestProps.FlushImmediately = true; ingestProps.Format = DataSourceFormat.json; } else { ingestProps = KustoMappings[eventType]; } using (var stream = new MemoryStream()) using (var writer = new StreamWriter(stream)) { writer.WriteLine(JsonConvert.SerializeObject(@event)); writer.Flush(); stream.Seek(0, SeekOrigin.Begin); KustoIngestClient.IngestFromStream(stream, ingestProps, leaveOpen: true); } }
internal virtual async Task HandleKustoEvent(TelemetryEvent @event) { var eventType = @event.GetType(); try { var ingestProps = GetDirectModelProperties(eventType); using var stream = new MemoryStream(); using var writer = new StreamWriter(stream); writer.WriteLine(JsonConvert.SerializeObject(@event)); writer.Flush(); stream.Seek(0, SeekOrigin.Begin); var startTime = DateTime.UtcNow; await KustoDirectIngestClient.IngestFromStreamAsync(stream, ingestProps, true); KustoIngestionTimeMetric.TrackValue(DateTime.UtcNow.Subtract(startTime).TotalMilliseconds); _kustoOptionsBuilder.OnMessagesSent(Interlocked.Increment(ref _messagesSent)); } catch (Exception e) { InternalStream.OnNext(e.ToExceptionEvent()); } }
public void Fill(RaceSession session, TelemetryEvent te) { throw new NotImplementedException("No implementation to invoke race fill over " + te.GetType().FullName); }