Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit84b0060

Browse files
committed
feat(coderd/healthcheck): add health check for proxy
1 parentb63ce10 commit84b0060

File tree

2 files changed

+78
-12
lines changed

2 files changed

+78
-12
lines changed

‎coderd/healthcheck/workspaceproxy.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package healthcheck
22

33
import (
44
"context"
5+
"fmt"
56

67
"cdr.dev/slog"
78
"github.com/coder/coder/v2/buildinfo"
@@ -43,7 +44,7 @@ func (r *WorkspaceProxyReport) Run(ctx context.Context, opts *WorkspaceProxyRepo
4344
opts.Logger.Error(ctx,"developer error: opts.UpdateProxyHealth must not be nil if opts.FetchWorkspaceProxies is not nil")
4445
}
4546

46-
iferr:=opts.UpdateProxyHealth;err!=nil {
47+
iferr:=opts.UpdateProxyHealth(ctx);err!=nil {
4748
opts.Logger.Error(ctx,"failed to update proxy health: %w",err)
4849
}
4950

@@ -70,7 +71,8 @@ func (r *WorkspaceProxyReport) Run(ctx context.Context, opts *WorkspaceProxyRepo
7071
slog.F("proxy_version",proxy.Version),
7172
slog.F("proxy_name",proxy.Name),
7273
)
73-
r.Warnings=append(r.Warnings,"Proxy %q version %q does not match primary server version %q",proxy.Name,proxy.Version,opts.CurrentVersion)
74+
r.Healthy=false
75+
r.Warnings=append(r.Warnings,fmt.Sprintf("Proxy %q version %q does not match primary server version %q",proxy.Name,proxy.Version,opts.CurrentVersion))
7476
}
7577
}
7678
}

‎coderd/healthcheck/workspaceproxy_test.go

Lines changed: 74 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,29 @@ func TestWorkspaceProxies(t *testing.T) {
3131
require.Empty(t,rpt.WorkspaceProxies,"expected no proxies")
3232
})
3333

34-
t.Run("VersionMajorMinor",func(t*testing.T) {
34+
t.Run("Enabled/None",func(t*testing.T) {
35+
t.Parallel()
36+
37+
ctx:=testutil.Context(t,testutil.WaitShort)
38+
log:=slogtest.Make(t,nil)
39+
rpt:= healthcheck.WorkspaceProxyReport{}
40+
rpt.Run(ctx,&healthcheck.WorkspaceProxyReportOptions{
41+
CurrentVersion:"v2.34.5",
42+
FetchWorkspaceProxies:func(_ context.Context) (codersdk.RegionsResponse[codersdk.WorkspaceProxy],error) {
43+
return codersdk.RegionsResponse[codersdk.WorkspaceProxy]{
44+
Regions: []codersdk.WorkspaceProxy{},
45+
},nil
46+
},
47+
UpdateProxyHealth:func(context.Context)error {returnnil },
48+
Logger:log,
49+
})
50+
51+
require.True(t,rpt.Healthy,"expected report to be healthy")
52+
require.Empty(t,rpt.Warnings,"expected no warnings")
53+
require.NotEmpty(t,rpt.WorkspaceProxies,"expected at least one proxy")
54+
})
55+
56+
t.Run("Enabled/Match",func(t*testing.T) {
3557
t.Parallel()
3658

3759
ctx:=testutil.Context(t,testutil.WaitShort)
@@ -42,12 +64,8 @@ func TestWorkspaceProxies(t *testing.T) {
4264
FetchWorkspaceProxies:func(_ context.Context) (codersdk.RegionsResponse[codersdk.WorkspaceProxy],error) {
4365
return codersdk.RegionsResponse[codersdk.WorkspaceProxy]{
4466
Regions: []codersdk.WorkspaceProxy{
45-
{
46-
Region: codersdk.Region{
47-
Healthy:true,
48-
},
49-
Version:"v2.34.4",
50-
},
67+
fakeWorkspaceProxy(true,"v2.34.5"),
68+
fakeWorkspaceProxy(true,"v2.34.5"),
5169
},
5270
},nil
5371
},
@@ -60,19 +78,65 @@ func TestWorkspaceProxies(t *testing.T) {
6078
require.NotEmpty(t,rpt.WorkspaceProxies,"expected at least one proxy")
6179
})
6280

63-
t.Run("VersionMismatch",func(t*testing.T) {
81+
t.Run("Enabled/Mismatch/One",func(t*testing.T) {
6482
t.Parallel()
6583

6684
ctx:=testutil.Context(t,testutil.WaitShort)
6785
log:=slogtest.Make(t,nil)
6886
rpt:= healthcheck.WorkspaceProxyReport{}
6987
rpt.Run(ctx,&healthcheck.WorkspaceProxyReportOptions{
70-
Logger:log,
88+
CurrentVersion:"v2.35.0",
89+
FetchWorkspaceProxies:func(_ context.Context) (codersdk.RegionsResponse[codersdk.WorkspaceProxy],error) {
90+
return codersdk.RegionsResponse[codersdk.WorkspaceProxy]{
91+
Regions: []codersdk.WorkspaceProxy{
92+
fakeWorkspaceProxy(true,"v2.35.0"),
93+
fakeWorkspaceProxy(true,"v2.34.5"),
94+
},
95+
},nil
96+
},
97+
Logger:log,
98+
UpdateProxyHealth:func(context.Context)error {returnnil },
7199
})
72100

73101
require.False(t,rpt.Healthy,"expected report not to be healthy")
74102
require.Len(t,rpt.Warnings,1)
75-
require.Contains(t,rpt.Warnings[0],"does not match server version")
103+
require.Contains(t,rpt.Warnings[0],"does not matchprimaryserver version")
76104
require.NotEmpty(t,rpt.WorkspaceProxies)
77105
})
106+
107+
t.Run("Enabled/Mismatch/Multiple",func(t*testing.T) {
108+
t.Parallel()
109+
110+
ctx:=testutil.Context(t,testutil.WaitShort)
111+
log:=slogtest.Make(t,nil)
112+
rpt:= healthcheck.WorkspaceProxyReport{}
113+
rpt.Run(ctx,&healthcheck.WorkspaceProxyReportOptions{
114+
CurrentVersion:"v2.35.0",
115+
FetchWorkspaceProxies:func(_ context.Context) (codersdk.RegionsResponse[codersdk.WorkspaceProxy],error) {
116+
return codersdk.RegionsResponse[codersdk.WorkspaceProxy]{
117+
Regions: []codersdk.WorkspaceProxy{
118+
fakeWorkspaceProxy(true,"v2.34.5"),
119+
fakeWorkspaceProxy(true,"v2.34.5"),
120+
},
121+
},nil
122+
},
123+
Logger:log,
124+
UpdateProxyHealth:func(context.Context)error {returnnil },
125+
})
126+
127+
require.False(t,rpt.Healthy,"expected report not to be healthy")
128+
require.Len(t,rpt.Warnings,2)
129+
require.Contains(t,rpt.Warnings[0],"does not match primary server version")
130+
require.Contains(t,rpt.Warnings[1],"does not match primary server version")
131+
require.NotEmpty(t,rpt.WorkspaceProxies)
132+
})
133+
}
134+
135+
funcfakeWorkspaceProxy(healthybool,versionstring) codersdk.WorkspaceProxy {
136+
return codersdk.WorkspaceProxy{
137+
Region: codersdk.Region{
138+
Healthy:healthy,
139+
},
140+
Version:version,
141+
}
78142
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp