From cdbb3b70892551bd32a4272dacc8b240def00d3b Mon Sep 17 00:00:00 2001 From: "Stanislav N. aka pztrn" Date: Thu, 24 Dec 2020 23:15:56 +0500 Subject: [PATCH] Add possibility to format metricator client output. Closes #5. --- cmd/metricator-client/main.go | 63 +++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/cmd/metricator-client/main.go b/cmd/metricator-client/main.go index 0b5d682..8105061 100644 --- a/cmd/metricator-client/main.go +++ b/cmd/metricator-client/main.go @@ -11,6 +11,7 @@ import ( "go.dev.pztrn.name/metricator/internal/configuration" "go.dev.pztrn.name/metricator/internal/logger" "go.dev.pztrn.name/metricator/pkg/client" + "go.dev.pztrn.name/metricator/pkg/schema" ) // nolint:gochecknoglobals @@ -21,6 +22,7 @@ var ( metricatorTimeout = flag.Int("metricator-timeout", 5, "Timeout for requests sent to Metricator.") metricsList = flag.Bool("metrics-list", false, "Show metrics list. Requires 'application' parameter.") metric = flag.String("metric", "", "Metric data to retrieve. Requires 'application' parameter.") + output = flag.String("output", "json", "Output format. Can be 'json' or 'plain-by-line'.") ) func main() { @@ -94,12 +96,61 @@ func main() { data = c.GetMetric(*application, *metric) } - dataAsBytes, err := json.Marshal(data) - if err != nil { - logger.Infoln("Failed to marshal data from Metricator:", err.Error()) + switch *output { + case "json": + dataAsBytes, err := json.Marshal(data) + if err != nil { + logger.Infoln("Failed to marshal data from Metricator:", err.Error()) - os.Exit(2) + os.Exit(2) + } + + fmt.Println(string(dataAsBytes)) + case "plain-by-lines": + // For plain mode if we request metric - we should just print it and exit. + if *metric != "" { + fmt.Println(data) + os.Exit(0) + } + + dataToPrint := []string{} + + switch { + case *appsList: + appsListData, ok := data.(schema.AppsList) + if !ok { + logger.Infoln("Failed to cast parsed data into schema.AppsList!") + + os.Exit(3) + } + + for _, app := range appsListData { + dataToPrint = append(dataToPrint, app) + } + case *metric != "": + metricData, ok := data.(string) + if !ok { + logger.Infoln("Failed to cast parsed data into string!") + + os.Exit(3) + } + + dataToPrint = append(dataToPrint, metricData) + case *metricsList: + metricsData, ok := data.(schema.Metrics) + if !ok { + logger.Infoln("Failed to cast parsed data into schema.Metrics!") + + os.Exit(3) + } + + for _, metric := range metricsData { + dataToPrint = append(dataToPrint, metric.Name) + } + } + + for _, line := range dataToPrint { + fmt.Println(line) + } } - - fmt.Println(string(dataAsBytes)) }