Exemplo n.º 1
0
        public void CanGetAll_WithPaging()
        {
            const string documentId = "users/ayende";

            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = RavenTestHelper.UtcToday;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                for (int i = 0; i <= 360; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Tag       = "watches/fitbit",
                        Timestamp = baseline.AddSeconds(i * 10),
                        Values    = new[] { 59d }
                    });
                }

                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var re = store.GetRequestExecutor();
                using (re.ContextPool.AllocateOperationContext(out var context))
                {
                    var tsCommand = new GetMultipleTimeSeriesOperation.GetMultipleTimeSeriesCommand(documentId, new List <TimeSeriesRange>
                    {
                        new TimeSeriesRange
                        {
                            Name = "Heartrate",
                            From = DateTime.MinValue,
                            To   = DateTime.MaxValue
                        }
                    }, start: 100, pageSize: 200);
                    re.Execute(tsCommand, context);
                    var res = tsCommand.Result;

                    Assert.Equal(1, res.Values.Count);
                    Assert.Equal(1, res.Values["Heartrate"].Count);
                    Assert.Equal(200, res.Values["Heartrate"][0].Entries.Length);

                    Assert.Equal(baseline.AddSeconds(100 * 10), res.Values["Heartrate"][0].Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                    Assert.Equal(baseline.AddSeconds(299 * 10), res.Values["Heartrate"][0].Entries[199].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                }
            }
        }
Exemplo n.º 2
0
        public void CanParseUnixTimeFormat()
        {
            using (var ctx = new JsonOperationContext(4096, 4096, 32, SharedMultipleUseFlag.None))
            {
                var djv = new DynamicJsonValue
                {
                    ["Name"]       = "CanParseUnixTimeFormat",
                    ["TimeFormat"] = TimeSeriesOperation.TimeFormat.UnixTimeInMs,
                    ["Appends"]    = new DynamicJsonArray
                    {
                        new DynamicJsonArray
                        {
                            1588464000021
                            , 3, 1, 2, 3,
                            "SomeTag"
                        }
                    }
                };
                var input = ctx.ReadObject(djv, "CanParseUnixTimeFormat");
                var op    = TimeSeriesOperation.ParseForBulkInsert(input);
                Assert.Equal("CanParseUnixTimeFormat", op.Name);
                Assert.Equal("SomeTag", op.Appends[0].Tag);
                Assert.Equal(new double[] { 1, 2, 3 }, op.Appends[0].Values);
                Assert.Equal(new DateTime(2020, 5, 3, 0, 0, 0, 21), op.Appends[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);


                djv = new DynamicJsonValue
                {
                    ["Name"]       = "CanParseUnixTimeFormat",
                    ["TimeFormat"] = TimeSeriesOperation.TimeFormat.UnixTimeInNs,
                    ["Appends"]    = new DynamicJsonArray
                    {
                        new DynamicJsonArray
                        {
                            1257894000000000000
                            , 3, 3, 2, 1,
                            "SomeTag2"
                        }
                    }
                };
                input = ctx.ReadObject(djv, "CanParseUnixTimeFormat");
                op    = TimeSeriesOperation.ParseForBulkInsert(input);
                Assert.Equal("CanParseUnixTimeFormat", op.Name);
                Assert.Equal("SomeTag2", op.Appends[0].Tag);
                Assert.Equal(new double[] { 3, 2, 1 }, op.Appends[0].Values);
                Assert.Equal(new DateTime(2009, 11, 10, 23, 0, 0), op.Appends[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
            }
        }
Exemplo n.º 3
0
        public void GetMultipleTimeSeriesShouldThrowOnMissingNameFromRange()
        {
            using (var store = GetDocumentStore())
            {
                var documentId = "users/ayende";

                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                for (int i = 0; i <= 10; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Tag       = "watches/fitbit",
                        Timestamp = baseline.AddMinutes(i * 10),
                        Values    = new[] { 72d }
                    });
                }

                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var ex = Assert.Throws <InvalidOperationException>(() => store.Operations.Send(
                                                                       new GetMultipleTimeSeriesOperation("users/ayende", new List <TimeSeriesRange>
                {
                    new TimeSeriesRange
                    {
                        From = baseline,
                        To   = DateTime.MaxValue
                    }
                })));

                Assert.Contains("'Name' cannot be null or empty", ex.Message);
            }
        }
Exemplo n.º 4
0
        public void ShouldThrowOnNullOrEmptyRanges()
        {
            using (var store = GetDocumentStore())
            {
                var documentId = "users/ayende";
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = RavenTestHelper.UtcToday;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                for (int i = 0; i <= 10; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Tag       = "watches/fitbit",
                        Timestamp = baseline.AddMinutes(i * 10),
                        Values    = new[] { 72d }
                    });
                }

                var timeSeriesBatch = new TimeSeriesBatchOperation("users/ayende", timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);
                var ex = Assert.Throws <ArgumentNullException>(() => store.Operations.Send(
                                                                   new GetMultipleTimeSeriesOperation("users/ayende", null)));

                Assert.Contains("Value cannot be null. (Parameter 'ranges')", ex.Message);

                var ex2 = Assert.Throws <InvalidOperationException>(() => store.Operations.Send(
                                                                        new GetMultipleTimeSeriesOperation("users/ayende", new List <TimeSeriesRange>())));

                Assert.Contains("'ranges' cannot be null or empty", ex2.Message);
            }
        }
