add multi-user mode closes #3
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
@@ -36,19 +36,31 @@ import (
|
||||
"google.golang.org/protobuf/types/dynamicpb"
|
||||
)
|
||||
|
||||
var clients = make(map[string]client.Client)
|
||||
var (
|
||||
clients = make(map[string]client.Client)
|
||||
meters = make(map[string]meter.Meter)
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill)
|
||||
defer stop()
|
||||
|
||||
l := slog.NewLogger()
|
||||
l.Init()
|
||||
m := victoriametrics.NewMeter(
|
||||
victoriametrics.PrometheusCompat(true),
|
||||
meter.WriteFDMetrics(true),
|
||||
meter.WriteProcessMetrics(true),
|
||||
// meter.WriteFDMetrics(true),
|
||||
// meter.WriteProcessMetrics(true),
|
||||
)
|
||||
|
||||
l := slog.NewLogger(logger.WithMeter(m))
|
||||
if err := l.Init(); err != nil {
|
||||
l.Fatal(ctx, "failed to init logger", err)
|
||||
}
|
||||
|
||||
if err := m.Init(); err != nil {
|
||||
l.Fatal(ctx, "failed to init meter", err)
|
||||
}
|
||||
|
||||
meters["default"] = m
|
||||
f, err := os.Open("config.yaml")
|
||||
if err != nil {
|
||||
l.Fatal(ctx, "failed to open config", err)
|
||||
@@ -89,8 +101,16 @@ func main() {
|
||||
if err := healthhandler.RegisterHealthServiceServer(s, healthhandler.NewHandler()); err != nil {
|
||||
l.Fatal(ctx, "failed to set http handler", err)
|
||||
}
|
||||
if err := meterhandler.RegisterMeterServiceServer(s, meterhandler.NewHandler(meterhandler.Meter(m))); err != nil {
|
||||
l.Fatal(ctx, "failed to set http handler", err)
|
||||
|
||||
if !cfg.App.MultiUser {
|
||||
if err := meterhandler.RegisterMeterServiceServer(s, meterhandler.NewHandler(meterhandler.Meter(m))); err != nil {
|
||||
l.Fatal(ctx, "failed to set http handler", err)
|
||||
}
|
||||
} else {
|
||||
hdlr := &metricsHandler{h: meterhandler.NewHandler()}
|
||||
if err := meterhandler.RegisterMeterServiceServer(s, hdlr); err != nil {
|
||||
l.Fatal(ctx, "failed to set http handler", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err = s.Start(); err != nil {
|
||||
@@ -129,6 +149,19 @@ func main() {
|
||||
if !check.Active {
|
||||
continue
|
||||
}
|
||||
|
||||
var mtr meter.Meter
|
||||
if !cfg.App.MultiUser {
|
||||
mtr = meters["default"]
|
||||
} else {
|
||||
if v, ok := meters[check.User]; ok && v != nil {
|
||||
mtr = v
|
||||
} else {
|
||||
mtr = m.Set()
|
||||
meters[check.User] = mtr
|
||||
}
|
||||
}
|
||||
|
||||
for _, task := range check.Tasks {
|
||||
l.Info(ctx, fmt.Sprintf("task %#+v", task))
|
||||
if !task.Active {
|
||||
@@ -140,9 +173,9 @@ func main() {
|
||||
|
||||
switch {
|
||||
case task.GRPC != nil:
|
||||
fn, args, err = newGRPCTask(ctx, l, m, check.Name, task)
|
||||
fn, args, err = newGRPCTask(ctx, l, mtr, check.Name, task)
|
||||
case task.HTTP != nil:
|
||||
fn, args, err = newHTTPTask(ctx, l, m, check.Name, task)
|
||||
fn, args, err = newHTTPTask(ctx, l, mtr, check.Name, task)
|
||||
}
|
||||
if err != nil {
|
||||
l.Error(ctx, "failed to create task", err)
|
||||
|
Reference in New Issue
Block a user