in pkg/telemetry/telemetry.go [247:278]
func (t *Telemetry) pushData() {
for {
quit := false
select {
case <-t.Quit:
quit = true
break
case <-t.timerChan:
}
emptyRecord := getEmptyTelemetryRecord()
recordToReport := unsafe.Pointer(emptyRecord)
recordToPushPointer := unsafe.Pointer(t.currentRecord)
// Rotation Logic:
// Swap current record to record to report.
// Record to report is set to empty record which is set to current record
t.currentRecord = (*xray.TelemetryRecord)(atomic.SwapPointer(&recordToReport,
recordToPushPointer))
currentTime := time.Now()
record := (*xray.TelemetryRecord)(recordToReport)
record.Timestamp = ¤tTime
t.add(record)
t.sendAll()
if quit {
close(t.recordChan)
log.Debug("telemetry: done!")
t.Done <- true
break
} else {
t.timerChan = getDataCutoffDelay(t.timer)
}
}
}