private void WriteSamples(IEnumerable <QuickPulseDataSample> samples, string instrumentationKey, Stream stream, CollectionConfigurationError[] errors)
        {
            var monitoringPoints = new List <MonitoringDataPoint>();

            foreach (var sample in samples)
            {
                var metricPoints = new List <MetricPoint>();

                metricPoints.AddRange(CreateDefaultMetrics(sample));

                metricPoints.AddRange(
                    sample.PerfCountersLookup.Select(counter => new MetricPoint {
                    Name = counter.Key, Value = Round(counter.Value), Weight = 1,
                }));

                metricPoints.AddRange(CreateCalculatedMetrics(sample));

                ITelemetryDocument[] documents = sample.TelemetryDocuments.ToArray();
                Array.Reverse(documents);

                ProcessCpuData[] topCpuProcesses =
                    sample.TopCpuData.Select(p => new ProcessCpuData()
                {
                    ProcessName = p.Item1, CpuPercentage = p.Item2,
                }).ToArray();

                var dataPoint = new MonitoringDataPoint
                {
                    Version                        = this.version,
                    InvariantVersion               = MonitoringDataPoint.CurrentInvariantVersion,
                    InstrumentationKey             = instrumentationKey,
                    Instance                       = this.instanceName,
                    RoleName                       = this.roleName,
                    StreamId                       = this.streamId,
                    MachineName                    = this.machineName,
                    Timestamp                      = sample.EndTimestamp.UtcDateTime,
                    IsWebApp                       = this.isWebApp,
                    PerformanceCollectionSupported = PerformanceCounterUtility.IsPerfCounterSupported(),
                    ProcessorCount                 = this.processorCount,
                    Metrics                        = metricPoints.ToArray(),
                    Documents                      = documents,
                    GlobalDocumentQuotaReached     = sample.GlobalDocumentQuotaReached,
                    TopCpuProcesses                = topCpuProcesses.Length > 0 ? topCpuProcesses : null,
                    TopCpuDataAccessDenied         = sample.TopCpuDataAccessDenied,
                    CollectionConfigurationErrors  = errors,
                };

                monitoringPoints.Add(dataPoint);
            }

            this.serializerDataPointArray.WriteObject(stream, monitoringPoints.ToArray());
        }
示例#2
0
        private void WritePingData(DateTimeOffset timestamp, Stream stream)
        {
            var dataPoint = new MonitoringDataPoint
            {
                Version          = this.version,
                InvariantVersion = MonitoringDataPoint.CurrentInvariantVersion,
                // InstrumentationKey = instrumentationKey, // ikey is currently set in query string parameter
                Instance    = this.instanceName,
                StreamId    = this.streamId,
                MachineName = this.machineName,
                Timestamp   = timestamp.UtcDateTime,
                IsWebApp    = this.isWebApp,
                PerformanceCollectionSupported = PerformanceCounterUtility.IsPerfCounterSupported(),
                ProcessorCount = this.processorCount,
            };

            this.serializerDataPoint.WriteObject(stream, dataPoint);
        }