82 lines
1.7 KiB
Go
82 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
// External
|
|
"git.gibonuddevalla.se/go/vlog"
|
|
|
|
// Standard
|
|
"flag"
|
|
"log/slog"
|
|
"os"
|
|
"path"
|
|
)
|
|
|
|
const VERSION = "v1"
|
|
|
|
var (
|
|
flagVersion bool
|
|
flagDev bool
|
|
flagDebug bool
|
|
flagConfig string
|
|
|
|
config Config
|
|
initLogger *slog.Logger
|
|
logger *slog.Logger
|
|
|
|
device RouterosDevice
|
|
)
|
|
|
|
func init() {// {{{
|
|
initLogger = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{}))
|
|
|
|
confDir, err := os.UserConfigDir()
|
|
if err != nil {
|
|
initLogger.Error("application", "error", err)
|
|
os.Exit(1)
|
|
}
|
|
defConfFilename := path.Join(confDir, "routeros_dns.json")
|
|
|
|
flag.BoolVar(&flagVersion, "version", false, "Print version and exit")
|
|
flag.BoolVar(&flagDev, "dev", false, "Load each static file from disk")
|
|
flag.BoolVar(&flagDebug, "debug", false, "Debugging log level")
|
|
flag.StringVar(&flagConfig, "config", defConfFilename, "Path to filename for configuration")
|
|
flag.Parse()
|
|
|
|
config, err = readConfig()
|
|
if err != nil {
|
|
initLogger.Error("application", "error", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
logger = initLogging(config)
|
|
}// }}}
|
|
func initLogging(config Config) (*slog.Logger) {// {{{
|
|
opts := slog.HandlerOptions{}
|
|
if flagDebug {
|
|
opts.Level = slog.LevelDebug
|
|
}
|
|
handler := vlog.New(
|
|
os.Stdout,
|
|
opts,
|
|
config.Logging.LogDir,
|
|
config.Logging.URL,
|
|
"routeros-dns",
|
|
config.Logging.System,
|
|
config.Logging.Instance,
|
|
)
|
|
return slog.New(handler)
|
|
}// }}}
|
|
|
|
func main() {
|
|
initLogger.Info("application", "version", VERSION)
|
|
|
|
device.Host = config.Device.Address
|
|
device.Port = config.Device.Port
|
|
device.Username = config.Device.Username
|
|
device.Password = config.Device.Password
|
|
device.Timeout = config.Device.Timeout
|
|
device.Init()
|
|
|
|
registerWebserverHandlers()
|
|
startWebserver()
|
|
}
|