private void SnapshotMetrics(MetricsSourceAdapter sa, MetricsBufferBuilder bufferBuilder ) { long startTime = Time.Now(); bufferBuilder.Add(sa.Name(), sa.GetMetrics(collector, true)); collector.Clear(); snapshotStat.Add(Time.Now() - startTime); Log.Debug("Snapshotted source " + sa.Name()); }
/// <summary>Publish a metrics snapshot to all the sinks</summary> /// <param name="buffer">the metrics snapshot to publish</param> /// <param name="immediate"> /// indicates that we should publish metrics immediately /// instead of using a separate thread. /// </param> internal virtual void PublishMetrics(MetricsBuffer buffer, bool immediate) { lock (this) { int dropped = 0; foreach (MetricsSinkAdapter sa in sinks.Values) { long startTime = Time.Now(); bool result; if (immediate) { result = sa.PutMetricsImmediate(buffer); } else { result = sa.PutMetrics(buffer, logicalTime); } dropped += result ? 0 : 1; publishStat.Add(Time.Now() - startTime); } droppedPubAll.Incr(dropped); } }