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 }