73 lines
1.4 KiB
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
|
|
}
|