@@ -10,6 +10,7 @@ import (
10
10
"github.com/coder/coder/v2/coderd/database"
11
11
"github.com/coder/coder/v2/coderd/database/db2sdk"
12
12
"github.com/coder/coder/v2/coderd/database/dbauthz"
13
+ "github.com/coder/coder/v2/coderd/database/dbtime"
13
14
"github.com/coder/coder/v2/coderd/healthcheck/health"
14
15
"github.com/coder/coder/v2/coderd/provisionerdserver"
15
16
"github.com/coder/coder/v2/coderd/util/apiversion"
@@ -29,13 +30,14 @@ type ProvisionerDaemonsReport struct {
29
30
}
30
31
31
32
type ProvisionerDaemonsReportDeps struct {
33
+ // Required
32
34
CurrentVersion string
33
35
CurrentAPIMajorVersion int
36
+ Store ProvisionerDaemonsStore
34
37
35
- Store ProvisionerDaemonsStore
36
-
37
- TimeNowFn func () time.Time
38
- StaleInterval time.Duration
38
+ // Optional
39
+ TimeNowFn func () time.Time // Defaults to dbtime.Now
40
+ StaleInterval time.Duration // Defaults to 3 heartbeats
39
41
40
42
Dismissed bool
41
43
}
@@ -49,7 +51,12 @@ func (r *ProvisionerDaemonsReport) Run(ctx context.Context, opts *ProvisionerDae
49
51
r .Severity = health .SeverityOK
50
52
r .Warnings = make ([]health.Message , 0 )
51
53
r .Dismissed = opts .Dismissed
54
+
55
+ if opts .TimeNowFn == nil {
56
+ opts .TimeNowFn = dbtime .Now
57
+ }
52
58
now := opts .TimeNowFn ()
59
+
53
60
if opts .StaleInterval == 0 {
54
61
opts .StaleInterval = provisionerdserver .DefaultHeartbeatInterval * 3
55
62
}
@@ -79,17 +86,6 @@ func (r *ProvisionerDaemonsReport) Run(ctx context.Context, opts *ProvisionerDae
79
86
r .Error = ptr .Ref ("error fetching provisioner daemons: " + err .Error ())
80
87
return
81
88
}
82
-
83
- for _ , daemon := range daemons {
84
- r .ProvisionerDaemons = append (r .ProvisionerDaemons , db2sdk .ProvisionerDaemon (daemon ))
85
- }
86
-
87
- if len (r .ProvisionerDaemons ) == 0 {
88
- r .Severity = health .SeverityError
89
- r .Error = ptr .Ref ("No provisioner daemons found!" )
90
- return
91
- }
92
-
93
89
for _ , daemon := range daemons {
94
90
// Daemon never connected, skip.
95
91
if ! daemon .LastSeenAt .Valid {
@@ -99,6 +95,9 @@ func (r *ProvisionerDaemonsReport) Run(ctx context.Context, opts *ProvisionerDae
99
95
if now .Sub (daemon .LastSeenAt .Time ) > (opts .StaleInterval ) {
100
96
continue
101
97
}
98
+
99
+ r .ProvisionerDaemons = append (r .ProvisionerDaemons , db2sdk .ProvisionerDaemon (daemon ))
100
+
102
101
// For release versions, just check MAJOR.MINOR and ignore patch.
103
102
if ! semver .IsValid (daemon .Version ) {
104
103
if r .Severity .Value () < health .SeverityError .Value () {
@@ -128,4 +127,10 @@ func (r *ProvisionerDaemonsReport) Run(ctx context.Context, opts *ProvisionerDae
128
127
r .Warnings = append (r .Warnings , health .Messagef (health .CodeProvisionerDaemonAPIMajorVersionDeprecated , "Provisioner daemon %q reports deprecated major API version %d. Consider upgrading!" , daemon .Name , provisionersdk .CurrentMajor ))
129
128
}
130
129
}
130
+
131
+ if len (r .ProvisionerDaemons ) == 0 {
132
+ r .Severity = health .SeverityError
133
+ r .Error = ptr .Ref ("No active provisioner daemons found!" )
134
+ return
135
+ }
131
136
}
0 commit comments