From 3ba357fc2737b307a4150abb01fe9f4c1cd0c3b8 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Tue, 16 Jun 2020 16:08:17 -0500 Subject: [PATCH 1/2] Add heartbeat --- cmd/coder/shell.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/cmd/coder/shell.go b/cmd/coder/shell.go index 6d767789..9c641acf 100644 --- a/cmd/coder/shell.go +++ b/cmd/coder/shell.go @@ -12,6 +12,7 @@ import ( "golang.org/x/sys/unix" "golang.org/x/time/rate" "golang.org/x/xerrors" + "nhooyr.io/websocket" "go.coder.com/cli" "go.coder.com/flog" @@ -126,6 +127,7 @@ func runCommand(ctx context.Context, envName string, command string, args []stri if err != nil { return err } + go heatbeat(ctx, conn, 15*time.Second) execer := wsep.RemoteExecer(conn) process, err := execer.Start(ctx, wsep.Command{ @@ -172,4 +174,21 @@ func runCommand(ctx context.Context, envName string, command string, args []stri return err } +func heatbeat(ctx context.Context, c *websocket.Conn, interval time.Duration) { + ticker := time.NewTicker(interval) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + err := c.Ping(ctx) + if err != nil { + flog.Error("failed to ping websocket: %v", err) + } + } + } +} + const sshActivityName = "ssh" From 709f1a6912bd12430e291ec023730b56d45c6986 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Tue, 16 Jun 2020 16:22:59 -0500 Subject: [PATCH 2/2] Upgrade wsep --- go.mod | 4 ++-- go.sum | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 31bb061f..3fed388a 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module cdr.dev/coder-cli go 1.14 require ( - cdr.dev/wsep v0.0.0-20200615020153-e2b1c576fc40 + cdr.dev/wsep v0.0.0-20200616212001-0613cfe9a4ac github.com/fatih/color v1.9.0 // indirect github.com/gorilla/websocket v1.4.1 github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f @@ -16,7 +16,7 @@ require ( go.coder.com/flog v0.0.0-20190906214207-47dd47ea0512 golang.org/x/crypto v0.0.0-20200422194213-44a606286825 golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a - golang.org/x/sys v0.0.0-20200610111108-226ff32320da + golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 golang.org/x/time v0.0.0-20191024005414-555d28b269f0 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 nhooyr.io/websocket v1.8.6 diff --git a/go.sum b/go.sum index e1f1376d..e687d95d 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ cdr.dev/slog v1.3.0 h1:MYN1BChIaVEGxdS7I5cpdyMC0+WfJfK8BETAfzfLUGQ= cdr.dev/slog v1.3.0/go.mod h1:C5OL99WyuOK8YHZdYY57dAPN1jK2WJlCdq2VP6xeQns= cdr.dev/wsep v0.0.0-20200615020153-e2b1c576fc40 h1:f369880iSAZ3cXwvbdc9WIyy3FZ4yanusYZjaVHeis4= cdr.dev/wsep v0.0.0-20200615020153-e2b1c576fc40/go.mod h1:2VKClUml3gfmLez0gBxTJIjSKszpQotc2ZqPdApfK/Y= +cdr.dev/wsep v0.0.0-20200616212001-0613cfe9a4ac h1:rl4O0qfxgNRWBUe5gQu4of2cdsclcpjGYmLQhSCHX7c= +cdr.dev/wsep v0.0.0-20200616212001-0613cfe9a4ac/go.mod h1:2VKClUml3gfmLez0gBxTJIjSKszpQotc2ZqPdApfK/Y= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -240,6 +242,8 @@ golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200610111108-226ff32320da h1:bGb80FudwxpeucJUjPYJXuJ8Hk91vNtfvrymzwiei38= golang.org/x/sys v0.0.0-20200610111108-226ff32320da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=