fix(gateway): preserve paced qualification traffic
Verify Data Plane / gateway (push) Successful in 2m8s
Verify Data Plane / gateway (push) Successful in 2m8s
This commit is contained in:
@@ -76,6 +76,11 @@ type qualificationProcessRecordResult struct {
|
||||
RecordingElapsed time.Duration
|
||||
}
|
||||
|
||||
type qualificationProcessTimingSample struct {
|
||||
elapsed time.Duration
|
||||
observation mediaTimingObservation
|
||||
}
|
||||
|
||||
type qualificationProcessRecorder struct {
|
||||
mu sync.Mutex
|
||||
active bool
|
||||
@@ -89,6 +94,8 @@ type qualificationProcessRecorder struct {
|
||||
recordErr error
|
||||
tickerStop chan struct{}
|
||||
tickerDone chan struct{}
|
||||
timingSamples chan qualificationProcessTimingSample
|
||||
timingDone chan struct{}
|
||||
clock time.Duration
|
||||
}
|
||||
|
||||
@@ -135,6 +142,9 @@ func (r *qualificationProcessRecorder) start(request qualificationProcessRecordR
|
||||
r.clock = clock
|
||||
r.tickerStop = make(chan struct{})
|
||||
r.tickerDone = make(chan struct{})
|
||||
r.timingSamples = make(chan qualificationProcessTimingSample, 4096)
|
||||
r.timingDone = make(chan struct{})
|
||||
go r.writeTimings()
|
||||
go r.sampleResources()
|
||||
return nil
|
||||
}
|
||||
@@ -142,13 +152,24 @@ func (r *qualificationProcessRecorder) start(request qualificationProcessRecordR
|
||||
func (r *qualificationProcessRecorder) observe(observation mediaTimingObservation) {
|
||||
r.mu.Lock()
|
||||
defer r.mu.Unlock()
|
||||
if !r.active || r.recordErr != nil {
|
||||
if !r.active {
|
||||
return
|
||||
}
|
||||
_, r.recordErr = fmt.Fprintf(r.rawBuffered, "%d,%d,%d,%d\n",
|
||||
time.Since(r.started).Nanoseconds(), observation.QueueDelay.Nanoseconds(),
|
||||
observation.ProcessingDelay.Nanoseconds(), observation.PacingDelay.Nanoseconds())
|
||||
r.samples++
|
||||
r.timingSamples <- qualificationProcessTimingSample{
|
||||
elapsed: time.Since(r.started), observation: observation,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *qualificationProcessRecorder) writeTimings() {
|
||||
defer close(r.timingDone)
|
||||
for sample := range r.timingSamples {
|
||||
if r.recordErr == nil {
|
||||
_, r.recordErr = fmt.Fprintf(r.rawBuffered, "%d,%d,%d,%d\n",
|
||||
sample.elapsed.Nanoseconds(), sample.observation.QueueDelay.Nanoseconds(),
|
||||
sample.observation.ProcessingDelay.Nanoseconds(), sample.observation.PacingDelay.Nanoseconds())
|
||||
}
|
||||
r.samples++
|
||||
}
|
||||
}
|
||||
|
||||
func (r *qualificationProcessRecorder) sampleResources() {
|
||||
@@ -177,9 +198,12 @@ func (r *qualificationProcessRecorder) stop() (qualificationProcessRecordResult,
|
||||
}
|
||||
r.active = false
|
||||
stop, done := r.tickerStop, r.tickerDone
|
||||
timings, timingDone := r.timingSamples, r.timingDone
|
||||
close(timings)
|
||||
r.mu.Unlock()
|
||||
close(stop)
|
||||
<-done
|
||||
<-timingDone
|
||||
|
||||
r.mu.Lock()
|
||||
r.resources = append(r.resources, qualificationRuntimeSample(r.started))
|
||||
|
||||
Reference in New Issue
Block a user