void ITelemetryWriter.PushTelemetry(TelemetryCollection telemetryCollection)
 {
     // sending all other events from telemetryCollection
     foreach (var telEvent in AppInsightsTelemetryWriter.GetEventTelemetryList(telemetryCollection))
     {
         this.telemetryClient.TrackEvent(telEvent);
     }
 }
        // extension to create AppInsights EventTelemetry list from  a TelemetryCollection
        public static List <EventTelemetry> GetEventTelemetryList(TelemetryCollection telemetryCollection)
        {
            List <EventTelemetry> eventTelemetryList = new List <EventTelemetry>();

            foreach (TraceAggregator traceAggregator in telemetryCollection)
            {
                eventTelemetryList.Add(AppInsightsTelemetryWriter.ConvertAggregationToTelemetry(traceAggregator.TraceAggrConfig, traceAggregator, telemetryCollection.TelemetryIds, telemetryCollection.DailyNumberOfTelemetryPushes, telemetryCollection.TelemetryBatchNumber));
            }

            return(eventTelemetryList);
        }
        private static EventTelemetry ConvertAggregationToTelemetry(TraceAggregationConfig traceAggregationConfig, TraceAggregator traceAggregator, TelemetryIdentifiers telemetryIds, int telBatchesDaily, int telBatchNumber)
        {
            EventTelemetry eventEntity = AppInsightsTelemetryWriter.CreateBaseEventTelemetry(telemetryIds, traceAggregationConfig.TaskName, traceAggregationConfig.EventName, telBatchesDaily, telBatchNumber, traceAggregator.TraceTimestamp);

            Dictionary <string, string> properties;
            Dictionary <string, double> metrics;

            traceAggregator.CurrentFormattedFieldAggregationsValues(out properties, out metrics);

            foreach (var property in properties)
            {
                eventEntity.Properties[property.Key] = property.Value;
            }

            foreach (var metric in metrics)
            {
                eventEntity.Metrics[metric.Key] = metric.Value;
            }

            return(eventEntity);
        }