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