Exemplo n.º 5
0
        protected TimeSeriesCommandData(string documentId, string name)
        {
            if (string.IsNullOrWhiteSpace(documentId))
            {
                throw new ArgumentNullException(nameof(documentId));
            }

            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            Id   = documentId;
            Name = name;

            TimeSeries = new TimeSeriesOperation
            {
                Name = name
            };
        }
Exemplo n.º 6
0
        public void ShouldThrowOnAttemptToCreateTimeSeriesOnMissingDocument()
        {
            using (var store = GetDocumentStore())
            {
                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };
                timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation {
                    Tag = "watches/fitbit", Timestamp = baseline.AddSeconds(1), Values = new[] { 59d }
                });

                var timeSeriesBatch = new TimeSeriesBatchOperation("users/ayende", timeSeriesOp);

                var ex = Assert.Throws <DocumentDoesNotExistException>(() => store.Operations.Send(timeSeriesBatch));

                Assert.Contains("Cannot operate on time series of a missing document", ex.Message);
            }
        }
Exemplo n.º 7
0
        public void GetTimeSeriesShouldThrowOnMissingName()
        {
            using (var store = GetDocumentStore())
            {
                var documentId = "users/ayende";

                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = RavenTestHelper.UtcToday;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                for (int i = 0; i <= 10; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Tag       = "watches/fitbit",
                        Timestamp = baseline.AddMinutes(i * 10),
                        Values    = new[] { 72d }
                    });
                }

                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var ex = Assert.Throws <ArgumentNullException>(() => store.Operations.Send(
                                                                   new GetTimeSeriesOperation("users/ayende", string.Empty, baseline, DateTime.MaxValue)));

                Assert.Contains("Value cannot be null", ex.Message);
            }
        }
Exemplo n.º 8
0
        public async Task IncomingReplicationShouldRejectIncrementalTimeSeriesFromOldServer()
        {
            const string version           = "5.2.3";
            const string incrementalTsName = Constants.Headers.IncrementalTimeSeriesPrefix + "HeartRate";
            const string docId             = "users/1";

            using (var oldStore = await GetDocumentStoreAsync(version))
                using (var store = GetDocumentStore())
                {
                    using (var session = oldStore.OpenAsyncSession())
                    {
                        await session.StoreAsync(new User(), docId);

                        await session.SaveChangesAsync();
                    }

                    var tsOp = new TimeSeriesOperation
                    {
                        Name = incrementalTsName
                    };

                    tsOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Timestamp = DateTime.UtcNow,
                        Values    = new[] { 1d }
                    });

                    await oldStore.Operations.SendAsync(new TimeSeriesBatchOperation(docId, tsOp));

                    await ReplicationTests.SetupReplication(oldStore, store);

                    Assert.False(WaitForDocument(store, docId, timeout: 3000));

                    var notificationCenter = (await Databases.GetDocumentDatabaseInstanceFor(store)).NotificationCenter;
                    var msg = notificationCenter.GetStoredMessage("AlertRaised/Replication");
                    Assert.NotNull(msg);
                    Assert.Contains($"Detected an item of type Incremental-TimeSeries : '{incrementalTsName}' on document '{docId}", msg);
                }
        }
Exemplo n.º 9
0
        public void CanCreateAndGetSimpleTimeSeriesUsingStoreOperations()
        {
            const string documentId = "users/ayende";

            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };
                timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation {
                    Tag = "watches/fitbit", Timestamp = baseline.AddSeconds(1), Values = new[] { 59d }
                });
                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var timeSeriesRangeResult = store.Operations.Send(
                    new GetTimeSeriesOperation(documentId, "Heartrate", DateTime.MinValue, DateTime.MaxValue));

                Assert.Equal(1, timeSeriesRangeResult.Entries.Length);

                var value = timeSeriesRangeResult.Entries[0];

                Assert.Equal(59d, value.Values[0]);
                Assert.Equal("watches/fitbit", value.Tag);
                Assert.Equal(baseline.AddSeconds(1), value.Timestamp, RavenTestHelper.DateTimeComparer.Instance);
            }
        }
