mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-06 16:06:56 +00:00
* feat: add discovery support in instrumented clients Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * fix tracing Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * feat: add logging support to instrumented clients Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> Signed-off-by: Charles-Edouard Brétéché <charled.breteche@gmail.com>
224 lines
14 KiB
Go
224 lines
14 KiB
Go
package client
|
|
|
|
import (
|
|
"github.com/go-logr/logr"
|
|
componentstatuses "github.com/kyverno/kyverno/pkg/clients/kube/corev1/componentstatuses"
|
|
configmaps "github.com/kyverno/kyverno/pkg/clients/kube/corev1/configmaps"
|
|
endpoints "github.com/kyverno/kyverno/pkg/clients/kube/corev1/endpoints"
|
|
events "github.com/kyverno/kyverno/pkg/clients/kube/corev1/events"
|
|
limitranges "github.com/kyverno/kyverno/pkg/clients/kube/corev1/limitranges"
|
|
namespaces "github.com/kyverno/kyverno/pkg/clients/kube/corev1/namespaces"
|
|
nodes "github.com/kyverno/kyverno/pkg/clients/kube/corev1/nodes"
|
|
persistentvolumeclaims "github.com/kyverno/kyverno/pkg/clients/kube/corev1/persistentvolumeclaims"
|
|
persistentvolumes "github.com/kyverno/kyverno/pkg/clients/kube/corev1/persistentvolumes"
|
|
pods "github.com/kyverno/kyverno/pkg/clients/kube/corev1/pods"
|
|
podtemplates "github.com/kyverno/kyverno/pkg/clients/kube/corev1/podtemplates"
|
|
replicationcontrollers "github.com/kyverno/kyverno/pkg/clients/kube/corev1/replicationcontrollers"
|
|
resourcequotas "github.com/kyverno/kyverno/pkg/clients/kube/corev1/resourcequotas"
|
|
secrets "github.com/kyverno/kyverno/pkg/clients/kube/corev1/secrets"
|
|
serviceaccounts "github.com/kyverno/kyverno/pkg/clients/kube/corev1/serviceaccounts"
|
|
services "github.com/kyverno/kyverno/pkg/clients/kube/corev1/services"
|
|
"github.com/kyverno/kyverno/pkg/metrics"
|
|
k8s_io_client_go_kubernetes_typed_core_v1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
|
"k8s.io/client-go/rest"
|
|
)
|
|
|
|
func WithMetrics(inner k8s_io_client_go_kubernetes_typed_core_v1.CoreV1Interface, metrics metrics.MetricsConfigManager, clientType metrics.ClientType) k8s_io_client_go_kubernetes_typed_core_v1.CoreV1Interface {
|
|
return &withMetrics{inner, metrics, clientType}
|
|
}
|
|
|
|
func WithTracing(inner k8s_io_client_go_kubernetes_typed_core_v1.CoreV1Interface, client string) k8s_io_client_go_kubernetes_typed_core_v1.CoreV1Interface {
|
|
return &withTracing{inner, client}
|
|
}
|
|
|
|
func WithLogging(inner k8s_io_client_go_kubernetes_typed_core_v1.CoreV1Interface, logger logr.Logger) k8s_io_client_go_kubernetes_typed_core_v1.CoreV1Interface {
|
|
return &withLogging{inner, logger}
|
|
}
|
|
|
|
type withMetrics struct {
|
|
inner k8s_io_client_go_kubernetes_typed_core_v1.CoreV1Interface
|
|
metrics metrics.MetricsConfigManager
|
|
clientType metrics.ClientType
|
|
}
|
|
|
|
func (c *withMetrics) RESTClient() rest.Interface {
|
|
return c.inner.RESTClient()
|
|
}
|
|
func (c *withMetrics) ComponentStatuses() k8s_io_client_go_kubernetes_typed_core_v1.ComponentStatusInterface {
|
|
recorder := metrics.ClusteredClientQueryRecorder(c.metrics, "ComponentStatus", c.clientType)
|
|
return componentstatuses.WithMetrics(c.inner.ComponentStatuses(), recorder)
|
|
}
|
|
func (c *withMetrics) ConfigMaps(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ConfigMapInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "ConfigMap", c.clientType)
|
|
return configmaps.WithMetrics(c.inner.ConfigMaps(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) Endpoints(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.EndpointsInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "Endpoints", c.clientType)
|
|
return endpoints.WithMetrics(c.inner.Endpoints(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) Events(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.EventInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "Event", c.clientType)
|
|
return events.WithMetrics(c.inner.Events(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) LimitRanges(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.LimitRangeInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "LimitRange", c.clientType)
|
|
return limitranges.WithMetrics(c.inner.LimitRanges(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) Namespaces() k8s_io_client_go_kubernetes_typed_core_v1.NamespaceInterface {
|
|
recorder := metrics.ClusteredClientQueryRecorder(c.metrics, "Namespace", c.clientType)
|
|
return namespaces.WithMetrics(c.inner.Namespaces(), recorder)
|
|
}
|
|
func (c *withMetrics) Nodes() k8s_io_client_go_kubernetes_typed_core_v1.NodeInterface {
|
|
recorder := metrics.ClusteredClientQueryRecorder(c.metrics, "Node", c.clientType)
|
|
return nodes.WithMetrics(c.inner.Nodes(), recorder)
|
|
}
|
|
func (c *withMetrics) PersistentVolumeClaims(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.PersistentVolumeClaimInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "PersistentVolumeClaim", c.clientType)
|
|
return persistentvolumeclaims.WithMetrics(c.inner.PersistentVolumeClaims(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) PersistentVolumes() k8s_io_client_go_kubernetes_typed_core_v1.PersistentVolumeInterface {
|
|
recorder := metrics.ClusteredClientQueryRecorder(c.metrics, "PersistentVolume", c.clientType)
|
|
return persistentvolumes.WithMetrics(c.inner.PersistentVolumes(), recorder)
|
|
}
|
|
func (c *withMetrics) PodTemplates(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.PodTemplateInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "PodTemplate", c.clientType)
|
|
return podtemplates.WithMetrics(c.inner.PodTemplates(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) Pods(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.PodInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "Pod", c.clientType)
|
|
return pods.WithMetrics(c.inner.Pods(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) ReplicationControllers(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ReplicationControllerInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "ReplicationController", c.clientType)
|
|
return replicationcontrollers.WithMetrics(c.inner.ReplicationControllers(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) ResourceQuotas(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ResourceQuotaInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "ResourceQuota", c.clientType)
|
|
return resourcequotas.WithMetrics(c.inner.ResourceQuotas(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) Secrets(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.SecretInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "Secret", c.clientType)
|
|
return secrets.WithMetrics(c.inner.Secrets(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) ServiceAccounts(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ServiceAccountInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "ServiceAccount", c.clientType)
|
|
return serviceaccounts.WithMetrics(c.inner.ServiceAccounts(namespace), recorder)
|
|
}
|
|
func (c *withMetrics) Services(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ServiceInterface {
|
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "Service", c.clientType)
|
|
return services.WithMetrics(c.inner.Services(namespace), recorder)
|
|
}
|
|
|
|
type withTracing struct {
|
|
inner k8s_io_client_go_kubernetes_typed_core_v1.CoreV1Interface
|
|
client string
|
|
}
|
|
|
|
func (c *withTracing) RESTClient() rest.Interface {
|
|
return c.inner.RESTClient()
|
|
}
|
|
func (c *withTracing) ComponentStatuses() k8s_io_client_go_kubernetes_typed_core_v1.ComponentStatusInterface {
|
|
return componentstatuses.WithTracing(c.inner.ComponentStatuses(), c.client, "ComponentStatus")
|
|
}
|
|
func (c *withTracing) ConfigMaps(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ConfigMapInterface {
|
|
return configmaps.WithTracing(c.inner.ConfigMaps(namespace), c.client, "ConfigMap")
|
|
}
|
|
func (c *withTracing) Endpoints(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.EndpointsInterface {
|
|
return endpoints.WithTracing(c.inner.Endpoints(namespace), c.client, "Endpoints")
|
|
}
|
|
func (c *withTracing) Events(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.EventInterface {
|
|
return events.WithTracing(c.inner.Events(namespace), c.client, "Event")
|
|
}
|
|
func (c *withTracing) LimitRanges(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.LimitRangeInterface {
|
|
return limitranges.WithTracing(c.inner.LimitRanges(namespace), c.client, "LimitRange")
|
|
}
|
|
func (c *withTracing) Namespaces() k8s_io_client_go_kubernetes_typed_core_v1.NamespaceInterface {
|
|
return namespaces.WithTracing(c.inner.Namespaces(), c.client, "Namespace")
|
|
}
|
|
func (c *withTracing) Nodes() k8s_io_client_go_kubernetes_typed_core_v1.NodeInterface {
|
|
return nodes.WithTracing(c.inner.Nodes(), c.client, "Node")
|
|
}
|
|
func (c *withTracing) PersistentVolumeClaims(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.PersistentVolumeClaimInterface {
|
|
return persistentvolumeclaims.WithTracing(c.inner.PersistentVolumeClaims(namespace), c.client, "PersistentVolumeClaim")
|
|
}
|
|
func (c *withTracing) PersistentVolumes() k8s_io_client_go_kubernetes_typed_core_v1.PersistentVolumeInterface {
|
|
return persistentvolumes.WithTracing(c.inner.PersistentVolumes(), c.client, "PersistentVolume")
|
|
}
|
|
func (c *withTracing) PodTemplates(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.PodTemplateInterface {
|
|
return podtemplates.WithTracing(c.inner.PodTemplates(namespace), c.client, "PodTemplate")
|
|
}
|
|
func (c *withTracing) Pods(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.PodInterface {
|
|
return pods.WithTracing(c.inner.Pods(namespace), c.client, "Pod")
|
|
}
|
|
func (c *withTracing) ReplicationControllers(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ReplicationControllerInterface {
|
|
return replicationcontrollers.WithTracing(c.inner.ReplicationControllers(namespace), c.client, "ReplicationController")
|
|
}
|
|
func (c *withTracing) ResourceQuotas(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ResourceQuotaInterface {
|
|
return resourcequotas.WithTracing(c.inner.ResourceQuotas(namespace), c.client, "ResourceQuota")
|
|
}
|
|
func (c *withTracing) Secrets(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.SecretInterface {
|
|
return secrets.WithTracing(c.inner.Secrets(namespace), c.client, "Secret")
|
|
}
|
|
func (c *withTracing) ServiceAccounts(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ServiceAccountInterface {
|
|
return serviceaccounts.WithTracing(c.inner.ServiceAccounts(namespace), c.client, "ServiceAccount")
|
|
}
|
|
func (c *withTracing) Services(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ServiceInterface {
|
|
return services.WithTracing(c.inner.Services(namespace), c.client, "Service")
|
|
}
|
|
|
|
type withLogging struct {
|
|
inner k8s_io_client_go_kubernetes_typed_core_v1.CoreV1Interface
|
|
logger logr.Logger
|
|
}
|
|
|
|
func (c *withLogging) RESTClient() rest.Interface {
|
|
return c.inner.RESTClient()
|
|
}
|
|
func (c *withLogging) ComponentStatuses() k8s_io_client_go_kubernetes_typed_core_v1.ComponentStatusInterface {
|
|
return componentstatuses.WithLogging(c.inner.ComponentStatuses(), c.logger.WithValues("resource", "ComponentStatuses"))
|
|
}
|
|
func (c *withLogging) ConfigMaps(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ConfigMapInterface {
|
|
return configmaps.WithLogging(c.inner.ConfigMaps(namespace), c.logger.WithValues("resource", "ConfigMaps").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) Endpoints(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.EndpointsInterface {
|
|
return endpoints.WithLogging(c.inner.Endpoints(namespace), c.logger.WithValues("resource", "Endpoints").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) Events(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.EventInterface {
|
|
return events.WithLogging(c.inner.Events(namespace), c.logger.WithValues("resource", "Events").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) LimitRanges(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.LimitRangeInterface {
|
|
return limitranges.WithLogging(c.inner.LimitRanges(namespace), c.logger.WithValues("resource", "LimitRanges").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) Namespaces() k8s_io_client_go_kubernetes_typed_core_v1.NamespaceInterface {
|
|
return namespaces.WithLogging(c.inner.Namespaces(), c.logger.WithValues("resource", "Namespaces"))
|
|
}
|
|
func (c *withLogging) Nodes() k8s_io_client_go_kubernetes_typed_core_v1.NodeInterface {
|
|
return nodes.WithLogging(c.inner.Nodes(), c.logger.WithValues("resource", "Nodes"))
|
|
}
|
|
func (c *withLogging) PersistentVolumeClaims(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.PersistentVolumeClaimInterface {
|
|
return persistentvolumeclaims.WithLogging(c.inner.PersistentVolumeClaims(namespace), c.logger.WithValues("resource", "PersistentVolumeClaims").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) PersistentVolumes() k8s_io_client_go_kubernetes_typed_core_v1.PersistentVolumeInterface {
|
|
return persistentvolumes.WithLogging(c.inner.PersistentVolumes(), c.logger.WithValues("resource", "PersistentVolumes"))
|
|
}
|
|
func (c *withLogging) PodTemplates(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.PodTemplateInterface {
|
|
return podtemplates.WithLogging(c.inner.PodTemplates(namespace), c.logger.WithValues("resource", "PodTemplates").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) Pods(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.PodInterface {
|
|
return pods.WithLogging(c.inner.Pods(namespace), c.logger.WithValues("resource", "Pods").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) ReplicationControllers(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ReplicationControllerInterface {
|
|
return replicationcontrollers.WithLogging(c.inner.ReplicationControllers(namespace), c.logger.WithValues("resource", "ReplicationControllers").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) ResourceQuotas(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ResourceQuotaInterface {
|
|
return resourcequotas.WithLogging(c.inner.ResourceQuotas(namespace), c.logger.WithValues("resource", "ResourceQuotas").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) Secrets(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.SecretInterface {
|
|
return secrets.WithLogging(c.inner.Secrets(namespace), c.logger.WithValues("resource", "Secrets").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) ServiceAccounts(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ServiceAccountInterface {
|
|
return serviceaccounts.WithLogging(c.inner.ServiceAccounts(namespace), c.logger.WithValues("resource", "ServiceAccounts").WithValues("namespace", namespace))
|
|
}
|
|
func (c *withLogging) Services(namespace string) k8s_io_client_go_kubernetes_typed_core_v1.ServiceInterface {
|
|
return services.WithLogging(c.inner.Services(namespace), c.logger.WithValues("resource", "Services").WithValues("namespace", namespace))
|
|
}
|