// Reader builds a channel that will return streams for a supplied Variable. // If min/maxTimestamp are not nil, streams will only be returned if SOME values inside the stream match. // The supplied variable may be a search or a single. // The streams returned may be out of order with respect to variable names or timestamps. func (ds *Datastore) Reader(ctx context.Context, v *variable.Variable) <-chan *oproto.ValueStream { varName := v.String() openinstrument.Logf(ctx, "Creating Reader for %s between %d and %d\n", varName, v.MinTimestamp, v.MaxTimestamp) out := make(chan *oproto.ValueStream, 100) go func() { defer close(out) ds.blocksLock.RLock() defer ds.blocksLock.RUnlock() for _, block := range ds.blocks { for stream := range block.Reader(ctx, v) { out <- stream } } }() return out }
func (s *FakeReadableStore) Reader(ctx context.Context, v *variable.Variable) <-chan *oproto.ValueStream { c := make(chan *oproto.ValueStream, 100) go func() { defer close(c) switch v.String() { case "/test/offset": c <- &oproto.ValueStream{ Variable: v.AsProto(), Value: []*oproto.Value{ {Timestamp: uint64(0), DoubleValue: float64(20)}, {Timestamp: uint64(61), DoubleValue: float64(40)}, {Timestamp: uint64(122), DoubleValue: float64(60)}, {Timestamp: uint64(185), DoubleValue: float64(80)}, {Timestamp: uint64(241), DoubleValue: float64(100)}, {Timestamp: uint64(299), DoubleValue: float64(122)}, {Timestamp: uint64(330), DoubleValue: float64(132)}, {Timestamp: uint64(359), DoubleValue: float64(140)}, {Timestamp: uint64(421), DoubleValue: float64(160)}, {Timestamp: uint64(488), DoubleValue: float64(180)}, {Timestamp: uint64(540), DoubleValue: float64(200)}, {Timestamp: uint64(975), DoubleValue: float64(275)}, }, } default: c <- &oproto.ValueStream{ Variable: v.AsProto(), Value: []*oproto.Value{ {Timestamp: uint64(60 * 0), DoubleValue: float64(20 * 1)}, {Timestamp: uint64(60 * 1), DoubleValue: float64(20 * 2)}, {Timestamp: uint64(60 * 2), DoubleValue: float64(20 * 3)}, {Timestamp: uint64(60 * 3), DoubleValue: float64(20 * 4)}, {Timestamp: uint64(60 * 4), DoubleValue: float64(20 * 5)}, {Timestamp: uint64(60 * 5), DoubleValue: float64(20 * 6)}, {Timestamp: uint64(60 * 6), DoubleValue: float64(20 * 7)}, {Timestamp: uint64(60 * 7), DoubleValue: float64(20 * 8)}, {Timestamp: uint64(60 * 8), DoubleValue: float64(20 * 9)}, {Timestamp: uint64(60 * 9), DoubleValue: float64(20 * 10)}, {Timestamp: uint64(60 * 10), DoubleValue: float64(20 * 11)}, }, } } }() return c }