mirror of
https://github.com/wneessen/logranger.git
synced 2024-11-22 21:00:50 +01:00
Winni Neessen
b6f6b6a664
Introduced an Actions interface for plugins in 'action.go' and implemented a corresponding registry in 'registry.go'. Additionally, adjusted rule related behavior in 'Server' to account for actions, with relevant new fields in Ruleset and Rule. This enables multiple actions on a log message based on defined rules and further modularises the codebase, paving the path for addition of more plugin actions.
77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
// SPDX-FileCopyrightText: 2023 Winni Neessen <wn@neessen.dev>
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package main
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
"os/signal"
|
|
"path/filepath"
|
|
"syscall"
|
|
|
|
"github.com/wneessen/logranger"
|
|
)
|
|
|
|
const (
|
|
// LogErrKey is the keyword used in slog for error messages
|
|
LogErrKey = "error"
|
|
)
|
|
|
|
func main() {
|
|
l := slog.New(slog.NewJSONHandler(os.Stdout, nil)).With(slog.String("context", "logranger"))
|
|
cp := "logranger.toml"
|
|
cpe := os.Getenv("LOGRANGER_CONFIG")
|
|
if cpe != "" {
|
|
cp = cpe
|
|
}
|
|
|
|
p := filepath.Dir(cp)
|
|
f := filepath.Base(cp)
|
|
c, err := logranger.NewConfig(p, f)
|
|
if err != nil {
|
|
l.Error("failed to read/parse config", LogErrKey, err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
s, err := logranger.New(c)
|
|
if err != nil {
|
|
l.Error("failed to create new server", LogErrKey, err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
go func() {
|
|
if err = s.Run(); err != nil {
|
|
l.Error("failed to start logranger", LogErrKey, err)
|
|
os.Exit(1)
|
|
}
|
|
}()
|
|
|
|
sc := make(chan os.Signal, 1)
|
|
signal.Notify(sc)
|
|
for rc := range sc {
|
|
if rc == syscall.SIGKILL || rc == syscall.SIGABRT || rc == syscall.SIGINT || rc == syscall.SIGTERM {
|
|
l.Warn("received signal. shutting down server", slog.String("signal", rc.String()))
|
|
// s.Stop()
|
|
l.Info("server gracefully shut down")
|
|
os.Exit(0)
|
|
}
|
|
if rc == syscall.SIGHUP {
|
|
l.Info(`received "SIGHUP" signal - reloading rules...`)
|
|
/*
|
|
_, nr, err := config.New(config.WithConfFile(*cf), config.WithRulesFile(*rf))
|
|
if err != nil {
|
|
s.Log.Errorf("%s - skipping reload", err)
|
|
continue
|
|
}
|
|
if err := nr.CheckRegEx(); err != nil {
|
|
s.Log.Errorf("ruleset validation failed for new ruleset - skipping reload: %s", err)
|
|
continue
|
|
}
|
|
s.SetRules(nr)
|
|
|
|
*/
|
|
}
|
|
}
|
|
}
|