Exemplo n.º 10
0
        public TimeSeriesBatchCommandData(string documentId, string name, IList <TimeSeriesOperation.AppendOperation> appends, List <TimeSeriesOperation.DeleteOperation> deletes)
        {
            if (string.IsNullOrWhiteSpace(documentId))
            {
                throw new ArgumentNullException(nameof(documentId));
            }

            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            Id   = documentId;
            Name = name;

            TimeSeries = new TimeSeriesOperation
            {
                Name = name,
            };

            if (appends != null)
            {
                foreach (var appendOperation in appends)
                {
                    TimeSeries.Append(appendOperation);
                }
            }

            if (deletes != null)
            {
                foreach (var deleteOperation in deletes)
                {
                    TimeSeries.Delete(deleteOperation);
                }
            }
        }
Exemplo n.º 11
0
        public void CanGetNonExistedRange()
        {
            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), "users/ayende");
                    session.SaveChanges();
                }

                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };
                timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation {
                    Tag = "watches/fitbit", Timestamp = baseline.AddSeconds(1), Values = new[] { 59d }
                });

                var timeSeriesBatch = new TimeSeriesBatchOperation("users/ayende", timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var timeSeriesRangeResult = store.Operations.Send(
                    new GetTimeSeriesOperation("users/ayende", "Heartrate", baseline.AddMonths(-2), baseline.AddMonths(-1)));

                Assert.Empty(timeSeriesRangeResult.Entries);

                using (var session = store.OpenSession())
                {
                    var query = session.Query <User>().Select(u => RavenQuery.TimeSeries(u, "Heartrate", baseline.AddMonths(-2), baseline.AddMonths(-1)).ToList()).ToList();
                    Assert.Equal(0, query[0].Results.Length);
                }
            }
        }
Exemplo n.º 12
0
        public void CanGetMultipleRangesInSingleRequest()
        {
            const string documentId = "users/ayende";

            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                for (int i = 0; i <= 360; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Tag       = "watches/fitbit",
                        Timestamp = baseline.AddSeconds(i * 10),
                        Values    = new[] { 59d }
                    });
                }

                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var timesSeriesDetails = store.Operations.Send(
                    new GetMultipleTimeSeriesOperation(documentId, new List <TimeSeriesRange>
                {
                    new TimeSeriesRange
                    {
                        Name = "Heartrate",
                        From = baseline.AddMinutes(5),
                        To   = baseline.AddMinutes(10)
                    },

                    new TimeSeriesRange
                    {
                        Name = "Heartrate",
                        From = baseline.AddMinutes(15),
                        To   = baseline.AddMinutes(30)
                    },

                    new TimeSeriesRange
                    {
                        Name = "Heartrate",
                        From = baseline.AddMinutes(40),
                        To   = baseline.AddMinutes(60)
                    }
                }));

                Assert.Equal(documentId, timesSeriesDetails.Id);
                Assert.Equal(1, timesSeriesDetails.Values.Count);
                Assert.Equal(3, timesSeriesDetails.Values["Heartrate"].Count);

                var range = timesSeriesDetails.Values["Heartrate"][0];

                Assert.Equal(baseline.AddMinutes(5), range.From, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(10), range.To, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Equal(31, range.Entries.Length);
                Assert.Equal(baseline.AddMinutes(5), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(10), range.Entries[30].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                range = timesSeriesDetails.Values["Heartrate"][1];

                Assert.Equal(baseline.AddMinutes(15), range.From, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(30), range.To, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Equal(91, range.Entries.Length);
                Assert.Equal(baseline.AddMinutes(15), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(30), range.Entries[90].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                range = timesSeriesDetails.Values["Heartrate"][2];

                Assert.Equal(baseline.AddMinutes(40), range.From, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(60), range.To, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Equal(121, range.Entries.Length);
                Assert.Equal(baseline.AddMinutes(40), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(60), range.Entries[120].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
            }
        }
Exemplo n.º 13
0
        public void RavenDB_14877()
        {
            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), "users/1-A");
                    session.SaveChanges();
                }

                var op = new TimeSeriesOperation.AppendOperation
                {
                    Timestamp = DateTime.Now,
                    Tag       = "as",
                    Values    = new double[] { 73 }
                };
                var op2 = new TimeSeriesOperation.AppendOperation
                {
                    Timestamp = DateTime.Now,
                    Tag       = "as",
                    Values    = new double[] { 78 }
                };
                var op3 = new TimeSeriesOperation.AppendOperation
                {
                    Timestamp = new DateTime(2019, 4, 23) + TimeSpan.FromMinutes(5),
                    Tag       = "as",
                    Values    = new double[] { 798 }
                };

                var a = new TimeSeriesOperation
                {
                    Name = "test",
                };
                a.Append(op3);
                a.Append(op2);
                a.Append(op);
                store.Operations.Send(new TimeSeriesBatchOperation("users/1-A", a));

                var opDelete = new TimeSeriesOperation.DeleteOperation
                {
                    From = DateTime.Now - TimeSpan.FromDays(2),
                    To   = DateTime.Now + TimeSpan.FromDays(2)
                };

                var ab = new TimeSeriesOperation
                {
                    Name = "test",
                };
                ab.Delete(opDelete);
                store.Operations.Send(new TimeSeriesBatchOperation("users/1-A", ab));

                var abc = new TimeSeriesOperation
                {
                    Name = "test",
                };
                abc.Delete(new TimeSeriesOperation.DeleteOperation {
                    From = DateTime.MinValue, To = DateTime.MaxValue
                });
                store.Operations.Send(new TimeSeriesBatchOperation("users/1-A", abc));
                var ts = store.Operations.Send(new GetTimeSeriesOperation("users/1-A", "test", DateTime.MinValue, DateTime.MaxValue));

                // GetTimeSeriesOperation should return null on non-existing timeseries
                Assert.Null(ts);
            }
        }
