- {label}
- {row.image_name && digest ? (
-
({digest})
+
+
+ {resources ?
{resources}
: null}
+
+ )
+ }
+ },
+ {
+ header: 'Client',
+ field: 'client',
+ width: colWidth(12),
+ renderCell: (row: FleetRow) => {
+ if (!row.client) return
—
+ return (
+
+
+ {row.client.orion_version ? (
+
{row.client.orion_version}
) : null}
)
}
},
{
- header: 'Resources',
- field: 'image_cpus',
+ header: 'Start',
+ field: 'client',
+ id: 'start-time',
width: colWidth(14),
- renderCell: (row: Row) => {
- const parts = [
- row.image_cpus != null ? `${row.image_cpus} vCPU` : null,
- row.image_memory_mb != null ? `${Math.round(row.image_memory_mb / 1024)} GiB` : null,
- row.image_disk_gb != null ? `${row.image_disk_gb} GiB disk` : null
- ].filter(Boolean)
-
- return
{parts.length ? parts.join(' / ') : '—'}
+ renderCell: (row: FleetRow) => {
+ if (!row.client?.start_time) {
+ if (row.runner?.uptime_secs != null) {
+ return (
+
+
—
+
up {formatUptime(row.runner.uptime_secs)}
+
+ )
+ }
+ return
—
+ }
+ return (
+
+
{formatDateTime(row.client.start_time)}
+ {row.runner?.uptime_secs != null ? (
+
up {formatUptime(row.runner.uptime_secs)}
+ ) : null}
+
+ )
}
},
{
- header: 'Uptime',
- field: 'uptime_secs',
- width: colWidth(10),
- renderCell: (row: Row) =>
{formatUptime(row.uptime_secs)}
+ header: 'Heartbeat',
+ field: 'client',
+ id: 'heartbeat',
+ width: colWidth(14),
+ renderCell: (row: FleetRow) => {
+ if (!row.client?.last_heartbeat) return
—
+ return (
+
+
{formatDateTime(row.client.last_heartbeat)}
+
{formatRelative(row.client.last_heartbeat)}
+
+ )
+ }
},
...(showActions
? [
{
- header: 'Actions',
+ header: '',
field: 'id',
- width: colWidth(14),
- renderCell: (row: Row) => (
-
- {onViewLogs ? (
-