diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/zen/cmds/top_cmd.cpp | 104 | ||||
| -rw-r--r-- | src/zenutil/consoletui.cpp | 17 | ||||
| -rw-r--r-- | src/zenutil/include/zenutil/consoletui.h | 3 |
3 files changed, 87 insertions, 37 deletions
diff --git a/src/zen/cmds/top_cmd.cpp b/src/zen/cmds/top_cmd.cpp index 0d74e96be..92c17ef7c 100644 --- a/src/zen/cmds/top_cmd.cpp +++ b/src/zen/cmds/top_cmd.cpp @@ -85,17 +85,22 @@ namespace { uint64_t CacheRpcCount = 0; uint64_t CacheRpcOps = 0; - // /stats/builds -> store - bool BuildsAvailable = false; - uint64_t BlobReadCount = 0; - uint64_t BlobWriteCount = 0; - uint64_t BlobHitCount = 0; - uint64_t BuildDiskSize = 0; + // /stats/prj -> project store + bool PrjAvailable = false; + uint64_t PrjRequestCount = 0; + uint64_t PrjDiskSize = 0; + uint64_t PrjMemSize = 0; + uint64_t PrjOpHits = 0; + uint64_t PrjOpMisses = 0; + uint64_t PrjOpWrites = 0; + uint64_t PrjChunkHits = 0; + uint64_t PrjChunkMisses = 0; + uint64_t PrjChunkWrites = 0; // Owned buffers to keep string_views alive CbObject InfoObject; CbObject CacheObject; - CbObject BuildsObject; + CbObject PrjObject; }; static void FetchServerStats(HttpClient& Http, ServerStats& Stats) @@ -142,23 +147,31 @@ namespace { { } - // Fetch /stats/builds + // Fetch /stats/prj try { - if (HttpClient::Response Response = Http.Get("/stats/builds")) + if (HttpClient::Response Response = Http.Get("/stats/prj")) { - Stats.BuildsObject = Response.AsObject(); - CbObjectView StoreView = Stats.BuildsObject["store"].AsObjectView(); + Stats.PrjObject = Response.AsObject(); + CbObjectView StoreView = Stats.PrjObject["store"].AsObjectView(); - CbObjectView BlobView = StoreView["blobs"].AsObjectView(); - Stats.BlobReadCount = BlobView["readcount"].AsUInt64(0); - Stats.BlobWriteCount = BlobView["writecount"].AsUInt64(0); - Stats.BlobHitCount = BlobView["hitcount"].AsUInt64(0); + Stats.PrjRequestCount = StoreView["requestcount"].AsUInt64(0); - CbObjectView BuildSizeView = StoreView["size"].AsObjectView(); - Stats.BuildDiskSize = BuildSizeView["disk"].AsUInt64(0); + CbObjectView SizeView = StoreView["size"].AsObjectView(); + Stats.PrjDiskSize = SizeView["disk"].AsUInt64(0); + Stats.PrjMemSize = SizeView["memory"].AsUInt64(0); - Stats.BuildsAvailable = true; + CbObjectView OpView = StoreView["op"].AsObjectView(); + Stats.PrjOpHits = OpView["hitcount"].AsUInt64(0); + Stats.PrjOpMisses = OpView["misscount"].AsUInt64(0); + Stats.PrjOpWrites = OpView["writecount"].AsUInt64(0); + + CbObjectView ChunkView = StoreView["chunk"].AsObjectView(); + Stats.PrjChunkHits = ChunkView["hitcount"].AsUInt64(0); + Stats.PrjChunkMisses = ChunkView["misscount"].AsUInt64(0); + Stats.PrjChunkWrites = ChunkView["writecount"].AsUInt64(0); + + Stats.PrjAvailable = true; } } catch (...) @@ -275,14 +288,21 @@ TopCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) printf(" RPC: %llu requests, %llu ops\n", (unsigned long long)Stats.CacheRpcCount, (unsigned long long)Stats.CacheRpcOps); } - if (Stats.BuildsAvailable) + if (Stats.PrjAvailable) { - printf("\nBuild Store:\n"); - printf(" Blobs: %llu reads, %llu writes, %llu hits | %s on disk\n", - (unsigned long long)Stats.BlobReadCount, - (unsigned long long)Stats.BlobWriteCount, - (unsigned long long)Stats.BlobHitCount, - NiceBytes(Stats.BuildDiskSize).c_str()); + printf("\nProject Store:\n"); + printf(" Requests: %llu Disk: %s Memory: %s\n", + (unsigned long long)Stats.PrjRequestCount, + NiceBytes(Stats.PrjDiskSize).c_str(), + NiceBytes(Stats.PrjMemSize).c_str()); + printf(" Ops: %llu hits, %llu misses, %llu writes\n", + (unsigned long long)Stats.PrjOpHits, + (unsigned long long)Stats.PrjOpMisses, + (unsigned long long)Stats.PrjOpWrites); + printf(" Chunks: %llu hits, %llu misses, %llu writes\n", + (unsigned long long)Stats.PrjChunkHits, + (unsigned long long)Stats.PrjChunkMisses, + (unsigned long long)Stats.PrjChunkWrites); } } @@ -426,20 +446,27 @@ TopCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) printf("\033[1mCache (z$):\033[0m unavailable\033[K\n"); } - // Build store stats + // Project store stats printf("\033[K\n"); - if (Stats.BuildsAvailable) + if (Stats.PrjAvailable) { - printf("\033[1mBuild Store:\033[0m\033[K\n"); - printf(" Blobs: %llu reads, %llu writes, %llu hits | %s on disk\033[K\n", - (unsigned long long)Stats.BlobReadCount, - (unsigned long long)Stats.BlobWriteCount, - (unsigned long long)Stats.BlobHitCount, - NiceBytes(Stats.BuildDiskSize).c_str()); + printf("\033[1mProject Store:\033[0m\033[K\n"); + printf(" Requests: %-10llu Disk: %-12s Memory: %s\033[K\n", + (unsigned long long)Stats.PrjRequestCount, + NiceBytes(Stats.PrjDiskSize).c_str(), + NiceBytes(Stats.PrjMemSize).c_str()); + printf(" Ops: %llu hits, %llu misses, %llu writes\033[K\n", + (unsigned long long)Stats.PrjOpHits, + (unsigned long long)Stats.PrjOpMisses, + (unsigned long long)Stats.PrjOpWrites); + printf(" Chunks: %llu hits, %llu misses, %llu writes\033[K\n", + (unsigned long long)Stats.PrjChunkHits, + (unsigned long long)Stats.PrjChunkMisses, + (unsigned long long)Stats.PrjChunkWrites); } else if (Http) { - printf("\033[1mBuild Store:\033[0m unavailable\033[K\n"); + printf("\033[1mProject Store:\033[0m unavailable\033[K\n"); } // Server info @@ -458,12 +485,12 @@ TopCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) printf("\033[%u;1H", Rows); // Move to last row if (Instances.size() > 1 && SelectedIdx >= 0) { - printf("\033[2mq quit | \xe2\x86\x91/\xe2\x86\x93 switch instance | Refreshing every %.1fs\033[0m\033[K", + printf("\033[2mq quit | \xe2\x86\x91/\xe2\x86\x93 switch instance | F5 refresh | Refreshing every %.1fs\033[0m\033[K", static_cast<double>(m_IntervalMs) / 1000.0); } else { - printf("\033[2mPress q to quit | Refreshing every %.1fs\033[0m\033[K", static_cast<double>(m_IntervalMs) / 1000.0); + printf("\033[2mq quit | F5 refresh | Refreshing every %.1fs\033[0m\033[K", static_cast<double>(m_IntervalMs) / 1000.0); } } @@ -482,6 +509,11 @@ TopCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) { return; } + if (Input == TuiInput::Refresh) + { + NeedsRedraw = true; + break; + } if (Input == TuiInput::ArrowUp || Input == TuiInput::ArrowDown) { // Only handle arrow keys when we have auto-discovered instances to switch between diff --git a/src/zenutil/consoletui.cpp b/src/zenutil/consoletui.cpp index 777819224..1621b7198 100644 --- a/src/zenutil/consoletui.cpp +++ b/src/zenutil/consoletui.cpp @@ -503,6 +503,10 @@ TuiPollInput() { return TuiInput::Quit; } + if (vk == VK_F5) + { + return TuiInput::Refresh; + } if (vk == VK_UP) { return TuiInput::ArrowUp; @@ -535,6 +539,19 @@ TuiPollInput() { return TuiInput::ArrowDown; } + // F5 = \033[15~ + if (Final == '1') + { + int b2 = ReadByteWithTimeout(50); + if (b2 == '5') + { + int b3 = ReadByteWithTimeout(50); + if (b3 == '~') + { + return TuiInput::Refresh; + } + } + } } return TuiInput::Quit; // bare Esc } diff --git a/src/zenutil/include/zenutil/consoletui.h b/src/zenutil/include/zenutil/consoletui.h index edbcd6862..52b5d3935 100644 --- a/src/zenutil/include/zenutil/consoletui.h +++ b/src/zenutil/include/zenutil/consoletui.h @@ -60,7 +60,8 @@ bool TuiPollQuit(); enum class TuiInput { None, - Quit, // Esc, 'q', 'Q', Ctrl+C + Quit, // Esc, 'q', 'Q', Ctrl+C + Refresh, // F5 ArrowUp, ArrowDown, }; |