6
"github.com/pkg/errors"
8
config_core "github.com/kumahq/kuma/pkg/config/core"
9
"github.com/kumahq/kuma/pkg/core/resources/apis/mesh"
10
"github.com/kumahq/kuma/pkg/core/resources/apis/system"
11
"github.com/kumahq/kuma/pkg/core/resources/model"
12
"github.com/kumahq/kuma/pkg/core/runtime"
15
func Setup(rt runtime.Runtime) error {
16
if err := setupCollector(rt); err != nil {
19
if err := setupFinalizer(rt); err != nil {
25
func setupCollector(rt runtime.Runtime) error {
26
if rt.Config().Environment != config_core.UniversalEnvironment || rt.Config().Mode == config_core.Global {
27
// Dataplane GC is run only on Universal because on Kubernetes Dataplanes are bounded by ownership to Pods.
28
// Therefore, on K8S offline dataplanes are cleaned up quickly enough to not run this.
31
collector, err := NewCollector(
33
func() *time.Ticker { return time.NewTicker(1 * time.Minute) },
34
rt.Config().Runtime.Universal.DataplaneCleanupAge.Duration,
40
return rt.Add(collector)
43
func setupFinalizer(rt runtime.Runtime) error {
44
var newTicker func() *time.Ticker
45
var resourceTypes []model.ResourceType
47
switch rt.Config().Mode {
48
case config_core.Zone:
49
newTicker = func() *time.Ticker {
50
return time.NewTicker(rt.Config().Metrics.Dataplane.IdleTimeout.Duration)
52
resourceTypes = []model.ResourceType{
53
mesh.DataplaneInsightType,
54
mesh.ZoneIngressInsightType,
55
mesh.ZoneEgressInsightType,
57
case config_core.Global:
58
newTicker = func() *time.Ticker {
59
return time.NewTicker(rt.Config().Metrics.Zone.IdleTimeout.Duration)
61
resourceTypes = []model.ResourceType{
62
system.ZoneInsightType,
65
return errors.Errorf("unknown Kuma CP mode %s", rt.Config().Mode)
68
finalizer, err := NewSubscriptionFinalizer(rt.ResourceManager(), rt.Tenants(), newTicker, rt.Metrics(), rt.Extensions(), rt.Config().Store.Upsert, resourceTypes...)
72
return rt.Add(finalizer)