add multi-user mode closes #3

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
2024-11-17 19:33:05 +03:00
parent 4d7bfa713a
commit 4ae2793781
4 changed files with 47 additions and 12 deletions

View File

@@ -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)