@@ -3,10 +3,13 @@ package serverrpc
3
3
import (
4
4
"net"
5
5
6
+ "github.com/golang/glog"
6
7
"github.com/hyperhq/hypercontainer-utils/hlog"
7
8
"github.com/hyperhq/hyperd/daemon"
8
9
"github.com/hyperhq/hyperd/types"
10
+ "golang.org/x/net/context"
9
11
"google.golang.org/grpc"
12
+ "time"
10
13
)
11
14
12
15
// ServerRPC is the main server for gRPC
@@ -15,10 +18,47 @@ type ServerRPC struct {
15
18
daemon * daemon.Daemon
16
19
}
17
20
21
+ type re interface {
22
+ String () string
23
+ }
24
+
25
+ func unaryLoger (ctx context.Context , req interface {}, info * grpc.UnaryServerInfo , handler grpc.UnaryHandler ) (resp interface {}, err error ) {
26
+ reqMsg := req .(re ).String ()
27
+ glog .V (3 ).Infof ("%s with request %s" , info .FullMethod , reqMsg )
28
+
29
+ start := time .Now ()
30
+ resp , err = handler (ctx , req )
31
+ elapsed := time .Now ().Sub (start )
32
+
33
+ if err == nil {
34
+ glog .V (3 ).Infof ("%s elapsed %s done %v with request %s" , info .FullMethod , elapsed , resp .(re ).String (), reqMsg )
35
+ } else {
36
+ glog .Errorf ("%s elapsed %s failed %v with request %s" , info .FullMethod , elapsed , err , reqMsg )
37
+ }
38
+
39
+ return resp , err
40
+ }
41
+
42
+ func streamLoger (srv interface {}, ss grpc.ServerStream , info * grpc.StreamServerInfo , handler grpc.StreamHandler ) error {
43
+ glog .V (3 ).Infof ("%s with ServerStream %v" , info .FullMethod , ss )
44
+
45
+ start := time .Now ()
46
+ err := handler (srv , ss )
47
+ elapsed := time .Now ().Sub (start )
48
+
49
+ if err == nil {
50
+ glog .V (3 ).Infof ("%s elapsed %s done with ServerStream %v" , info .FullMethod , elapsed , ss )
51
+ } else {
52
+ glog .Errorf ("%s elapsed %s failed %v with ServerStream %v" , info .FullMethod , elapsed , err , ss )
53
+ }
54
+
55
+ return err
56
+ }
57
+
18
58
// NewServerRPC creates a new ServerRPC
19
59
func NewServerRPC (d * daemon.Daemon ) * ServerRPC {
20
60
s := & ServerRPC {
21
- server : grpc .NewServer (),
61
+ server : grpc .NewServer (grpc . UnaryInterceptor ( unaryLoger ), grpc . StreamInterceptor ( streamLoger ) ),
22
62
daemon : d ,
23
63
}
24
64
s .registerServer ()
0 commit comments