1
0
mirror of https://github.com/Chipazawra/v8-1c-cluster-pde.git synced 2025-03-21 21:17:03 +02:00

165 lines
3.5 KiB
Go
Raw Normal View History

2021-12-27 15:02:41 +03:00
package app
2021-12-27 15:11:48 +03:00
2021-12-27 21:15:02 +03:00
import (
2021-12-29 12:31:50 +03:00
"context"
2021-12-27 21:15:02 +03:00
"flag"
"fmt"
"log"
2021-12-28 23:06:33 +03:00
"os"
2021-12-30 14:07:24 +03:00
"os/signal"
"syscall"
2021-12-27 21:15:02 +03:00
2021-12-30 16:59:13 +03:00
"github.com/Chipazawra/v8-1c-cluster-pde/internal/puller"
2021-12-29 13:48:16 +03:00
pusher "github.com/Chipazawra/v8-1c-cluster-pde/internal/pusher"
2021-12-28 14:23:42 +03:00
"github.com/Chipazawra/v8-1c-cluster-pde/internal/rpHostsCollector"
2021-12-27 21:15:02 +03:00
"github.com/caarlos0/env"
2021-12-28 14:23:42 +03:00
rascli "github.com/khorevaa/ras-client"
2021-12-27 21:15:02 +03:00
)
2021-12-29 13:48:16 +03:00
const (
push string = "push"
pull string = "pull"
)
2021-12-27 21:15:02 +03:00
var (
2021-12-30 16:59:13 +03:00
conf AppConfig
2021-12-29 13:48:16 +03:00
RAS_HOST string
RAS_PORT string
MODE string
2021-12-30 16:59:13 +03:00
PULL_EXPOSE string
2021-12-29 13:48:16 +03:00
PUSH_INTERVAL int
PUSH_HOST string
PUSH_PORT string
2022-05-11 00:16:03 +03:00
AGNT_PASS string
AGNT_USER string
CLS_USER string
CLS_PASS string
2021-12-27 21:15:02 +03:00
)
func init() {
2021-12-30 14:07:24 +03:00
2021-12-27 21:15:02 +03:00
if err := env.Parse(&conf); err != nil {
log.Fatalf("app: config...")
}
2021-12-29 13:48:16 +03:00
log.Printf("v8-1c-cluster-pde: config from env:\n %#v", conf)
flag.StringVar(&RAS_HOST, "ras-host", "", "cluster host.")
flag.StringVar(&RAS_PORT, "ras-port", "", "cluster port.")
flag.StringVar(&PULL_EXPOSE, "pull-expose", "", "metrics port.")
flag.StringVar(&MODE, "mode", "", "mode push or pull")
flag.IntVar(&PUSH_INTERVAL, "push-interval", 0, "mode push or pull")
flag.StringVar(&PUSH_HOST, "push-host", "", "pushgateway host")
flag.StringVar(&PUSH_PORT, "push-port", "", "pushgateway port")
2022-05-11 00:16:03 +03:00
flag.StringVar(&AGNT_USER, "agnt-user", "", "agent user")
flag.StringVar(&AGNT_PASS, "agnt-pass", "", "agent password")
flag.StringVar(&CLS_USER, "cls-user", "", "cluster user")
flag.StringVar(&CLS_PASS, "cls-pass", "", "cluster password")
2021-12-27 21:15:02 +03:00
flag.Parse()
2021-12-29 13:48:16 +03:00
if RAS_HOST != "" {
conf.RAS_HOST = RAS_HOST
}
if RAS_PORT != "" {
conf.RAS_PORT = RAS_PORT
2021-12-27 21:15:02 +03:00
}
2021-12-29 13:48:16 +03:00
if PULL_EXPOSE != "" {
conf.PULL_EXPOSE = PULL_EXPOSE
2021-12-27 21:15:02 +03:00
}
2021-12-28 14:23:42 +03:00
2021-12-29 13:48:16 +03:00
if MODE != "" {
conf.MODE = MODE
2021-12-28 14:23:42 +03:00
}
2021-12-29 13:48:16 +03:00
if PUSH_INTERVAL != 0 {
conf.PUSH_INTERVAL = PUSH_INTERVAL
}
if PUSH_HOST != "" {
conf.PUSH_HOST = PUSH_HOST
}
if PUSH_PORT != "" {
conf.PUSH_PORT = PUSH_PORT
}
2022-05-11 00:16:03 +03:00
if AGNT_USER != "" {
conf.AGNT_USER = AGNT_USER
}
if AGNT_PASS != "" {
conf.AGNT_PASS = AGNT_PASS
}
if CLS_USER != "" {
conf.CLS_USER = CLS_USER
}
if CLS_PASS != "" {
conf.CLS_PASS = CLS_PASS
}
2021-12-29 13:48:16 +03:00
log.Printf("v8-1c-cluster-pde: overrided config from stdin:\n%#v", conf)
2021-12-27 21:15:02 +03:00
}
2021-12-27 15:11:48 +03:00
func Run() error {
2021-12-27 21:15:02 +03:00
2021-12-29 13:48:16 +03:00
rcli := rascli.NewClient(fmt.Sprintf("%s:%s", conf.RAS_HOST, conf.RAS_PORT))
2022-05-11 00:16:03 +03:00
rcli.AuthenticateAgent(conf.AGNT_USER, conf.AGNT_USER)
2021-12-28 14:23:42 +03:00
defer rcli.Close()
2021-12-27 21:15:02 +03:00
2021-12-30 14:07:24 +03:00
log.Printf("v8-1c-cluster-pde: connected to RAS %v",
fmt.Sprintf("%s:%s", conf.RAS_HOST, conf.RAS_PORT),
)
2022-05-11 00:16:03 +03:00
rhc := rpHostsCollector.New(rcli,
rpHostsCollector.WithCredentionals(conf.CLS_USER, conf.CLS_PASS),
)
2021-12-30 16:59:13 +03:00
2021-12-30 14:07:24 +03:00
ctx, cancel := context.WithCancel(context.Background())
sigchan := make(chan os.Signal, 1)
defer close(sigchan)
2021-12-30 14:53:59 +03:00
errchan := make(chan error)
2021-12-30 14:07:24 +03:00
defer close(errchan)
signal.Notify(sigchan, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
2021-12-30 16:59:13 +03:00
var collecter Collecter
2021-12-29 13:48:16 +03:00
switch conf.MODE {
case push:
2021-12-30 16:59:13 +03:00
collecter = pusher.New(rhc, pusher.WithConfig(
pusher.PusherConfig{
PUSH_INTERVAL: conf.PUSH_INTERVAL,
PUSH_HOST: conf.PUSH_HOST,
PUSH_PORT: conf.PUSH_PORT,
}))
2021-12-29 13:48:16 +03:00
case pull:
2021-12-30 16:59:13 +03:00
collecter = puller.New(rhc, puller.WithConfig(
puller.PullerConfig{
PULL_EXPOSE: conf.PULL_EXPOSE,
}))
2021-12-29 13:48:16 +03:00
}
2021-12-30 16:59:13 +03:00
log.Printf("v8-1c-cluster-pde: runing in %v mode", conf.MODE)
go collecter.Run(ctx, errchan)
2021-12-30 16:02:28 +03:00
select {
case sig := <-sigchan:
cancel()
log.Printf("v8-1c-cluster-pde: received signal %v", sig)
return nil
case err := <-errchan:
cancel()
return err
}
2021-12-29 13:48:16 +03:00
}
2021-12-30 16:59:13 +03:00
type Collecter interface {
Run(ctx context.Context, errchan chan<- error)
2021-12-30 16:02:28 +03:00
}