@@ -2,11 +2,11 @@ package cmd
22
33import (
44 "fmt"
5- "os"
65 "strconv"
6+ "strings"
7+ "sync"
78
89 "cloudamqp-cli/client"
9- "cloudamqp-cli/internal/table"
1010 "github.com/spf13/cobra"
1111)
1212
@@ -35,18 +35,85 @@ var instanceListCmd = &cobra.Command{
3535 return nil
3636 }
3737
38- // Create table and populate data
39- t := table .New (os .Stdout , "ID" , "NAME" , "PLAN" , "REGION" )
40- for _ , instance := range instances {
41- t .AddRow (
38+ p , err := getPrinter (cmd )
39+ if err != nil {
40+ return err
41+ }
42+
43+ details , _ := cmd .Flags ().GetBool ("details" )
44+
45+ if details {
46+ showURL , _ := cmd .Flags ().GetBool ("show-url" )
47+ detailed := make ([]* client.Instance , len (instances ))
48+ headers := []string {"ID" , "NAME" , "PLAN" , "REGION" , "TAGS" , "URL" , "HOSTNAME" , "READY" }
49+ rows := make ([][]string , len (instances ))
50+ var (
51+ mu sync.Mutex
52+ firstErr error
53+ wg sync.WaitGroup
54+ )
55+ for i , instance := range instances {
56+ wg .Add (1 )
57+ go func (idx , id int ) {
58+ defer wg .Done ()
59+ det , err := c .GetInstance (id )
60+ mu .Lock ()
61+ defer mu .Unlock ()
62+ if err != nil {
63+ if firstErr == nil {
64+ firstErr = fmt .Errorf ("error fetching instance %d: %w" , id , err )
65+ }
66+ return
67+ }
68+ detailed [idx ] = det
69+ }(i , instance .ID )
70+ }
71+ wg .Wait ()
72+ if firstErr != nil {
73+ return firstErr
74+ }
75+
76+ for i , inst := range detailed {
77+ ready := "No"
78+ if inst .Ready {
79+ ready = "Yes"
80+ }
81+ urlVal := maskPassword (inst .URL )
82+ if showURL {
83+ urlVal = inst .URL
84+ }
85+ rows [i ] = []string {
86+ strconv .Itoa (inst .ID ),
87+ inst .Name ,
88+ inst .Plan ,
89+ inst .Region ,
90+ strings .Join (inst .Tags , "," ),
91+ urlVal ,
92+ inst .HostnameExternal ,
93+ ready ,
94+ }
95+ }
96+ p .PrintRecords (headers , rows )
97+ return nil
98+ }
99+
100+ headers := []string {"ID" , "NAME" , "PLAN" , "REGION" }
101+ rows := make ([][]string , len (instances ))
102+ for i , instance := range instances {
103+ rows [i ] = []string {
42104 strconv .Itoa (instance .ID ),
43105 instance .Name ,
44106 instance .Plan ,
45107 instance .Region ,
46- )
108+ }
47109 }
48- t . Print ( )
110+ p . PrintRecords ( headers , rows )
49111
50112 return nil
51113 },
52114}
115+
116+ func init () {
117+ instanceListCmd .Flags ().BoolP ("details" , "" , false , "Fetch full details for each instance (one GET request per instance)" )
118+ instanceListCmd .Flags ().BoolP ("show-url" , "" , false , "Show full connection URL with credentials (requires --details)" )
119+ }
0 commit comments