mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 02:44:59 +00:00
37 lines
801 B
Go
37 lines
801 B
Go
package idk
|
|
|
|
import "sync/atomic"
|
|
|
|
// ProgressTracker tracks the progress of record sourcing.
|
|
type ProgressTracker struct {
|
|
progress uint64
|
|
}
|
|
|
|
// proceed is called after a record is sourced.
|
|
func (t *ProgressTracker) proceed() {
|
|
atomic.AddUint64(&t.progress, 1)
|
|
}
|
|
|
|
// Check the number of records that have been sourced so far.
|
|
func (t *ProgressTracker) Check() uint64 {
|
|
return atomic.LoadUint64(&t.progress)
|
|
}
|
|
|
|
type trackedSource struct {
|
|
Source
|
|
t *ProgressTracker
|
|
}
|
|
|
|
func (ts *trackedSource) Record() (Record, error) {
|
|
r, err := ts.Source.Record()
|
|
if err == nil {
|
|
ts.t.proceed()
|
|
}
|
|
return r, err
|
|
}
|
|
|
|
// Track record generation progress on a source.
|
|
// Wraps the source with a progress-tracking mechanism.
|
|
func (t *ProgressTracker) Track(src Source) Source {
|
|
return &trackedSource{src, t}
|
|
}
|