Files
grafana/apps/advisor/pkg/app/checks/instancechecks/check.go
2025-06-12 10:15:40 +02:00

73 lines
1.4 KiB
Go

package instancechecks
import (
"context"
"time"
"github.com/google/go-github/v70/github"
"github.com/grafana/grafana/apps/advisor/pkg/app/checks"
"github.com/grafana/grafana/pkg/setting"
)
var _ checks.Check = (*check)(nil)
type check struct {
cfg *setting.Cfg
isCloudInstance bool
}
func New(cfg *setting.Cfg) checks.Check {
return &check{
cfg: cfg,
isCloudInstance: cfg.StackID != "",
}
}
func (c *check) ID() string {
return "instance"
}
func (c *check) Name() string {
return "instance attribute"
}
func (c *check) Items(ctx context.Context) ([]any, error) {
if c.isCloudInstance {
return []any{
pinnedVersion, // pinned version check
}, nil
}
return []any{
outOfSupportVersion, // out of support version check
}, nil
}
func (c *check) Item(ctx context.Context, id string) (any, error) {
return id, nil
}
func (c *check) Init(ctx context.Context) error {
return nil
}
func (c *check) Steps() []checks.Step {
// If running in cloud, we need to check if the version is pinned
if c.isCloudInstance {
return []checks.Step{
&pinnedVersionStep{
BuildBranch: c.cfg.BuildBranch,
},
}
}
// If running in self-managed, we need to check if the version is out of support
return []checks.Step{
&outOfSupportVersionStep{
GrafanaVersion: c.cfg.BuildVersion,
BuildDate: time.Unix(c.cfg.BuildStamp, 0).UTC(),
ghClient: github.NewClient(nil).Repositories,
},
}
}