gyrogpsc/core/trackings.go

76 lines
1.4 KiB
Go

package core
import (
"github.com/google/uuid"
"github.com/sirupsen/logrus"
"sync"
"time"
)
type Tracking struct {
TrackingMetadata
Records []recordPair
Rawdata []rawRecord
}
var mRec sync.RWMutex
var mRaw sync.RWMutex
type TrackingMetadata struct {
UUID uuid.UUID
TimeCreated time.Time
Collectors []CollectorType
}
// persistence wrapper for sensordata
type recordPair struct {
RecordTimeKey time.Time // uniqueness ensured through mutex
DataPair map[sourceId]sensorData
}
type rawRecord struct {
RecordTimeKey time.Time // uniqueness ensured through mutex
Data sensorData
}
// END persistence wrapper for sensordata
func (s *Tracking) EnqueuePair(tcp sensorData, ser sensorData) {
rp := recordPair{
RecordTimeKey: time.Now(),
DataPair: map[sourceId]sensorData{
tcp.source: tcp,
ser.source: ser,
},
}
mRec.Lock()
s.Records = append(s.Records, rp)
logrus.Debugln("tracking Records: len->", len(s.Records))
mRec.Unlock()
}
func (s *Tracking) EnqueueRaw(data sensorData) {
sr := rawRecord{
time.Now(),
data,
}
mRec.Lock()
s.Rawdata = append(s.Rawdata, sr)
logrus.Debugln("raw data points: len->", len(s.Rawdata))
mRec.Unlock()
}
func emptyTracking() Tracking {
return Tracking{
TrackingMetadata: TrackingMetadata{
UUID: uuid.New(),
},
Records: []recordPair{},
Rawdata: []rawRecord{},
}
}
func (s *Tracking) isEmpty() bool {
return len(s.Rawdata)+len(s.Records) == 0
}