sensenet/cmd/sensenet/main.go

56 lines
1.2 KiB
Go

package main
import (
"context"
"flag"
"log"
"git.wntrmute.dev/kyle/sensenet/config"
"git.wntrmute.dev/kyle/sensenet/receiver"
"git.wntrmute.dev/kyle/sensenet/topic"
// topics, imported for effects
_ "git.wntrmute.dev/kyle/sensenet/topic/pht"
_ "git.wntrmute.dev/kyle/sensenet/topic/power"
)
func main() {
configFilePath := flag.String("f", config.DefaultConfigFile, "`path` to config file")
workers := flag.Int("w", 4, "`number` of worker threads to launch")
flag.Parse()
cfg, err := config.LoadConfig(*configFilePath)
if err != nil {
log.Fatalf("failed to load config file '%s': %s", *configFilePath, err)
}
ctx := context.Background()
db, err := cfg.Database.Connect(ctx)
if err != nil {
log.Fatal("couldn't connect to database:", err)
}
if !topic.ValidateTopics(cfg.Publishers) {
log.Fatal("unhandled topics")
}
err = topic.Setup(ctx, db)
if err != nil {
log.Fatal(err)
}
rcvr := receiver.New()
for _, publisher := range cfg.Publishers {
err = rcvr.Subscribe(publisher)
if err != nil {
log.Fatalf("couldn't connect to '%s' @ %s: %s", publisher.Addr, publisher.Name, err)
}
}
log.Println("launching workers")
for i := 0; i < *workers; i++ {
go rcvr.Store(context.Background(), db)
}
rcvr.LogErrors()
}