Documentation ¶
Index ¶
- Constants
- Variables
- func ApplyFilter(jqFilter string, ...) (*ObjectAndFilterResult, error)
- func FormatFieldSelector(selector *FieldSelector) (string, error)
- func FormatLabelSelector(selector *metav1.LabelSelector) (string, error)
- func RandomizedResyncPeriod() time.Duration
- func ResourceId(obj *unstructured.Unstructured) string
- type KubeEventsManager
- type Monitor
- type MonitorConfig
- func (c *MonitorConfig) AddFieldSelectorRequirement(field string, op string, value string)
- func (c *MonitorConfig) IsAnyNamespace() bool
- func (c *MonitorConfig) Names() []string
- func (c *MonitorConfig) Namespaces() (nsNames []string)
- func (c *MonitorConfig) WithEventTypes(types []WatchEventType) *MonitorConfig
- func (c *MonitorConfig) WithFieldSelector(fieldSel *FieldSelector)
- func (c *MonitorConfig) WithLabelSelector(labelSel *metav1.LabelSelector)
- func (c *MonitorConfig) WithMode(mode KubeEventMode)
- func (c *MonitorConfig) WithNameSelector(nSel *NameSelector)
- func (c *MonitorConfig) WithNamespaceSelector(nsSel *NamespaceSelector)
- type NamespaceInformer
- type ResourceInformer
Constants ¶
const ResyncPeriodGranularity = time.Duration(5) * time.Minute
const ResyncPeriodJitterGranularity = time.Duration(15) * time.Second
const ResyncPeriodMedian = time.Duration(3) * time.Hour
const ResyncPeriodSpread = time.Duration(2) * time.Hour
Variables ¶
var NewKubeEventsManager = func() *kubeEventsManager { em := &kubeEventsManager{ Monitors: make(map[string]Monitor), KubeEventCh: make(chan KubeEvent, 1), } return em }
NewKubeEventsManager returns an implementation of KubeEventsManager.
var NewMonitor = func() Monitor { return &monitor{ ResourceInformers: make([]ResourceInformer, 0), VaryingInformers: make(map[string][]ResourceInformer), cancelForNs: make(map[string]context.CancelFunc), staticNamespaces: make(map[string]bool), } }
var NewNamespaceInformer = func(monitor *MonitorConfig) NamespaceInformer { informer := &namespaceInformer{ Monitor: monitor, ExistedObjects: make(map[string]bool), } return informer }
var NewResourceInformer = func(monitor *MonitorConfig) ResourceInformer { informer := &resourceInformer{ Monitor: monitor, cachedObjects: make(map[string]*ObjectAndFilterResult), cacheLock: sync.RWMutex{}, eventBufLock: sync.Mutex{}, } return informer }
Functions ¶
func ApplyFilter ¶
func ApplyFilter(jqFilter string, filterFn func(obj *unstructured.Unstructured) (result interface{}, err error), obj *unstructured.Unstructured) (*ObjectAndFilterResult, error)
ApplyFilter filters object json representation with jq expression, calculate checksum over result and return ObjectAndFilterResult. If jqFilter is empty, no filter is required and checksum is calculated over full json representation of the object.
func FormatFieldSelector ¶
func FormatLabelSelector ¶
func FormatLabelSelector(selector *metav1.LabelSelector) (string, error)
func RandomizedResyncPeriod ¶
RandomizedResyncPeriod returns a time.Duration between 2 hours and 4 hours with jitter and granularity
func ResourceId ¶
func ResourceId(obj *unstructured.Unstructured) string
ResourceId describes object with namespace, kind and name
Change with caution, as this string is used for sorting objects and snapshots.
Types ¶
type KubeEventsManager ¶
type KubeEventsManager interface { WithContext(ctx context.Context) WithMetricStorage(mstor *metric_storage.MetricStorage) WithKubeClient(client klient.Client) AddMonitor(monitorConfig *MonitorConfig) error HasMonitor(monitorID string) bool GetMonitor(monitorID string) Monitor StartMonitor(monitorID string) StopMonitor(monitorID string) error Ch() chan KubeEvent PauseHandleEvents() }
type Monitor ¶
type Monitor interface { WithContext(ctx context.Context) WithKubeClient(client klient.Client) WithMetricStorage(mstor *metric_storage.MetricStorage) WithConfig(config *MonitorConfig) WithKubeEventCb(eventCb func(KubeEvent)) CreateInformers() error Start(context.Context) Stop() PauseHandleEvents() Snapshot() []ObjectAndFilterResult EnableKubeEventCb() GetConfig() *MonitorConfig }
type MonitorConfig ¶
type MonitorConfig struct { Metadata struct { MonitorId string DebugName string LogLabels map[string]string MetricLabels map[string]string } EventTypes []WatchEventType ApiVersion string Kind string NameSelector *NameSelector NamespaceSelector *NamespaceSelector LabelSelector *metav1.LabelSelector FieldSelector *FieldSelector JqFilter string LogEntry *log.Entry Mode KubeEventMode KeepFullObjectsInMemory bool FilterFunc func(*unstructured.Unstructured) (interface{}, error) }
KubeEventMonitorConfig is a config that suits the latest version of OnKubernetesEventConfig.
func (*MonitorConfig) AddFieldSelectorRequirement ¶
func (c *MonitorConfig) AddFieldSelectorRequirement(field string, op string, value string)
func (*MonitorConfig) IsAnyNamespace ¶
func (c *MonitorConfig) IsAnyNamespace() bool
func (*MonitorConfig) Names ¶
func (c *MonitorConfig) Names() []string
Names returns names of monitored objects if nameSelector.matchNames is defined in config.
func (*MonitorConfig) Namespaces ¶
func (c *MonitorConfig) Namespaces() (nsNames []string)
Namespaces returns names of namespaces if namescpace.nameSelector is defined in config.
If no namespace specified or no namespace.nameSelector or length of namespace.nameSeletor.matchNames is 0 then empty string is returned to monitor all namespaces.
If namespace.labelSelector is specified, then return empty array.
func (*MonitorConfig) WithEventTypes ¶
func (c *MonitorConfig) WithEventTypes(types []WatchEventType) *MonitorConfig
func (*MonitorConfig) WithFieldSelector ¶
func (c *MonitorConfig) WithFieldSelector(fieldSel *FieldSelector)
WithFieldSelector copies input FieldSelector into monitor.FieldSelector
func (*MonitorConfig) WithLabelSelector ¶
func (c *MonitorConfig) WithLabelSelector(labelSel *metav1.LabelSelector)
WithLabelSelector copies input LabelSelector into monitor.LabelSelector
func (*MonitorConfig) WithMode ¶
func (c *MonitorConfig) WithMode(mode KubeEventMode)
func (*MonitorConfig) WithNameSelector ¶
func (c *MonitorConfig) WithNameSelector(nSel *NameSelector)
WithNamespaceSelector copies input NamespaceSelector into monitor.NamespaceSelector
func (*MonitorConfig) WithNamespaceSelector ¶
func (c *MonitorConfig) WithNamespaceSelector(nsSel *NamespaceSelector)
WithNamespaceSelector copies input NamespaceSelector into monitor.NamespaceSelector
type NamespaceInformer ¶
type ResourceInformer ¶
type ResourceInformer interface { WithContext(ctx context.Context) WithKubeClient(client klient.Client) WithMetricStorage(mstor *metric_storage.MetricStorage) WithNamespace(string) WithName(string) WithKubeEventCb(eventCb func(KubeEvent)) CachedObjects() []ObjectAndFilterResult CachedObjectsBytes() int64 EnableKubeEventCb() // Call it to use KubeEventCb to emit events. Start() Stop() PauseHandleEvents() }
ResourceInformer is a kube informer for particular onKubernetesEvent