4
4
"bufio"
5
5
"context"
6
6
"flag"
7
- "log"
8
7
"os"
8
+ "os/signal"
9
9
10
10
"github.com/kameshsampath/demo-protos/golang/todo"
11
11
"go.uber.org/zap"
@@ -14,51 +14,70 @@ import (
14
14
"google.golang.org/protobuf/encoding/protojson"
15
15
)
16
16
17
+ var log * zap.SugaredLogger
18
+
19
+ func init () {
20
+ logger , _ := zap .NewDevelopment ()
21
+ defer logger .Sync ()
22
+ log = logger .Sugar ()
23
+ }
24
+
17
25
func main () {
26
+ var scanner * bufio.Scanner
27
+ var stdin bool
18
28
var dbFile string
29
+ flag .BoolVar (& stdin , "stdin" , false , "app -stdin" )
19
30
flag .StringVar (& dbFile , "d" , "data/todos.jsonl" , "app -d ./todos.jsonl" )
20
31
flag .Parse ()
21
32
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
-
30
33
conn , err := grpc .Dial (os .Getenv ("SERVICE_ADDRESS" ), grpc .WithTransportCredentials (insecure .NewCredentials ()))
31
34
32
35
if err != nil {
33
36
log .Fatal (err )
34
37
}
35
38
defer conn .Close ()
36
39
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 )
40
59
}
41
- defer file .Close ()
42
- scanner := bufio .NewScanner (file )
60
+
61
+ }
62
+
63
+ func scanAndSend (ctx context.Context , conn * grpc.ClientConn , scanner * bufio.Scanner ) {
43
64
for scanner .Scan () {
44
65
line := scanner .Text ()
45
66
task := new (todo.Task )
46
67
if err := protojson .Unmarshal ([]byte (line ), task ); err != nil {
47
68
log .Errorf ("error processing record, %s: %s" , line , err )
48
69
continue
49
70
}
71
+
50
72
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 })
55
74
if err != nil {
56
- log .Fatal (err )
75
+ log .Errorf ("error adding record, %s: %s" , line , err )
76
+ continue
57
77
}
58
78
59
79
if err := scanner .Err (); err != nil {
60
80
log .Fatal (err )
61
81
}
62
82
}
63
-
64
83
}
0 commit comments