gyrogpsc/core/trackings.go

73 lines
1.4 KiB
Go

package core
import (
"github.com/google/uuid"
"github.com/sirupsen/logrus"
"sync"
"time"
)
type Tracking struct {
TrackingMetadata
Records []SensorPair
Rawdata []sensorData
}
var mRec sync.RWMutex
var mRaw sync.RWMutex
type TrackingMetadata struct {
UUID uuid.UUID
TimeCreated time.Time
Collectors []CollectorType
}
type SensorPair struct {
RecordTime time.Time // uniqueness ensured through mutex
Data map[sourceId]sensorData
}
//func (r *SensorPair) restoreDataPair(data []byte) error {
// err := json.Unmarshal(data, &r.Data)
// return err
//}
func (s *Tracking) AddDataPair(tcp sensorData, ser sensorData) {
rp := SensorPair{
RecordTime: time.Now().UTC(),
Data: make(map[sourceId]sensorData, 2),
}
if tcp.Source == SOURCE_TCP {
rp.Data[tcp.Source] = tcp
}
if ser.Source == SOURCE_SERIAL {
rp.Data[ser.Source] = ser
}
mRec.Lock()
s.Records = append(s.Records, rp)
logrus.Traceln("tracking Records: len->", len(s.Records))
mRec.Unlock()
}
func (s *Tracking) AddRaw(data sensorData) {
mRec.Lock()
s.Rawdata = append(s.Rawdata, data)
logrus.Traceln("raw data points: len->", len(s.Rawdata))
mRec.Unlock()
}
func emptyTracking() Tracking {
return Tracking{
TrackingMetadata: TrackingMetadata{
UUID: uuid.New(),
},
Records: []SensorPair{},
Rawdata: []sensorData{},
}
}
func (s *Tracking) isEmpty() bool {
return len(s.Rawdata)+len(s.Records) == 0
}