Skip to content

Commit 859397d

Browse files
committed
Updates time range to DateTimeRange object
Changes time range from string to DateTimeRange object for message queries. This provides type safety and removes parsing logic and error handling from the data access layer. Also allows for optional To property on the DateTimeRange.
1 parent 6a89b62 commit 859397d

File tree

19 files changed

+131
-104
lines changed

19 files changed

+131
-104
lines changed

src/ServiceControl.Audit.Persistence.InMemory/InMemoryAuditDataStore.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public async Task<QueryResult<SagaHistory>> QuerySagaHistoryById(Guid input, Can
4242
return await Task.FromResult(new QueryResult<SagaHistory>(sagaHistory, new QueryStatsInfo(string.Empty, 1)));
4343
}
4444

45-
public async Task<QueryResult<IList<MessagesView>>> GetMessages(bool includeSystemMessages, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken)
45+
public async Task<QueryResult<IList<MessagesView>>> GetMessages(bool includeSystemMessages, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange, CancellationToken cancellationToken)
4646
{
4747
var matched = messageViews
4848
.Where(w => !w.IsSystemMessage || includeSystemMessages)
@@ -51,7 +51,7 @@ public async Task<QueryResult<IList<MessagesView>>> GetMessages(bool includeSyst
5151
return await Task.FromResult(new QueryResult<IList<MessagesView>>(matched, new QueryStatsInfo(string.Empty, matched.Count)));
5252
}
5353

54-
public async Task<QueryResult<IList<MessagesView>>> QueryMessages(string keyword, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken)
54+
public async Task<QueryResult<IList<MessagesView>>> QueryMessages(string keyword, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange, CancellationToken cancellationToken)
5555
{
5656
var messages = GetMessageIdsMatchingQuery(keyword);
5757

@@ -61,15 +61,15 @@ public async Task<QueryResult<IList<MessagesView>>> QueryMessages(string keyword
6161
return await Task.FromResult(new QueryResult<IList<MessagesView>>(matched, new QueryStatsInfo(string.Empty, matched.Count())));
6262
}
6363

64-
public async Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpointAndKeyword(string endpoint, string keyword, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken)
64+
public async Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpointAndKeyword(string endpoint, string keyword, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange, CancellationToken cancellationToken)
6565
{
6666
var messages = GetMessageIdsMatchingQuery(keyword);
6767

6868
var matched = messageViews.Where(w => w.ReceivingEndpoint.Name == endpoint && messages.Contains(w.MessageId)).ToList();
6969
return await Task.FromResult(new QueryResult<IList<MessagesView>>(matched, new QueryStatsInfo(string.Empty, matched.Count)));
7070
}
7171

72-
public async Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpoint(bool includeSystemMessages, string endpointName, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken)
72+
public async Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpoint(bool includeSystemMessages, string endpointName, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange, CancellationToken cancellationToken)
7373
{
7474
var matched = messageViews.Where(w => w.ReceivingEndpoint.Name == endpointName).ToList();
7575
return await Task.FromResult(new QueryResult<IList<MessagesView>>(matched, new QueryStatsInfo(string.Empty, matched.Count)));

src/ServiceControl.Audit.Persistence.RavenDB/Extensions/RavenQueryExtensions.cs

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
namespace ServiceControl.Audit.Persistence.RavenDB.Extensions
22
{
33
using System;
4-
using System.Globalization;
54
using System.Linq;
65
using System.Linq.Expressions;
76
using Indexes;
@@ -20,45 +19,27 @@ static class RavenQueryExtensions
2019
return source;
2120
}
2221

23-
public static IQueryable<MessagesViewIndex.SortAndFilterOptions> FilterBySentTimeRange(this IQueryable<MessagesViewIndex.SortAndFilterOptions> source, string range)
22+
public static IQueryable<MessagesViewIndex.SortAndFilterOptions> FilterBySentTimeRange(this IQueryable<MessagesViewIndex.SortAndFilterOptions> source, DateTimeRange range)
2423
{
25-
if (string.IsNullOrWhiteSpace(range))
24+
if (range == null)
2625
{
2726
return source;
2827
}
2928

30-
var filters = range.Split(SplitChars, StringSplitOptions.None);
31-
DateTime from, to;
32-
try
29+
if (range.From.HasValue && range.To.HasValue)
3330
{
31+
return source.Where(m => m.TimeSent >= range.From && m.TimeSent <= range.To);
3432

35-
if (filters.Length == 2)
36-
{
37-
from = DateTime.Parse(filters[0], CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
38-
to = DateTime.Parse(filters[1], CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
39-
source.Where(m => m.TimeSent >= from && m.TimeSent <= to);
40-
41-
}
42-
else
43-
{
44-
from = DateTime.Parse(filters[0], CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
45-
source.Where(m => m.TimeSent >= from);
46-
}
4733
}
48-
catch (Exception)
34+
35+
if (range.From.HasValue)
4936
{
50-
throw new Exception(
51-
"Invalid sent time date range, dates need to be in ISO8601 format and it needs to be a range eg. 2016-03-11T00:27:15.474Z...2016-03-16T03:27:15.474Z");
37+
return source.Where(m => m.TimeSent >= range.From && m.TimeSent <= range.To);
5238
}
5339

5440
return source;
5541
}
5642

57-
static string[] SplitChars =
58-
{
59-
"..."
60-
};
61-
6243
public static IQueryable<TSource> Paging<TSource>(this IQueryable<TSource> source, PagingInfo pagingInfo)
6344
=> source.Skip(pagingInfo.Offset).Take(pagingInfo.PageSize);
6445

src/ServiceControl.Audit.Persistence.RavenDB/RavenAuditDataStore.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public async Task<QueryResult<SagaHistory>> QuerySagaHistoryById(Guid input, Can
3131
return sagaHistory == null ? QueryResult<SagaHistory>.Empty() : new QueryResult<SagaHistory>(sagaHistory, new QueryStatsInfo($"{stats.ResultEtag}", stats.TotalResults));
3232
}
3333

34-
public async Task<QueryResult<IList<MessagesView>>> GetMessages(bool includeSystemMessages, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken)
34+
public async Task<QueryResult<IList<MessagesView>>> GetMessages(bool includeSystemMessages, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange, CancellationToken cancellationToken)
3535
{
3636
using var session = await sessionProvider.OpenSession(cancellationToken: cancellationToken);
3737
var results = await session.Query<MessagesViewIndex.SortAndFilterOptions>(GetIndexName(isFullTextSearchEnabled))
@@ -46,7 +46,7 @@ public async Task<QueryResult<IList<MessagesView>>> GetMessages(bool includeSyst
4646
return new QueryResult<IList<MessagesView>>(results, stats.ToQueryStatsInfo());
4747
}
4848

49-
public async Task<QueryResult<IList<MessagesView>>> QueryMessages(string searchParam, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken)
49+
public async Task<QueryResult<IList<MessagesView>>> QueryMessages(string searchParam, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange, CancellationToken cancellationToken)
5050
{
5151
using var session = await sessionProvider.OpenSession(cancellationToken: cancellationToken);
5252
var results = await session.Query<MessagesViewIndex.SortAndFilterOptions>(GetIndexName(isFullTextSearchEnabled))
@@ -61,7 +61,7 @@ public async Task<QueryResult<IList<MessagesView>>> QueryMessages(string searchP
6161
return new QueryResult<IList<MessagesView>>(results, stats.ToQueryStatsInfo());
6262
}
6363

64-
public async Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpointAndKeyword(string endpoint, string keyword, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken)
64+
public async Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpointAndKeyword(string endpoint, string keyword, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange, CancellationToken cancellationToken)
6565
{
6666
using var session = await sessionProvider.OpenSession(cancellationToken: cancellationToken);
6767
var results = await session.Query<MessagesViewIndex.SortAndFilterOptions>(GetIndexName(isFullTextSearchEnabled))
@@ -77,7 +77,7 @@ public async Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndp
7777
return new QueryResult<IList<MessagesView>>(results, stats.ToQueryStatsInfo());
7878
}
7979

80-
public async Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpoint(bool includeSystemMessages, string endpointName, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken)
80+
public async Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpoint(bool includeSystemMessages, string endpointName, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange, CancellationToken cancellationToken)
8181
{
8282
using var session = await sessionProvider.OpenSession(cancellationToken: cancellationToken);
8383
var results = await session.Query<MessagesViewIndex.SortAndFilterOptions>(GetIndexName(isFullTextSearchEnabled))

src/ServiceControl.Audit.Persistence.Tests.RavenDB/RetentionTests.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,13 @@ public async Task AuditMessageRetention()
2828
{
2929
var message = MakeMessage("MyMessageId");
3030

31-
await IngestProcessedMessagesAudits(
32-
message
33-
);
31+
await IngestProcessedMessagesAudits(message);
3432

35-
var queryResultBeforeExpiration = await DataStore.QueryMessages("MyMessageId", new PagingInfo(), new SortInfo("Id", "asc"), null, TestContext.CurrentContext.CancellationToken);
33+
var queryResultBeforeExpiration = await DataStore.QueryMessages("MyMessageId", new PagingInfo(), new SortInfo("Id", "asc"), cancellationToken: TestContext.CurrentContext.CancellationToken);
3634

3735
await Task.Delay(4000);
3836

39-
var queryResultAfterExpiration = await DataStore.QueryMessages("MyMessageId", new PagingInfo(), new SortInfo("Id", "asc"), null, TestContext.CurrentContext.CancellationToken);
37+
var queryResultAfterExpiration = await DataStore.QueryMessages("MyMessageId", new PagingInfo(), new SortInfo("Id", "asc"), cancellationToken: TestContext.CurrentContext.CancellationToken);
4038

4139
Assert.That(queryResultBeforeExpiration.Results, Has.Count.EqualTo(1));
4240
Assert.Multiple(() =>

src/ServiceControl.Audit.Persistence.Tests/AuditTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ await IngestProcessedMessagesAudits(
3030
message
3131
);
3232

33-
var queryResult = await DataStore.QueryMessages("MyMessageId", new PagingInfo(), new SortInfo("Id", "asc"), null, TestContext.CurrentContext.CancellationToken);
33+
var queryResult = await DataStore.QueryMessages("MyMessageId", new PagingInfo(), new SortInfo("Id", "asc"), cancellationToken: TestContext.CurrentContext.CancellationToken);
3434

3535
Assert.That(queryResult.Results, Has.Count.EqualTo(1));
3636
Assert.That(queryResult.Results[0].MessageId, Is.EqualTo("MyMessageId"));
@@ -40,7 +40,7 @@ await IngestProcessedMessagesAudits(
4040
public async Task Handles_no_results_gracefully()
4141
{
4242
var nonExistingMessage = Guid.NewGuid().ToString();
43-
var queryResult = await DataStore.QueryMessages(nonExistingMessage, new PagingInfo(), new SortInfo("Id", "asc"), null, TestContext.CurrentContext.CancellationToken);
43+
var queryResult = await DataStore.QueryMessages(nonExistingMessage, new PagingInfo(), new SortInfo("Id", "asc"), cancellationToken: TestContext.CurrentContext.CancellationToken);
4444

4545
Assert.That(queryResult.Results, Is.Empty);
4646
}
@@ -73,7 +73,7 @@ await IngestProcessedMessagesAudits(
7373
);
7474

7575
var queryResult = await DataStore.QueryMessages("MyMessageType", new PagingInfo(),
76-
new SortInfo("message_id", "asc"), null, TestContext.CurrentContext.CancellationToken);
76+
new SortInfo("message_id", "asc"), cancellationToken: TestContext.CurrentContext.CancellationToken);
7777

7878
Assert.That(queryResult.Results, Has.Count.EqualTo(2));
7979
}
@@ -158,7 +158,7 @@ public async Task Deduplicates_messages_in_same_batch()
158158

159159
await configuration.CompleteDBOperation();
160160

161-
var queryResult = await DataStore.GetMessages(false, new PagingInfo(), new SortInfo("message_id", "asc"), null, TestContext.CurrentContext.CancellationToken);
161+
var queryResult = await DataStore.GetMessages(false, new PagingInfo(), new SortInfo("message_id", "asc"), cancellationToken: TestContext.CurrentContext.CancellationToken);
162162

163163
Assert.That(queryResult.QueryStats.TotalCount, Is.EqualTo(1));
164164
}
@@ -182,7 +182,7 @@ public async Task Deduplicates_messages_in_different_batches()
182182

183183
await configuration.CompleteDBOperation();
184184

185-
var queryResult = await DataStore.GetMessages(false, new PagingInfo(), new SortInfo("message_id", "asc"), null, TestContext.CurrentContext.CancellationToken);
185+
var queryResult = await DataStore.GetMessages(false, new PagingInfo(), new SortInfo("message_id", "asc"), cancellationToken: TestContext.CurrentContext.CancellationToken);
186186

187187
Assert.That(queryResult.QueryStats.TotalCount, Is.EqualTo(1));
188188
}
@@ -205,7 +205,7 @@ public async Task Does_not_deduplicate_with_different_processing_started_header(
205205

206206
await configuration.CompleteDBOperation();
207207

208-
var queryResult = await DataStore.GetMessages(false, new PagingInfo(), new SortInfo("message_id", "asc"), null, TestContext.CurrentContext.CancellationToken);
208+
var queryResult = await DataStore.GetMessages(false, new PagingInfo(), new SortInfo("message_id", "asc"), cancellationToken: TestContext.CurrentContext.CancellationToken);
209209

210210
Assert.That(queryResult.QueryStats.TotalCount, Is.EqualTo(2));
211211
}

src/ServiceControl.Audit.Persistence/IAuditDataStore.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ public interface IAuditDataStore
1414
{
1515
Task<QueryResult<IList<KnownEndpointsView>>> QueryKnownEndpoints(CancellationToken cancellationToken);
1616
Task<QueryResult<SagaHistory>> QuerySagaHistoryById(Guid input, CancellationToken cancellationToken);
17-
Task<QueryResult<IList<MessagesView>>> GetMessages(bool includeSystemMessages, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken);
18-
Task<QueryResult<IList<MessagesView>>> QueryMessages(string searchParam, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken);
19-
Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpointAndKeyword(string endpoint, string keyword, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken);
20-
Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpoint(bool includeSystemMessages, string endpointName, PagingInfo pagingInfo, SortInfo sortInfo, string timeSentRange, CancellationToken cancellationToken);
17+
Task<QueryResult<IList<MessagesView>>> GetMessages(bool includeSystemMessages, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange = null, CancellationToken cancellationToken = default);
18+
Task<QueryResult<IList<MessagesView>>> QueryMessages(string searchParam, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange = null, CancellationToken cancellationToken = default);
19+
Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpointAndKeyword(string endpoint, string keyword, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange = null, CancellationToken cancellationToken = default);
20+
Task<QueryResult<IList<MessagesView>>> QueryMessagesByReceivingEndpoint(bool includeSystemMessages, string endpointName, PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange = null, CancellationToken cancellationToken = default);
2121
Task<QueryResult<IList<MessagesView>>> QueryMessagesByConversationId(string conversationId, PagingInfo pagingInfo, SortInfo sortInfo, CancellationToken cancellationToken);
2222
Task<MessageBodyView> GetMessageBody(string messageId, CancellationToken cancellationToken);
2323
Task<QueryResult<IList<AuditCount>>> QueryAuditCounts(string endpointName, CancellationToken cancellationToken);
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
namespace ServiceControl.Audit.Infrastructure;
2+
3+
using System;
4+
using System.Globalization;
5+
6+
public class DateTimeRange
7+
{
8+
public DateTime? From { get; }
9+
public DateTime? To { get; }
10+
11+
public DateTimeRange(string from = null, string to = null)
12+
{
13+
if (from != null)
14+
{
15+
From = DateTime.Parse(from, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
16+
}
17+
if (to != null)
18+
{
19+
To = DateTime.Parse(to, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
20+
}
21+
}
22+
23+
public DateTimeRange(DateTime? from = null, DateTime? to = null)
24+
{
25+
From = from;
26+
To = to;
27+
}
28+
}

src/ServiceControl.Audit/Auditing/MessagesView/GetMessages2Controller.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ public async Task<IList<MessagesView>> GetAllMessages(
1818
[FromQuery] SortInfo sortInfo,
1919
[FromQuery(Name = "page_size")] int pageSize,
2020
[FromQuery(Name = "endpoint_name")] string endpointName,
21-
[FromQuery(Name = "range")] string range,
21+
[FromQuery(Name = "from")] string from,
22+
[FromQuery(Name = "to")] string to,
2223
string q,
2324
CancellationToken cancellationToken)
2425
{
@@ -28,24 +29,24 @@ public async Task<IList<MessagesView>> GetAllMessages(
2829
{
2930
if (string.IsNullOrWhiteSpace(q))
3031
{
31-
result = await dataStore.GetMessages(false, pagingInfo, sortInfo, range, cancellationToken);
32+
result = await dataStore.GetMessages(false, pagingInfo, sortInfo, new DateTimeRange(from, to), cancellationToken);
3233
}
3334
else
3435
{
35-
result = await dataStore.QueryMessages(q, pagingInfo, sortInfo, range, cancellationToken);
36+
result = await dataStore.QueryMessages(q, pagingInfo, sortInfo, new DateTimeRange(from, to), cancellationToken);
3637
}
3738
}
3839
else
3940
{
4041
if (string.IsNullOrWhiteSpace(q))
4142
{
4243
result = await dataStore.QueryMessagesByReceivingEndpoint(false, endpointName, pagingInfo, sortInfo,
43-
range, cancellationToken);
44+
new DateTimeRange(from, to), cancellationToken);
4445
}
4546
else
4647
{
4748
result = await dataStore.QueryMessagesByReceivingEndpointAndKeyword(endpointName, q, pagingInfo,
48-
sortInfo, range, cancellationToken);
49+
sortInfo, new DateTimeRange(from, to), cancellationToken);
4950
}
5051
}
5152

0 commit comments

Comments
 (0)