first commit
This commit is contained in:
133
main.go
Normal file
133
main.go
Normal file
@ -0,0 +1,133 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// SPDX-FileCopyrightText: 2023 mysubarumq
|
||||
// SPDX-FileContributor: alex-savin
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strconv"
|
||||
"syscall"
|
||||
|
||||
"git.savin.nyc/alex/mysubaru-mq/app"
|
||||
"git.savin.nyc/alex/mysubaru-mq/bus"
|
||||
"git.savin.nyc/alex/mysubaru-mq/config"
|
||||
"git.savin.nyc/alex/mysubaru-mq/hooks/debug"
|
||||
"git.savin.nyc/alex/mysubaru-mq/listeners"
|
||||
"git.savin.nyc/alex/mysubaru-mq/workers"
|
||||
)
|
||||
|
||||
// var log = *slog.Logger
|
||||
var cfg = &config.Config{}
|
||||
|
||||
const (
|
||||
LoggingOutputJson = "JSON"
|
||||
LoggingOutputText = "TEXT"
|
||||
)
|
||||
|
||||
func configureLogging(config *config.Logging) *slog.Logger { //nolint:unparam
|
||||
if config == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var level slog.Level
|
||||
if err := level.UnmarshalText([]byte(config.Level)); err != nil {
|
||||
slog.Warn(err.Error())
|
||||
slog.Warn(fmt.Sprintf("logging level not recognized, defaulting to level %s", slog.LevelInfo.String()))
|
||||
level = slog.LevelInfo
|
||||
}
|
||||
|
||||
var handler slog.Handler
|
||||
switch config.Output {
|
||||
case LoggingOutputJson:
|
||||
handler = slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{AddSource: cfg.Logging.Source, Level: level})
|
||||
case LoggingOutputText:
|
||||
handler = slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{AddSource: cfg.Logging.Source, Level: level})
|
||||
default:
|
||||
handler = slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{AddSource: cfg.Logging.Source, Level: level})
|
||||
}
|
||||
|
||||
return slog.New(handler)
|
||||
}
|
||||
|
||||
func main() {
|
||||
sigs := make(chan os.Signal, 1)
|
||||
done := make(chan bool, 1)
|
||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||
go func() {
|
||||
<-sigs
|
||||
done <- true
|
||||
}()
|
||||
|
||||
var err error
|
||||
cfg, err = config.New()
|
||||
if err != nil { // Handle errors reading the config file
|
||||
slog.Error("Fatal error config file", "error", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
logger := configureLogging(cfg.Logging)
|
||||
|
||||
evBus := bus.New()
|
||||
|
||||
app := app.New(cfg, evBus, logger)
|
||||
// app.Log = logger
|
||||
|
||||
mqtt := workers.NewMQTTClient("mqtt", evBus, cfg)
|
||||
err = app.AddWorker(mqtt)
|
||||
if err != nil {
|
||||
app.Log.Error(err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
mysubaru := workers.NewMySubaruClient("mysubaru", evBus, cfg)
|
||||
err = app.AddWorker(mysubaru)
|
||||
if err != nil {
|
||||
app.Log.Error(err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if len(cfg.Listeners) > 0 {
|
||||
for name, opts := range cfg.Listeners {
|
||||
listener := listeners.NewHTTPStats(name, ":"+strconv.Itoa(opts.Port), nil, app.Info)
|
||||
err = app.AddListener(listener)
|
||||
if err != nil {
|
||||
app.Log.Error(err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
err = app.AddHook(new(debug.Hook), nil)
|
||||
if err != nil {
|
||||
app.Log.Error(err.Error())
|
||||
}
|
||||
|
||||
// err = app.AddHook(new(consul.Hook), &consul.Options{
|
||||
// Hostname: cfg.Consul.Host,
|
||||
// Port: cfg.Consul.Port,
|
||||
// DC: cfg.Consul.DataCenter,
|
||||
// ServiceID: "srv-mysubaru-01",
|
||||
// NodeName: "mysubaru",
|
||||
// Tags: []string{"mysubaru", "hassio", "mqtt"},
|
||||
// LocalHost: cfg.Consul.Interfaces.WAN,
|
||||
// LocalPort: cfg.Listeners["stats"].Port,
|
||||
// })
|
||||
// if err != nil {
|
||||
// app.Log.Error(err.Error())
|
||||
// }
|
||||
|
||||
go func() {
|
||||
err := app.Serve()
|
||||
if err != nil {
|
||||
app.Log.Error(err.Error())
|
||||
}
|
||||
}()
|
||||
|
||||
<-done
|
||||
app.Log.Warn("caught signal, stopping...")
|
||||
_ = app.Close()
|
||||
app.Log.Info("main.go finished")
|
||||
}
|
Reference in New Issue
Block a user