in cmd/alerter/main.go [52:141]
func realMain(ctx *cli.Context) error {
logger.Infof("%s version:%s", os.Args[0], version.String())
endpoints := make(map[string]string)
endpointsArg := ctx.StringSlice("kusto-endpoint")
for _, v := range endpointsArg {
parts := strings.Split(v, "=")
if len(parts) != 2 {
return cli.Exit("Invalid kusto-endpoint format, expected <name>=<endpoint>", 1)
}
endpoints[parts[0]] = parts[1]
}
tags := make(map[string]string)
tagsArg := ctx.StringSlice("tag")
for _, v := range tagsArg {
parts := strings.Split(v, "=")
if len(parts) != 2 {
return cli.Exit("Invalid tag format, expected <key>=<value>", 1)
}
tags[strings.ToLower(parts[0])] = strings.ToLower(parts[1])
}
// Always add region and cloud tags which are required params for alerter currently.
tags["region"] = strings.ToLower(ctx.String("region"))
tags["cloud"] = strings.ToLower(ctx.String("cloud"))
for k, v := range tags {
logger.Infof("Using tag %s=%s", k, v)
}
scheme := clientgoscheme.Scheme
if err := clientgoscheme.AddToScheme(scheme); err != nil {
return err
}
if err := alertrulev1.AddToScheme(scheme); err != nil {
return err
}
_, _, ctrlCli, err := newKubeClient(ctx)
if err != nil {
return err
}
opts := &alerter.AlerterOpts{
Port: ctx.Int("port"),
KustoEndpoints: endpoints,
Region: ctx.String("region"),
Cloud: ctx.String("cloud"),
AlertAddr: ctx.String("alerter-address"),
Concurrency: ctx.Int("concurrency"),
MaxNotifications: ctx.Int("max-notifications"),
MSIID: ctx.String("auth-msi-id"),
KustoToken: ctx.String("auth-token"),
Tags: tags,
CtrlCli: ctrlCli,
}
svcCtx, cancel := context.WithCancel(context.Background())
defer cancel()
if ctx.String("lint-dir") != "" {
return alerter.Lint(svcCtx, opts, ctx.String("lint-dir"))
}
svc, err := alerter.NewService(opts)
if err != nil {
return err
}
if err := svc.Open(svcCtx); err != nil {
return err
}
sc := make(chan os.Signal, 1)
signal.Notify(sc, os.Interrupt, syscall.SIGTERM)
go func() {
sig := <-sc
cancel()
logger.Infof("Received signal %s, exiting...", sig.String())
// Shutdown the server and cancel context
err := svc.Close()
if err != nil {
logger.Errorf(err.Error())
}
}()
<-svcCtx.Done()
return nil
}