29 lines
756 B
Nim
Raw Normal View History

2023-11-03 11:30:06 -03:00
## Utilities for serializing profiler metrics.
import std/algorithm
2023-11-03 11:30:06 -03:00
import std/json
import chronos/profiler
2023-11-02 12:07:15 -03:00
2023-11-03 11:30:06 -03:00
proc `%`*(o: Duration): JsonNode =
%(o.nanoseconds)
2023-11-02 12:07:15 -03:00
2023-11-03 11:30:06 -03:00
proc `%`*(o: cstring): JsonNode =
%($(o))
2023-11-02 12:07:15 -03:00
proc toJson*(o: Table[SrcLoc, AggregateFutureMetrics]): JsonNode =
2023-11-02 12:07:15 -03:00
var rows = newJArray()
for (location, metric) in o.pairs:
var row = %(metric)
row["location"] = %(location)
2023-11-02 12:07:15 -03:00
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))