diff --git a/cf_cli_java_plugin.go b/cf_cli_java_plugin.go index 84aee4a..3384ff6 100644 --- a/cf_cli_java_plugin.go +++ b/cf_cli_java_plugin.go @@ -244,12 +244,13 @@ func (c *JavaPlugin) execute(commandExecutor cmd.CommandExecutor, uuidGenerator return "cf " + strings.Join(cfSSHArguments, " "), nil } - cfSSHArguments = append(cfSSHArguments, remoteCommand) + fullCommand := append(cfSSHArguments, remoteCommand) + + output, err := commandExecutor.Execute(fullCommand) - output, err := commandExecutor.Execute(cfSSHArguments) if command == heapDumpCommand { - finalFile, err := util.FindDumpFile(applicationName, heapdumpFileName, fspath) + finalFile, err := util.FindDumpFile(cfSSHArguments, heapdumpFileName, fspath) if err == nil && finalFile != "" { heapdumpFileName = finalFile fmt.Println("Successfully created heap dump in application container at: " + heapdumpFileName) @@ -263,7 +264,7 @@ func (c *JavaPlugin) execute(commandExecutor cmd.CommandExecutor, uuidGenerator if copyToLocal { localFileFullPath := localDir + "/" + applicationName + "-heapdump-" + uuidGenerator.Generate() + ".hprof" - err = util.CopyOverCat(applicationName, heapdumpFileName, localFileFullPath) + err = util.CopyOverCat(cfSSHArguments, heapdumpFileName, localFileFullPath) if err == nil { fmt.Println("Heap dump file saved to: " + localFileFullPath) } else { @@ -274,7 +275,7 @@ func (c *JavaPlugin) execute(commandExecutor cmd.CommandExecutor, uuidGenerator } if !keepAfterDownload { - err = util.DeleteRemoteFile(applicationName, heapdumpFileName) + err = util.DeleteRemoteFile(cfSSHArguments, heapdumpFileName) if err != nil { return "", err } @@ -303,7 +304,7 @@ func (c *JavaPlugin) GetMetadata() plugin.PluginMetadata { Version: plugin.VersionType{ Major: 3, Minor: 0, - Build: 2, + Build: 3, }, MinCliVersion: plugin.VersionType{ Major: 6, diff --git a/utils/cf_java_plugin_util.go b/utils/cf_java_plugin_util.go index 099b7e8..9fc7224 100644 --- a/utils/cf_java_plugin_util.go +++ b/utils/cf_java_plugin_util.go @@ -3,7 +3,7 @@ package utils type CfJavaPluginUtil interface { CheckRequiredTools(app string) (bool, error) GetAvailablePath(data string, userpath string) (string, error) - CopyOverCat(app string, src string, dest string) error - DeleteRemoteFile(app string, path string) error - FindDumpFile(app string, fullpath string, fspath string) (string, error) + CopyOverCat(args []string, src string, dest string) error + DeleteRemoteFile(args []string, path string) error + FindDumpFile(args []string, fullpath string, fspath string) (string, error) } diff --git a/utils/cfutils.go b/utils/cfutils.go index b280ab1..3c85f14 100644 --- a/utils/cfutils.go +++ b/utils/cfutils.go @@ -160,13 +160,15 @@ func (checker CfJavaPluginUtilImpl) GetAvailablePath(data string, userpath strin return "/tmp", nil } -func (checker CfJavaPluginUtilImpl) CopyOverCat(app string, src string, dest string) error { +func (checker CfJavaPluginUtilImpl) CopyOverCat(args []string, src string, dest string) error { f, err := os.OpenFile(dest, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { return errors.New("Error creating local file at " + dest + ". Please check that you are allowed to create files at the given local path.") } defer f.Close() - cat := exec.Command("cf", "ssh", app, "-c", "cat "+src) + + args = append(args, "cat "+src) + cat := exec.Command("cf", args...) cat.Stdout = f @@ -183,8 +185,9 @@ func (checker CfJavaPluginUtilImpl) CopyOverCat(app string, src string, dest str return nil } -func (checker CfJavaPluginUtilImpl) DeleteRemoteFile(app string, path string) error { - _, err := exec.Command("cf", "ssh", app, "-c", "rm "+path).Output() +func (checker CfJavaPluginUtilImpl) DeleteRemoteFile(args []string, path string) error { + args = append(args, "rm "+path) + _, err := exec.Command("cf", args...).Output() if err != nil { return errors.New("error occured while removing dump file generated") @@ -194,10 +197,11 @@ func (checker CfJavaPluginUtilImpl) DeleteRemoteFile(app string, path string) er return nil } -func (checker CfJavaPluginUtilImpl) FindDumpFile(app string, fullpath string, fspath string) (string, error) { +func (checker CfJavaPluginUtilImpl) FindDumpFile(args []string, fullpath string, fspath string) (string, error) { cmd := " [ -f '" + fullpath + "' ] && echo '" + fullpath + "' || find " + fspath + " -name 'java_pid*.hprof' -printf '%T@ %p\\0' | sort -zk 1nr | sed -z 's/^[^ ]* //' | tr '\\0' '\\n' | head -n 1 " - output, err := exec.Command("cf", "ssh", app, "-c", cmd).Output() + args = append(args, cmd) + output, err := exec.Command("cf", args...).Output() if err != nil { return "", errors.New("error while checking the generated file") diff --git a/utils/fakes/fake_utils_impl.go b/utils/fakes/fake_utils_impl.go index 966e3ac..0bff64f 100644 --- a/utils/fakes/fake_utils_impl.go +++ b/utils/fakes/fake_utils_impl.go @@ -50,7 +50,7 @@ func (fake FakeCfJavaPluginUtil) GetAvailablePath(data string, userpath string) return "/tmp", nil } -func (fake FakeCfJavaPluginUtil) CopyOverCat(app string, src string, dest string) error { +func (fake FakeCfJavaPluginUtil) CopyOverCat(args []string, src string, dest string) error { if !fake.LocalPathValid { return errors.New("Error occured during create desination file: " + dest + ", please check you are allowed to create file in the path.") @@ -59,7 +59,7 @@ func (fake FakeCfJavaPluginUtil) CopyOverCat(app string, src string, dest string return nil } -func (fake FakeCfJavaPluginUtil) DeleteRemoteFile(app string, path string) error { +func (fake FakeCfJavaPluginUtil) DeleteRemoteFile(args []string, path string) error { if path != fake.Fspath+"/"+fake.OutputFileName { return errors.New("error occured while removing dump file generated") @@ -68,9 +68,9 @@ func (fake FakeCfJavaPluginUtil) DeleteRemoteFile(app string, path string) error return nil } -func (fake FakeCfJavaPluginUtil) FindDumpFile(app string, fullpath string, fspath string) (string, error) { +func (fake FakeCfJavaPluginUtil) FindDumpFile(args []string, fullpath string, fspath string) (string, error) { - expectedFullPath := fake.Fspath + "/" + app + "-heapdump-" + fake.UUID + ".hprof" + expectedFullPath := fake.Fspath + "/" + args[1] + "-heapdump-" + fake.UUID + ".hprof" if fspath != fake.Fspath || fullpath != expectedFullPath { return "", errors.New("error while checking the generated file") }