Dashboard 📊
Az első dolog, amit a bejelentkezés után látsz, és őszintén az az oldal, amit egész nap nyitva hagysz. A landing oldal (/, Components/Pages/Index.razor) egy élő, mobil-először parancsközpont a bejelentkezett felhasználó tevékenysége számára a cBot futtatások, backtesztek, erőforrások és (adminoknak) a node klaszter területén. Frissíti magát, jól néz ki egy telefonton, és soha nem kényszerít F5-re.
Mit mutat
Felülről lefelé, prioritás szerint rendezve telefonra (minden blokk teljes szélességű stack elem mobilnézetben, responszív rács tableten/asztali gépen):
- Fejléc — cím, egy élő indikátor (egy valódi pulzáló pont; statikus
prefers-reduced-motionalatt), az utolsó frissítés ideje, és egy periódus toggle (1H · 24H · 7D · 30D), amely a KPI-kat és a chartot vezérli. - Hero KPI-k — négy pillantásnyi kártya, mindegyik egy nagy szám + egy beágyazott SVG sparkline, és (ahol értelmezhető) egy delta az előző periódushoz képest:
- Aktív most — jelenleg induló/futó futtatások + backtesztek.
- Sikerességi ráta — befejezett ÷ (befejezett + sikertelen) az időszakra; delta százalékpontokban.
- Befejezve — befejezett futtatások/backtesztek ebben az időszakban; delta az előző időszakhoz.
- Sikertelen — hibák ebben az időszakban; delta (a kevesebb jobb, tehát csökkenés zölden jelenik meg).
- Tevékenység chart — egy ApexCharts terület timeline az indított / befejezett / sikertelen per időbuckettárolva.
- Instance státusz gyűrű — egy donut a futó / backteszt / függőben lévő / befejezett / sikertelen arányairól, összesen a közepén.
- Backtesztek — egy három csempe snapshot (futó / befejezett / sikertelen), átkattintás
/backtest-re. - Copy trading — a másolási profiljaid egy élő státusz ponttal, cél számossal és egy Élő badge-vel a futó profilokon; átkattintás
/copy-trading-re. - AI ügynökök — a persona-vezérelt kereskedési ügynökeid futási állapottal (archetípus · státusz) és utolsó-akció idővel; átkattintás
/agent-studio-ra. - Élő tevékenységi feed — a 20 legutóbbi esemény (legújabb elöl) státusz-színű ponttal és relatív időbélyeggel.
- Klaszter egészség (csak adminok) — aktív-vs-összes node és kapacitás-használat mérő.
- Erőforrás csempék — cBot-ok, kereskedési számlák, cTrader ID-k, MCP kulcsok (átkattintás az oldalaikra).
Testreszabd a dashboardot
A fenti minden blokk egy widget, amit te irányítasz. Nyomd meg a Testreszabás-t (a fejléc jobb felső sarkában) egy dialog megnyitásához, ahol megmutathatod/elrejtheted bármely widgetet és átrendezheted őket fel/le nyilakkal. Visszaállítás alapértelmezésre visszaállítja a katalógus sorrendet. A választásod szerver oldalon per felhasználó perzisztálódik, tehát követ a böngészők és eszközök között — nem csak ebben a tabban.
- A funkció-kapuzott és admin-kizárólagos widgetek (Copy trading, AI ügynökök, Klaszter egészség) csak akkor jelennek meg a dialogban, ha a telepítésed/szereped használhatja őket.
- A widget katalógus egyetlen forrása valóság
Core/Dashboard/DashboardWidgets.cs-ben; a prezentáció (címke + ikon + elérhetőség)Components/Dashboard/DashboardWidgetMeta.cs-ben él.
Hogyan marad élő
Az oldal 10 másodpercenként poll-olja a GET /api/dashboard/overview?period=<1h|24h|7d|30d>-et és újrarajzolja a widgeteket a helyükön — nincs kézi újratöltés. Egy átmeneti fetch hiba el van nyelve és újrapróbálkozik a következő tick-en; a hurok tiszta leáll dispose-kor. Az első betöltés skeletont mutat; egy tartós hiba hibakártyát mutat Újrapróbálkozás-sal; egy felhasználó, akinek nincs adata, nullázott KPI-kat és üres-állapotú copy-t lát.
Backend
Endpoints/DashboardEndpoints.csmapolja a/overview-ot (és tartja a régebbi skalár/stats-ot). Per-felhasználó és admin-kapuzottICurrentUserrévén; az óraTimeProvider-ből jön. Emellett mapolja aGET/PUT /api/dashboard/layout-ot — a felhasználó widget elrendezése, betöltve az oldal indításakor és mentve a Testreszabás dialogból.- Elrendezés perzisztencia a
UserDashboardaggregátum (Core/Dashboard/UserDashboard.cs): egy dashboard per felhasználó (UserId-n egyedi), birtokában a widget beállítások rendezett listájának (látható + sorrend)jsonboszlopként tárolva. A rendezett lista csak azApply/Resetrévén van mutálva, amelyek minden kulcsot aDashboardWidgetskatalógus ellen validálnak és a kollekciót teljes és de-duplikáltan tartják. Ismeretlen kulcsokDomainException-nel elutasítva →400. Endpoints/DashboardQuery.csépíti a kompozitDashboardOverviewolvasási modellt: egy all-time státusz pillanatfelvételt (csoportosított counts), egy ablakolt instance halmazt once materializálva, és resource/node counts-okat. Az instance státusz és terminal timestamps a TPH altípusokon élnek (nem oszlopokon), így a sorok memóriában olvashatók a megosztottInstanceEndpoints.GetStartedAt/GetStoppedAthelper-eken keresztül. Esemény ideje =stopped ?? started ?? created.Endpoints/DashboardModels.cstartalmazza a DTO-kat, a period→(ablak, bucket-count) tervet ésDashboardMath-ot — tiszta, determinisztikus bucketing + KPI/delta matek (nincs I/O, anowbe van adva).
A KPI delták az aktuális ablakot a közvetlenül megelőzővel hasonlítják össze (a query dupla ablakot kér le erre). Nincs élő számla P&L feed — a platform csak backtesztek és prop-firm tracking esetén van equityje — tehát a dashboard szándékosan operatív (tevékenység, átfutás, sikerességi ráta), nem bróker egyenleg ticker.
Design & tokenek
Minden szín a design tokenekből jön (var(--app-success|-warning|-error|-info|-primary|-text*)), így egy white-label paletta ingyen átfolyik — beleértve a chartot, amelynek sorozat színei futási időben a feloldott tokenekből olvashatók a window.appReadTokens révén (az SVG nem tudja közvetlenül fogyasztani a CSS változókat). Nincs hardcoded hex a dashboardban sehol. Lásd ../ui-guidelines.md.
A "Powered by cMind" link
A dashboard egy kicsi, ízléses "Powered by cMind" linket mutat, amely erre a dokumentációs oldalra mutat. Alapértelmezés szerint megjelenik — büszkék vagyunk a projektre és segít más kereskedőknek megtalálni — de teljesen a te döntésed. Viszonteladók, akik teljesen white-labeled instance-ot futtatnak, átállítják az App:Branding:ShowSiteLink-et false-ra és eltűnik. Lásd White-label branding.
Tesztek
- Egység-stílusú (
tests/IntegrationTests/DashboardMathTests.cs) — bucketing, sikerességi ráta, előző-periódus delták, period parsing, üres/határérték (eseménynow-kor, osztás-nullával védelem). - Egység (
tests/UnitTests/Dashboard/UserDashboardTests.cs) — aUserDashboardaggregátum: alapértelmezett seed, apply sorrend/láthatóság, append-omitted, duplicate-collapse, ismeretlen-kulcs elutasítás, reset. - Integráció (
tests/IntegrationTests/DashboardQueryTests.cs,DashboardLayoutTests.cs) — az olvasási modell valódi Postgres ellen (státusz/KPI-k/tevékenység/erőforrások, admin node health, üres-felhasználó útvonal), az új backtests/copy-profiles/agents szekciók, és egy elrendezés round-trip (mentés → újratöltés → sorrend + láthatóság perzisztálva). - E2E (
tests/E2ETests/DashboardTests.cs,DashboardCustomizeTests.cs) — asztali + mobil: KPI kártyák, chart, gyűrű és feed renderelés; a periódus toggle váltja az aktív periódust és újratölti; egy KPI átfúr/run-ra; widget elrejtése perzisztálódik újratöltés felett, Visszaállítás visszahozza, és a Testreszabás dialog működik telefalon vízszintes túlcsordulás nélkül./szintén benne van aPageSmokeTests-ben,MobileLayoutTests(shell + no-overflow) ésMobileJourneyTests-ben.