Exemplo n.º 14
0
        public void GetRangesShouldReturnNotModifiedCode_WithPaging()
        {
            const string documentId = "users/ayende";

            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                for (int i = 0; i <= 360; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Tag       = "watches/fitbit",
                        Timestamp = baseline.AddSeconds(i * 10),
                        Values    = new[] { 59d }
                    });
                }

                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var re = store.GetRequestExecutor();
                using (re.ContextPool.AllocateOperationContext(out var context))
                {
                    var ranges = new List <TimeSeriesRange>
                    {
                        new TimeSeriesRange
                        {
                            Name = "Heartrate", From = baseline.AddMinutes(5), To = baseline.AddMinutes(10)
                        },
                        new TimeSeriesRange
                        {
                            Name = "Heartrate", From = baseline.AddMinutes(15), To = baseline.AddMinutes(30)
                        },
                        new TimeSeriesRange
                        {
                            Name = "Heartrate", From = baseline.AddMinutes(40), To = baseline.AddMinutes(60)
                        }
                    };

                    GetMultipleTimeSeriesOperation.GetMultipleTimeSeriesCommand tsCommand;

                    for (int i = 0; i < 3; i++)
                    {
                        tsCommand = new GetMultipleTimeSeriesOperation.GetMultipleTimeSeriesCommand(documentId, ranges, 10, 150);
                        re.Execute(tsCommand, context);
                        var timesSeriesDetails = tsCommand.Result;

                        if (i == 0)
                        {
                            Assert.Equal(HttpStatusCode.OK, tsCommand.StatusCode);
                        }
                        else
                        {
                            Assert.Equal(HttpStatusCode.NotModified, tsCommand.StatusCode);
                        }

                        Assert.Equal(documentId, timesSeriesDetails.Id);
                        Assert.Equal(1, timesSeriesDetails.Values.Count);
                        Assert.Equal(3, timesSeriesDetails.Values["Heartrate"].Count);

                        var range = timesSeriesDetails.Values["Heartrate"][0];

                        Assert.Equal(baseline.AddMinutes(6).AddSeconds(40), range.From, RavenTestHelper.DateTimeComparer.Instance);
                        Assert.Equal(baseline.AddMinutes(10), range.To, RavenTestHelper.DateTimeComparer.Instance);

                        Assert.Equal(21, range.Entries.Length);
                        Assert.Equal(baseline.AddMinutes(6).AddSeconds(40), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                        Assert.Equal(baseline.AddMinutes(10), range.Entries[20].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                        range = timesSeriesDetails.Values["Heartrate"][1];

                        Assert.Equal(baseline.AddMinutes(15), range.From, RavenTestHelper.DateTimeComparer.Instance);
                        Assert.Equal(baseline.AddMinutes(30), range.To, RavenTestHelper.DateTimeComparer.Instance);

                        Assert.Equal(91, range.Entries.Length);
                        Assert.Equal(baseline.AddMinutes(15), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                        Assert.Equal(baseline.AddMinutes(30), range.Entries[90].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                        range = timesSeriesDetails.Values["Heartrate"][2];

                        Assert.Equal(baseline.AddMinutes(40), range.From, RavenTestHelper.DateTimeComparer.Instance);
                        Assert.Equal(baseline.AddMinutes(46).AddSeconds(10), range.To, RavenTestHelper.DateTimeComparer.Instance);

                        Assert.Equal(38, range.Entries.Length);
                        Assert.Equal(baseline.AddMinutes(40), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                        Assert.Equal(baseline.AddMinutes(46).AddSeconds(10), range.Entries[37].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                    }

                    using (var session = store.OpenSession())
                    {
                        // add a new entry to the series
                        session.TimeSeriesFor(documentId, "Heartrate").Append(baseline.AddMinutes(15).AddMilliseconds(50), new[] { 1000d }, "watches/apple");
                        session.SaveChanges();
                    }

                    // verify that we don't get cached results

                    tsCommand = new GetMultipleTimeSeriesOperation.GetMultipleTimeSeriesCommand(documentId, ranges, 10, 150);
                    re.Execute(tsCommand, context);

                    Assert.Equal(HttpStatusCode.OK, tsCommand.StatusCode);

                    var newEntry = tsCommand.Result.Values["Heartrate"][1].Entries
                                   .FirstOrDefault(e => e.Value == 1000d && e.Timestamp == baseline.AddMinutes(15).AddMilliseconds(50).ToUniversalTime());

                    Assert.NotNull(newEntry);

                    // request with a different 'start'
                    // verify that we don't get cached results

                    tsCommand = new GetMultipleTimeSeriesOperation.GetMultipleTimeSeriesCommand(documentId, new List <TimeSeriesRange>
                    {
                        new TimeSeriesRange()
                        {
                            Name = "Heartrate",
                            From = DateTime.MinValue,
                            To   = DateTime.MaxValue
                        }
                    }, start: 12, pageSize: 150);
                    re.Execute(tsCommand, context);

                    Assert.Equal(HttpStatusCode.OK, tsCommand.StatusCode);

                    Assert.Equal(baseline.AddSeconds(12 * 10), tsCommand.Result.Values["Heartrate"][0].Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                }
            }
        }
Exemplo n.º 15
0
        public void CanGetRanges_WithPaging()
        {
            const string documentId = "users/ayende";

            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                for (int i = 0; i <= 360; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Tag       = "watches/fitbit",
                        Timestamp = baseline.AddSeconds(i * 10),
                        Values    = new[] { 59d }
                    });
                }

                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var re = store.GetRequestExecutor();
                using (re.ContextPool.AllocateOperationContext(out var context))
                {
                    var ranges = new List <TimeSeriesRange>
                    {
                        new TimeSeriesRange
                        {
                            Name = "Heartrate", From = baseline.AddMinutes(5), To = baseline.AddMinutes(10)
                        },
                        new TimeSeriesRange
                        {
                            Name = "Heartrate", From = baseline.AddMinutes(15), To = baseline.AddMinutes(30)
                        },
                        new TimeSeriesRange
                        {
                            Name = "Heartrate", From = baseline.AddMinutes(40), To = baseline.AddMinutes(60)
                        }
                    };

                    var tsCommand = new GetMultipleTimeSeriesOperation.GetMultipleTimeSeriesCommand(documentId, ranges, 10, 150);
                    re.Execute(tsCommand, context);
                    var timesSeriesDetails = tsCommand.Result;

                    Assert.Equal(documentId, timesSeriesDetails.Id);
                    Assert.Equal(1, timesSeriesDetails.Values.Count);
                    Assert.Equal(3, timesSeriesDetails.Values["Heartrate"].Count);

                    Assert.Null(timesSeriesDetails.Values["Heartrate"][0].TotalResults);

                    var range = timesSeriesDetails.Values["Heartrate"][0];

                    Assert.Equal(baseline.AddMinutes(6).AddSeconds(40), range.From, RavenTestHelper.DateTimeComparer.Instance);
                    Assert.Equal(baseline.AddMinutes(10), range.To, RavenTestHelper.DateTimeComparer.Instance);

                    Assert.Equal(21, range.Entries.Length);
                    Assert.Equal(baseline.AddMinutes(6).AddSeconds(40), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                    Assert.Equal(baseline.AddMinutes(10), range.Entries[20].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                    range = timesSeriesDetails.Values["Heartrate"][1];

                    Assert.Equal(baseline.AddMinutes(15), range.From, RavenTestHelper.DateTimeComparer.Instance);
                    Assert.Equal(baseline.AddMinutes(30), range.To, RavenTestHelper.DateTimeComparer.Instance);

                    Assert.Equal(91, range.Entries.Length);
                    Assert.Equal(baseline.AddMinutes(15), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                    Assert.Equal(baseline.AddMinutes(30), range.Entries[90].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                    range = timesSeriesDetails.Values["Heartrate"][2];

                    Assert.Equal(baseline.AddMinutes(40), range.From, RavenTestHelper.DateTimeComparer.Instance);
                    Assert.Equal(baseline.AddMinutes(46).AddSeconds(10), range.To, RavenTestHelper.DateTimeComparer.Instance);

                    Assert.Equal(38, range.Entries.Length);
                    Assert.Equal(baseline.AddMinutes(40), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                    Assert.Equal(baseline.AddMinutes(46).AddSeconds(10), range.Entries[37].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                }
            }
        }
Exemplo n.º 16
0
        public void GetAllShouldReturnNotModifiedCode()
        {
            const string documentId = "users/ayende";

            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                for (int i = 0; i <= 360; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Tag       = "watches/fitbit",
                        Timestamp = baseline.AddSeconds(i * 10),
                        Values    = new[] { 59d }
                    });
                }

                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var re = store.GetRequestExecutor();
                using (re.ContextPool.AllocateOperationContext(out var context))
                {
                    for (int i = 0; i < 3; i++)
                    {
                        var tsCommand = new GetMultipleTimeSeriesOperation.GetMultipleTimeSeriesCommand(documentId, new List <TimeSeriesRange>
                        {
                            new TimeSeriesRange
                            {
                                Name = "Heartrate",
                                From = DateTime.MinValue,
                                To   = DateTime.MaxValue
                            }
                        }, start: 0, pageSize: int.MaxValue);

                        re.Execute(tsCommand, context);
                        var res = tsCommand.Result;

                        Assert.Equal(361, res.Values["Heartrate"][0].TotalResults);
                        Assert.Equal(1, res.Values.Count);
                        Assert.Equal(1, res.Values["Heartrate"].Count);
                        Assert.Equal(361, res.Values["Heartrate"][0].Entries.Length);

                        var statusCode = tsCommand.StatusCode;

                        if (i == 0)
                        {
                            Assert.Equal(HttpStatusCode.OK, statusCode);
                        }
                        else
                        {
                            Assert.Equal(HttpStatusCode.NotModified, statusCode);
                        }
                    }

                    using (var session = store.OpenSession())
                    {
                        // add a new entry to the series
                        session.TimeSeriesFor(documentId, "Heartrate").Append(baseline.AddSeconds(100).AddMilliseconds(50), new[] { 1000d }, "watches/apple");
                        session.SaveChanges();
                    }

                    // verify that we don't get cached results

                    var command = new GetMultipleTimeSeriesOperation.GetMultipleTimeSeriesCommand(documentId,
                                                                                                  new List <TimeSeriesRange>
                    {
                        new TimeSeriesRange
                        {
                            Name = "Heartrate",
                            From = DateTime.MinValue,
                            To   = DateTime.MaxValue
                        }
                    }, 0, int.MaxValue);
                    re.Execute(command, context);

                    Assert.Equal(HttpStatusCode.OK, command.StatusCode);

                    Assert.Equal(362, command.Result.Values["Heartrate"][0].TotalResults);
                    Assert.Equal(1, command.Result.Values.Count);
                    Assert.Equal(1, command.Result.Values["Heartrate"].Count);
                    Assert.Equal(362, command.Result.Values["Heartrate"][0].Entries.Length);

                    var newEntry = command.Result.Values["Heartrate"][0].Entries
                                   .FirstOrDefault(e => e.Value == 1000d && e.Timestamp == baseline.AddSeconds(100).AddMilliseconds(50).ToUniversalTime());

                    Assert.NotNull(newEntry);
                }
            }
        }
Exemplo n.º 17
0
        public void CanDeleteWithoutProvidingFromAndToDates()
        {
            using (var store = GetDocumentStore())
            {
                var baseline = DateTime.Today.EnsureUtc();

                var docId = "users/ayende";

                using (var session = store.OpenSession())
                {
                    session.Store(new User(), docId);

                    var tsf  = session.TimeSeriesFor(docId, "HeartRate");
                    var tsf2 = session.TimeSeriesFor(docId, "BloodPressure");
                    var tsf3 = session.TimeSeriesFor(docId, "BodyTemperature");

                    for (int j = 0; j < 100; j++)
                    {
                        tsf.Append(baseline.AddMinutes(j), j);
                        tsf2.Append(baseline.AddMinutes(j), j);
                        tsf3.Append(baseline.AddMinutes(j), j);
                    }

                    session.SaveChanges();
                }

                var get = store.Operations.Send(new GetTimeSeriesOperation(docId, "HeartRate"));
                Assert.Equal(100, get.Entries.Length);

                // null From, To
                var deleteOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                deleteOp.Delete(new TimeSeriesOperation.DeleteOperation());

                store.Operations.Send(new TimeSeriesBatchOperation(docId, deleteOp));

                get = store.Operations.Send(new GetTimeSeriesOperation(docId, "HeartRate"));
                Assert.Null(get);

                get = store.Operations.Send(new GetTimeSeriesOperation(docId, "BloodPressure"));
                Assert.Equal(100, get.Entries.Length);

                // null To
                deleteOp = new TimeSeriesOperation
                {
                    Name = "BloodPressure",
                };
                deleteOp.Delete(new TimeSeriesOperation.DeleteOperation {
                    From = baseline.AddMinutes(50), To = null
                });

                store.Operations.Send(new TimeSeriesBatchOperation(docId, deleteOp));

                get = store.Operations.Send(new GetTimeSeriesOperation(docId, "BloodPressure"));
                Assert.Equal(50, get.Entries.Length);

                get = store.Operations.Send(new GetTimeSeriesOperation(docId, "BodyTemperature"));
                Assert.Equal(100, get.Entries.Length);

                // null From
                deleteOp = new TimeSeriesOperation
                {
                    Name = "BodyTemperature",
                };
                deleteOp.Delete(new TimeSeriesOperation.DeleteOperation {
                    To = baseline.AddMinutes(19)
                });

                store.Operations.Send(new TimeSeriesBatchOperation(docId, deleteOp));

                get = store.Operations.Send(new GetTimeSeriesOperation(docId, "BodyTemperature"));
                Assert.Equal(80, get.Entries.Length);
            }
        }
Exemplo n.º 18
0
        public void CanGetMultipleTimeSeriesInSingleRequest()
        {
            using (var store = GetDocumentStore())
            {
                var documentId = "users/ayende";
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                // append

                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                for (int i = 0; i <= 10; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Tag       = "watches/fitbit",
                        Timestamp = baseline.AddMinutes(i * 10),
                        Values    = new[] { 72d }
                    });
                }

                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "BloodPressure",
                };

                for (int i = 0; i <= 10; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Timestamp = baseline.AddMinutes(i * 10),
                        Values    = new[] { 80d }
                    });
                }

                timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Temperature",
                };

                for (int i = 0; i <= 10; i++)
                {
                    timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation
                    {
                        Timestamp = baseline.AddMinutes(i * 10),
                        Values    = new[] { 37d + i * 0.15 }
                    });
                }

                timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                // get ranges from multiple time series in a single request

                var timesSeriesDetails = store.Operations.Send(
                    new GetMultipleTimeSeriesOperation(documentId, new List <TimeSeriesRange>
                {
                    new TimeSeriesRange
                    {
                        Name = "Heartrate",
                        From = baseline,
                        To   = baseline.AddMinutes(15)
                    },
                    new TimeSeriesRange
                    {
                        Name = "Heartrate",
                        From = baseline.AddMinutes(30),
                        To   = baseline.AddMinutes(45)
                    },
                    new TimeSeriesRange
                    {
                        Name = "BloodPressure",
                        From = baseline,
                        To   = baseline.AddMinutes(30)
                    },
                    new TimeSeriesRange
                    {
                        Name = "BloodPressure",
                        From = baseline.AddMinutes(60),
                        To   = baseline.AddMinutes(90)
                    },
                    new TimeSeriesRange
                    {
                        Name = "Temperature",
                        From = baseline,
                        To   = baseline.AddDays(1)
                    }
                }));

                Assert.Equal("users/ayende", timesSeriesDetails.Id);
                Assert.Equal(3, timesSeriesDetails.Values.Count);

                Assert.Equal(2, timesSeriesDetails.Values["Heartrate"].Count);

                var range = timesSeriesDetails.Values["Heartrate"][0];

                Assert.Equal(baseline, range.From, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(15), range.To, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Equal(2, range.Entries.Length);
                Assert.Equal(baseline, range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(10), range.Entries[1].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Null(range.TotalResults);

                range = timesSeriesDetails.Values["Heartrate"][1];

                Assert.Equal(baseline.AddMinutes(30), range.From, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(45), range.To, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Equal(2, range.Entries.Length);
                Assert.Equal(baseline.AddMinutes(30), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(40), range.Entries[1].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Null(range.TotalResults);

                Assert.Equal(2, timesSeriesDetails.Values["BloodPressure"].Count);

                range = timesSeriesDetails.Values["BloodPressure"][0];

                Assert.Equal(baseline, range.From, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(30), range.To, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Equal(4, range.Entries.Length);
                Assert.Equal(baseline, range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(30), range.Entries[3].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Null(range.TotalResults);

                range = timesSeriesDetails.Values["BloodPressure"][1];

                Assert.Equal(baseline.AddMinutes(60), range.From, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(90), range.To, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Equal(4, range.Entries.Length);
                Assert.Equal(baseline.AddMinutes(60), range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(90), range.Entries[3].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Null(range.TotalResults);

                Assert.Equal(1, timesSeriesDetails.Values["Temperature"].Count);

                range = timesSeriesDetails.Values["Temperature"][0];

                Assert.Equal(baseline, range.From, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddDays(1), range.To, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Equal(11, range.Entries.Length);
                Assert.Equal(baseline, range.Entries[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                Assert.Equal(baseline.AddMinutes(100), range.Entries[10].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                Assert.Equal(11, range.TotalResults); // full range
            }
        }
Exemplo n.º 19
0
 public ExecuteTimeSeriesBatchCommand(DocumentDatabase database, string documentId, TimeSeriesOperation operation, bool fromEtl)
 {
     _database   = database;
     _documentId = documentId;
     _operation  = operation;
     _fromEtl    = fromEtl;
 }
Exemplo n.º 20
0
        public void CanAppendAndRemoveTimestampsInSingleBatch()
        {
            const string documentId = "users/ayende";

            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new User(), documentId);
                    session.SaveChanges();
                }

                var baseline = DateTime.Today;

                var timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation {
                    Tag = "watches/fitbit", Timestamp = baseline.AddSeconds(1), Values = new[] { 59d }
                });
                timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation {
                    Tag = "watches/fitbit", Timestamp = baseline.AddSeconds(2), Values = new[] { 61d }
                });
                timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation {
                    Tag = "watches/fitbit", Timestamp = baseline.AddSeconds(3), Values = new[] { 61.5d }
                });


                var timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                var timeSeriesRangeResult = store.Operations.Send(
                    new GetTimeSeriesOperation(documentId, "Heartrate", DateTime.MinValue, DateTime.MaxValue));

                Assert.Equal(3, timeSeriesRangeResult.Entries.Length);

                timeSeriesOp = new TimeSeriesOperation
                {
                    Name = "Heartrate",
                };

                timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation {
                    Tag = "watches/fitbit", Timestamp = baseline.AddSeconds(4), Values = new[] { 60d }
                });
                timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation {
                    Tag = "watches/fitbit", Timestamp = baseline.AddSeconds(5), Values = new[] { 62.5d }
                });
                timeSeriesOp.Append(new TimeSeriesOperation.AppendOperation {
                    Tag = "watches/fitbit", Timestamp = baseline.AddSeconds(6), Values = new[] { 62d }
                });
                timeSeriesOp.Delete(new TimeSeriesOperation.DeleteOperation {
                    From = baseline.AddSeconds(2), To = baseline.AddSeconds(3)
                });

                timeSeriesBatch = new TimeSeriesBatchOperation(documentId, timeSeriesOp);

                store.Operations.Send(timeSeriesBatch);

                timeSeriesRangeResult = store.Operations.Send(
                    new GetTimeSeriesOperation(documentId, "Heartrate", DateTime.MinValue, DateTime.MaxValue));

                Assert.Equal(4, timeSeriesRangeResult.Entries.Length);

                var value = timeSeriesRangeResult.Entries[0];
                Assert.Equal(59d, value.Values[0]);
                Assert.Equal(baseline.AddSeconds(1), value.Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                value = timeSeriesRangeResult.Entries[1];
                Assert.Equal(60d, value.Values[0]);
                Assert.Equal(baseline.AddSeconds(4), value.Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                value = timeSeriesRangeResult.Entries[2];
                Assert.Equal(62.5d, value.Values[0]);
                Assert.Equal(baseline.AddSeconds(5), value.Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                value = timeSeriesRangeResult.Entries[3];
                Assert.Equal(62d, value.Values[0]);
                Assert.Equal(baseline.AddSeconds(6), value.Timestamp, RavenTestHelper.DateTimeComparer.Instance);
            }

            using (var store = GetDocumentStore())
            {
                var baseline = DateTime.Today;

                using (var session = store.OpenSession())
                {
                    session.Store(new { Name = "Oren" }, documentId);
                    session.TimeSeriesFor(documentId, "Heartrate")
                    .Append(baseline.AddMinutes(1), new[] { 59d }, "watches/fitbit");
                    session.TimeSeriesFor(documentId, "Heartrate")
                    .Append(baseline.AddMinutes(2), new[] { 69d }, "watches/fitbit");
                    session.TimeSeriesFor(documentId, "Heartrate")
                    .Append(baseline.AddMinutes(3), new[] { 79d }, "watches/fitbit");

                    session.SaveChanges();
                }

                using (var session = store.OpenSession())
                {
                    session.Store(new { Name = "Oren" }, documentId);
                    session.TimeSeriesFor(documentId, "Heartrate")
                    .Delete(baseline.AddMinutes(2));

                    session.SaveChanges();
                }

                using (var session = store.OpenSession())
                {
                    var vals = session.TimeSeriesFor(documentId, "Heartrate")
                               .Get(DateTime.MinValue, DateTime.MaxValue)
                               .ToList();
                    Assert.Equal(2, vals.Count);
                    Assert.Equal(new[] { 59d }, vals[0].Values);
                    Assert.Equal("watches/fitbit", vals[0].Tag);
                    Assert.Equal(baseline.AddMinutes(1), vals[0].Timestamp, RavenTestHelper.DateTimeComparer.Instance);

                    Assert.Equal(new[] { 79d }, vals[1].Values);
                    Assert.Equal("watches/fitbit", vals[1].Tag);
                    Assert.Equal(baseline.AddMinutes(3), vals[1].Timestamp, RavenTestHelper.DateTimeComparer.Instance);
                }
            }
        }