protected override string CreateBody(ThreadSample threadSample) { var pprof = new Pprof(); var sampleBuilder = new SampleBuilder(); pprof.AddLabel(sampleBuilder, "source.event.time", threadSample.Timestamp.Milliseconds); if (threadSample.SpanId != 0 || threadSample.TraceIdHigh != 0 || threadSample.TraceIdLow != 0) { pprof.AddLabel(sampleBuilder, "span_id", threadSample.SpanId); pprof.AddLabel(sampleBuilder, "trace_id", TraceIdHelper.ToString(threadSample.TraceIdHigh, threadSample.TraceIdLow)); } foreach (var methodName in threadSample.Frames) { sampleBuilder.AddLocationId(pprof.GetLocationId(methodName)); } pprof.AddLabel(sampleBuilder, "thread.id", threadSample.ManagedId); pprof.AddLabel(sampleBuilder, "thread.name", threadSample.ThreadName); pprof.AddLabel(sampleBuilder, "thread.os.id", threadSample.NativeId); pprof.Profile.Samples.Add(sampleBuilder.Build()); return(Serialize(pprof.Profile)); }