MCPcopy Index your code
hub / github.com/coder/coder / Run

Method Run

coderd/healthcheck/provisioner.go:41–130  ·  view source on GitHub ↗
(ctx context.Context, opts *ProvisionerDaemonsReportDeps)

Source from the content-addressed store, hash-verified

39}
40
41func (r *ProvisionerDaemonsReport) Run(ctx context.Context, opts *ProvisionerDaemonsReportDeps) {
42 r.Items = make([]healthsdk.ProvisionerDaemonsReportItem, 0)
43 r.Severity = health.SeverityOK
44 r.Warnings = make([]health.Message, 0)
45 r.Dismissed = opts.Dismissed
46
47 if opts.TimeNow == nil {
48 opts.TimeNow = dbtime.Now
49 }
50 now := opts.TimeNow()
51
52 if opts.StaleInterval == 0 {
53 opts.StaleInterval = provisionerdserver.StaleInterval
54 }
55
56 if opts.CurrentVersion == "" {
57 r.Severity = health.SeverityError
58 r.Error = ptr.Ref("Developer error: CurrentVersion is empty!")
59 return
60 }
61
62 if opts.CurrentAPIMajorVersion == 0 {
63 r.Severity = health.SeverityError
64 r.Error = ptr.Ref("Developer error: CurrentAPIMajorVersion must be non-zero!")
65 return
66 }
67
68 if opts.Store == nil {
69 r.Severity = health.SeverityError
70 r.Error = ptr.Ref("Developer error: Store is nil!")
71 return
72 }
73
74 // nolint: gocritic // Read-only access to provisioner daemons for health check
75 daemons, err := opts.Store.GetProvisionerDaemons(dbauthz.AsSystemReadProvisionerDaemons(ctx))
76 if err != nil {
77 r.Severity = health.SeverityError
78 r.Error = ptr.Ref("error fetching provisioner daemons: " + err.Error())
79 return
80 }
81
82 recentDaemons := db2sdk.RecentProvisionerDaemons(now, opts.StaleInterval, daemons)
83 for _, daemon := range recentDaemons {
84 it := healthsdk.ProvisionerDaemonsReportItem{
85 ProvisionerDaemon: daemon,
86 Warnings: make([]health.Message, 0),
87 }
88
89 // For release versions, just check MAJOR.MINOR and ignore patch.
90 if !semver.IsValid(daemon.Version) {
91 if r.Severity.Value() < health.SeverityError.Value() {
92 r.Severity = health.SeverityError
93 }
94 r.Warnings = append(r.Warnings, health.Messagef(health.CodeUnknown, "Some provisioner daemons report invalid version information."))
95 it.Warnings = append(it.Warnings, health.Messagef(health.CodeUnknown, "Invalid version %q", daemon.Version))
96 } else if !buildinfo.VersionsMatch(opts.CurrentVersion, daemon.Version) {
97 if r.Severity.Value() < health.SeverityWarning.Value() {
98 r.Severity = health.SeverityWarning

Callers 2

ProvisionerDaemonsMethod · 0.95

Calls 9

RefFunction · 0.92
RecentProvisionerDaemonsFunction · 0.92
MessagefFunction · 0.92
VersionsMatchFunction · 0.92
ParseFunction · 0.92
GetProvisionerDaemonsMethod · 0.65
ErrorMethod · 0.45
ValueMethod · 0.45

Tested by 1