This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack-cloudmonkey.git

commit 56221379a199e463c84856443cf32a27d4d35687
Author: Rohit Yadav <[email protected]>
AuthorDate: Sun Apr 22 20:59:33 2018 +0530

    api: wip refactor output code, using output type, response and filter opts
    
    Signed-off-by: Rohit Yadav <[email protected]>
---
 cmd/api.go | 105 ++++++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 62 insertions(+), 43 deletions(-)

diff --git a/cmd/api.go b/cmd/api.go
index 7bb6f43..c13a2c8 100644
--- a/cmd/api.go
+++ b/cmd/api.go
@@ -21,13 +21,13 @@ import (
        "encoding/json"
        "errors"
        "fmt"
-       "strings"
-
-       "cloudmonkey/config"
        "github.com/olekukonko/tablewriter"
        "os"
        "reflect"
        "sort"
+       "strings"
+
+       "cloudmonkey/config"
 )
 
 var apiCommand *Command
@@ -59,6 +59,59 @@ func printText(itemMap map[string]interface{}) {
        }
 }
 
+func printResult(outputType string, response map[string]interface{}, filter 
[]string) {
+       switch outputType {
+       case config.TABLE:
+               table := tablewriter.NewWriter(os.Stdout)
+               for k, v := range response {
+                       valueType := reflect.TypeOf(v)
+                       if valueType.Kind() == reflect.Slice {
+                               items, ok := v.([]interface{})
+                               if !ok {
+                                       continue
+                               }
+                               fmt.Printf("%s:\n", k)
+                               var header []string
+                               for _, item := range items {
+                                       row, ok := item.(map[string]interface{})
+                                       if !ok || len(row) < 1 {
+                                               continue
+                                       }
+
+                                       if len(header) == 0 {
+                                               for field, _ := range row {
+                                                       if filter != nil && 
len(filter) > 0 {
+                                                               for _, 
filterKey := range filter {
+                                                                       if 
filterKey == field {
+                                                                               
header = append(header, field)
+                                                                       }
+                                                               }
+                                                               continue
+                                                       }
+                                                       header = append(header, 
field)
+                                               }
+                                               sort.Strings(header)
+                                               table.SetHeader(header)
+                                       }
+                                       var rowArray []string
+                                       for _, field := range header {
+                                               rowArray = append(rowArray, 
fmt.Sprintf("%v", row[field]))
+                                       }
+                                       table.Append(rowArray)
+                               }
+                       } else {
+                               fmt.Printf("%s = %v\n", k, v)
+                       }
+               }
+               table.Render()
+       case config.TEXT:
+               printText(response)
+       default:
+               jsonOutput, _ := json.MarshalIndent(response, "", "  ")
+               fmt.Println(string(jsonOutput))
+       }
+}
+
 func init() {
        apiCommand = &Command{
                Name: "api",
@@ -110,49 +163,15 @@ func init() {
                                return err
                        }
 
-                       switch r.Config.Core.Output {
-                       case config.TABLE:
-                               table := tablewriter.NewWriter(os.Stdout)
-                               for k, v := range response {
-                                       valueType := reflect.TypeOf(v)
-                                       if valueType.Kind() == reflect.Slice {
-                                               items, ok := v.([]interface{})
-                                               if !ok {
-                                                       continue
-                                               }
-                                               fmt.Printf("%s:\n", k)
-                                               var header []string
-                                               for _, item := range items {
-                                                       row, ok := 
item.(map[string]interface{})
-                                                       if !ok || len(row) < 1 {
-                                                               continue
-                                                       }
-
-                                                       if len(header) == 0 {
-                                                               for field, _ := 
range row {
-                                                                       header 
= append(header, field)
-                                                               }
-                                                               
sort.Strings(header)
-                                                               
table.SetHeader(header)
-                                                       }
-                                                       var rowArray []string
-                                                       for _, field := range 
header {
-                                                               rowArray = 
append(rowArray, fmt.Sprintf("%v", row[field]))
-                                                       }
-                                                       table.Append(rowArray)
-                                               }
-                                       } else {
-                                               fmt.Printf("%s = %v\n", k, v)
-                                       }
+                       var filterKeys []string
+                       for _, arg := range apiArgs {
+                               if strings.HasPrefix(arg, "filter=") {
+                                       filterKeys = 
strings.Split(strings.Split(arg, "=")[1], ",")
                                }
-                               table.Render()
-                       case config.TEXT:
-                               printText(response)
-                       default:
-                               jsonOutput, _ := json.MarshalIndent(response, 
"", "  ")
-                               fmt.Println(string(jsonOutput))
                        }
 
+                       printResult(r.Config.Core.Output, response, filterKeys)
+
                        return nil
                },
        }

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to