Dashboard 📊
Hal pertama yang Anda lihat saat masuk, dan jujur halaman yang akan Anda tinggalkan terbuka sepanjang hari. Halaman
mendarat (/, Components/Pages/Index.razor) adalah pusat komando live, mobile-first untuk aktivitas
pengguna yang masuk di seluruh cBot runs, backtest, resource dan (untuk admin) kluster node. Ia merefresh dirinya,
terlihat bagus di ponsel, dan tidak pernah membuat Anda menekan F5.
Apa yang ditampilkannya
Atas ke bawah, prioritas-ordered untuk ponsel (setiap blok adalah full-width stack item pada mobile, grid responsif pada tablet/desktop):
- Header — judul, indikator live (titik pulse nyata; static di bawah
prefers-reduced-motion), waktu terakhir-diupdate, dan period toggle (1H · 24H · 7D · 30D) yang mendorong KPI dan chart. - Hero KPIs — empat kartu yang dapat dipandang sekilas, masing-masing angka besar + sparkline SVG inline, dan (di mana
bermakna) delta vs periode sebelumnya:
- Active now — runs + backtests saat ini mulai/running.
- Success rate — completed ÷ (completed + failed) selama periode; delta dalam percentage points.
- Completed — finished runs/backtests periode ini; delta vs periode sebelumnya.
- Failed — kegagalan periode ini; delta (semakin sedikit semakin baik, jadi penurunan menunjukkan green).
- Activity chart — timeline area ApexCharts dari started / completed / failed per time bucket.
- Instance status ring — donut dari running / backtests / pending / completed / failed, total di tengah.
- Backtests — snapshot tiga-tile (running / completed / failed), click-through ke
/backtest. - Copy trading — profile copy-trading Anda dengan live status dot, destination count, dan badge Live
pada running profiles; click-through ke
/copy-trading. - AI agents — agen trading persona-driven Anda dengan run state (archetype · status) dan waktu last-action;
click-through ke
/agent-studio. - Live activity feed — 20 event paling recent (newest first) dengan status-coloured dot dan relative timestamp.
- Cluster health (admin only) — active-vs-total nodes dan capacity-in-use gauge.
- Resource tiles — cBots, trading accounts, cTrader IDs, MCP keys (click through ke halaman mereka).
Sesuaikan dashboard Anda
Setiap blok di atas adalah widget yang Anda kontrol. Tekan Customize (top-right header) untuk membuka dialog di mana Anda show/hide widget apa pun dan reorder mereka dengan up/down arrows. Reset to default mengembalikan urutan katalog. Pilihan Anda persisted server-side per user, jadi mengikuti Anda di seluruh browser dan device — bukan hanya tab ini.
- Widget gated fitur dan admin-only (Copy trading, AI agents, Cluster health) hanya muncul dalam dialog saat deployment/role Anda dapat menggunakannya.
- Katalog widget adalah satu sumber kebenaran dalam
Core/Dashboard/DashboardWidgets.cs; presentasi (label + icon + availability) tinggal diComponents/Dashboard/DashboardWidgetMeta.cs.
Bagaimana ia tetap live
Halaman polls GET /api/dashboard/overview?period=<1h|24h|7d|30d> setiap 10 detik dan re-renders
widgets di tempat — tidak ada reload manual. Kegagalan fetch transien ditelan dan dicoba kembali pada tick berikutnya;
loop berhenti clean pada dispose. Load pertama menampilkan skeleton; kegagalan persisten menampilkan error card dengan Retry;
pengguna tanpa data melihat KPI zeroed dan empty-state copy.
Backend
Endpoints/DashboardEndpoints.csmaps/overview(dan keeps scalar yang lebih lama/stats). Ini per-user dan admin-gated viaICurrentUser; clock berasal dariTimeProvider. Ini juga mapsGET/PUT /api/dashboard/layout— layout widget pengguna, loaded pada page start dan saved dari dialog Customize.- Layout persistence adalah aggregate
UserDashboard(Core/Dashboard/UserDashboard.cs): satu board per user (unique padaUserId), memiliki ordered list widget settings (visible + order) stored sebagai kolomjsonb. Ordered list hanya pernah dimutasi melaluiApply/Reset, yang validate setiap key terhadap katalogDashboardWidgetsdan keep collection complete dan de-duplicated. Keys yang tidak dikenal ditolak denganDomainException→400. Endpoints/DashboardQuery.csbuilds composite read modelDashboardOverview: all-time status snapshot (grouped counts), windowed set instances materialized once, dan resource/node counts. Instance status dan terminal timestamps tinggal pada TPH subtypes (bukan kolom), jadi rows dibaca in memory via sharedInstanceEndpoints.GetStartedAt/GetStoppedAthelpers. Event time =stopped ?? started ?? created.Endpoints/DashboardModels.csholds DTOs, period→(window, bucket-count) plan, danDashboardMath— pure, deterministic bucketing + KPI/delta math (tidak ada I/O,nowpassed in).
KPI deltas membandingkan window saat ini terhadap yang langsung mendahuluinya (query mengambil double window untuk ini). Ada tidak ada live account P&L feed — platform hanya memiliki equity untuk backtests dan prop-firm tracking — jadi dashboard sengaja operational (activity, throughput, success rate), bukan brokerage balance ticker.
Design & tokens
Semua warna berasal dari design tokens (var(--app-success|-warning|-error|-info|-primary|-text*)), jadi
white-label palette mengalir melalui untuk gratis — termasuk chart, yang series colours dibaca dari
resolved tokens pada runtime via window.appReadTokens (SVG tidak dapat mengkonsumsi CSS variables directly). Tidak ada
hard-coded hex di mana pun dalam dashboard. Lihat ../ui-guidelines.md.
Link "Powered by cMind"
Dashboard menampilkan link kecil dan bergaya "Powered by cMind" yang menunjuk ke documentation
site ini. Ini ditampilkan secara default — kami bangga dengan proyeknya dan ini membantu trader lain menemukannya —
tetapi sepenuhnya pilihan Anda. Reseller yang menjalankan instance fully white-labeled flip
App:Branding:ShowSiteLink ke false dan itu hilang. Lihat
White-label branding.
Tests
- Unit-style (
tests/IntegrationTests/DashboardMathTests.cs) — bucketing, success-rate, previous-period deltas, period parsing, empty/boundary (event padanow, divide-by-zero guard). - Unit (
tests/UnitTests/Dashboard/UserDashboardTests.cs) — aggregateUserDashboard: default seed, apply order/visibility, append-omitted, duplicate-collapse, unknown-key rejection, reset. - Integration (
tests/IntegrationTests/DashboardQueryTests.cs,DashboardLayoutTests.cs) — read model terhadap real Postgres (status/KPIs/activity/resources, admin node health, empty-user path), section backtests/copy-profiles/agents yang baru, dan layout round-trip (save custom layout → reload → order + visibility persisted). - E2E (
tests/E2ETests/DashboardTests.cs,DashboardCustomizeTests.cs) — desktop + mobile: KPI cards, chart, ring dan feed render; period toggle switches active period dan reloads; KPI drills through ke/run; hiding widget persists across reload, Reset membawanya kembali, dan dialog Customize works pada ponsel tanpa horizontal overflow./juga dalamPageSmokeTests,MobileLayoutTests(shell + no-overflow) danMobileJourneyTests.