Esempio n. 1
0
        public void CanCreateTimeSeriesWithoutPassingName()
        {
            using (var store = GetDocumentStore())
            {
                var baseline = RavenTestHelper.UtcToday.EnsureMilliseconds();

                const string documentId = "users/ayende";

                using (var bulkInsert = store.BulkInsert())
                {
                    bulkInsert.Store(new User {
                        Name = "Oren"
                    }, documentId);

                    using (var timeSeriesBulkInsert = bulkInsert.TimeSeriesFor <StockPrice>(documentId))
                    {
                        var measure = new TimeSeriesEntry <StockPrice>
                        {
                            Timestamp = baseline,
                            Value     = new StockPrice
                            {
                                Close  = 1,
                                Open   = 2,
                                High   = 3,
                                Low    = 4,
                                Volume = 55
                            },
                            Tag = "tag"
                        };

                        timeSeriesBulkInsert.Append(measure);
                    }
                }

                using (var session = store.OpenSession())
                {
                    var val = session.TimeSeriesFor <StockPrice>(documentId)
                              .Get().Single();

                    Assert.Equal(1, val.Value.Close);
                    Assert.Equal(2, val.Value.Open);
                    Assert.Equal(3, val.Value.High);
                    Assert.Equal(4, val.Value.Low);
                    Assert.Equal(55, val.Value.Volume);

                    Assert.Equal("tag", val.Tag);
                    Assert.Equal(baseline, val.Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                }

                using (var session = store.OpenSession())
                {
                    var doc   = session.Load <User>(documentId);
                    var names = session.Advanced.GetTimeSeriesFor(doc);

                    Assert.Equal(1, names.Count);
                    Assert.Equal("StockPrices", names[0]);
                }
            }
        }
        public static TimeSeriesEntry ToTimeSeries(this JProperty token)
        {
            var date  = Formats.ParseDateTime(token.Name);
            var entry = new TimeSeriesEntry
            {
                Timestamp = date,
                Open      = token.First.Value <double>("1. open"),
                High      = token.First.Value <double>("2. high"),
                Low       = token.First.Value <double>("3. low"),
                Close     = token.First.Value <double>("4. close"),
                Volume    = token.First.Value <long>("5. volume")
            };

            return(entry);
        }
Esempio n. 3
0
        public void CanCreateSimpleTimeSeries2()
        {
            using (var store = GetDocumentStore())
            {
                var          baseline   = RavenTestHelper.UtcToday;
                const string documentId = "users/ayende";

                using (var bulkInsert = store.BulkInsert())
                {
                    bulkInsert.Store(new { Name = "Oren" }, documentId);

                    var measure = new TimeSeriesEntry <HeartRateMeasure>
                    {
                        Timestamp = baseline.AddMinutes(1),
                        Value     = new HeartRateMeasure
                        {
                            HeartRate = 59d
                        },
                        Tag = "watches/fitbit"
                    };

                    using (var timeSeriesBulkInsert = bulkInsert.TimeSeriesFor <HeartRateMeasure>(documentId, "Heartrate"))
                    {
                        timeSeriesBulkInsert.Append(baseline.AddMinutes(1), new HeartRateMeasure {
                            HeartRate = 59
                        }, "watches/fitbit");
                        timeSeriesBulkInsert.Append(baseline.AddMinutes(2), new HeartRateMeasure {
                            HeartRate = 60
                        }, "watches/fitbit");
                        timeSeriesBulkInsert.Append(baseline.AddMinutes(2), new HeartRateMeasure {
                            HeartRate = 61
                        }, "watches/fitbit");
                    }
                }

                using (var session = store.OpenSession())
                {
                    var val = session.TimeSeriesFor <HeartRateMeasure>(documentId, "Heartrate")
                              .Get(DateTime.MinValue, DateTime.MaxValue)
                              .ToList();
                    Assert.Equal(2, val.Count);
                }
            }
        }
Esempio n. 4
0
        public void CanCreateSimpleTimeSeries()
        {
            using (var store = GetDocumentStore())
            {
                var baseline = RavenTestHelper.UtcToday.EnsureMilliseconds();

                const string documentId = "users/ayende";

                using (var bulkInsert = store.BulkInsert())
                {
                    bulkInsert.Store(new { Name = "Oren" }, documentId);

                    using (var timeSeriesBulkInsert = bulkInsert.TimeSeriesFor <HeartRateMeasure>(documentId, "Heartrate"))
                    {
                        var measure = new TimeSeriesEntry <HeartRateMeasure>
                        {
                            Timestamp = baseline,
                            Value     = new HeartRateMeasure
                            {
                                HeartRate = 59
                            },
                            Tag = "watches/fitbit"
                        };

                        timeSeriesBulkInsert.Append(measure);
                    }
                }

                using (var session = store.OpenSession())
                {
                    var val = session.TimeSeriesFor <HeartRateMeasure>(documentId, "Heartrate")
                              .Get().Single();

                    Assert.Equal(59d, val.Value.HeartRate);
                    Assert.Equal("watches/fitbit", val.Tag);
                    Assert.Equal(baseline, val.Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                }
            }
        }
        public async Task CanCreateSimpleTimeSeriesAsync()
        {
            using (var store = GetDocumentStore())
            {
                var baseline = RavenTestHelper.UtcToday;

                using (var session = store.OpenAsyncSession())
                {
                    await session.StoreAsync(new { Name = "Oren" }, "users/ayende");

                    var measure = new TimeSeriesEntry <HeartRateMeasure>
                    {
                        Timestamp = baseline.AddMinutes(1),
                        Value     = new HeartRateMeasure
                        {
                            HeartRate = 59d
                        },
                        Tag = "watches/fitbit"
                    };
                    var ts = session.TimeSeriesFor <HeartRateMeasure>("users/ayende");
                    ts.Append(measure);

                    await session.SaveChangesAsync();
                }

                using (var session = store.OpenAsyncSession())
                {
                    var result = await session.TimeSeriesFor <HeartRateMeasure>("users/ayende").GetAsync();

                    var val = result.Single();

                    Assert.Equal(59d, val.Value.HeartRate);
                    Assert.Equal("watches/fitbit", val.Tag);
                    Assert.Equal(baseline.AddMinutes(1), val.Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                }
            }
        }
        internal async Task <TimeSeriesEntry <TEntry>[]> GetTypedFromCache <TEntry>(DateTime?from, DateTime?to, Action <ITimeSeriesIncludeBuilder> includes, int start,
                                                                                    int pageSize, CancellationToken token = default) where TEntry : new()
        {
            // RavenDB-16060
            // Typed TimeSeries results need special handling when served from cache
            // since we cache the results untyped

            var resultToUser =
                await ServeFromCache(from ?? DateTime.MinValue, to ?? DateTime.MaxValue, start, pageSize, includes, token)
                .ConfigureAwait(false);

            var asList = resultToUser.ToList();

            if (asList.Count == 0)
            {
                return(Array.Empty <TimeSeriesEntry <TEntry> >());
            }

            var result = new TimeSeriesEntry <TEntry> [asList.Count];

            for (var index = 0; index < asList.Count; index++)
            {
                var timeSeriesEntry = new TimeSeriesEntry <TEntry>();

                var item = asList[index];

                timeSeriesEntry.IsRollup  = item.IsRollup;
                timeSeriesEntry.Timestamp = item.Timestamp;
                timeSeriesEntry.Tag       = item.Tag;
                timeSeriesEntry.Value     = TimeSeriesValuesHelper.SetMembers <TEntry>(item.Values, item.IsRollup);
                timeSeriesEntry.Values    = item.Values;

                result[index] = timeSeriesEntry;
            }

            return(result);
        }
 public void Append(TimeSeriesEntry <TValues> entry)
 {
     _asyncSessionTimeSeries.Append(entry.Timestamp, entry.Value, entry.Tag);
 }
Esempio n. 8
0
        public void CanStoreAndReadMultipleTimeseriesForDifferentDocuments()
        {
            using (var store = GetDocumentStore())
            {
                var          baseline    = RavenTestHelper.UtcToday;
                const string documentId1 = "users/ayende";
                const string documentId2 = "users/grisha";

                using (var bulkInsert = store.BulkInsert())
                {
                    bulkInsert.Store(new { Name = "Oren" }, documentId1);
                    using (var timeSeriesBulkInsert = bulkInsert.TimeSeriesFor <HeartRateMeasure>(documentId1, "Heartrate"))
                    {
                        timeSeriesBulkInsert.Append(baseline.AddMinutes(1), new HeartRateMeasure {
                            HeartRate = 59
                        }, "watches/fitbit");
                    }

                    bulkInsert.Store(new { Name = "Grisha" }, documentId2);
                    using (var timeSeriesBulkInsert = bulkInsert.TimeSeriesFor <HeartRateMeasure>(documentId2, "Heartrate"))
                    {
                        timeSeriesBulkInsert.Append(baseline.AddMinutes(1), new HeartRateMeasure {
                            HeartRate = 59
                        }, "watches/fitbit");
                    }
                }

                using (var bulkInsert = store.BulkInsert())
                {
                    using (var timeSeriesBulkInsert = bulkInsert.TimeSeriesFor <HeartRateMeasure>(documentId1, "Heartrate"))
                    {
                        var messure = new TimeSeriesEntry <HeartRateMeasure>
                        {
                            Timestamp = baseline.AddMinutes(2),
                            Tag       = "watches/fitbit",
                            Value     = new HeartRateMeasure
                            {
                                HeartRate = 61
                            }
                        };

                        timeSeriesBulkInsert.Append(messure);
                    }

                    using (var timeSeriesBulkInsert = bulkInsert.TimeSeriesFor <HeartRateMeasure>(documentId2, "Heartrate"))
                    {
                        var measure = new TimeSeriesEntry <HeartRateMeasure>
                        {
                            Timestamp = baseline.AddMinutes(2),
                            Tag       = "watches/fitbit",
                            Value     = new HeartRateMeasure
                            {
                                HeartRate = 61
                            }
                        };

                        timeSeriesBulkInsert.Append(measure);
                    }

                    using (var timeSeriesBulkInsert = bulkInsert.TimeSeriesFor <HeartRateMeasure>(documentId1, "Heartrate"))
                    {
                        var measure = new TimeSeriesEntry <HeartRateMeasure>
                        {
                            Timestamp = baseline.AddMinutes(3),
                            Tag       = "watches/apple-watch",
                            Value     = new HeartRateMeasure
                            {
                                HeartRate = 62
                            }
                        };

                        timeSeriesBulkInsert.Append(measure);
                    }

                    using (var timeSeriesBulkInsert = bulkInsert.TimeSeriesFor <HeartRateMeasure>(documentId2, "Heartrate"))
                    {
                        var measure = new TimeSeriesEntry <HeartRateMeasure>
                        {
                            Timestamp = baseline.AddMinutes(3),
                            Tag       = "watches/apple-watch",
                            Value     = new HeartRateMeasure
                            {
                                HeartRate = 62
                            }
                        };

                        timeSeriesBulkInsert.Append(measure);
                    }
                }

                using (var session = store.OpenSession())
                {
                    var vals = session.TimeSeriesFor <HeartRateMeasure>(documentId1, "Heartrate")
                               .Get(DateTime.MinValue, DateTime.MaxValue)
                               .ToList();
                    ValidateValues();

                    vals = session.TimeSeriesFor <HeartRateMeasure>(documentId2, "Heartrate")
                           .Get(DateTime.MinValue, DateTime.MaxValue)
                           .ToList();
                    ValidateValues();

                    void ValidateValues()
                    {
                        Assert.Equal(3, vals.Count);

                        Assert.Equal(59, vals[0].Value.HeartRate);
                        Assert.Equal("watches/fitbit", vals[0].Tag);
                        Assert.Equal(baseline.AddMinutes(1), vals[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                        Assert.Equal(61, vals[1].Value.HeartRate);
                        Assert.Equal("watches/fitbit", vals[1].Tag);
                        Assert.Equal(baseline.AddMinutes(2), vals[1].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                        Assert.Equal(62, vals[2].Value.HeartRate);
                        Assert.Equal("watches/apple-watch", vals[2].Tag);
                        Assert.Equal(baseline.AddMinutes(3), vals[2].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                    }
                }
            }
        }
 public void Append(TimeSeriesEntry <TValues> entry)
 {
     Append(entry.Timestamp, entry.Value, entry.Tag);
 }
Esempio n. 10
0
 void ISessionDocumentTypedAppendTimeSeriesBase <TValues> .Append(TimeSeriesEntry <TValues> entry)
 {
     _asyncSessionTimeSeries.Append(entry.Timestamp, entry.Value, entry.Tag);
 }
Esempio n. 11
0
 public Task AppendAsync(TimeSeriesEntry <TValues> entry)
 {
     return(AppendAsync(entry.Timestamp, entry.Value, entry.Tag));
 }
Esempio n. 12
0
 public void Append(TimeSeriesEntry <TValues> entry)
 {
     AsyncHelpers.RunSync(() => AppendAsync(entry));
 }