diff --git a/src/display/ui/bar/Bar.cpp b/src/display/ui/bar/Bar.cpp index e1b1f86..4282014 100644 --- a/src/display/ui/bar/Bar.cpp +++ b/src/display/ui/bar/Bar.cpp @@ -8,7 +8,7 @@ namespace display::ui::bar { } - void Bar::draw(display::graphics::Framebuffer &framebuffer, int x, int y, float value) + void Bar::draw(display::graphics::Framebuffer &framebuffer, int x, int y, float value, float overlay_value) { value = std::clamp(value, 0.0f, 1.0f); @@ -35,6 +35,24 @@ namespace display::ui::bar // можно добавить метод drawRect в Framebuffer framebuffer.drawRect(x, y, width, height, style.border); } + + if (overlay_value) + { + if (orientation == Orientation::Horizontal) + { + int fillWidth = static_cast(width * value); + int overlayWidth = static_cast(width * overlay_value); + int overlayX = x + (overlayWidth - fillWidth); + framebuffer.fillRect(overlayX, y, overlayWidth, height, display::graphics::White()); + } + else // Vertical + { + int fillHeight = static_cast(height * value); + int overlayHeight = static_cast(height * overlay_value); + int overlayY = y + (overlayHeight - fillHeight); + framebuffer.fillRect(x, overlayY + (height - overlayHeight), width, overlayHeight, display::graphics::White()); + } + } } display::graphics::Color Bar::valueToColor(float value) diff --git a/src/display/ui/bar/Bar.h b/src/display/ui/bar/Bar.h index 04f6915..c64c205 100644 --- a/src/display/ui/bar/Bar.h +++ b/src/display/ui/bar/Bar.h @@ -13,7 +13,7 @@ namespace display::ui::bar void draw(display::graphics::Framebuffer &framebuffer, int x, int y, - float value); // 0.0 .. 1.0 + float value, float overlay_value = 0.0); // 0.0 .. 1.0 private: int width; diff --git a/src/display/ui/hostblock/HostBlock.cpp b/src/display/ui/hostblock/HostBlock.cpp index 7298fe0..c79bd97 100644 --- a/src/display/ui/hostblock/HostBlock.cpp +++ b/src/display/ui/hostblock/HostBlock.cpp @@ -93,9 +93,11 @@ namespace display::ui::hostblock SECTION_GAP; // ===== Memory bar ===== - float memValue, swapValue = 0.0f; + float memValue, swapValue = 0.0f, hugepagesValue = 0.0f; if (metrics.memory.memory.total > 0) memValue = static_cast(metrics.memory.memory.used) / static_cast(metrics.memory.memory.total); + if (metrics.memory.hugepages.total > 0) + hugepagesValue = static_cast(metrics.memory.hugepages.total) / static_cast(metrics.memory.memory.total); memBar.draw( fb, @@ -114,13 +116,14 @@ namespace display::ui::hostblock if (metrics.memory.swap.total > 0) { - swapValue = metrics.memory.swap.used / metrics.memory.swap.total; + swapValue = static_cast(metrics.memory.swap.used) / static_cast(metrics.memory.swap.total); memBar.draw( fb, x + PADDING, cursorY, std::clamp(swapValue, 0.0f, 1.0f)); + text.drawTextOutlined(fb, x + MEM_BAR_TEXT_PADDING_X, cursorY + 8, diff --git a/src/metrics/Collector.cpp b/src/metrics/Collector.cpp index 4ab6273..3239708 100644 --- a/src/metrics/Collector.cpp +++ b/src/metrics/Collector.cpp @@ -207,7 +207,7 @@ namespace metrics uint64_t value; std::string unit; - uint64_t mem_total = 0, mem_available = 0, swap_total = 0, swap_available = 0; + uint64_t mem_total = 0, mem_available = 0, swap_total = 0, swap_available = 0, hugepages_total = 0, hugepages_available = 0, hugepages_size = 0; while (f >> key >> value >> unit) { @@ -219,6 +219,12 @@ namespace metrics swap_total = value * 1024; else if (key == "SwapFree:") swap_available = value * 1024; + else if (key == "HugePages_Total:") + hugepages_total = value; + else if (key == "HugePages_Free:") + hugepages_available = value; + else if (key == "Hugepagesize:") + hugepages_size = value; } Memory memory; @@ -228,6 +234,9 @@ namespace metrics memory.swap.total = swap_total; memory.swap.available = swap_available; memory.swap.used = swap_total - swap_available; + memory.hugepages.total = hugepages_total * hugepages_size; + memory.hugepages.available = hugepages_available * hugepages_size; + memory.hugepages.used = hugepages_total - hugepages_available; return memory; } diff --git a/src/metrics/Host.cpp b/src/metrics/Host.cpp index f9ff1fd..ec1ccbd 100644 --- a/src/metrics/Host.cpp +++ b/src/metrics/Host.cpp @@ -52,6 +52,9 @@ namespace metrics buf.writeUint64(memory.swap.used); buf.writeUint64(memory.swap.available); buf.writeUint64(memory.swap.total); + buf.writeUint64(memory.hugepages.used); + buf.writeUint64(memory.hugepages.available); + buf.writeUint64(memory.hugepages.total); // Disks buf.writeUint8(static_cast(disks.size())); @@ -98,6 +101,9 @@ namespace metrics h.memory.swap.used = buf.readUint64(); h.memory.swap.available = buf.readUint64(); h.memory.swap.total = buf.readUint64(); + h.memory.hugepages.used = buf.readUint64(); + h.memory.hugepages.available = buf.readUint64(); + h.memory.hugepages.total = buf.readUint64(); // Disks uint8_t numDisks = buf.readUint8(); diff --git a/src/metrics/Memory.h b/src/metrics/Memory.h index 1a44f55..b906b7c 100644 --- a/src/metrics/Memory.h +++ b/src/metrics/Memory.h @@ -8,5 +8,6 @@ namespace metrics { MemoryMetrics memory; MemoryMetrics swap; + MemoryMetrics hugepages; }; } // namespace metrics