Display early log when exiting earlier.
[src/xds/xds-cli.git] / cmd-sdks.go
1 /*
2  * Copyright (C) 2017 "IoT.bzh"
3  * Author Sebastien Douheret <sebastien@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18
19 package main
20
21 import (
22         "fmt"
23         "strconv"
24
25         "github.com/iotbzh/xds-agent/lib/xaapiv1"
26         "github.com/urfave/cli"
27 )
28
29 func initCmdSdks(cmdDef *[]cli.Command) {
30         *cmdDef = append(*cmdDef, cli.Command{
31                 Name:     "sdks",
32                 Aliases:  []string{"sdk"},
33                 HideHelp: true,
34                 Usage:    "SDKs commands group",
35                 Subcommands: []cli.Command{
36                         {
37                                 Name:    "add",
38                                 Aliases: []string{"a"},
39                                 Usage:   "Add a new SDK",
40                                 Action:  sdksAdd,
41                         },
42                         {
43                                 Name:   "get",
44                                 Usage:  "Get a property of a SDK",
45                                 Action: sdksGet,
46                                 Flags: []cli.Flag{
47                                         cli.StringFlag{
48                                                 Name:   "id",
49                                                 Usage:  "sdk id",
50                                                 EnvVar: "XDS_SDK_ID",
51                                         },
52                                 },
53                         },
54                         {
55                                 Name:    "list",
56                                 Aliases: []string{"ls"},
57                                 Usage:   "List installed SDKs",
58                                 Action:  sdksList,
59                                 Flags: []cli.Flag{
60                                         cli.BoolFlag{
61                                                 Name:  "verbose, v",
62                                                 Usage: "display verbose output",
63                                         },
64                                 },
65                         },
66                         {
67                                 Name:    "remove",
68                                 Aliases: []string{"rm"},
69                                 Usage:   "Remove an existing SDK",
70                                 Action:  sdksRemove,
71                                 Flags: []cli.Flag{
72                                         cli.StringFlag{
73                                                 Name:   "id",
74                                                 Usage:  "sdk id",
75                                                 EnvVar: "XDS_SDK_ID",
76                                         },
77                                 },
78                         },
79                 },
80         })
81 }
82
83 func sdksList(ctx *cli.Context) error {
84         // Get SDKs list
85         sdks := []xaapiv1.SDK{}
86         if err := sdksListGet(&sdks); err != nil {
87                 return cli.NewExitError(err.Error(), 1)
88         }
89         _displaySdks(sdks, ctx.Bool("verbose"))
90         return nil
91 }
92
93 func sdksGet(ctx *cli.Context) error {
94         id := GetID(ctx)
95         if id == "" {
96                 return cli.NewExitError("id parameter or option must be set", 1)
97         }
98         sdks := xaapiv1.SDK{}
99         url := "servers/" + strconv.Itoa(XdsServerIndexGet()) + "/sdks/" + id
100         if err := HTTPCli.Get(url, &sdks); err != nil {
101                 return cli.NewExitError(err.Error(), 1)
102         }
103         _displaySdks([]xaapiv1.SDK{sdks}, true)
104         return nil
105 }
106
107 func _displaySdks(sdks []xaapiv1.SDK, verbose bool) {
108         // Display result
109         first := true
110         writer := NewTableWriter()
111         for _, s := range sdks {
112                 if verbose {
113                         if !first {
114                                 fmt.Fprintln(writer)
115                         }
116                         fmt.Fprintln(writer, "ID\t"+s.ID)
117                         fmt.Fprintln(writer, "Name\t"+s.Name)
118                         fmt.Fprintln(writer, "Profile\t"+s.Profile)
119                         fmt.Fprintln(writer, "Arch\t"+s.Arch)
120                         fmt.Fprintln(writer, "Version\t"+s.Version)
121                         fmt.Fprintln(writer, "Path\t"+s.Path)
122
123                 } else {
124                         if first {
125                                 fmt.Fprintf(writer, "List of installed SDKs: \n")
126                                 fmt.Fprintf(writer, "  ID\tNAME\n")
127                         }
128                         fmt.Fprintf(writer, "  %s\t%s\n", s.ID, s.Name)
129                 }
130                 first = false
131         }
132         writer.Flush()
133 }
134
135 func sdksListGet(sdks *[]xaapiv1.SDK) error {
136         url := "servers/" + strconv.Itoa(XdsServerIndexGet()) + "/sdks"
137         if err := HTTPCli.Get(url, &sdks); err != nil {
138                 return err
139         }
140         Log.Debugf("Result of %s: %v", url, sdks)
141
142         return nil
143 }
144
145 func sdksAdd(ctx *cli.Context) error {
146         return fmt.Errorf("not supported yet")
147 }
148
149 func sdksRemove(ctx *cli.Context) error {
150         id := GetID(ctx)
151         if id == "" {
152                 return cli.NewExitError("id parameter or option must be set", 1)
153         }
154
155         return fmt.Errorf("not supported yet")
156 }