diff --git a/cmd/drone-agent/agent.go b/cmd/drone-agent/agent.go index 21341c95e..c1f121912 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" @@ -75,6 +76,10 @@ func loop(c *cli.Context) error { username: c.String("username"), password: c.String("password"), }), + grpc.WithKeepaliveParams(keepalive.ClientParameters{ + Time: c.Duration("keepalive-time"), + Timeout: c.Duration("keepalive-timeout"), + }), ) if err != nil { diff --git a/cmd/drone-agent/main.go b/cmd/drone-agent/main.go index c23ed702b..33a93d6a2 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.DurationFlag{ + 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.DurationFlag{ + 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 {