implemented automatic persistence for trackings

This commit is contained in:
Timo Volkmann 2020-12-12 03:23:00 +01:00
parent 09791727a4
commit 1ea6822202
4 changed files with 332 additions and 308 deletions

View File

@ -6,6 +6,7 @@ import (
"git.timovolkmann.de/gyrogpsc/web" "git.timovolkmann.de/gyrogpsc/web"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/spf13/viper" "github.com/spf13/viper"
"os"
"time" "time"
) )
@ -24,13 +25,14 @@ func main() {
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
service.StopRecord() service.StopRecord()
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
service.NewSetup(core.TCP) service.NewSetup(core.TCP, core.SERIAL)
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
service.StartRecord() service.StartRecord()
time.Sleep(5 * time.Second) time.Sleep(120 * time.Second)
service.StopRecord() service.StopRecord()
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
service.StopAll() service.StopAll()
os.Exit(0)
}() }()
web.CreateServer(service, disp, conf) web.CreateServer(service, disp, conf)

View File

@ -9,8 +9,7 @@ import (
) )
func main() { func main() {
conf := &core.Configuration{} conf := configurationFromFile()
configurationFromFile(conf)
repo := storage.NewRepository(conf) repo := storage.NewRepository(conf)
disp := core.NewDispatcher() disp := core.NewDispatcher()
@ -20,18 +19,31 @@ func main() {
web.CreateServer(service, disp, conf) web.CreateServer(service, disp, conf)
} }
func configurationFromFile(c *core.Configuration) { func configurationFromFile() *core.Configuration {
viper.SetDefault("TcpCollectorPort", ":3010") viper.SetDefault("collectors.porttcp", ":3010")
viper.SetDefault("SerialCollectorPort", "/dev/tty.usbmodem14201") viper.SetDefault("collectors.portserial", "/dev/tty.usbmodem14201")
viper.SetDefault("HttpPort", "layouts") viper.SetDefault("webserver.port", ":3011")
viper.SetDefault("publishIntervalMs", 50) viper.SetDefault("pipeline.publishIntervalMs", 50)
viper.SetDefault("syncUpdateIntervalMs", 494) viper.SetDefault("pipeline.syncUpdateIntervalMs", 494)
viper.SetDefault("debuglevel", "INFO")
viper.SetConfigName("gpsconfig") // name of config file (without extension) viper.SetConfigName("gpsconfig") // name of config file (without extension)
viper.SetConfigType("yaml") viper.SetConfigType("yaml")
viper.AddConfigPath(".") viper.AddConfigPath(".")
viper.AddConfigPath("./../../") viper.AddConfigPath("./../../")
if err := viper.ReadInConfig(); err != nil {
viper.Unmarshal(c) logrus.Warn("couldn't find config file. using standard configuration")
logrus.Println(c) }
c := core.Configuration{}
if err := viper.Unmarshal(&c); err != nil {
logrus.Debug("couldn't load config...")
logrus.Error(err)
}
lvl, err := logrus.ParseLevel(c.Debuglevel)
if err != nil {
logrus.Error(err)
}
logrus.SetLevel(lvl)
return &c
} }

View File

@ -8,6 +8,7 @@ import (
"net" "net"
"os" "os"
"sync" "sync"
"time"
) )
type Collector interface { type Collector interface {
@ -55,7 +56,6 @@ func (s *serialCollector) isSerialCollActive() bool {
return s.active return s.active
} }
func (s *serialCollector) Collect() { func (s *serialCollector) Collect() {
s.mu.Lock() s.mu.Lock()
s.active = true s.active = true
@ -67,7 +67,20 @@ func (s *serialCollector) Collect() {
} }
port, err := serial.Open(s.config.Collectors.SerialCollectorPort, mode) port, err := serial.Open(s.config.Collectors.SerialCollectorPort, mode)
if err != nil { if err != nil {
logrus.Fatalln("can't open serial port:", err.Error()) logrus.Warn("can't open serial port:", err)
//if e, ok := err.(serial.PortError); ok && e.Code() == serial.PortBusy {
for i := 3; i < 20; i = i + 2 {
logrus.Warnf("try again in -> %vms", i*i)
time.Sleep(time.Millisecond * time.Duration(i*i))
port, err = serial.Open(s.config.Collectors.SerialCollectorPort, mode)
if err == nil {
break
}
}
if err != nil {
logrus.Fatal(err)
}
//}
} }
defer port.Close() defer port.Close()
@ -102,8 +115,6 @@ func (s *serialCollector) Collect() {
}() }()
} }
func (s *serialCollector) Close() { func (s *serialCollector) Close() {
s.mu.Lock() s.mu.Lock()
s.active = false s.active = false

View File

@ -55,6 +55,7 @@ func (t *trackingService) NewSetup(cols ...CollectorType) {
if t.opMode == LIVE { if t.opMode == LIVE {
logrus.Println("trackingservice: stop currently running setup before creating new one") logrus.Println("trackingservice: stop currently running setup before creating new one")
t.StopAll() t.StopAll()
time.Sleep(20 * time.Millisecond)
} }
logrus.Debug("new tracking:", cols) logrus.Debug("new tracking:", cols)
t.opMode = LIVE t.opMode = LIVE
@ -138,7 +139,6 @@ func (t *trackingService) LoadTracking(trackingId uuid.UUID) {
} }
func (t *trackingService) safelyReplaceTracking(tr Tracking) { func (t *trackingService) safelyReplaceTracking(tr Tracking) {
m1.Lock() m1.Lock()
m2.Lock() m2.Lock()
@ -146,4 +146,3 @@ func (t *trackingService) safelyReplaceTracking(tr Tracking) {
m2.Unlock() m2.Unlock()
m1.Unlock() m1.Unlock()
} }