nim-codex/codex/utils/asyncprofiler/serialization.nim

29 lines
756 B
Nim

## Utilities for serializing profiler metrics.
import std/algorithm
import std/json
import chronos/profiler
proc `%`*(o: Duration): JsonNode =
%(o.nanoseconds)
proc `%`*(o: cstring): JsonNode =
%($(o))
proc toJson*(o: Table[SrcLoc, AggregateFutureMetrics]): JsonNode =
var rows = newJArray()
for (location, metric) in o.pairs:
var row = %(metric)
row["location"] = %(location)
rows.add(row)
rows
proc `%`*(o: Table[SrcLoc, AggregateFutureMetrics]): JsonNode = o.toJson()
proc sortBy*(jArray: JsonNode, metric: string): JsonNode {.raises: [ref KeyError].} =
%(jArray.getElems.sorted(
proc (a, b: JsonNode): int {.raises: [ref KeyError].} =
cmp(a[metric].getInt, b[metric].getInt),
order = SortOrder.Descending))