@@ -6,7 +6,6 @@ package commands
6
6
7
7
import (
8
8
"fmt"
9
- "os"
10
9
"text/tabwriter"
11
10
"time"
12
11
@@ -18,7 +17,7 @@ import (
18
17
)
19
18
20
19
var cmdPs = & types.Command {
21
- Exec : runPs ,
20
+ Exec : cmdExecPs ,
22
21
UsageLine : "ps [OPTIONS]" ,
23
22
Description : "List servers" ,
24
23
Help : "List servers. By default, only running servers are displayed." ,
@@ -41,39 +40,66 @@ var psNoTrunc bool // -no-trunc flag
41
40
var psN int // -n flag
42
41
var psHelp bool // -h, --help flag
43
42
44
- func runPs (cmd * types.Command , args []string ) {
43
+ // PsArgs are flags for the `RunPs` function
44
+ type PsArgs struct {
45
+ All bool
46
+ Latest bool
47
+ NLast int
48
+ NoTrunc bool
49
+ Quiet bool
50
+ }
51
+
52
+ func cmdExecPs (cmd * types.Command , rawArgs []string ) {
45
53
if psHelp {
46
54
cmd .PrintUsage ()
47
55
}
48
- if len (args ) != 0 {
56
+ if len (rawArgs ) != 0 {
49
57
cmd .PrintShortUsage ()
50
58
}
51
59
52
- limit := psN
53
- if psL {
60
+ args := PsArgs {
61
+ All : psA ,
62
+ Latest : psL ,
63
+ Quiet : psQ ,
64
+ NoTrunc : psNoTrunc ,
65
+ NLast : psN ,
66
+ }
67
+ ctx := cmd .GetContext (rawArgs )
68
+ err := RunPs (ctx , args )
69
+ if err != nil {
70
+ log .Fatalf ("Cannot exec 'ps': %v" , err )
71
+ }
72
+ }
73
+
74
+ // RunPs is the handler for 'scw ps'
75
+ func RunPs (ctx types.CommandContext , args PsArgs ) error {
76
+ limit := args .NLast
77
+ if args .Latest {
54
78
limit = 1
55
79
}
56
- servers , err := cmd .API .GetServers (psA || psN > 0 || psL , limit )
80
+ all := args .All || args .NLast > 0 || args .Latest
81
+ servers , err := ctx .API .GetServers (all , limit )
57
82
if err != nil {
58
- log . Fatalf ("Unable to fetch servers from the Scaleway API: %v" , err )
83
+ return fmt . Errorf ("Unable to fetch servers from the Scaleway API: %v" , err )
59
84
}
60
85
61
- w := tabwriter .NewWriter (os .Stdout , 20 , 1 , 3 , ' ' , 0 )
86
+ w := tabwriter .NewWriter (ctx .Stdout , 20 , 1 , 3 , ' ' , 0 )
62
87
defer w .Flush ()
63
- if ! psQ {
88
+ if ! args . Quiet {
64
89
fmt .Fprintf (w , "SERVER ID\t IMAGE\t COMMAND\t CREATED\t STATUS\t PORTS\t NAME\n " )
65
90
}
66
91
for _ , server := range * servers {
67
- if psQ {
92
+ if args . Quiet {
68
93
fmt .Fprintf (w , "%s\n " , server .Identifier )
69
94
} else {
70
- shortID := utils .TruncIf (server .Identifier , 8 , ! psNoTrunc )
71
- shortImage := utils .TruncIf (utils .Wordify (server .Image .Name ), 25 , ! psNoTrunc )
72
- shortName := utils .TruncIf (utils .Wordify (server .Name ), 25 , ! psNoTrunc )
95
+ shortID := utils .TruncIf (server .Identifier , 8 , ! args . NoTrunc )
96
+ shortImage := utils .TruncIf (utils .Wordify (server .Image .Name ), 25 , ! args . NoTrunc )
97
+ shortName := utils .TruncIf (utils .Wordify (server .Name ), 25 , ! args . NoTrunc )
73
98
creationTime , _ := time .Parse ("2006-01-02T15:04:05.000000+00:00" , server .CreationDate )
74
99
shortCreationDate := units .HumanDuration (time .Now ().UTC ().Sub (creationTime ))
75
100
port := server .PublicAddress .IP
76
101
fmt .Fprintf (w , "%s\t %s\t \t %s\t %s\t %s\t %s\n " , shortID , shortImage , shortCreationDate , server .State , port , shortName )
77
102
}
78
103
}
104
+ return nil
79
105
}
0 commit comments