()
| 505 | } |
| 506 | |
| 507 | func (m *statusModel) renderProvisioningSection() string { |
| 508 | // Group instances with PROVISIONING status by GPU type |
| 509 | instancesByGPU := make(map[string][]api.Instance) |
| 510 | for _, instance := range m.instances { |
| 511 | if instance.Status == "PROVISIONING" && !instance.ProvisioningTime.IsZero() { |
| 512 | instancesByGPU[instance.GPUType] = append(instancesByGPU[instance.GPUType], instance) |
| 513 | } |
| 514 | } |
| 515 | |
| 516 | if len(instancesByGPU) == 0 { |
| 517 | return "" |
| 518 | } |
| 519 | |
| 520 | var b strings.Builder |
| 521 | b.WriteString("\n") |
| 522 | b.WriteString(primaryStyle.Bold(true).Render("Provisioning Instances:")) |
| 523 | b.WriteString("\n\n") |
| 524 | |
| 525 | gpuTypes := make([]string, 0, len(instancesByGPU)) |
| 526 | for gpuType := range instancesByGPU { |
| 527 | gpuTypes = append(gpuTypes, gpuType) |
| 528 | } |
| 529 | sort.Strings(gpuTypes) |
| 530 | |
| 531 | for _, gpuType := range gpuTypes { |
| 532 | instances := instancesByGPU[gpuType] |
| 533 | m.ensureProgressBar(gpuType) |
| 534 | progressBar := m.progressBars[gpuType] |
| 535 | |
| 536 | // Use the earliest provisioning time from all instances of this GPU type |
| 537 | earliestTime := instances[0].ProvisioningTime |
| 538 | for _, instance := range instances[1:] { |
| 539 | if instance.ProvisioningTime.Before(earliestTime) { |
| 540 | earliestTime = instance.ProvisioningTime |
| 541 | } |
| 542 | } |
| 543 | |
| 544 | // Calculate progress using the GetProgress method |
| 545 | progressPercent := utils.GetProgress(earliestTime, provisioningExpectedDuration) |
| 546 | |
| 547 | // Calculate time remaining |
| 548 | elapsed := time.Since(earliestTime) |
| 549 | remaining := provisioningExpectedDuration - elapsed |
| 550 | if remaining < 0 { |
| 551 | remaining = 0 |
| 552 | } |
| 553 | remainingMinutes := int(remaining.Minutes()) |
| 554 | if remainingMinutes < 1 { |
| 555 | remainingMinutes = 1 |
| 556 | } |
| 557 | |
| 558 | // Build comma-separated list of instance names |
| 559 | var names []string |
| 560 | for _, instance := range instances { |
| 561 | names = append(names, instance.Name) |
| 562 | } |
| 563 | instanceList := strings.Join(names, ", ") |
| 564 |
no test coverage detected