Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public async Task<MessageBodyResult> TryFetch(string bodyId, CancellationToken c

return MessageBodyResult.Available(new MessageBodyStreamContent(
new MemoryStream(bytes, writable: false),
row.BodyContentType,
row.BodyContentType ?? "text/plain",
Comment thread
rbev marked this conversation as resolved.
bytes.Length,
uniqueMessageId));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public Task Add(EventLogItem logItem, CancellationToken cancellationToken = defa
{
dbContext.EventLogItems.Add(new EventLogItemEntity
{
Description = logItem.Description,
Description = logItem.Description ?? string.Empty,
Severity = logItem.Severity,
RaisedAt = logItem.RaisedAt,
RelatedTo = logItem.RelatedTo ?? [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public Task<bool> QueryContainsFailedImports(CancellationToken cancellationToken
public Task StoreFailedErrorImport(FailedErrorImport failure, CancellationToken cancellationToken = default) =>
ExecuteWithDbContext(async (dbContext, token) =>
{
var uniqueMessageId = FailedErrorImport.DeriveKey(failure.Message.Headers, failure.Message.Id);
var uniqueMessageId = FailedErrorImport.DeriveKey(failure.Message!.Headers, failure.Message.Id);
var body = failure.Message.Body ?? [];
var storeExternally = body.Length > bodyStorageSettings.MaxBodySizeToStore;

Expand All @@ -54,15 +54,15 @@ public Task StoreFailedErrorImport(FailedErrorImport failure, CancellationToken
HeadersJson = headersJson,
Body = storedBody,
BodyStoredExternally = storeExternally,
ExceptionInfo = failure.ExceptionInfo
ExceptionInfo = failure.ExceptionInfo ?? string.Empty
}, (entity) =>
{
entity.FailedAt = failedAt;
entity.MessageId = failure.Message.Id;
entity.HeadersJson = headersJson;
entity.Body = storedBody;
entity.BodyStoredExternally = storeExternally;
entity.ExceptionInfo = failure.ExceptionInfo;
entity.ExceptionInfo = failure.ExceptionInfo ?? string.Empty;
}, token);
}, cancellationToken);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ static ExceptionDetails ToExceptionDetails(this FailedMessageEntity entity, Dict
: new EndpointDetails
{
Name = entity.SendingEndpointName,
Host = entity.SendingEndpointHost,
Host = entity.SendingEndpointHost ?? string.Empty,
HostId = entity.SendingEndpointHostId ?? Guid.Empty
};

Expand All @@ -142,7 +142,7 @@ static ExceptionDetails ToExceptionDetails(this FailedMessageEntity entity, Dict
: new EndpointDetails
{
Name = entity.ReceivingEndpointName,
Host = entity.ReceivingEndpointHost,
Host = entity.ReceivingEndpointHost ?? string.Empty,
HostId = entity.ReceivingEndpointHostId ?? Guid.Empty
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace ServiceControl.Persistence.EFCore.Implementation;

public class GroupsDataStore(IServiceScopeFactory scopeFactory) : DataStoreBase(scopeFactory), IGroupsDataStore
{
public Task<IList<FailureGroupView>> GetUnresolvedGroupsByClassifier(string classifier, string classifierFilter, CancellationToken cancellationToken = default) =>
public Task<IList<FailureGroupView>> GetUnresolvedGroupsByClassifier(string classifier, string? classifierFilter, CancellationToken cancellationToken = default) =>
ExecuteWithDbContext(async (dbContext, token) =>
{
var groups = ByClassifier(dbContext, classifier);
Expand All @@ -33,16 +33,16 @@ public Task<IList<FailureGroupView>> GetArchivedGroupsByClassifier(string classi
ExecuteWithDbContext((dbContext, token) => MostRecent(
ByClassifier(dbContext, classifier).AggregateGroups(WithStatus(dbContext, FailedMessageStatus.Archived)), token), cancellationToken);

public Task<QueryResult<FailureGroupView>> GetUnresolvedGroup(string groupId, string status, string modified, CancellationToken cancellationToken = default) =>
public Task<QueryResult<FailureGroupView>> GetUnresolvedGroup(string groupId, string? status, string? modified, CancellationToken cancellationToken = default) =>
ExecuteWithDbContext((dbContext, token) => SingleGroup(dbContext, groupId, FailedMessageStatus.Unresolved, status, modified, token), cancellationToken);

public Task<QueryResult<FailureGroupView>> GetArchivedGroup(string groupId, string status, string modified, CancellationToken cancellationToken = default) =>
public Task<QueryResult<FailureGroupView>> GetArchivedGroup(string groupId, string? status, string? modified, CancellationToken cancellationToken = default) =>
ExecuteWithDbContext((dbContext, token) => SingleGroup(dbContext, groupId, FailedMessageStatus.Archived, status, modified, token), cancellationToken);

public Task<QueryResult<IList<FailedMessageView>>> GetGroupErrors(string groupId, string status, string modified, SortInfo sortInfo, PagingInfo pagingInfo, CancellationToken cancellationToken = default) =>
public Task<QueryResult<IList<FailedMessageView>>> GetGroupErrors(string groupId, string? status, string? modified, SortInfo sortInfo, PagingInfo pagingInfo, CancellationToken cancellationToken = default) =>
ExecuteWithDbContext((dbContext, token) => InGroup(dbContext, groupId, status, modified).ToPagedResult(pagingInfo, sortInfo, token), cancellationToken);

public Task<QueryStatsInfo> GetGroupErrorsCount(string groupId, string status, string modified, CancellationToken cancellationToken = default) =>
public Task<QueryStatsInfo> GetGroupErrorsCount(string groupId, string? status, string? modified, CancellationToken cancellationToken = default) =>
ExecuteWithDbContext((dbContext, token) => InGroup(dbContext, groupId, status, modified).ToQueryStatsInfo(token), cancellationToken);

public Task EditComment(string groupId, string comment, CancellationToken cancellationToken = default) =>
Expand Down Expand Up @@ -73,7 +73,7 @@ static IQueryable<FailedMessageGroupEntity> ByClassifier(ServiceControlDbContext
.AsNoTracking()
.Where(group => group.Type == classifier);

static async Task<QueryResult<FailureGroupView>> SingleGroup(ServiceControlDbContext dbContext, string groupId, FailedMessageStatus baseline, string status, string modified, CancellationToken cancellationToken)
static async Task<QueryResult<FailureGroupView>> SingleGroup(ServiceControlDbContext dbContext, string groupId, FailedMessageStatus baseline, string? status, string? modified, CancellationToken cancellationToken)
{
var groups = await dbContext.FailedMessageGroups
.AsNoTracking()
Expand All @@ -91,7 +91,7 @@ static IQueryable<FailedMessageEntity> WithStatus(ServiceControlDbContext dbCont
.AsNoTracking()
.Where(message => message.Status == status);

static IQueryable<FailedMessageEntity> InGroup(ServiceControlDbContext dbContext, string groupId, string status, string modified) =>
static IQueryable<FailedMessageEntity> InGroup(ServiceControlDbContext dbContext, string groupId, string? status, string? modified) =>
dbContext.FailedMessages
.AsNoTracking()
.Where(message => dbContext.FailedMessageGroups.Any(group => group.GroupId == groupId && group.FailedMessageUniqueId == message.UniqueMessageId))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace ServiceControl.Persistence.EFCore.Implementation;
public class RetryBatchStore(IServiceScopeFactory scopeFactory, IRetryBatchSqlDialect dialect) : DataStoreBase(scopeFactory), IRetryBatchStore
{
public Task<string> CreateBatch(string retrySessionId, string requestId, RetryType retryType,
string[] failedMessageRetryIds, string originator, DateTime startTime, DateTime? last = null,
string[] failedMessageRetryIds, string? originator, DateTime startTime, DateTime? last = null,
string? batchName = null, string? classifier = null,
string? initiatedById = null, string? initiatedByName = null, string? operationId = null,
CancellationToken cancellationToken = default) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public Task<RetryHistory> GetRetryHistory(CancellationToken cancellationToken =
}, cancellationToken);

public Task RecordRetryOperationCompleted(string requestId, RetryType retryType, DateTime startTime, DateTime completionTime,
string originator, string classifier, bool messageFailed, int numberOfMessagesProcessed, DateTime lastProcessed, int retryHistoryDepth,
string? originator, string? classifier, bool messageFailed, int numberOfMessagesProcessed, DateTime lastProcessed, int retryHistoryDepth,
CancellationToken cancellationToken = default) =>
ExecuteWithDbContext(async (dbContext, token) =>
{
Expand Down Expand Up @@ -101,7 +101,7 @@ static bool NeedsAcknowledgement(RetryType retryType) =>
retryType is not RetryType.SingleMessage and not RetryType.MultipleMessages;

static async Task RecordUnacknowledged(ServiceControlDbContext dbContext, string requestId, RetryType retryType,
DateTime startTime, DateTime completionTime, string originator, string classifier, bool messageFailed,
DateTime startTime, DateTime completionTime, string? originator, string? classifier, bool messageFailed,
int numberOfMessagesProcessed, DateTime lastProcessed, CancellationToken cancellationToken)
{
var unacknowledged = await dbContext.UnacknowledgedRetryOperations
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class EndpointDetailsParser
{
public static EndpointDetails SendingEndpoint(IReadOnlyDictionary<string, string> headers)
{
var endpointDetails = new EndpointDetails();
var endpointDetails = new EndpointDetails() { Name = "", Host = "" };
Comment thread
rbev marked this conversation as resolved.

DictionaryExtensions.CheckIfKeyExists(Headers.OriginatingEndpoint, headers, s => endpointDetails.Name = s);
DictionaryExtensions.CheckIfKeyExists("NServiceBus.OriginatingMachine", headers, s => endpointDetails.Host = s);
Expand All @@ -37,7 +37,7 @@ public static EndpointDetails SendingEndpoint(IReadOnlyDictionary<string, string

public static EndpointDetails ReceivingEndpoint(IReadOnlyDictionary<string, string> headers)
{
var endpoint = new EndpointDetails();
var endpoint = new EndpointDetails() { Name = "", Host = "" };

if (headers.TryGetValue(Headers.HostId, out var hostIdHeader))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ public async Task Correct_status_for_failed_messages(FailedMessageStatus failedM
session.Store(new FailedMessage
{
Id = "1",
UniqueMessageId = Guid.NewGuid().ToString(),
ProcessingAttempts =
[
new FailedMessage.ProcessingAttempt
Expand Down Expand Up @@ -255,6 +256,7 @@ public async Task Correct_status_for_repeated_errors()
session.Store(new FailedMessage
{
Id = "1",
UniqueMessageId = Guid.NewGuid().ToString(),
ProcessingAttempts =
[
new FailedMessage.ProcessingAttempt
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public static FailedMessage Minimal(Action<FailedMessage> customize)
var message = new FailedMessage
{
Id = "1",
UniqueMessageId = Guid.NewGuid().ToString(),
ProcessingAttempts =
[
new FailedMessage.ProcessingAttempt
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ namespace ServiceControl.Persistence.Tests;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using EFCore.DbContexts;
Expand Down
1 change: 1 addition & 0 deletions src/ServiceControl.Persistence.Tests/IngestedFailure.cs
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ public FailedMessage ToFailedMessage(FailedMessageStatus status = FailedMessageS
// stores the document under it while the relational persisters ignore it.
return new FailedMessage
{
Id = Guid.NewGuid().ToString(),
UniqueMessageId = UniqueMessageIdString,
Status = status,
ProcessingAttempts = attempts,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public async Task Removes_a_redirect()
await Add("Sales", "Sales.New");
await Add("Shipping", "Shipping.New");

await MessageRedirectsDataStore.RemoveRedirect(new MessageRedirect { FromPhysicalAddress = "Sales" });
await MessageRedirectsDataStore.RemoveRedirect(new MessageRedirect { FromPhysicalAddress = "Sales", ToPhysicalAddress = "Sales.New" });

var redirects = await MessageRedirectsDataStore.GetRedirects();

Expand All @@ -112,7 +112,7 @@ public async Task Ignores_removing_a_redirect_that_is_not_there()
{
await Add("Sales", "Sales.New");

await MessageRedirectsDataStore.RemoveRedirect(new MessageRedirect { FromPhysicalAddress = "Unknown" });
await MessageRedirectsDataStore.RemoveRedirect(new MessageRedirect { FromPhysicalAddress = "Unknown", ToPhysicalAddress = "Sales" });

Assert.That(await MessageRedirectsDataStore.GetRedirects(), Has.Count.EqualTo(1));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace ServiceControl.Persistence.Tests.Recoverability
namespace ServiceControl.Persistence.Tests.Recoverability
{
using System;
using System.Collections.Generic;
Expand All @@ -23,6 +23,7 @@ await PersistenceTestsContext.InsertFailedMessages(
new FailedMessage
{
Id = MessageId,
UniqueMessageId = Guid.NewGuid().ToString(),
Status = FailedMessageStatus.Unresolved
}
);
Expand Down
10 changes: 5 additions & 5 deletions src/ServiceControl.Persistence/CustomCheck.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@

public class CustomCheck
{
public string Id { get; set; }
public string CustomCheckId { get; set; }
public string Category { get; set; }
public string? Id { get; set; }
public string? CustomCheckId { get; set; }
public string? Category { get; set; }
public Status Status { get; set; }
public DateTime ReportedAt { get; set; }
public string FailureReason { get; set; }
public EndpointDetails OriginatingEndpoint { get; set; }
public string? FailureReason { get; set; }
public EndpointDetails? OriginatingEndpoint { get; set; }
}
}
10 changes: 5 additions & 5 deletions src/ServiceControl.Persistence/CustomCheckDetail.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ public CustomCheckDetail()
ReportedAt = DateTime.UtcNow;
}

public EndpointDetails OriginatingEndpoint { get; set; }
public string CustomCheckId { get; set; }
public required EndpointDetails OriginatingEndpoint { get; set; }
public required string CustomCheckId { get; set; }
public DateTime ReportedAt { get; set; }
public string Category { get; set; }
public required string Category { get; set; }
public bool HasFailed { get; set; }
public string FailureReason { get; set; }
public string? FailureReason { get; set; }

public Guid GetDeterministicId() => DeterministicGuid.MakeId(OriginatingEndpoint.Name, OriginatingEndpoint.HostId.ToString(), CustomCheckId);
public Guid GetDeterministicId() => DeterministicGuid.MakeId(OriginatingEndpoint.Name ?? "", OriginatingEndpoint.HostId.ToString(), CustomCheckId);
}
}
10 changes: 5 additions & 5 deletions src/ServiceControl.Persistence/EmailNotifications.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ public class EmailNotifications
{
public bool Enabled { get; set; }

public string SmtpServer { get; set; }
public string? SmtpServer { get; set; }

public int? SmtpPort { get; set; }

public string AuthenticationAccount { get; set; }
public string? AuthenticationAccount { get; set; }

public string AuthenticationPassword { get; set; }
public string? AuthenticationPassword { get; set; }

public bool EnableTLS { get; set; }

public string To { get; set; }
public string? To { get; set; }

public string From { get; set; }
public string? From { get; set; }
}
}
6 changes: 3 additions & 3 deletions src/ServiceControl.Persistence/EndpointDetails.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ namespace ServiceControl.Operations

public class EndpointDetails
{
public string Name { get; set; }
public required string Name { get; set; }

public Guid HostId { get; set; }

public string Host { get; set; }
public required string Host { get; set; }

public Guid GetDeterministicId() => DeterministicGuid.MakeId(Name, HostId.ToString());
public Guid GetDeterministicId() => DeterministicGuid.MakeId(Name ?? "", HostId.ToString());
}
}
4 changes: 2 additions & 2 deletions src/ServiceControl.Persistence/EndpointInstanceId.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public EndpointInstanceId(string logicalName, string hostName, Guid hostGuid)

public Guid UniqueId { get; }

public bool Equals(EndpointInstanceId other)
public bool Equals(EndpointInstanceId? other)
{
if (other is null)
{
Expand All @@ -30,7 +30,7 @@ public bool Equals(EndpointInstanceId other)
return string.Equals(LogicalName, other.LogicalName) && string.Equals(HostName, other.HostName) && HostGuid.Equals(other.HostGuid);
}

public override bool Equals(object obj)
public override bool Equals(object? obj)
{
return Equals(obj as EndpointInstanceId);
}
Expand Down
2 changes: 1 addition & 1 deletion src/ServiceControl.Persistence/EndpointSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

public class EndpointSettings
{
public string Name { get; set; }
public required string Name { get; set; }
public bool TrackInstances { get; set; }
}
6 changes: 3 additions & 3 deletions src/ServiceControl.Persistence/EndpointsView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ namespace ServiceControl.Persistence
public class EndpointsView
{
public Guid Id { get; set; }
public string Name { get; set; }
public string HostDisplayName { get; set; }
public required string Name { get; set; }
public string? HostDisplayName { get; set; }
public bool Monitored { get; set; }
public bool MonitorHeartbeat { get; set; }
public HeartbeatInformation HeartbeatInformation { get; set; }
public HeartbeatInformation? HeartbeatInformation { get; set; }
public bool IsSendingHeartbeats { get; set; }
}
}
8 changes: 4 additions & 4 deletions src/ServiceControl.Persistence/EventLog/EventLogItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
/// </summary>
public class EventLogItem
{
public string Description { get; set; }
public string? Description { get; set; }
public Severity Severity { get; set; }
public DateTime RaisedAt { get; set; }
/// <summary>
/// This could be the Id of a related document, such as the FailedMessage event, which will have more information regarding this alert.
/// </summary>
public List<string> RelatedTo { get; set; }
public string Category { get; set; }
public string EventType { get; set; }
public List<string>? RelatedTo { get; set; }
public required string Category { get; set; }
public required string EventType { get; set; }
}
}
10 changes: 5 additions & 5 deletions src/ServiceControl.Persistence/EventLog/EventLogItemView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ public class EventLogItemView
/// <summary>
/// Assigned by whichever persister stored the item, and opaque.
/// </summary>
public string Id { get; set; }
public string Description { get; set; }
public required string Id { get; set; }
public required string Description { get; set; }
public Severity Severity { get; set; }
public DateTime RaisedAt { get; set; }
public List<string> RelatedTo { get; set; }
public string Category { get; set; }
public string EventType { get; set; }
public List<string> RelatedTo { get; set; } = [];
public required string Category { get; set; }
public required string EventType { get; set; }
}
}
Loading
Loading