diff --git a/samples/Aspire/Api/Program.cs b/samples/Aspire/Api/Program.cs index da4c3eee..8f759f44 100644 --- a/samples/Aspire/Api/Program.cs +++ b/samples/Aspire/Api/Program.cs @@ -43,7 +43,7 @@ ) .ConfigureWorkers(o => { - o.WorkerCount = 4; + o.WorkerCount = 32; o.PollingInterval = TimeSpan.FromSeconds(5); }) .AddHealthCheck() diff --git a/src/Immediate.Jobs.Dashboard/DashboardClient/src/components/ServerCard.vue b/src/Immediate.Jobs.Dashboard/DashboardClient/src/components/ServerCard.vue new file mode 100644 index 00000000..87eb1f8b --- /dev/null +++ b/src/Immediate.Jobs.Dashboard/DashboardClient/src/components/ServerCard.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/Immediate.Jobs.Dashboard/DashboardClient/src/styles.css b/src/Immediate.Jobs.Dashboard/DashboardClient/src/styles.css index 054924ec..f90552ba 100644 --- a/src/Immediate.Jobs.Dashboard/DashboardClient/src/styles.css +++ b/src/Immediate.Jobs.Dashboard/DashboardClient/src/styles.css @@ -1452,6 +1452,82 @@ tbody tr:hover { color: var(--text-subtle); } +.server-slots { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(12px, 1fr)); + gap: 3px; + margin: 12px 0 0; + padding: 0; + list-style: none; +} + +.server-slot { + display: block; + aspect-ratio: 1; + border: 1px solid var(--border); + border-radius: 3px; + background: var(--panel-muted); +} + +.server-slot.busy { + border-color: var(--accent); + background: var(--accent); +} + +.server-slot.busy:hover { + opacity: 0.75; +} + +.server-workers { + display: grid; + gap: 4px; + max-height: 232px; + margin: 10px 0 0; + overflow-y: auto; + padding: 0; + list-style: none; +} + +.server-workers li { + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + align-items: center; + gap: 8px; + border-radius: 7px; + background: var(--panel-muted); + padding: 6px 10px; + font-size: 11px; + font-variant-numeric: tabular-nums; +} + +.server-worker-id { + color: var(--text-subtle); + font-weight: 650; +} + +.server-worker-job { + min-width: 0; + overflow: hidden; + color: var(--accent); + text-overflow: ellipsis; + white-space: nowrap; +} + +.server-worker-job:hover { + text-decoration: underline; +} + +.server-worker-meta { + color: var(--text-subtle); + white-space: nowrap; +} + +.server-workers-idle { + margin: 10px 0 0; + color: var(--text-subtle); + font-size: 11px; +} + .spin { animation: spin 850ms linear infinite; } diff --git a/src/Immediate.Jobs.Dashboard/DashboardClient/src/views/ServersView.vue b/src/Immediate.Jobs.Dashboard/DashboardClient/src/views/ServersView.vue index b0e720d4..db0ed748 100644 --- a/src/Immediate.Jobs.Dashboard/DashboardClient/src/views/ServersView.vue +++ b/src/Immediate.Jobs.Dashboard/DashboardClient/src/views/ServersView.vue @@ -1,10 +1,9 @@