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 CachedObjectsInfo
- 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), informerSyncTime: 100 * time.Millisecond, } return em }
NewKubeEventsManager returns an implementation of KubeEventsManager.
var NewMonitor = func() Monitor { return &monitor{ ResourceInformers: make([]ResourceInformer, 0), VaryingInformers: make(map[string][]ResourceInformer), informerSyncTime: 100 * time.Millisecond, 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{}, cachedObjectsInfo: &CachedObjectsInfo{}, cachedObjectsIncrement: &CachedObjectsInfo{}, informerSyncTime: 100 * time.Millisecond, } 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 CachedObjectsInfo ¶ added in v1.0.8
type CachedObjectsInfo struct {
Count uint64 `json:"count"`
Added uint64 `json:"added"`
Deleted uint64 `json:"deleted"`
Modified uint64 `json:"modified"`
Cleaned uint64 `json:"cleaned"`
}
CachedObjectsInfo stores counters of operations over resources in Monitors and Informers.
func (*CachedObjectsInfo) Add ¶ added in v1.0.8
func (c *CachedObjectsInfo) Add(in CachedObjectsInfo)
type KubeEventsManager ¶
type KubeEventsManager interface {
WithContext(ctx context.Context)
WithMetricStorage(mstor *metric_storage.MetricStorage)
WithKubeClient(client klient.Client)
WithSyncPeriod(time.Duration)
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))
WithSyncPeriod(time.Duration)
CreateInformers() error
Start(context.Context)
Stop()
PauseHandleEvents()
Snapshot() []ObjectAndFilterResult
EnableKubeEventCb()
GetConfig() *MonitorConfig
SnapshotOperations() (total *CachedObjectsInfo, last *CachedObjectsInfo)
}
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))
WithSyncPeriod(time.Duration)
CachedObjects() []ObjectAndFilterResult
CachedObjectsBytes() int64
EnableKubeEventCb() // Call it to use KubeEventCb to emit events.
Start()
Stop()
PauseHandleEvents()
CachedObjectsInfo() CachedObjectsInfo
CachedObjectsInfoIncrement() CachedObjectsInfo
}
ResourceInformer is a kube informer for particular onKubernetesEvent