diff options
Diffstat (limited to 'src/zenhttp/monitoring/httpstats.cpp')
| -rw-r--r-- | src/zenhttp/monitoring/httpstats.cpp | 29 |
1 files changed, 7 insertions, 22 deletions
diff --git a/src/zenhttp/monitoring/httpstats.cpp b/src/zenhttp/monitoring/httpstats.cpp index 3877215a8..283cedca7 100644 --- a/src/zenhttp/monitoring/httpstats.cpp +++ b/src/zenhttp/monitoring/httpstats.cpp @@ -189,11 +189,8 @@ HttpStatsService::BroadcastStats() return; } - // Collect stats from all providers - ExtendableStringBuilder<4096> JsonBuilder; - JsonBuilder.Append("{"); - - bool First = true; + // Collect stats from all providers into a single CBO object, then convert to JSON + CbObjectWriter Writer; { RwLock::SharedLockScope _(m_Lock); for (auto& [Id, Provider] : m_Providers) @@ -203,27 +200,15 @@ HttpStatsService::BroadcastStats() { continue; } - - if (!First) - { - JsonBuilder.Append(","); - } - First = false; - - // Emit as "provider_id": { ... } - JsonBuilder.Append("\""); - JsonBuilder.Append(Id); - JsonBuilder.Append("\":"); - - ExtendableStringBuilder<2048> StatsJson; - Stats.ToJson(StatsJson); - JsonBuilder.Append(StatsJson.ToView()); + Writer.AddObject(Id, Stats); } } - JsonBuilder.Append("}"); - + CbObject Payload = Writer.Save(); + ExtendableStringBuilder<4096> JsonBuilder; + Payload.ToJson(JsonBuilder); std::string_view Json = JsonBuilder.ToView(); + for (auto& Conn : Connections) { if (Conn->IsOpen()) |