github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/boom/application/applications/monitoring/grafana.go (about) 1 package monitoring 2 3 import ( 4 "reflect" 5 6 toolsetslatest "github.com/caos/orbos/internal/operator/boom/api/latest" 7 "github.com/caos/orbos/internal/operator/boom/api/latest/monitoring" 8 9 "github.com/caos/orbos/internal/operator/boom/application/applications/monitoring/info" 10 "github.com/caos/orbos/internal/operator/boom/name" 11 "github.com/caos/orbos/mntr" 12 ) 13 14 type Grafana struct { 15 monitor mntr.Monitor 16 spec *monitoring.Monitoring 17 } 18 19 func New(monitor mntr.Monitor) *Grafana { 20 return &Grafana{ 21 monitor: monitor, 22 } 23 } 24 func (g *Grafana) GetName() name.Application { 25 return info.GetName() 26 } 27 28 func (g *Grafana) Deploy(toolsetCRDSpec *toolsetslatest.ToolsetSpec) bool { 29 // workaround as grafana always deploys new pods even when the spec of the deployment is not changed 30 // due to the fact that kubernetes has an internal mapping from extensions/v1beta1 to apps/v1 in old k8s versions 31 if g.Changed(toolsetCRDSpec) { 32 return toolsetCRDSpec.Monitoring != nil && toolsetCRDSpec.Monitoring.Deploy 33 } 34 return false 35 } 36 37 func (g *Grafana) Changed(toolsetCRDSpec *toolsetslatest.ToolsetSpec) bool { 38 if g.spec == nil { 39 return true 40 } 41 return !reflect.DeepEqual(toolsetCRDSpec.Monitoring, g.spec) 42 } 43 44 func (g *Grafana) SetAppliedSpec(toolsetCRDSpec *toolsetslatest.ToolsetSpec) { 45 g.spec = toolsetCRDSpec.Monitoring 46 } 47 48 func (g *Grafana) GetNamespace() string { 49 return info.GetNamespace() 50 }