()
| 401 | } |
| 402 | |
| 403 | func (m statusModel) renderTable() string { |
| 404 | if len(m.instances) == 0 { |
| 405 | return warningStyleTUI.Render("⚠ No instances found. Use 'tnr create' to create a Thunder Compute instance.") |
| 406 | } |
| 407 | |
| 408 | colWidths := map[string]int{ |
| 409 | "ID": 4, |
| 410 | "UUID": 15, |
| 411 | "Status": 14, |
| 412 | "Address": 18, |
| 413 | "Disk": 8, |
| 414 | "GPU": 14, |
| 415 | "vCPUs": 8, |
| 416 | "RAM": 8, |
| 417 | "Template": 18, |
| 418 | } |
| 419 | |
| 420 | var b strings.Builder |
| 421 | |
| 422 | headers := []string{"ID", "UUID", "Status", "Address", "Disk", "GPU", "vCPUs", "RAM", "Template"} |
| 423 | headerRow := make([]string, len(headers)) |
| 424 | for i, h := range headers { |
| 425 | headerRow[i] = m.styles.header.Width(colWidths[h]).Render(h) |
| 426 | } |
| 427 | b.WriteString(strings.Join(headerRow, "")) |
| 428 | b.WriteString("\n") |
| 429 | |
| 430 | separatorRow := make([]string, len(headers)) |
| 431 | for i, h := range headers { |
| 432 | separatorRow[i] = strings.Repeat("─", colWidths[h]+2) |
| 433 | } |
| 434 | b.WriteString(strings.Join(separatorRow, "")) |
| 435 | b.WriteString("\n") |
| 436 | |
| 437 | instances := m.instances |
| 438 | if len(instances) > 1 { |
| 439 | sortedInstances := make([]api.Instance, len(instances)) |
| 440 | copy(sortedInstances, instances) |
| 441 | sort.Slice(sortedInstances, func(i, j int) bool { |
| 442 | return sortedInstances[i].ID < sortedInstances[j].ID |
| 443 | }) |
| 444 | instances = sortedInstances |
| 445 | } |
| 446 | |
| 447 | for _, instance := range instances { |
| 448 | id := truncate(instance.ID, colWidths["ID"]) |
| 449 | uuid := truncate(instance.UUID, colWidths["UUID"]) |
| 450 | status := m.formatStatus(instance.Status, colWidths["Status"]) |
| 451 | address := truncate(instance.GetIP(), colWidths["Address"]) |
| 452 | disk := truncate(fmt.Sprintf("%dGB", instance.Storage), colWidths["Disk"]) |
| 453 | gpu := truncate(fmt.Sprintf("%sx%s", instance.NumGPUs, utils.FormatGPUType(instance.GPUType)), colWidths["GPU"]) |
| 454 | vcpus := truncate(instance.CPUCores, colWidths["vCPUs"]) |
| 455 | ram := truncate(fmt.Sprintf("%sGB", instance.Memory), colWidths["RAM"]) |
| 456 | template := truncate(utils.Capitalize(instance.Template), colWidths["Template"]) |
| 457 | |
| 458 | row := []string{ |
| 459 | m.styles.cell.Width(colWidths["ID"]).Render(id), |
| 460 | m.styles.cell.Width(colWidths["UUID"]).Render(uuid), |
no test coverage detected