| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package watcher
- import (
- "github.com/opencost/opencost/core/pkg/log"
- v1 "k8s.io/api/core/v1"
- )
- // ConfigMapWatcher represents a single configmap watcher
- type ConfigMapWatcher struct {
- ConfigMapName string
- WatchFunc func(string, map[string]string) error
- }
- type ConfigMapWatchers struct {
- watchers map[string][]*ConfigMapWatcher
- }
- func NewConfigMapWatchers(watchers ...*ConfigMapWatcher) *ConfigMapWatchers {
- cmw := &ConfigMapWatchers{
- watchers: make(map[string][]*ConfigMapWatcher),
- }
- for _, w := range watchers {
- cmw.AddWatcher(w)
- }
- return cmw
- }
- func (cmw *ConfigMapWatchers) AddWatcher(watcher *ConfigMapWatcher) {
- if watcher == nil {
- return
- }
- name := watcher.ConfigMapName
- cmw.watchers[name] = append(cmw.watchers[name], watcher)
- }
- func (cmw *ConfigMapWatchers) Add(configMapName string, watchFunc func(string, map[string]string) error) {
- cmw.AddWatcher(&ConfigMapWatcher{
- ConfigMapName: configMapName,
- WatchFunc: watchFunc,
- })
- }
- func (cmw *ConfigMapWatchers) GetWatchedConfigs() []string {
- configNames := []string{}
- for k := range cmw.watchers {
- configNames = append(configNames, k)
- }
- return configNames
- }
- func (cmw *ConfigMapWatchers) ToWatchFunc() func(interface{}) {
- return func(c interface{}) {
- conf, ok := c.(*v1.ConfigMap)
- if !ok {
- return
- }
- name := conf.GetName()
- data := conf.Data
- if watchers, ok := cmw.watchers[name]; ok {
- for _, cw := range watchers {
- err := cw.WatchFunc(name, data)
- if err != nil {
- log.Infof("ERROR UPDATING %s CONFIG: %s", name, err.Error())
- }
- }
- }
- }
- }
|