diff --git a/plugins/00_dokku-standard/subcommands/report b/plugins/00_dokku-standard/subcommands/report index 7a882a408d0..4ce98bfbfe7 100755 --- a/plugins/00_dokku-standard/subcommands/report +++ b/plugins/00_dokku-standard/subcommands/report @@ -9,6 +9,10 @@ cmd-report() { [[ "$1" == "$cmd" ]] && shift 1 declare APP="$1" + if [[ "$APP" == "--format" ]]; then + dokku_log_fail "--format flag not supported on global report" + fi + dokku_log_info1 "uname: $(uname -a)" dokku_log_info1 "memory: " free -m | sed "s/^/ /" diff --git a/plugins/apps/report.go b/plugins/apps/report.go index 491a45d6c72..ec69410bee2 100644 --- a/plugins/apps/report.go +++ b/plugins/apps/report.go @@ -7,7 +7,7 @@ import ( ) // ReportSingleApp is an internal function that displays the app report for one or more apps -func ReportSingleApp(appName, infoFlag string) error { +func ReportSingleApp(appName string, format string, infoFlag string) error { if err := common.VerifyAppName(appName); err != nil { return err } @@ -26,7 +26,7 @@ func ReportSingleApp(appName, infoFlag string) error { trimPrefix := false uppercaseFirstCharacter := true infoFlags := common.CollectReport(appName, infoFlag, flags) - return common.ReportSingleApp("app", appName, infoFlag, infoFlags, flagKeys, trimPrefix, uppercaseFirstCharacter) + return common.ReportSingleApp("app", appName, infoFlag, infoFlags, flagKeys, format, trimPrefix, uppercaseFirstCharacter) } func reportDir(appName string) string { diff --git a/plugins/apps/src/subcommands/subcommands.go b/plugins/apps/src/subcommands/subcommands.go index 66943d125c5..5b455660ea9 100644 --- a/plugins/apps/src/subcommands/subcommands.go +++ b/plugins/apps/src/subcommands/subcommands.go @@ -65,11 +65,12 @@ func main() { err = apps.CommandRename(oldAppName, newAppName, *skipDeploy) case "report": args := flag.NewFlagSet("apps:report", flag.ExitOnError) + format := args.String("format", "stdout", "format: [ stdout | json ]") osArgs, infoFlag, flagErr := common.ParseReportArgs("apps", os.Args[2:]) if flagErr == nil { args.Parse(osArgs) appName := args.Arg(0) - err = apps.CommandReport(appName, infoFlag) + err = apps.CommandReport(appName, *format, infoFlag) } case "unlock": args := flag.NewFlagSet("apps:unlock", flag.ExitOnError) diff --git a/plugins/apps/src/triggers/triggers.go b/plugins/apps/src/triggers/triggers.go index 1952a3b5601..7cb643f523c 100644 --- a/plugins/apps/src/triggers/triggers.go +++ b/plugins/apps/src/triggers/triggers.go @@ -35,7 +35,7 @@ func main() { err = apps.TriggerPostDelete(appName) case "report": appName := flag.Arg(0) - err = apps.ReportSingleApp(appName, "") + err = apps.ReportSingleApp(appName, "", "") default: common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger)) } diff --git a/plugins/apps/subcommands.go b/plugins/apps/subcommands.go index b07ee1a7cfb..bac59eb9482 100644 --- a/plugins/apps/subcommands.go +++ b/plugins/apps/subcommands.go @@ -175,21 +175,21 @@ func CommandRename(oldAppName string, newAppName string, skipDeploy bool) error } // CommandReport displays an app report for one or more apps -func CommandReport(appName string, infoFlag string) error { +func CommandReport(appName string, format string, infoFlag string) error { if len(appName) == 0 { apps, err := common.DokkuApps() if err != nil { return err } for _, appName := range apps { - if err := ReportSingleApp(appName, infoFlag); err != nil { + if err := ReportSingleApp(appName, format, infoFlag); err != nil { return err } } return nil } - return ReportSingleApp(appName, infoFlag) + return ReportSingleApp(appName, format, infoFlag) } // CommandUnlock unlocks an app for deployment diff --git a/plugins/buildpacks/report.go b/plugins/buildpacks/report.go index 135f74920f6..68b95aa0110 100644 --- a/plugins/buildpacks/report.go +++ b/plugins/buildpacks/report.go @@ -8,7 +8,7 @@ import ( ) // ReportSingleApp is an internal function that displays the buildpacks report for one or more apps -func ReportSingleApp(appName, infoFlag string) error { +func ReportSingleApp(appName string, format string, infoFlag string) error { if err := common.VerifyAppName(appName); err != nil { return err } @@ -28,7 +28,7 @@ func ReportSingleApp(appName, infoFlag string) error { trimPrefix := false uppercaseFirstCharacter := true infoFlags := common.CollectReport(appName, infoFlag, flags) - return common.ReportSingleApp("buildpacks", appName, infoFlag, infoFlags, flagKeys, trimPrefix, uppercaseFirstCharacter) + return common.ReportSingleApp("buildpacks", appName, infoFlag, infoFlags, flagKeys, format, trimPrefix, uppercaseFirstCharacter) } func reportComputedStack(appName string) string { diff --git a/plugins/buildpacks/src/subcommands/subcommands.go b/plugins/buildpacks/src/subcommands/subcommands.go index 673d7fcfaac..f86003c2e24 100644 --- a/plugins/buildpacks/src/subcommands/subcommands.go +++ b/plugins/buildpacks/src/subcommands/subcommands.go @@ -44,11 +44,12 @@ func main() { err = buildpacks.CommandRemove(appName, buildpack, *index) case "report": args := flag.NewFlagSet("buildpacks:report", flag.ExitOnError) + format := args.String("format", "stdout", "format: [ stdout | json ]") osArgs, infoFlag, flagErr := common.ParseReportArgs("buildpacks", os.Args[2:]) if flagErr == nil { args.Parse(osArgs) appName := args.Arg(0) - err = buildpacks.CommandReport(appName, infoFlag) + err = buildpacks.CommandReport(appName, *format, infoFlag) } case "set": args := flag.NewFlagSet("buildpacks:set", flag.ExitOnError) diff --git a/plugins/buildpacks/src/triggers/triggers.go b/plugins/buildpacks/src/triggers/triggers.go index 369038897f6..c77498d6ee8 100644 --- a/plugins/buildpacks/src/triggers/triggers.go +++ b/plugins/buildpacks/src/triggers/triggers.go @@ -40,7 +40,7 @@ func main() { err = buildpacks.TriggerPostExtract(appName, sourceWorkDir) case "report": appName := flag.Arg(0) - err = buildpacks.ReportSingleApp(appName, "") + err = buildpacks.ReportSingleApp(appName, "", "") default: common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger)) } diff --git a/plugins/buildpacks/subcommands.go b/plugins/buildpacks/subcommands.go index 173db4d99ed..c3c427ea539 100644 --- a/plugins/buildpacks/subcommands.go +++ b/plugins/buildpacks/subcommands.go @@ -104,21 +104,21 @@ func CommandRemove(appName string, buildpack string, index int) (err error) { } // CommandReport displays a buildpacks report for one or more apps -func CommandReport(appName string, infoFlag string) error { +func CommandReport(appName string, format string, infoFlag string) error { if len(appName) == 0 { apps, err := common.DokkuApps() if err != nil { return err } for _, appName := range apps { - if err := ReportSingleApp(appName, infoFlag); err != nil { + if err := ReportSingleApp(appName, format, infoFlag); err != nil { return err } } return nil } - return ReportSingleApp(appName, infoFlag) + return ReportSingleApp(appName, format, infoFlag) } // CommandSet implements buildpacks:set diff --git a/plugins/common/common.go b/plugins/common/common.go index 7ec38493be5..a4b1be04477 100644 --- a/plugins/common/common.go +++ b/plugins/common/common.go @@ -2,6 +2,7 @@ package common import ( "context" + "encoding/json" "errors" "fmt" "io/ioutil" @@ -305,7 +306,17 @@ func GetenvWithDefault(key string, defaultValue string) (val string) { func ParseReportArgs(pluginName string, arguments []string) ([]string, string, error) { osArgs := []string{} infoFlags := []string{} - for _, argument := range arguments { + skipNext := false + for i, argument := range arguments { + if skipNext { + skipNext = false + continue + } + if argument == "--format" { + osArgs = append(osArgs, argument, arguments[i+1]) + skipNext = true + continue + } if strings.HasPrefix(argument, "--") { infoFlags = append(infoFlags, argument) } else { @@ -323,7 +334,30 @@ func ParseReportArgs(pluginName string, arguments []string) ([]string, string, e } // ReportSingleApp is an internal function that displays a report for an app -func ReportSingleApp(reportType string, appName string, infoFlag string, infoFlags map[string]string, infoFlagKeys []string, trimPrefix bool, uppercaseFirstCharacter bool) error { +func ReportSingleApp(reportType string, appName string, infoFlag string, infoFlags map[string]string, infoFlagKeys []string, format string, trimPrefix bool, uppercaseFirstCharacter bool) error { + if format != "stdout" && infoFlag != "" { + return errors.New("--format flag cannot be specified when specifying an info flag") + } + + if format == "json" { + data := map[string]string{} + for key, value := range infoFlags { + prefix := "--" + if trimPrefix { + prefix = fmt.Sprintf("--%v-", reportType) + } + + // key = strings.Replace(strings.Replace(strings.TrimPrefix(key, prefix), "-", " ", -1), ".", " ", -1) + data[strings.TrimPrefix(key, prefix)] = value + } + out, err := json.Marshal(data) + if err != nil { + return err + } + Log(string(out)) + return nil + } + flags := []string{} for key := range infoFlags { flags = append(flags, key) diff --git a/plugins/cron/report.go b/plugins/cron/report.go index f3766740b2c..7e81b673f8c 100644 --- a/plugins/cron/report.go +++ b/plugins/cron/report.go @@ -7,7 +7,7 @@ import ( ) // ReportSingleApp is an internal function that displays the cron report for one or more apps -func ReportSingleApp(appName, infoFlag string) error { +func ReportSingleApp(appName string, format string, infoFlag string) error { if err := common.VerifyAppName(appName); err != nil { return err } @@ -24,7 +24,7 @@ func ReportSingleApp(appName, infoFlag string) error { trimPrefix := false uppercaseFirstCharacter := true infoFlags := common.CollectReport(appName, infoFlag, flags) - return common.ReportSingleApp("cron", appName, infoFlag, infoFlags, flagKeys, trimPrefix, uppercaseFirstCharacter) + return common.ReportSingleApp("cron", appName, infoFlag, infoFlags, flagKeys, format, trimPrefix, uppercaseFirstCharacter) } func reportTasks(appName string) string { diff --git a/plugins/cron/src/subcommands/subcommands.go b/plugins/cron/src/subcommands/subcommands.go index a996040b39f..81a47e8adc1 100644 --- a/plugins/cron/src/subcommands/subcommands.go +++ b/plugins/cron/src/subcommands/subcommands.go @@ -25,11 +25,12 @@ func main() { err = cron.CommandList(appName) case "report": args := flag.NewFlagSet("cron:report", flag.ExitOnError) + format := args.String("format", "stdout", "format: [ stdout | json ]") osArgs, infoFlag, flagErr := common.ParseReportArgs("cron", os.Args[2:]) if flagErr == nil { args.Parse(osArgs) appName := args.Arg(0) - err = cron.CommandReport(appName, infoFlag) + err = cron.CommandReport(appName, *format, infoFlag) } default: common.LogFail(fmt.Sprintf("Invalid plugin subcommand call: %s", subcommand)) diff --git a/plugins/cron/src/triggers/triggers.go b/plugins/cron/src/triggers/triggers.go index df8ea889510..1e36f272a47 100644 --- a/plugins/cron/src/triggers/triggers.go +++ b/plugins/cron/src/triggers/triggers.go @@ -24,7 +24,7 @@ func main() { err = cron.TriggerPostDeploy() case "report": appName := flag.Arg(0) - err = cron.ReportSingleApp(appName, "") + err = cron.ReportSingleApp(appName, "", "") default: common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger)) } diff --git a/plugins/cron/subcommands.go b/plugins/cron/subcommands.go index 04068618974..88bca62311a 100644 --- a/plugins/cron/subcommands.go +++ b/plugins/cron/subcommands.go @@ -29,19 +29,19 @@ func CommandList(appName string) error { } // CommandReport displays a cron report for one or more apps -func CommandReport(appName string, infoFlag string) error { +func CommandReport(appName string, format string, infoFlag string) error { if len(appName) == 0 { apps, err := common.DokkuApps() if err != nil { return err } for _, appName := range apps { - if err := ReportSingleApp(appName, infoFlag); err != nil { + if err := ReportSingleApp(appName, format, infoFlag); err != nil { return err } } return nil } - return ReportSingleApp(appName, infoFlag) + return ReportSingleApp(appName, format, infoFlag) } diff --git a/plugins/logs/report.go b/plugins/logs/report.go index c88ac504772..b1ce8d95ae3 100644 --- a/plugins/logs/report.go +++ b/plugins/logs/report.go @@ -5,7 +5,7 @@ import ( ) // ReportSingleApp is an internal function that displays the logs report for one or more apps -func ReportSingleApp(appName, infoFlag string) error { +func ReportSingleApp(appName string, format string, infoFlag string) error { if err := common.VerifyAppName(appName); err != nil { return err } @@ -26,7 +26,7 @@ func ReportSingleApp(appName, infoFlag string) error { trimPrefix := false uppercaseFirstCharacter := true infoFlags := common.CollectReport(appName, infoFlag, flags) - return common.ReportSingleApp("logs", appName, infoFlag, infoFlags, flagKeys, trimPrefix, uppercaseFirstCharacter) + return common.ReportSingleApp("logs", appName, infoFlag, infoFlags, flagKeys, format, trimPrefix, uppercaseFirstCharacter) } func reportComputedMaxSize(appName string) string { diff --git a/plugins/logs/src/subcommands/subcommands.go b/plugins/logs/src/subcommands/subcommands.go index 875dc2d67eb..c14b9503977 100644 --- a/plugins/logs/src/subcommands/subcommands.go +++ b/plugins/logs/src/subcommands/subcommands.go @@ -26,11 +26,12 @@ func main() { err = logs.CommandFailed(appName, *allApps) case "report": args := flag.NewFlagSet("logs:report", flag.ExitOnError) + format := args.String("format", "stdout", "format: [ stdout | json ]") osArgs, infoFlag, flagErr := common.ParseReportArgs("logs", os.Args[2:]) if flagErr == nil { args.Parse(osArgs) appName := args.Arg(0) - err = logs.CommandReport(appName, infoFlag) + err = logs.CommandReport(appName, *format, infoFlag) } case "set": args := flag.NewFlagSet("logs:set", flag.ExitOnError) diff --git a/plugins/logs/src/triggers/triggers.go b/plugins/logs/src/triggers/triggers.go index 58e9511718b..7c9765e4528 100644 --- a/plugins/logs/src/triggers/triggers.go +++ b/plugins/logs/src/triggers/triggers.go @@ -32,7 +32,7 @@ func main() { err = logs.TriggerPostDelete(appName) case "report": appName := flag.Arg(0) - err = logs.ReportSingleApp(appName, "") + err = logs.ReportSingleApp(appName, "", "") default: common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger)) } diff --git a/plugins/logs/subcommands.go b/plugins/logs/subcommands.go index e8a9b4a2501..cdfe4ed624e 100644 --- a/plugins/logs/subcommands.go +++ b/plugins/logs/subcommands.go @@ -50,21 +50,21 @@ func CommandFailed(appName string, allApps bool) error { } // CommandReport displays a logs report for one or more apps -func CommandReport(appName string, infoFlag string) error { +func CommandReport(appName string, format string, infoFlag string) error { if len(appName) == 0 { apps, err := common.DokkuApps() if err != nil { return err } for _, appName := range apps { - if err := ReportSingleApp(appName, infoFlag); err != nil { + if err := ReportSingleApp(appName, format, infoFlag); err != nil { return err } } return nil } - return ReportSingleApp(appName, infoFlag) + return ReportSingleApp(appName, format, infoFlag) } // CommandSet sets or clears a logs property for an app diff --git a/plugins/network/report.go b/plugins/network/report.go index bfdca409562..23b876f73c3 100644 --- a/plugins/network/report.go +++ b/plugins/network/report.go @@ -7,7 +7,7 @@ import ( ) // ReportSingleApp is an internal function that displays the network report for one or more apps -func ReportSingleApp(appName, infoFlag string) error { +func ReportSingleApp(appName string, format string, infoFlag string) error { if err := common.VerifyAppName(appName); err != nil { return err } @@ -27,7 +27,7 @@ func ReportSingleApp(appName, infoFlag string) error { trimPrefix := false uppercaseFirstCharacter := true infoFlags := common.CollectReport(appName, infoFlag, flags) - return common.ReportSingleApp("network", appName, infoFlag, infoFlags, flagKeys, trimPrefix, uppercaseFirstCharacter) + return common.ReportSingleApp("network", appName, infoFlag, infoFlags, flagKeys, format, trimPrefix, uppercaseFirstCharacter) } func reportBindAllInterfaces(appName string) string { diff --git a/plugins/network/src/subcommands/subcommands.go b/plugins/network/src/subcommands/subcommands.go index 1842692e247..b3bbff98a99 100644 --- a/plugins/network/src/subcommands/subcommands.go +++ b/plugins/network/src/subcommands/subcommands.go @@ -53,11 +53,12 @@ func main() { err = network.CommandRebuildall() case "report": args := flag.NewFlagSet("network:report", flag.ExitOnError) + format := args.String("format", "stdout", "format: [ stdout | json ]") osArgs, infoFlag, flagErr := common.ParseReportArgs("network", os.Args[2:]) if flagErr == nil { args.Parse(osArgs) appName := args.Arg(0) - err = network.CommandReport(appName, infoFlag) + err = network.CommandReport(appName, *format, infoFlag) } case "set": args := flag.NewFlagSet("network:set", flag.ExitOnError) diff --git a/plugins/network/src/triggers/triggers.go b/plugins/network/src/triggers/triggers.go index d62af8f858f..140dad623c6 100644 --- a/plugins/network/src/triggers/triggers.go +++ b/plugins/network/src/triggers/triggers.go @@ -88,7 +88,7 @@ func main() { network.TriggerCorePostDeploy(appName) case "report": appName := flag.Arg(0) - err = network.ReportSingleApp(appName, "") + err = network.ReportSingleApp(appName, "", "") default: common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger)) } diff --git a/plugins/network/subcommands.go b/plugins/network/subcommands.go index 028ae0d9ce6..8d5c2e7a083 100644 --- a/plugins/network/subcommands.go +++ b/plugins/network/subcommands.go @@ -123,21 +123,21 @@ func CommandRebuildall() error { } // CommandReport displays a network report for one or more apps -func CommandReport(appName string, infoFlag string) error { +func CommandReport(appName string, format string, infoFlag string) error { if len(appName) == 0 { apps, err := common.DokkuApps() if err != nil { return err } for _, appName := range apps { - if err := ReportSingleApp(appName, infoFlag); err != nil { + if err := ReportSingleApp(appName, format, infoFlag); err != nil { return err } } return nil } - return ReportSingleApp(appName, infoFlag) + return ReportSingleApp(appName, format, infoFlag) } // CommandSet set or clear a network property for an app diff --git a/plugins/proxy/report.go b/plugins/proxy/report.go index 5735dee1d58..bf4c5c917b4 100644 --- a/plugins/proxy/report.go +++ b/plugins/proxy/report.go @@ -7,7 +7,7 @@ import ( ) // ReportSingleApp is an internal function that displays the proxy report for one or more apps -func ReportSingleApp(appName string, infoFlag string) error { +func ReportSingleApp(appName string, format string, infoFlag string) error { if err := common.VerifyAppName(appName); err != nil { return err } @@ -26,7 +26,7 @@ func ReportSingleApp(appName string, infoFlag string) error { trimPrefix := false uppercaseFirstCharacter := true infoFlags := common.CollectReport(appName, infoFlag, flags) - return common.ReportSingleApp("proxy", appName, infoFlag, infoFlags, flagKeys, trimPrefix, uppercaseFirstCharacter) + return common.ReportSingleApp("proxy", appName, infoFlag, infoFlags, flagKeys, format, trimPrefix, uppercaseFirstCharacter) } func reportEnabled(appName string) string { diff --git a/plugins/proxy/src/subcommands/subcommands.go b/plugins/proxy/src/subcommands/subcommands.go index 5df47134c69..041d59130b9 100644 --- a/plugins/proxy/src/subcommands/subcommands.go +++ b/plugins/proxy/src/subcommands/subcommands.go @@ -64,11 +64,12 @@ func main() { err = proxy.CommandPortsSet(appName, portMaps) case "report": args := flag.NewFlagSet("proxy:report", flag.ExitOnError) + format := args.String("format", "stdout", "format: [ stdout | json ]") osArgs, infoFlag, flagErr := common.ParseReportArgs("proxy", os.Args[2:]) if flagErr == nil { args.Parse(osArgs) appName := args.Arg(0) - err = proxy.CommandReport(appName, infoFlag) + err = proxy.CommandReport(appName, *format, infoFlag) } case "set": args := flag.NewFlagSet("proxy:set", flag.ExitOnError) diff --git a/plugins/proxy/src/triggers/triggers.go b/plugins/proxy/src/triggers/triggers.go index b3af91f8412..33bd2ea42ec 100644 --- a/plugins/proxy/src/triggers/triggers.go +++ b/plugins/proxy/src/triggers/triggers.go @@ -32,7 +32,7 @@ func main() { proxy.TriggerPostCertsUpdate(appName) case "report": appName := flag.Arg(0) - err = proxy.ReportSingleApp(appName, "") + err = proxy.ReportSingleApp(appName, "", "") default: common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger)) } diff --git a/plugins/proxy/subcommands.go b/plugins/proxy/subcommands.go index ed114a49f07..bc2a6494b40 100644 --- a/plugins/proxy/subcommands.go +++ b/plugins/proxy/subcommands.go @@ -150,21 +150,21 @@ func CommandPortsSet(appName string, portMaps []string) error { } // CommandReport displays a proxy report for one or more apps -func CommandReport(appName string, infoFlag string) error { +func CommandReport(appName string, format string, infoFlag string) error { if len(appName) == 0 { apps, err := common.DokkuApps() if err != nil { return err } for _, appName := range apps { - if err := ReportSingleApp(appName, infoFlag); err != nil { + if err := ReportSingleApp(appName, format, infoFlag); err != nil { return err } } return nil } - return ReportSingleApp(appName, infoFlag) + return ReportSingleApp(appName, format, infoFlag) } // CommandSet sets a proxy for an app diff --git a/plugins/ps/report.go b/plugins/ps/report.go index 46656697c75..6691b247b8a 100644 --- a/plugins/ps/report.go +++ b/plugins/ps/report.go @@ -9,7 +9,7 @@ import ( ) // ReportSingleApp is an internal function that displays the ps report for one or more apps -func ReportSingleApp(appName, infoFlag string) error { +func ReportSingleApp(appName string, format string, infoFlag string) error { if err := common.VerifyAppName(appName); err != nil { return err } @@ -36,7 +36,7 @@ func ReportSingleApp(appName, infoFlag string) error { trimPrefix := false uppercaseFirstCharacter := true infoFlags := common.CollectReport(appName, infoFlag, flags) - return common.ReportSingleApp("ps", appName, infoFlag, infoFlags, flagKeys, trimPrefix, uppercaseFirstCharacter) + return common.ReportSingleApp("ps", appName, infoFlag, infoFlags, flagKeys, format, trimPrefix, uppercaseFirstCharacter) } func addStatusFlags(appName string, infoFlag string) map[string]common.ReportFunc { diff --git a/plugins/ps/src/subcommands/subcommands.go b/plugins/ps/src/subcommands/subcommands.go index 41aae7d3555..df8fb3a2618 100644 --- a/plugins/ps/src/subcommands/subcommands.go +++ b/plugins/ps/src/subcommands/subcommands.go @@ -32,11 +32,12 @@ func main() { err = ps.CommandRebuild(appName, *allApps, *parallelCount) case "report": args := flag.NewFlagSet("ps:report", flag.ExitOnError) + format := args.String("format", "stdout", "format: [ stdout | json ]") osArgs, infoFlag, flagErr := common.ParseReportArgs("ps", os.Args[2:]) if flagErr == nil { args.Parse(osArgs) appName := args.Arg(0) - err = ps.CommandReport(appName, infoFlag) + err = ps.CommandReport(appName, *format, infoFlag) } case "restart": args := flag.NewFlagSet("ps:restart", flag.ExitOnError) diff --git a/plugins/ps/src/triggers/triggers.go b/plugins/ps/src/triggers/triggers.go index 53d87bbb2b5..9c61a9d4424 100644 --- a/plugins/ps/src/triggers/triggers.go +++ b/plugins/ps/src/triggers/triggers.go @@ -73,7 +73,7 @@ func main() { err = ps.TriggerProcfileRemove(appName) case "report": appName := flag.Arg(0) - err = ps.ReportSingleApp(appName, "") + err = ps.ReportSingleApp(appName, "", "") default: common.LogFail(fmt.Sprintf("Invalid plugin trigger call: %s", trigger)) } diff --git a/plugins/ps/subcommands.go b/plugins/ps/subcommands.go index 008ca62014d..16835c90f0a 100644 --- a/plugins/ps/subcommands.go +++ b/plugins/ps/subcommands.go @@ -35,21 +35,21 @@ func CommandRebuild(appName string, allApps bool, parallelCount int) error { } // CommandReport displays a ps report for one or more apps -func CommandReport(appName string, infoFlag string) error { +func CommandReport(appName string, format string, infoFlag string) error { if len(appName) == 0 { apps, err := common.DokkuApps() if err != nil { return err } for _, appName := range apps { - if err := ReportSingleApp(appName, infoFlag); err != nil { + if err := ReportSingleApp(appName, format, infoFlag); err != nil { return err } } return nil } - return ReportSingleApp(appName, infoFlag) + return ReportSingleApp(appName, format, infoFlag) } // CommandRestart restarts an app diff --git a/plugins/resource/resource.go b/plugins/resource/resource.go index b579faa2b70..9c14a7e54ed 100644 --- a/plugins/resource/resource.go +++ b/plugins/resource/resource.go @@ -18,7 +18,7 @@ type Resource struct { } // ReportSingleApp is an internal function that displays the resource report for one or more apps -func ReportSingleApp(appName, infoFlag string) error { +func ReportSingleApp(appName, format, infoFlag string) error { if err := common.VerifyAppName(appName); err != nil { return err } @@ -41,7 +41,7 @@ func ReportSingleApp(appName, infoFlag string) error { trimPrefix := true uppercaseFirstCharacter := false - return common.ReportSingleApp("resource", appName, infoFlag, flags, flagKeys, trimPrefix, uppercaseFirstCharacter) + return common.ReportSingleApp("resource", appName, infoFlag, flags, flagKeys, format, trimPrefix, uppercaseFirstCharacter) } // GetResourceValue fetches a single value for a given app/process/request/key combination diff --git a/plugins/resource/src/subcommands/subcommands.go b/plugins/resource/src/subcommands/subcommands.go index 8d079e32950..0d472f81f02 100644 --- a/plugins/resource/src/subcommands/subcommands.go +++ b/plugins/resource/src/subcommands/subcommands.go @@ -50,11 +50,12 @@ func main() { err = resource.CommandLimitClear(appName, *processType) case "report": args := flag.NewFlagSet("resource:report", flag.ExitOnError) + format := args.String("format", "stdout", "format: [ stdout | json ]") osArgs, infoFlag, flagErr := common.ParseReportArgs("resource", os.Args[2:]) if flagErr == nil { args.Parse(osArgs) appName := args.Arg(0) - err = resource.CommandReport(appName, infoFlag) + err = resource.CommandReport(appName, *format, infoFlag) } case "reserve": args := flag.NewFlagSet("resource:reserve", flag.ExitOnError) diff --git a/plugins/resource/src/triggers/triggers.go b/plugins/resource/src/triggers/triggers.go index a1829772907..d835c78a9ce 100644 --- a/plugins/resource/src/triggers/triggers.go +++ b/plugins/resource/src/triggers/triggers.go @@ -37,7 +37,7 @@ func main() { err = resource.TriggerPostDelete(appName) case "report": appName := flag.Arg(0) - err = resource.ReportSingleApp(appName, "") + err = resource.ReportSingleApp(appName, "", "") case "resource-get-property": appName := flag.Arg(0) processType := flag.Arg(1) diff --git a/plugins/resource/subcommands.go b/plugins/resource/subcommands.go index 0410eaa5971..f1321738985 100644 --- a/plugins/resource/subcommands.go +++ b/plugins/resource/subcommands.go @@ -24,21 +24,21 @@ func CommandLimitClear(appName string, processType string) error { } // CommandReport displays a resource report for one or more apps -func CommandReport(appName string, infoFlag string) error { +func CommandReport(appName string, format string, infoFlag string) error { if len(appName) == 0 { apps, err := common.DokkuApps() if err != nil { return err } for _, appName := range apps { - if err := ReportSingleApp(appName, infoFlag); err != nil { + if err := ReportSingleApp(appName, format, infoFlag); err != nil { return err } } return nil } - return ReportSingleApp(appName, infoFlag) + return ReportSingleApp(appName, format, infoFlag) } // CommandReserve implements resource:reserve