func writeRandomTimeSeriesDataToRange( t testing.TB, store *storage.Store, rangeID roachpb.RangeID, keyPrefix []byte, ) (midpoint []byte) { src := rand.New(rand.NewSource(0)) r := ts.Resolution10s for i := 0; i < 20; i++ { var data []tspb.TimeSeriesData for j := int64(0); j <= src.Int63n(5); j++ { d := tspb.TimeSeriesData{ Name: "test.random.metric", Source: "cpu01", } for k := int64(0); k <= src.Int63n(10); k++ { d.Datapoints = append(d.Datapoints, tspb.TimeSeriesDatapoint{ TimestampNanos: src.Int63n(200) * r.KeyDuration(), Value: src.Float64(), }) } data = append(data, d) } for _, d := range data { idatas, err := d.ToInternal(r.KeyDuration(), r.SampleDuration()) if err != nil { t.Fatal(err) } for _, idata := range idatas { var value roachpb.Value if err := value.SetProto(&idata); err != nil { t.Fatal(err) } mArgs := roachpb.MergeRequest{ Span: roachpb.Span{ Key: encoding.EncodeVarintAscending(keyPrefix, idata.StartTimestampNanos), }, Value: value, } if _, pErr := client.SendWrappedWith(rg1(store), nil, roachpb.Header{ RangeID: rangeID, }, &mArgs); pErr != nil { t.Fatal(pErr) } } } } // Return approximate midway point (100 is midway between random timestamps in range [0,200)). midKey := append([]byte(nil), keyPrefix...) midKey = encoding.EncodeVarintAscending(midKey, 100*r.KeyDuration()) return keys.MakeRowSentinelKey(midKey) }
func (tm *testModel) storeInModel(r Resolution, data tspb.TimeSeriesData) { // Note the source, used to construct keys for model queries. tm.seenSources[data.Source] = struct{}{} // Process and store data in the model. internalData, err := data.ToInternal(r.KeyDuration(), r.SampleDuration()) if err != nil { tm.t.Fatalf("test could not convert time series to internal format: %s", err.Error()) } for _, idata := range internalData { key := MakeDataKey(data.Name, data.Source, r, idata.StartTimestampNanos) keyStr := string(key) existing, ok := tm.modelData[keyStr] var newTs roachpb.InternalTimeSeriesData if ok { existingTs, err := existing.GetTimeseries() if err != nil { tm.t.Fatalf("test could not extract time series from existing model value: %s", err.Error()) } newTs, err = engine.MergeInternalTimeSeriesData(existingTs, idata) if err != nil { tm.t.Fatalf("test could not merge time series into model value: %s", err.Error()) } } else { newTs, err = engine.MergeInternalTimeSeriesData(idata) if err != nil { tm.t.Fatalf("test could not merge time series into model value: %s", err.Error()) } } var val roachpb.Value if err := val.SetProto(&newTs); err != nil { tm.t.Fatal(err) } tm.modelData[keyStr] = val } }