diff --git a/cmd/drone-agent/agent.go b/cmd/drone-agent/agent.go index 21341c95e..fdb017aa5 100644 --- a/cmd/drone-agent/agent.go +++ b/cmd/drone-agent/agent.go @@ -12,6 +12,7 @@ import ( "time" "google.golang.org/grpc" + "google.golang.org/grpc/keepalive" "google.golang.org/grpc/metadata" "github.com/cncd/pipeline/pipeline" @@ -68,6 +69,26 @@ func loop(c *cli.Context) error { // grpc.Dial(target, )) + agentKeepalive := keepalive.ClientParameters{} + if c.String("keepalive-time") != "" { + d, err := time.ParseDuration(c.String("keepalive-time")) + + if err != nil { + return err + } + + agentKeepalive.Time = d + } + if c.String("keepalive-timeout") != "" { + d, err := time.ParseDuration(c.String("keepalive-timeout")) + + if err != nil { + return err + } + + agentKeepalive.Timeout = d + } + conn, err := grpc.Dial( c.String("server"), grpc.WithInsecure(), @@ -75,6 +96,7 @@ func loop(c *cli.Context) error { username: c.String("username"), password: c.String("password"), }), + grpc.WithKeepaliveParams(agentKeepalive), ) if err != nil { diff --git a/cmd/drone-agent/main.go b/cmd/drone-agent/main.go index c23ed702b..0ecd2919b 100644 --- a/cmd/drone-agent/main.go +++ b/cmd/drone-agent/main.go @@ -80,6 +80,16 @@ func main() { Name: "healthcheck", Usage: "enables the healthcheck endpoint", }, + cli.StringFlag{ + EnvVar: "DRONE_KEEPALIVE_TIME", + Name: "keepalive-time", + Usage: "after a duration of this time if the agent doesn't see any activity it pings the server to see if the transport is still alive", + }, + cli.StringFlag{ + EnvVar: "DRONE_KEEPALIVE_TIMEOUT", + Name: "keepalive-timeout", + Usage: "after having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed.", + }, } if err := app.Run(os.Args); err != nil {