Skip to content

Commit a2e140c

Browse files
committed
(fix): allow input via stdin
1 parent 824c587 commit a2e140c

File tree

1 file changed

+39
-20
lines changed

1 file changed

+39
-20
lines changed

cmd/add/main.go

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import (
44
"bufio"
55
"context"
66
"flag"
7-
"log"
87
"os"
8+
"os/signal"
99

1010
"github.com/kameshsampath/demo-protos/golang/todo"
1111
"go.uber.org/zap"
@@ -14,51 +14,70 @@ import (
1414
"google.golang.org/protobuf/encoding/protojson"
1515
)
1616

17+
var log *zap.SugaredLogger
18+
19+
func init() {
20+
logger, _ := zap.NewDevelopment()
21+
defer logger.Sync()
22+
log = logger.Sugar()
23+
}
24+
1725
func main() {
26+
var scanner *bufio.Scanner
27+
var stdin bool
1828
var dbFile string
29+
flag.BoolVar(&stdin, "stdin", false, "app -stdin")
1930
flag.StringVar(&dbFile, "d", "data/todos.jsonl", "app -d ./todos.jsonl")
2031
flag.Parse()
2132

22-
if _, err := os.Stat(dbFile); err != nil && os.IsNotExist(err) {
23-
log.Fatalf("data file %s not found.", dbFile)
24-
}
25-
26-
logger, _ := zap.NewDevelopment()
27-
defer logger.Sync()
28-
log := logger.Sugar()
29-
3033
conn, err := grpc.Dial(os.Getenv("SERVICE_ADDRESS"), grpc.WithTransportCredentials(insecure.NewCredentials()))
3134

3235
if err != nil {
3336
log.Fatal(err)
3437
}
3538
defer conn.Close()
3639

37-
file, err := os.Open(dbFile)
38-
if err != nil {
39-
log.Fatal(err)
40+
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
41+
defer cancel()
42+
43+
if stdin {
44+
log.Infoln("Enter Todo Task JSON to send, press CTRL+C to quit")
45+
scanner = bufio.NewScanner(os.Stdin)
46+
go scanAndSend(ctx, conn, scanner)
47+
<-ctx.Done()
48+
} else {
49+
if _, err := os.Stat(dbFile); err != nil && os.IsNotExist(err) {
50+
log.Fatalf("data file %s not found.", dbFile)
51+
}
52+
file, err := os.Open(dbFile)
53+
if err != nil {
54+
log.Fatal(err)
55+
}
56+
defer file.Close()
57+
scanner = bufio.NewScanner(file)
58+
scanAndSend(ctx, conn, scanner)
4059
}
41-
defer file.Close()
42-
scanner := bufio.NewScanner(file)
60+
61+
}
62+
63+
func scanAndSend(ctx context.Context, conn *grpc.ClientConn, scanner *bufio.Scanner) {
4364
for scanner.Scan() {
4465
line := scanner.Text()
4566
task := new(todo.Task)
4667
if err := protojson.Unmarshal([]byte(line), task); err != nil {
4768
log.Errorf("error processing record, %s: %s", line, err)
4869
continue
4970
}
71+
5072
client := todo.NewTodoClient(conn)
51-
_, err = client.AddTodo(
52-
context.Background(),
53-
&todo.TodoAddRequest{Task: task},
54-
)
73+
_, err := client.AddTodo(ctx, &todo.TodoAddRequest{Task: task})
5574
if err != nil {
56-
log.Fatal(err)
75+
log.Errorf("error adding record, %s: %s", line, err)
76+
continue
5777
}
5878

5979
if err := scanner.Err(); err != nil {
6080
log.Fatal(err)
6181
}
6282
}
63-
6483
}

0 commit comments

Comments
 (0)