module Web.View.ApiDashboard.Show where import Web.Types import Generated.Types import IHP.Prelude import IHP.ViewPrelude import Web.Routes () import Data.Maybe (fromMaybe) data ConsumerStats = ConsumerStats { consumer :: !ApiConsumer , requests24h :: !Int , errorRate :: !Double -- fraction 0..1 , lastSeen :: !(Maybe UTCTime) } data ShowView = ShowView { stats :: ![ConsumerStats] } instance View ShowView where html ShowView { .. } = [hsx|

API Usage Dashboard

Per-consumer request metrics (last 24 hours)

← Consumers
{if null stats then noStatsMsg else statsTable} |] where noStatsMsg = [hsx|

No API activity yet.

|] statsTable = [hsx|
{forEach stats renderRow}
Consumer Req (24h) Error Rate Last Seen Manifest
|] renderRow ConsumerStats { .. } = [hsx| {consumer.name} {show requests24h} {formatErrorRate errorRate}% {maybe "never" show lastSeen} {if isJust consumer.hubCapabilityManifestId then "✓" else "–" :: Text} |] errorClass rate | rate > 0.1 = "text-red-600 font-medium" :: Text | rate > 0.02 = "text-amber-600" | otherwise = "text-gray-600" formatErrorRate rate = show (round (rate * 100) :: Int)