mirror of
https://github.com/resmoio/kubernetes-event-exporter.git
synced 2026-08-24 01:06:22 +00:00
Before the change, the engine didn't call the `Close()` method of the sinks. This is needed in some cases, i.e when a sink implementation is buffered. This change adds a `Close()` method to the registry that will signal sinks to exit and wait for all sinks to exit before returning. This is then used in the engine stop logic. In the channel-based registry, the closing of all sinks is done in parallel (using a `sync.WaitGroup`). In the sync registry, sinks are closed sequentially. Fixes issue #10
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"github.com/opsgenie/kubernetes-event-exporter/pkg/exporter"
|
|
"github.com/opsgenie/kubernetes-event-exporter/pkg/kube"
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
"gopkg.in/yaml.v2"
|
|
"io/ioutil"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
conf = flag.String("conf", "config.yaml", "The config path file")
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
b, err := ioutil.ReadFile(*conf)
|
|
|
|
if err != nil {
|
|
log.Fatal().Err(err).Msg("cannot read config file")
|
|
}
|
|
|
|
var cfg exporter.Config
|
|
err = yaml.Unmarshal(b, &cfg)
|
|
if err != nil {
|
|
log.Fatal().Err(err).Msg("cannot parse config to YAML")
|
|
}
|
|
|
|
log.Logger = log.With().Caller().Logger().Output(zerolog.ConsoleWriter{
|
|
Out: os.Stdout,
|
|
TimeFormat: time.RFC3339,
|
|
}).Level(zerolog.DebugLevel)
|
|
|
|
if cfg.LogLevel != "" {
|
|
level, err := zerolog.ParseLevel(cfg.LogLevel)
|
|
if err != nil {
|
|
log.Fatal().Err(err).Str("level", cfg.LogLevel).Msg("Invalid log level")
|
|
}
|
|
log.Logger = log.Logger.Level(level)
|
|
}
|
|
|
|
kubeconfig, err := kube.GetKubernetesConfig()
|
|
if err != nil {
|
|
log.Fatal().Err(err).Msg("cannot get kubeconfig")
|
|
}
|
|
|
|
engine := exporter.NewEngine(&cfg, &exporter.ChannelBasedReceiverRegistry{})
|
|
w := kube.NewEventWatcher(kubeconfig, engine.OnEvent)
|
|
w.Start()
|
|
|
|
c := make(chan os.Signal, 1)
|
|
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
sig := <-c
|
|
log.Info().Str("signal", sig.String()).Msg("Received signal to exit")
|
|
defer close(c)
|
|
w.Stop()
|
|
engine.Stop()
|
|
log.Info().Msg("Exiting")
|
|
}
|