shadcn.io is not affiliated with official shadcn/ui
Log Volume Dashboard Block for Ark UI
Six log sources as small multiples with hourly charts on their own scales, a daily ingest budget with a projected end of day, a sort menu, and an enlarged chart with the busiest hour and level split.
Installation
Overview
See which source is filling the budget, with this log volume panel for React with Ark UI. A hairline frame with a plus mark on each corner opens with a daily ingest budget: a bar of the volume so far against 5 TB with a tick where the day is projected to end, and a sentence that says how far over or under that is. Six Logpile sources follow as cards in a grid, each with a 24-slot hourly chart on its own scale, the day's total, its share of error lines and its peak hour. A Select in the header sorts the cards by volume, errors or name. The cards are one radio group; choosing one draws its chart larger in a band below, names its busiest hour and splits the day into info, warning and error lines. Hours still to come stay empty. It's built from Select and Guides, with the charts drawn in CSS. For logging pipelines, observability tools and cost reviews.
FAQ
How is the end of day projected?
The volume so far divided by the hours that have passed (18 of 24, from the typed time) and multiplied by 24. It assumes the rest of the day looks like the average so far, so it is a rough guide, and the sentence says "at this rate".
Why does each card have its own scale?
So a small source still shows the shape of its day. The tallest bar in each chart is that source's busiest hour, drawn solid, and the figure beside the large chart gives its size. Compare totals with the numbers, not the bar heights.
How do I fill it with my own sources?
Each source in SOURCES has an id, a list of hourly volumes in gigabytes and a split of its lines into info, warning and error as parts per thousand. Totals, shares, peaks and the budget bar are all worked out from those.
What stays local, and how do I wire it for real?
Everything: the hourly volumes are generated from a few typed numbers per source and nothing is read from a pipeline. Replace hoursOf with your hourly counts and set HOURS_DONE to the hours that have finished.