56 lines
1.2 KiB
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()
|
|
}
|