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

miaoliyao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git


The following commit(s) were added to refs/heads/main by this push:
     new df91b21  feat: optimize command execution (#201)
df91b21 is described below

commit df91b21094d02f6c34d8be066d8b79dad6e19d3a
Author: lltgo <[email protected]>
AuthorDate: Mon Feb 13 19:12:51 2023 +0800

    feat: optimize command execution (#201)
    
    * feat: optimize command execution
    
    * chore: fix some words
    
    * chore: fix pitr module name
---
 pitr/agent/go.mod                                  |  2 +-
 pitr/agent/internal/cons/error.go                  |  2 +-
 .../internal/handler/middleware/http_header.go     |  4 +-
 pitr/agent/internal/handler/middleware/logger.go   |  4 +-
 pitr/agent/internal/handler/middleware/recovery.go |  6 +-
 .../handler/middleware/uniform_err_resp.go         |  8 +--
 pitr/agent/main.go                                 |  8 +--
 pitr/agent/pkg/cmds/cmd.go                         | 69 ++++++++++++++++------
 pitr/agent/pkg/cmds/cmd_test.go                    | 20 ++++++-
 pitr/agent/pkg/responder/resp.go                   |  2 +-
 pitr/agent/pkg/syncutils/recover_func.go           |  8 +--
 pitr/cli/go.mod                                    |  2 +-
 12 files changed, 91 insertions(+), 44 deletions(-)

diff --git a/pitr/agent/go.mod b/pitr/agent/go.mod
index ec5028c..8117a69 100644
--- a/pitr/agent/go.mod
+++ b/pitr/agent/go.mod
@@ -1,4 +1,4 @@
-module github.com/apache/pitr/agent
+module github.com/apache/shardingsphere-on-cloud/pitr/agent
 
 go 1.20
 
diff --git a/pitr/agent/internal/cons/error.go 
b/pitr/agent/internal/cons/error.go
index cb912c0..b7033f1 100644
--- a/pitr/agent/internal/cons/error.go
+++ b/pitr/agent/internal/cons/error.go
@@ -18,7 +18,7 @@
 package cons
 
 import (
-       "github.com/apache/pitr/agent/pkg/xerror"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/xerror"
 )
 
 var (
diff --git a/pitr/agent/internal/handler/middleware/http_header.go 
b/pitr/agent/internal/handler/middleware/http_header.go
index 3faa663..09bd16e 100644
--- a/pitr/agent/internal/handler/middleware/http_header.go
+++ b/pitr/agent/internal/handler/middleware/http_header.go
@@ -22,8 +22,8 @@ import (
 
        "github.com/gofiber/fiber/v2"
 
-       "github.com/apache/pitr/agent/internal/cons"
-       "github.com/apache/pitr/agent/pkg/responder"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/cons"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/responder"
 )
 
 func RequestIDChecker() fiber.Handler {
diff --git a/pitr/agent/internal/handler/middleware/logger.go 
b/pitr/agent/internal/handler/middleware/logger.go
index 7df23cb..fe8b062 100644
--- a/pitr/agent/internal/handler/middleware/logger.go
+++ b/pitr/agent/internal/handler/middleware/logger.go
@@ -23,8 +23,8 @@ import (
 
        "github.com/gofiber/fiber/v2"
 
-       "github.com/apache/pitr/agent/internal/cons"
-       "github.com/apache/pitr/agent/pkg/logging"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/cons"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
 )
 
 func Logger(log logging.ILog) fiber.Handler {
diff --git a/pitr/agent/internal/handler/middleware/recovery.go 
b/pitr/agent/internal/handler/middleware/recovery.go
index 9af2638..cd8acaf 100644
--- a/pitr/agent/internal/handler/middleware/recovery.go
+++ b/pitr/agent/internal/handler/middleware/recovery.go
@@ -23,9 +23,9 @@ import (
 
        "github.com/gofiber/fiber/v2"
 
-       "github.com/apache/pitr/agent/internal/cons"
-       "github.com/apache/pitr/agent/pkg/logging"
-       "github.com/apache/pitr/agent/pkg/responder"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/cons"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/responder"
 )
 
 func Recover(log logging.ILog) fiber.Handler {
diff --git a/pitr/agent/internal/handler/middleware/uniform_err_resp.go 
b/pitr/agent/internal/handler/middleware/uniform_err_resp.go
index cbdb250..e8b4958 100644
--- a/pitr/agent/internal/handler/middleware/uniform_err_resp.go
+++ b/pitr/agent/internal/handler/middleware/uniform_err_resp.go
@@ -20,10 +20,10 @@ package middleware
 import (
        "github.com/gofiber/fiber/v2"
 
-       "github.com/apache/pitr/agent/internal/cons"
-       "github.com/apache/pitr/agent/pkg/logging"
-       "github.com/apache/pitr/agent/pkg/responder"
-       "github.com/apache/pitr/agent/pkg/xerror"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/cons"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/responder"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/xerror"
 )
 
 func UniformErrResp(log logging.ILog) fiber.Handler {
diff --git a/pitr/agent/main.go b/pitr/agent/main.go
index 73606a3..a72b111 100644
--- a/pitr/agent/main.go
+++ b/pitr/agent/main.go
@@ -25,16 +25,16 @@ import (
        "strings"
        "syscall"
 
-       "github.com/apache/pitr/agent/internal/handler"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/handler"
 
-       "github.com/apache/pitr/agent/internal/handler/middleware"
-       "github.com/apache/pitr/agent/pkg/responder"
+       
"github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/handler/middleware"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/responder"
 
        "github.com/gofiber/fiber/v2"
        "go.uber.org/zap"
        "go.uber.org/zap/zapcore"
 
-       "github.com/apache/pitr/agent/pkg/logging"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
 )
 
 const (
diff --git a/pitr/agent/pkg/cmds/cmd.go b/pitr/agent/pkg/cmds/cmd.go
index ec3196d..513172f 100644
--- a/pitr/agent/pkg/cmds/cmd.go
+++ b/pitr/agent/pkg/cmds/cmd.go
@@ -22,9 +22,17 @@ import (
        "fmt"
        "io"
        "os/exec"
+
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/syncutils"
 )
 
-func command(name string, args ...string) error {
+type Output struct {
+       LineNo  uint32 // Start 1
+       Message string
+       Error   error
+}
+
+func Commands(name string, args ...string) (chan *Output, error) {
        c := "-c"
        args = append([]string{c}, args...)
 
@@ -32,30 +40,55 @@ func command(name string, args ...string) error {
 
        stdout, err := cmd.StdoutPipe()
        if err != nil {
-               return fmt.Errorf("can not obtain stdout pipe for 
command[args=%+v]:%s", args, err)
+               return nil, fmt.Errorf("can not obtain stdout pipe for 
command[args=%+v]:%s", args, err)
        }
        if err := cmd.Start(); err != nil {
-               return fmt.Errorf("the command is err[args=%+v]:%s", args, err)
+               return nil, fmt.Errorf("the command is err[args=%+v]:%s", args, 
err)
        }
 
        reader := bufio.NewReader(stdout)
 
-       index := 1
-       for {
-               line, err := reader.ReadString('\n')
-               if io.EOF == err {
-                       break
-               } else if err != nil {
-                       return fmt.Errorf("read string is err[args=%+v]:%s", 
args, err)
-               }
+       output := make(chan *Output, 10)
+       index := uint32(1)
 
-               fmt.Print(index, "\t", line)
-               index++
-       }
+       go func() {
+               if err := syncutils.NewRecoverFuncWithErrRet("", func() error {
+                       for {
+                               msg, err := reader.ReadString('\n')
+                               if io.EOF == err {
+                                       goto end
+                               } else if err != nil {
+                                       output <- &Output{
+                                               LineNo:  index,
+                                               Message: msg,
+                                               Error:   err,
+                                       }
+                                       goto end
+                               }
 
-       if err := cmd.Wait(); err != nil {
-               return fmt.Errorf("cmd wait is err[args=%+v]:%s", args, err)
-       }
+                               output <- &Output{
+                                       LineNo:  index,
+                                       Message: msg,
+                               }
+
+                               index++
+                       }
+               end:
+                       if err := cmd.Wait(); err != nil {
+                               output <- &Output{
+                                       Error: err,
+                               }
+                       }
+
+                       return nil
+               })(); err != nil {
+                       // only panic err
+                       output <- &Output{
+                               Error: err,
+                       }
+               }
+               close(output)
+       }()
 
-       return nil
+       return output, nil
 }
diff --git a/pitr/agent/pkg/cmds/cmd_test.go b/pitr/agent/pkg/cmds/cmd_test.go
index 6ccf23f..e93eb77 100644
--- a/pitr/agent/pkg/cmds/cmd_test.go
+++ b/pitr/agent/pkg/cmds/cmd_test.go
@@ -17,14 +17,30 @@
 
 package cmds
 
-import "testing"
+import (
+       "fmt"
+       "testing"
+)
 
 const (
        sh = "/bin/sh"
 )
 
 func TestCommand(t *testing.T) {
-       if err := command(sh, "ping www.baidu.com"); err != nil {
+       output, err := Commands(sh, "ping www.baidu.com")
+       if err != nil {
                t.Fatal(err)
        }
+
+       for {
+               select {
+               case out, ok := <-output:
+                       if ok {
+                               fmt.Print(out.LineNo, "\t", out.Message)
+                       } else {
+                               return
+                       }
+               }
+       }
+
 }
diff --git a/pitr/agent/pkg/responder/resp.go b/pitr/agent/pkg/responder/resp.go
index 652fd90..71a1ffd 100644
--- a/pitr/agent/pkg/responder/resp.go
+++ b/pitr/agent/pkg/responder/resp.go
@@ -22,7 +22,7 @@ import (
 
        "github.com/gofiber/fiber/v2"
 
-       "github.com/apache/pitr/agent/pkg/xerror"
+       "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/xerror"
 )
 
 var (
diff --git a/pitr/agent/pkg/syncutils/recover_func.go 
b/pitr/agent/pkg/syncutils/recover_func.go
index 75bcc89..af49a22 100644
--- a/pitr/agent/pkg/syncutils/recover_func.go
+++ b/pitr/agent/pkg/syncutils/recover_func.go
@@ -19,19 +19,17 @@ package syncutils
 
 import (
        "fmt"
-
-       "github.com/apache/pitr/agent/pkg/logging"
 )
 
-func NewRecoverFuncWithErrRet(msg string, log logging.ILog, fn func() error) 
func() error {
+func NewRecoverFuncWithErrRet(msg string, fn func() error) func() (err error) {
        return func() error {
                defer func() {
                        r := recover()
                        if r != nil {
                                if err, ok := r.(error); ok {
-                                       
log.Error(fmt.Sprintf("NewRecoverFuncWithErrRet[msg=%s],err=%s", msg, err))
+                                       err = 
fmt.Errorf("NewRecoverFuncWithErrRet[msg=%s],err=%s", msg, err)
                                } else {
-                                       
log.Error(fmt.Sprintf("NewRecoverFuncWithErrRet[msg=%s],recover msg=%+v", msg, 
r))
+                                       err = 
fmt.Errorf("NewRecoverFuncWithErrRet[msg=%s],recover msg=%+v", msg, r)
                                }
                        }
                }()
diff --git a/pitr/cli/go.mod b/pitr/cli/go.mod
index 18dea94..187e2bb 100644
--- a/pitr/cli/go.mod
+++ b/pitr/cli/go.mod
@@ -1,4 +1,4 @@
-module github.com/apache/pitr/cli
+module github.com/apache/shardingsphere-on-cloud/pitr/cli
 
 go 1.20
 

Reply via email to