Skip to content
Draft
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
1 change: 1 addition & 0 deletions src/ProjectReferences.Persisters.Primary.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

<ItemGroup Label="Persisters">
<ProjectReference Include="..\ServiceControl.Persistence.RavenDB\ServiceControl.Persistence.RavenDB.csproj" ReferenceOutputAssembly="false" Private="false" />
<ProjectReference Include="..\ServiceControl.Persistence.Sql\ServiceControl.Persistence.Sql.csproj" ReferenceOutputAssembly="false" Private="false" />
</ItemGroup>

</Project>
3 changes: 3 additions & 0 deletions src/ServiceControl.Persistence.Sql/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[*.cs]
dotnet_diagnostic.CA2007.severity = none
dotnet_diagnostic.IDE0060.severity = none
27 changes: 27 additions & 0 deletions src/ServiceControl.Persistence.Sql/NoOpArchiveMessages.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
namespace ServiceControl.Persistence.Sql;

using System.Collections.Generic;
using System.Threading.Tasks;
using ServiceControl.Persistence.Recoverability;
using ServiceControl.Recoverability;

class NoOpArchiveMessages : IArchiveMessages
{
public Task ArchiveAllInGroup(string groupId) => Task.CompletedTask;

public Task UnarchiveAllInGroup(string groupId) => Task.CompletedTask;

public bool IsOperationInProgressFor(string groupId, ArchiveType archiveType) => false;

public bool IsArchiveInProgressFor(string groupId) => false;

public void DismissArchiveOperation(string groupId, ArchiveType archiveType)
{
}

public Task StartArchiving(string groupId, ArchiveType archiveType) => Task.CompletedTask;

public Task StartUnarchiving(string groupId, ArchiveType archiveType) => Task.CompletedTask;

public IEnumerable<InMemoryArchive> GetArchivalOperations() => [];
}
10 changes: 10 additions & 0 deletions src/ServiceControl.Persistence.Sql/NoOpBodyStorage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace ServiceControl.Persistence.Sql;

using System.Threading.Tasks;
using ServiceControl.Operations.BodyStorage;

class NoOpBodyStorage : IBodyStorage
{
public Task<MessageBodyStreamResult> TryFetch(string bodyId) =>
Task.FromResult(new MessageBodyStreamResult { HasResult = false });
}
22 changes: 22 additions & 0 deletions src/ServiceControl.Persistence.Sql/NoOpCustomChecksDataStore.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
namespace ServiceControl.Persistence.Sql;

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using ServiceControl.Contracts.CustomChecks;
using ServiceControl.CustomChecks;
using ServiceControl.Persistence;
using ServiceControl.Persistence.Infrastructure;

class NoOpCustomChecksDataStore : ICustomChecksDataStore
{
public Task<CheckStateChange> UpdateCustomCheckStatus(CustomCheckDetail detail) =>
Task.FromResult(CheckStateChange.Unchanged);

public Task<QueryResult<IList<CustomCheck>>> GetStats(PagingInfo paging, string status = null) =>
Task.FromResult(new QueryResult<IList<CustomCheck>>([], QueryStatsInfo.Zero));

public Task DeleteCustomCheck(Guid id) => Task.CompletedTask;

public Task<int> GetNumberOfFailedChecks() => Task.FromResult(0);
}
20 changes: 20 additions & 0 deletions src/ServiceControl.Persistence.Sql/NoOpEndpointSettingsStore.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
namespace ServiceControl.Persistence.Sql;

using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using ServiceControl.Operations;
using ServiceControl.Persistence;

class NoOpEndpointSettingsStore : IEndpointSettingsStore
{
public async IAsyncEnumerable<EndpointSettings> GetAllEndpointSettings()
{
await Task.CompletedTask;
yield break;
}

public Task UpdateEndpointSettings(EndpointSettings settings, CancellationToken token) => Task.CompletedTask;

public Task Delete(string name, CancellationToken cancellationToken) => Task.CompletedTask;
}
161 changes: 161 additions & 0 deletions src/ServiceControl.Persistence.Sql/NoOpErrorMessageDataStore.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
namespace ServiceControl.Persistence.Sql;

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using ServiceControl.CompositeViews.Messages;
using ServiceControl.EventLog;
using ServiceControl.MessageFailures;
using ServiceControl.MessageFailures.Api;
using ServiceControl.Notifications;
using ServiceControl.Operations;
using ServiceControl.Persistence;
using ServiceControl.Persistence.Infrastructure;
using ServiceControl.Recoverability;

class NoOpErrorMessageDataStore : IErrorMessageDataStore
{
static readonly QueryResult<IList<MessagesView>> EmptyMessagesViewResult =
new([], QueryStatsInfo.Zero);

static readonly QueryResult<IList<FailedMessageView>> EmptyFailedMessageViewResult =
new([], QueryStatsInfo.Zero);

static readonly QueryResult<IList<FailureGroupView>> EmptyFailureGroupViewResult =
new([], QueryStatsInfo.Zero);

static readonly QueryStatsInfo EmptyQueryStatsInfo = QueryStatsInfo.Zero;

public Task<QueryResult<IList<MessagesView>>> GetAllMessages(PagingInfo pagingInfo, SortInfo sortInfo,
bool includeSystemMessages, DateTimeRange timeSentRange = null) =>
Task.FromResult(EmptyMessagesViewResult);

public Task<QueryResult<IList<MessagesView>>> GetAllMessagesForEndpoint(string endpointName,
PagingInfo pagingInfo, SortInfo sortInfo, bool includeSystemMessages, DateTimeRange timeSentRange = null) =>
Task.FromResult(EmptyMessagesViewResult);

public Task<QueryResult<IList<MessagesView>>> GetAllMessagesByConversation(string conversationId,
PagingInfo pagingInfo, SortInfo sortInfo, bool includeSystemMessages) =>
Task.FromResult(EmptyMessagesViewResult);

public Task<QueryResult<IList<MessagesView>>> GetAllMessagesForSearch(string searchTerms, PagingInfo pagingInfo,
SortInfo sortInfo, DateTimeRange timeSentRange = null) =>
Task.FromResult(EmptyMessagesViewResult);

public Task<QueryResult<IList<MessagesView>>> SearchEndpointMessages(string endpointName, string searchKeyword,
PagingInfo pagingInfo, SortInfo sortInfo, DateTimeRange timeSentRange = null) =>
Task.FromResult(EmptyMessagesViewResult);

public Task FailedMessageMarkAsArchived(string failedMessageId) => Task.CompletedTask;

public Task<FailedMessage[]> FailedMessagesFetch(Guid[] ids) => Task.FromResult(Array.Empty<FailedMessage>());

public Task StoreFailedErrorImport(FailedErrorImport failure) => Task.CompletedTask;

public Task<IEditFailedMessagesManager> CreateEditFailedMessageManager() =>
Task.FromResult<IEditFailedMessagesManager>(new NoOpEditFailedMessagesManager());

public Task<QueryResult<FailureGroupView>> GetFailureGroupView(string groupId, string status, string modified) =>
Task.FromResult(new QueryResult<FailureGroupView>(null, EmptyQueryStatsInfo));

public Task<IList<FailureGroupView>> GetFailureGroupsByClassifier(string classifier) =>
Task.FromResult<IList<FailureGroupView>>([]);

public Task<QueryResult<IList<FailedMessageView>>> ErrorGet(string status, string modified, string queueAddress,
PagingInfo pagingInfo, SortInfo sortInfo) =>
Task.FromResult(EmptyFailedMessageViewResult);

public Task<QueryStatsInfo> ErrorsHead(string status, string modified, string queueAddress) =>
Task.FromResult(EmptyQueryStatsInfo);

public Task<QueryResult<IList<FailedMessageView>>> ErrorsByEndpointName(string status, string endpointName,
string modified, PagingInfo pagingInfo, SortInfo sortInfo) =>
Task.FromResult(EmptyFailedMessageViewResult);

public Task<IDictionary<string, object>> ErrorsSummary() =>
Task.FromResult<IDictionary<string, object>>(new Dictionary<string, object>());

public Task<FailedMessageView> ErrorLastBy(string failedMessageId) =>
Task.FromResult<FailedMessageView>(null);

public Task<FailedMessage> ErrorBy(string failedMessageId) =>
Task.FromResult<FailedMessage>(null);

public Task<INotificationsManager> CreateNotificationsManager() =>
Task.FromResult<INotificationsManager>(new NoOpNotificationsManager());

public Task EditComment(string groupId, string comment) => Task.CompletedTask;

public Task DeleteComment(string groupId) => Task.CompletedTask;

public Task<QueryResult<IList<FailedMessageView>>> GetGroupErrors(string groupId, string status, string modified,
SortInfo sortInfo, PagingInfo pagingInfo) =>
Task.FromResult(EmptyFailedMessageViewResult);

public Task<QueryStatsInfo> GetGroupErrorsCount(string groupId, string status, string modified) =>
Task.FromResult(EmptyQueryStatsInfo);

public Task<QueryResult<IList<FailureGroupView>>> GetGroup(string groupId, string status, string modified) =>
Task.FromResult(EmptyFailureGroupViewResult);

public Task<bool> MarkMessageAsResolved(string failedMessageId) => Task.FromResult(false);

public Task ProcessPendingRetries(DateTime periodFrom, DateTime periodTo, string queueAddress,
Func<string, Task> processCallback) => Task.CompletedTask;

public Task<string[]> UnArchiveMessagesByRange(DateTime from, DateTime to) =>
Task.FromResult(Array.Empty<string>());

public Task<string[]> UnArchiveMessages(IEnumerable<string> failedMessageIds) =>
Task.FromResult(Array.Empty<string>());

public Task RevertRetry(string messageUniqueId) => Task.CompletedTask;

public Task RemoveFailedMessageRetryDocument(string uniqueMessageId) => Task.CompletedTask;

public Task<string[]> GetRetryPendingMessages(DateTime from, DateTime to, string queueAddress) =>
Task.FromResult(Array.Empty<string>());

public Task<byte[]> FetchFromFailedMessage(string uniqueMessageId) =>
Task.FromResult<byte[]>(null);

public Task StoreEventLogItem(EventLogItem logItem) => Task.CompletedTask;

public Task StoreFailedMessagesForTestsOnly(params FailedMessage[] failedMessages) => Task.CompletedTask;

class NoOpEditFailedMessagesManager : IEditFailedMessagesManager
{
public void Dispose()
{
}

public Task<FailedMessage> GetFailedMessage(string failedMessageId) =>
Task.FromResult<FailedMessage>(null);

public Task<string> GetCurrentEditingRequestId(string failedMessageId) =>
Task.FromResult<string>(null);

public Task SetCurrentEditingRequestId(string editingMessageId) => Task.CompletedTask;

public Task SetFailedMessageAsResolved() => Task.CompletedTask;

public Task UpdateFailedMessageBody(string uniqueMessageId, byte[] newBody) => Task.CompletedTask;

public Task SaveChanges() => Task.CompletedTask;
}

class NoOpNotificationsManager : INotificationsManager
{
public void Dispose()
{
}

public Task<NotificationsSettings> LoadSettings(TimeSpan? cacheTimeout = null) =>
Task.FromResult<NotificationsSettings>(null);

public Task UpdateFailedMessageGroupDetails(string groupId, string title, FailedMessageStatus status) =>
Task.CompletedTask;

public Task SaveChanges() => Task.CompletedTask;
}
}
15 changes: 15 additions & 0 deletions src/ServiceControl.Persistence.Sql/NoOpEventLogDataStore.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace ServiceControl.Persistence.Sql;

using System.Collections.Generic;
using System.Threading.Tasks;
using ServiceControl.EventLog;
using ServiceControl.Persistence;
using ServiceControl.Persistence.Infrastructure;

class NoOpEventLogDataStore : IEventLogDataStore
{
public Task Add(EventLogItem logItem) => Task.CompletedTask;

public Task<(IList<EventLogItem> items, long total, string version)> GetEventLogItems(PagingInfo pagingInfo) =>
Task.FromResult<(IList<EventLogItem>, long, string)>(([], 0, string.Empty));
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
namespace ServiceControl.Persistence.Sql;

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using ServiceControl.ExternalIntegrations;
using ServiceControl.Persistence;

class NoOpExternalIntegrationRequestsDataStore : IExternalIntegrationRequestsDataStore
{
public void Subscribe(Func<object[], Task> callback)
{
}

public Task StoreDispatchRequest(IEnumerable<ExternalIntegrationDispatchRequest> dispatchRequests) =>
Task.CompletedTask;

public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace ServiceControl.Persistence.Sql;

using System;
using System.Threading;
using System.Threading.Tasks;
using ServiceControl.MessageFailures;
using ServiceControl.Operations;
using ServiceControl.Persistence;

class NoOpFailedErrorImportDataStore : IFailedErrorImportDataStore
{
public Task ProcessFailedErrorImports(Func<FailedTransportMessage, Task> processMessage,
CancellationToken cancellationToken) => Task.CompletedTask;

public Task<bool> QueryContainsFailedImports() => Task.FromResult(false);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace ServiceControl.Persistence.Sql;

using System;
using System.Threading.Tasks;
using ServiceControl.MessageFailures;
using ServiceControl.Persistence;

class NoOpFailedMessageViewIndexNotifications : IFailedMessageViewIndexNotifications
{
public IDisposable Subscribe(Func<FailedMessageTotals, Task> callback) => new NoOpDisposable();

class NoOpDisposable : IDisposable
{
public void Dispose()
{
}
}
}
15 changes: 15 additions & 0 deletions src/ServiceControl.Persistence.Sql/NoOpGroupsDataStore.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace ServiceControl.Persistence.Sql;

using System.Collections.Generic;
using System.Threading.Tasks;
using ServiceControl.Persistence;
using ServiceControl.Recoverability;

class NoOpGroupsDataStore : IGroupsDataStore
{
public Task<IList<FailureGroupView>> GetFailureGroupsByClassifier(string classifier, string classifierFilter) =>
Task.FromResult<IList<FailureGroupView>>([]);

public Task<RetryBatch> GetCurrentForwardingBatch() =>
Task.FromResult<RetryBatch>(null);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace ServiceControl.Persistence.Sql;

using System.Threading.Tasks;
using ServiceControl.Persistence.MessageRedirects;

class NoOpMessageRedirectsDataStore : IMessageRedirectsDataStore
{
public Task<MessageRedirectsCollection> GetOrCreate() =>
Task.FromResult(new MessageRedirectsCollection());

public Task Save(MessageRedirectsCollection redirects) => Task.CompletedTask;
}
25 changes: 25 additions & 0 deletions src/ServiceControl.Persistence.Sql/NoOpMonitoringDataStore.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
namespace ServiceControl.Persistence.Sql;

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using ServiceControl.Operations;
using ServiceControl.Persistence;

class NoOpMonitoringDataStore : IMonitoringDataStore
{
public Task CreateIfNotExists(EndpointDetails endpoint) => Task.CompletedTask;

public Task CreateOrUpdate(EndpointDetails endpoint, IEndpointInstanceMonitoring endpointInstanceMonitoring) =>
Task.CompletedTask;

public Task UpdateEndpointMonitoring(EndpointDetails endpoint, bool isMonitored) => Task.CompletedTask;

public Task WarmupMonitoringFromPersistence(IEndpointInstanceMonitoring endpointInstanceMonitoring) =>
Task.CompletedTask;

public Task Delete(Guid endpointId) => Task.CompletedTask;

public Task<IReadOnlyList<KnownEndpoint>> GetAllKnownEndpoints() =>
Task.FromResult<IReadOnlyList<KnownEndpoint>>([]);
}
Loading