mirror of
https://github.com/kubeshark/kubeshark.git
synced 2026-04-06 10:47:49 +00:00
Currently shared/kubernetes/watch.go:FilteredWatch only watches pods. This PR makes it reusable for other types of resources. This is done in preparation for watching k8s events.
46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package kubernetes
|
|
|
|
import (
|
|
"context"
|
|
"regexp"
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/watch"
|
|
)
|
|
|
|
type PodWatchHelper struct {
|
|
kubernetesProvider *Provider
|
|
NameRegexFilter *regexp.Regexp
|
|
}
|
|
|
|
func NewPodWatchHelper(kubernetesProvider *Provider, NameRegexFilter *regexp.Regexp) *PodWatchHelper {
|
|
return &PodWatchHelper{
|
|
kubernetesProvider: kubernetesProvider,
|
|
NameRegexFilter: NameRegexFilter,
|
|
}
|
|
}
|
|
|
|
// Implements the EventFilterer Interface
|
|
func (pwh *PodWatchHelper) Filter(wEvent *WatchEvent) (bool, error) {
|
|
pod, err := wEvent.ToPod()
|
|
if err != nil {
|
|
return false, nil
|
|
}
|
|
|
|
if !pwh.NameRegexFilter.MatchString(pod.Name) {
|
|
return false, nil
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
// Implements the WatchCreator Interface
|
|
func (pwh *PodWatchHelper) NewWatcher(ctx context.Context, namespace string) (watch.Interface, error) {
|
|
watcher, err := pwh.kubernetesProvider.clientSet.CoreV1().Pods(namespace).Watch(ctx, metav1.ListOptions{Watch: true})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return watcher, nil
|
|
}
|