@@ -242,15 +242,15 @@ func (a *agent) runLoop(ctx context.Context) {
242
242
}
243
243
}
244
244
245
- func (a * agent ) collectMetadata (ctx context.Context , md codersdk.WorkspaceAgentMetadataDescription ) * codersdk.WorkspaceAgentMetadataResult {
245
+ func (a * agent ) collectMetadata (ctx context.Context , md codersdk.WorkspaceAgentMetadataDescription , now time. Time ) * codersdk.WorkspaceAgentMetadataResult {
246
246
var out bytes.Buffer
247
247
result := & codersdk.WorkspaceAgentMetadataResult {
248
248
// CollectedAt is set here for testing purposes and overrode by
249
249
// coderd to the time of server receipt to solve clock skew.
250
250
//
251
251
// In the future, the server may accept the timestamp from the agent
252
252
// if it can guarantee the clocks are synchronized.
253
- CollectedAt : time . Now () ,
253
+ CollectedAt : now ,
254
254
}
255
255
cmdPty , err := a .sshServer .CreateCommand (ctx , md .Script , nil )
256
256
if err != nil {
@@ -337,9 +337,7 @@ func (a *agent) reportMetadataLoop(ctx context.Context) {
337
337
case <- ctx .Done ():
338
338
return
339
339
case mr := <- metadataResults :
340
- lastCollectedAtMu .Lock ()
341
- lastCollectedAts [mr .key ] = mr .result .CollectedAt
342
- lastCollectedAtMu .Unlock ()
340
+
343
341
err := a .client .PostMetadata (ctx , mr .key , * mr .result )
344
342
if err != nil {
345
343
a .logger .Error (ctx , "agent failed to report metadata" , slog .Error (err ))
@@ -406,7 +404,7 @@ func (a *agent) reportMetadataLoop(ctx context.Context) {
406
404
// If the interval is zero, we assume the user just wants
407
405
// a single collection at startup, not a spinning loop.
408
406
if md .Interval == 0 {
409
- logger .Debug (ctx , "skipping metadata, interval 0 and alredy collected once" )
407
+ logger .Debug (ctx , "skipping metadata, interval 0 and already collected once" )
410
408
return
411
409
}
412
410
// The last collected value isn't quite stale yet, so we skip it.
@@ -434,14 +432,18 @@ func (a *agent) reportMetadataLoop(ctx context.Context) {
434
432
ctx , cancel := context .WithTimeout (ctx , ctxTimeout )
435
433
defer cancel ()
436
434
435
+ now := time .Now ()
437
436
select {
438
437
case <- ctx .Done ():
439
438
logger .Debug (ctx , "metadata collection timed out" , slog .F ("timeout" , ctxTimeout ))
440
439
case metadataResults <- metadataResultAndKey {
441
440
key : md .Key ,
442
- result : a .collectMetadata (ctx , md ),
441
+ result : a .collectMetadata (ctx , md , now ),
443
442
}:
444
- logger .Debug (ctx , "sent metadata" )
443
+ logger .Debug (ctx , "sent metadata" , slog .F ("took" , time .Since (now ).String ()))
444
+ lastCollectedAtMu .Lock ()
445
+ lastCollectedAts [md .Key ] = now
446
+ lastCollectedAtMu .Unlock ()
445
447
}
446
448
})
447
449
}
0 commit comments