aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/zen/cmds/top_cmd.cpp104
-rw-r--r--src/zenutil/consoletui.cpp17
-rw-r--r--src/zenutil/include/zenutil/consoletui.h3
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,
};