Skip to content

Commit d6ecaa7

Browse files
committed
fix(workflow-cli): miss err msg
1 parent 251b5d8 commit d6ecaa7

1 file changed

Lines changed: 34 additions & 7 deletions

File tree

cmd/ps.go

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/drycc/controller-sdk-go/api"
1414
"github.com/drycc/controller-sdk-go/ps"
1515
"golang.org/x/net/websocket"
16+
yaml "gopkg.in/yaml.v3"
1617
)
1718

1819
const (
@@ -147,29 +148,37 @@ func printProcesses(d *DryccCmd, appID string, input []api.Pods) {
147148
}
148149

149150
func printExec(d *DryccCmd, conn *websocket.Conn) error {
150-
var message string
151-
err := websocket.Message.Receive(conn, &message)
151+
var data string
152+
err := websocket.Message.Receive(conn, &data)
152153
if err != nil {
153154
if err != io.EOF {
154155
log.Printf("error: %v", err)
155156
}
156157
return nil
157158
}
158-
d.Printf("%s", message)
159-
return nil
159+
message, err := parseChannelMessage(data)
160+
if err == nil {
161+
d.Printf("%s", message)
162+
}
163+
return err
160164
}
161165

162166
func runRecvTask(conn *websocket.Conn, c console.Console, recvChan, sendChan chan string) (context.Context, context.CancelFunc) {
163167
ctx, cancel := context.WithCancel(context.Background())
164168
go func() {
165169
for {
166-
var message string
167-
err := websocket.Message.Receive(conn, &message)
170+
var data string
171+
err := websocket.Message.Receive(conn, &data)
168172
if err != nil {
169173
cancel()
170174
break
171175
}
172-
recvChan <- message
176+
if message, err := parseChannelMessage(data); err != nil {
177+
cancel()
178+
break
179+
} else {
180+
recvChan <- message
181+
}
173182
}
174183
}()
175184
go func() {
@@ -254,3 +263,21 @@ func parsePsTargets(targets []string) (map[string]int, error) {
254263

255264
return targetMap, nil
256265
}
266+
267+
func parseChannelMessage(data string) (string, error) {
268+
channel, message := data[0], data[1:]
269+
if string(channel) == errorChannel {
270+
data := make(map[string]interface{})
271+
yaml.Unmarshal([]byte(message), data)
272+
if value, hasKey := data["message"]; hasKey {
273+
if message, ok := value.(string); ok {
274+
return message, nil
275+
} else {
276+
return "", fmt.Errorf("message is not string, type: %T", message)
277+
}
278+
} else {
279+
return "", nil
280+
}
281+
}
282+
return message, nil
283+
}

0 commit comments

Comments
 (0)