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

Commit79b5d0d

Browse files
committed
no require.Eventually
1 parentd324e13 commit79b5d0d

File tree

2 files changed

+44
-11
lines changed

2 files changed

+44
-11
lines changed

‎coderd/metricscache/metricscache.go‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,12 @@ func (c *Cache) refreshDeploymentStats(ctx context.Context) error {
181181

182182
func (c*Cache)run(ctx context.Context,namestring,interval time.Duration,refreshfunc(context.Context)error) {
183183
logger:=c.log.With(slog.F("name",name),slog.F("interval",interval))
184-
ticker:=time.NewTicker(interval)
184+
ticker:=c.clock.NewTicker(interval)
185185
deferticker.Stop()
186186

187-
for {
187+
doRefresh:=func(ctx context.Context,start time.Time) {
188+
deferticker.Reset(interval)
188189
forr:=retry.New(time.Millisecond*100,time.Minute);r.Wait(ctx); {
189-
start:=time.Now()
190190
err:=refresh(ctx)
191191
iferr!=nil {
192192
ifctx.Err()!=nil {
@@ -198,12 +198,18 @@ func (c *Cache) run(ctx context.Context, name string, interval time.Duration, re
198198
logger.Error(ctx,"refresh metrics failed",slog.Error(err))
199199
continue
200200
}
201-
logger.Debug(ctx,"metrics refreshed",slog.F("took",time.Since(start)))
201+
logger.Debug(ctx,"metrics refreshed",slog.F("took",c.clock.Since(start)))
202202
break
203203
}
204+
}
204205

206+
doRefresh(ctx,c.clock.Now())
207+
208+
for {
205209
select {
206-
case<-ticker.C:
210+
casetick:=<-ticker.C:
211+
ticker.Stop()
212+
doRefresh(ctx,tick)
207213
case<-c.done:
208214
return
209215
case<-ctx.Done():

‎coderd/metricscache/metricscache_test.go‎

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,29 @@ func newMetricsCache(t *testing.T, log slog.Logger, clock quartz.Clock, interval
4747
returncache,db
4848
}
4949

50+
funcawaitCacheRefresh(ctx context.Context,t*testing.T,clock*quartz.Mock)chanstruct{} {
51+
t.Helper()
52+
ch:=make(chanstruct{})
53+
trapNow:=clock.Trap().Now()
54+
trapReset:=clock.Trap().TickerReset()
55+
gofunc() {
56+
deferclose(ch)
57+
defertrapReset.Close()
58+
defertrapNow.Close()
59+
60+
// Wait for first Now() call
61+
trapNow.MustWait(ctx).MustRelease(ctx)
62+
// Wait for second Now() call
63+
trapNow.MustWait(ctx).MustRelease(ctx)
64+
// Wait for first Reset() call
65+
trapReset.MustWait(ctx).MustRelease(ctx)
66+
// Wait for second Reset() call
67+
trapReset.MustWait(ctx).MustRelease(ctx)
68+
}()
69+
70+
returnch
71+
}
72+
5073
funcTestCache_TemplateWorkspaceOwners(t*testing.T) {
5174
t.Parallel()
5275
var ()
@@ -292,11 +315,14 @@ func TestCache_BuildTime(t *testing.T) {
292315
funcTestCache_DeploymentStats(t*testing.T) {
293316
t.Parallel()
294317

318+
ctx:=testutil.Context(t,testutil.WaitShort)
319+
295320
var (
296321
log=testutil.Logger(t)
297322
clock=quartz.NewMock(t)
298323
cache,db=newMetricsCache(t,log,clock, metricscache.Intervals{
299-
DeploymentStats:testutil.IntervalFast,
324+
TemplateBuildTimes:testutil.IntervalFast,
325+
DeploymentStats:testutil.IntervalFast,
300326
},false)
301327
)
302328

@@ -323,9 +349,10 @@ func TestCache_DeploymentStats(t *testing.T) {
323349
})
324350
require.NoError(t,err)
325351

326-
require.Eventually(t,func()bool {
327-
varokbool
328-
stat,ok:=cache.DeploymentStats()
329-
returnok&&stat.SessionCount.VSCode==1
330-
},testutil.WaitLong,testutil.IntervalMedium)
352+
done:=awaitCacheRefresh(ctx,t,clock)
353+
testutil.TryReceive(ctx,t,done)
354+
355+
stat,ok:=cache.DeploymentStats()
356+
require.True(t,ok,"cache should be populated after refresh")
357+
require.Equal(t,int64(1),stat.SessionCount.VSCode)
331358
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp