Skip to content

Commit

Permalink
Trace log for flamegraph response
Browse files Browse the repository at this point in the history
  • Loading branch information
danielmitterdorfer committed Jan 31, 2024
1 parent 24b8ce5 commit 69fa5c1
Showing 1 changed file with 47 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.xcontent.ChunkedToXContentHelper;
import org.elasticsearch.common.xcontent.ChunkedToXContentObject;
import org.elasticsearch.telemetry.tracing.TraceLogger;
import org.elasticsearch.xcontent.ToXContent;

import java.io.IOException;
Expand Down Expand Up @@ -174,7 +175,7 @@ public long getTotalSamples() {
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
return Iterators.concat(
ChunkedToXContentHelper.startObject(),
ChunkedToXContentHelper.array(
traced("Edges", ChunkedToXContentHelper.array(
"Edges",
Iterators.flatMap(
edges.iterator(),
Expand All @@ -184,34 +185,34 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params
ChunkedToXContentHelper.endArray()
)
)
),
ChunkedToXContentHelper.array("FileID", Iterators.map(fileIds.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("FrameType", Iterators.map(frameTypes.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("Inline", Iterators.map(inlineFrames.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("ExeFilename", Iterators.map(fileNames.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("AddressOrLine", Iterators.map(addressOrLines.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("FunctionName", Iterators.map(functionNames.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("FunctionOffset", Iterators.map(functionOffsets.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("SourceFilename", Iterators.map(sourceFileNames.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("SourceLine", Iterators.map(sourceLines.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("CountInclusive", Iterators.map(countInclusive.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array("CountExclusive", Iterators.map(countExclusive.iterator(), e -> (b, p) -> b.value(e))),
ChunkedToXContentHelper.array(
)),
traced("FileID", ChunkedToXContentHelper.array("FileID", Iterators.map(fileIds.iterator(), e -> (b, p) -> b.value(e)))),
traced("FrameType", ChunkedToXContentHelper.array("FrameType", Iterators.map(frameTypes.iterator(), e -> (b, p) -> b.value(e)))),
traced("Inline", ChunkedToXContentHelper.array("Inline", Iterators.map(inlineFrames.iterator(), e -> (b, p) -> b.value(e)))),
traced("ExeFilename", ChunkedToXContentHelper.array("ExeFilename", Iterators.map(fileNames.iterator(), e -> (b, p) -> b.value(e)))),
traced("AddressOrLine", ChunkedToXContentHelper.array("AddressOrLine", Iterators.map(addressOrLines.iterator(), e -> (b, p) -> b.value(e)))),
traced("FunctionName", ChunkedToXContentHelper.array("FunctionName", Iterators.map(functionNames.iterator(), e -> (b, p) -> b.value(e)))),
traced("FunctionOffset", ChunkedToXContentHelper.array("FunctionOffset", Iterators.map(functionOffsets.iterator(), e -> (b, p) -> b.value(e)))),
traced("SourceFilename", ChunkedToXContentHelper.array("SourceFilename", Iterators.map(sourceFileNames.iterator(), e -> (b, p) -> b.value(e)))),
traced("SourceLine", ChunkedToXContentHelper.array("SourceLine", Iterators.map(sourceLines.iterator(), e -> (b, p) -> b.value(e)))),
traced("CountInclusive", ChunkedToXContentHelper.array("CountInclusive", Iterators.map(countInclusive.iterator(), e -> (b, p) -> b.value(e)))),
traced("CountExclusive", ChunkedToXContentHelper.array("CountExclusive", Iterators.map(countExclusive.iterator(), e -> (b, p) -> b.value(e)))),
traced("AnnualCO2TonsInclusive", ChunkedToXContentHelper.array(
"AnnualCO2TonsInclusive",
Iterators.map(annualCO2TonsInclusive.iterator(), e -> (b, p) -> b.value(e))
),
ChunkedToXContentHelper.array(
)),
traced("AnnualCO2TonsExclusive", ChunkedToXContentHelper.array(
"AnnualCO2TonsExclusive",
Iterators.map(annualCO2TonsExclusive.iterator(), e -> (b, p) -> b.value(e))
),
ChunkedToXContentHelper.array(
)),
traced("AnnualCostsUSDInclusive", ChunkedToXContentHelper.array(
"AnnualCostsUSDInclusive",
Iterators.map(annualCostsUSDInclusive.iterator(), e -> (b, p) -> b.value(e))
),
ChunkedToXContentHelper.array(
)),
traced("AnnualCostsUSDExclusive", ChunkedToXContentHelper.array(
"AnnualCostsUSDExclusive",
Iterators.map(annualCostsUSDExclusive.iterator(), e -> (b, p) -> b.value(e))
),
)),
Iterators.single((b, p) -> b.field("Size", size)),
Iterators.single((b, p) -> b.field("SamplingRate", samplingRate)),
Iterators.single((b, p) -> b.field("SelfCPU", selfCPU)),
Expand All @@ -220,4 +221,29 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params
ChunkedToXContentHelper.endObject()
);
}

private static <T> Iterator<? extends ToXContent> traced(String name, Iterator<? extends ToXContent> iterator) {
return new Iterator<>() {
private boolean traceStarted = false;

@Override
public boolean hasNext() {
if (traceStarted == false) {
TraceLogger.start(null, "toXContent[" + name + "]");
traceStarted = true;
}
boolean hasNext = iterator.hasNext();
if (hasNext == false) {
TraceLogger.stop(null, "toXContent[" + name + "]");
}
return hasNext;

}

@Override
public ToXContent next() {
return iterator.next();
}
};
}
}

0 comments on commit 69fa5c1

Please sign in to comment.