Skip to content

Commit 8ea107c

Browse files
committed
commit again
1 parent 4879dea commit 8ea107c

File tree

15 files changed

+226
-2
lines changed

15 files changed

+226
-2
lines changed

src/ServiceControl.Persistence.Sql.Core/DbContexts/ServiceControlDbContextBase.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ protected ServiceControlDbContextBase(DbContextOptions options) : base(options)
2323
public DbSet<FailedErrorImportEntity> FailedErrorImports { get; set; }
2424
public DbSet<ExternalIntegrationDispatchRequestEntity> ExternalIntegrationDispatchRequests { get; set; }
2525
public DbSet<ArchiveOperationEntity> ArchiveOperations { get; set; }
26+
public DbSet<FailedMessageEntity> FailedMessages { get; set; }
27+
public DbSet<RetryBatchEntity> RetryBatches { get; set; }
28+
public DbSet<FailedMessageRetryEntity> FailedMessageRetries { get; set; }
29+
public DbSet<GroupCommentEntity> GroupComments { get; set; }
30+
public DbSet<RetryBatchNowForwardingEntity> RetryBatchNowForwarding { get; set; }
2631

2732
protected override void OnModelCreating(ModelBuilder modelBuilder)
2833
{
@@ -41,6 +46,11 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
4146
modelBuilder.ApplyConfiguration(new FailedErrorImportConfiguration());
4247
modelBuilder.ApplyConfiguration(new ExternalIntegrationDispatchRequestConfiguration());
4348
modelBuilder.ApplyConfiguration(new ArchiveOperationConfiguration());
49+
modelBuilder.ApplyConfiguration(new FailedMessageConfiguration());
50+
modelBuilder.ApplyConfiguration(new RetryBatchConfiguration());
51+
modelBuilder.ApplyConfiguration(new FailedMessageRetryConfiguration());
52+
modelBuilder.ApplyConfiguration(new GroupCommentConfiguration());
53+
modelBuilder.ApplyConfiguration(new RetryBatchNowForwardingConfiguration());
4454

4555
OnModelCreatingProvider(modelBuilder);
4656
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
namespace ServiceControl.Persistence.Sql.Core.Entities;
2+
3+
using System;
4+
using ServiceControl.MessageFailures;
5+
6+
public class FailedMessageEntity
7+
{
8+
public string Id { get; set; } = null!;
9+
public string UniqueMessageId { get; set; } = null!;
10+
public FailedMessageStatus Status { get; set; }
11+
12+
// JSON columns for complex nested data
13+
public string ProcessingAttemptsJson { get; set; } = null!;
14+
public string FailureGroupsJson { get; set; } = null!;
15+
16+
// Denormalized fields from the last processing attempt for efficient querying
17+
public string? MessageId { get; set; }
18+
public string? MessageType { get; set; }
19+
public DateTime? TimeSent { get; set; }
20+
public string? SendingEndpoint { get; set; }
21+
public string? ReceivingEndpoint { get; set; }
22+
public string? ExceptionType { get; set; }
23+
public string? ExceptionMessage { get; set; }
24+
public string? QueueAddress { get; set; }
25+
public int? NumberOfProcessingAttempts { get; set; }
26+
public DateTime? LastProcessedAt { get; set; }
27+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace ServiceControl.Persistence.Sql.Core.Entities;
2+
3+
public class FailedMessageRetryEntity
4+
{
5+
public string Id { get; set; } = null!;
6+
public string FailedMessageId { get; set; } = null!;
7+
public string? RetryBatchId { get; set; }
8+
public int StageAttempts { get; set; }
9+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace ServiceControl.Persistence.Sql.Core.Entities;
2+
3+
public class GroupCommentEntity
4+
{
5+
public string Id { get; set; } = null!;
6+
public string GroupId { get; set; } = null!;
7+
public string Comment { get; set; } = null!;
8+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
namespace ServiceControl.Persistence.Sql.Core.Entities;
2+
3+
using System;
4+
using ServiceControl.Persistence;
5+
6+
public class RetryBatchEntity
7+
{
8+
public string Id { get; set; } = null!;
9+
public string? Context { get; set; }
10+
public string RetrySessionId { get; set; } = null!;
11+
public string? StagingId { get; set; }
12+
public string? Originator { get; set; }
13+
public string? Classifier { get; set; }
14+
public DateTime StartTime { get; set; }
15+
public DateTime? Last { get; set; }
16+
public string RequestId { get; set; } = null!;
17+
public int InitialBatchSize { get; set; }
18+
public RetryType RetryType { get; set; }
19+
public RetryBatchStatus Status { get; set; }
20+
21+
// JSON column for list of retry IDs
22+
public string FailureRetriesJson { get; set; } = "[]";
23+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace ServiceControl.Persistence.Sql.Core.Entities;
2+
3+
public class RetryBatchNowForwardingEntity
4+
{
5+
public string Id { get; set; } = null!;
6+
public string RetryBatchId { get; set; } = null!;
7+
8+
// This is a singleton-like entity - only one forwarding batch at a time
9+
public static string SingletonId => "RetryBatchNowForwarding/Current";
10+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
namespace ServiceControl.Persistence.Sql.Core.EntityConfigurations;
2+
3+
using Entities;
4+
using Microsoft.EntityFrameworkCore;
5+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
6+
7+
class FailedMessageConfiguration : IEntityTypeConfiguration<FailedMessageEntity>
8+
{
9+
public void Configure(EntityTypeBuilder<FailedMessageEntity> builder)
10+
{
11+
builder.ToTable("FailedMessages");
12+
builder.HasKey(e => e.Id);
13+
builder.Property(e => e.Id).HasMaxLength(200).IsRequired();
14+
builder.Property(e => e.UniqueMessageId).HasMaxLength(200).IsRequired();
15+
builder.Property(e => e.Status).IsRequired();
16+
builder.Property(e => e.ProcessingAttemptsJson).IsRequired();
17+
builder.Property(e => e.FailureGroupsJson).IsRequired();
18+
19+
// Denormalized query fields
20+
builder.Property(e => e.MessageId).HasMaxLength(200);
21+
builder.Property(e => e.MessageType).HasMaxLength(500);
22+
builder.Property(e => e.SendingEndpoint).HasMaxLength(500);
23+
builder.Property(e => e.ReceivingEndpoint).HasMaxLength(500);
24+
builder.Property(e => e.ExceptionType).HasMaxLength(500);
25+
builder.Property(e => e.QueueAddress).HasMaxLength(500);
26+
27+
// Indexes for common queries
28+
builder.HasIndex(e => e.UniqueMessageId);
29+
builder.HasIndex(e => e.Status);
30+
builder.HasIndex(e => e.MessageId);
31+
builder.HasIndex(e => e.ReceivingEndpoint);
32+
builder.HasIndex(e => e.QueueAddress);
33+
builder.HasIndex(e => e.TimeSent);
34+
builder.HasIndex(e => e.LastProcessedAt);
35+
}
36+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace ServiceControl.Persistence.Sql.Core.EntityConfigurations;
2+
3+
using Entities;
4+
using Microsoft.EntityFrameworkCore;
5+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
6+
7+
class FailedMessageRetryConfiguration : IEntityTypeConfiguration<FailedMessageRetryEntity>
8+
{
9+
public void Configure(EntityTypeBuilder<FailedMessageRetryEntity> builder)
10+
{
11+
builder.ToTable("FailedMessageRetries");
12+
builder.HasKey(e => e.Id);
13+
builder.Property(e => e.Id).HasMaxLength(200).IsRequired();
14+
builder.Property(e => e.FailedMessageId).HasMaxLength(200).IsRequired();
15+
builder.Property(e => e.RetryBatchId).HasMaxLength(200);
16+
builder.Property(e => e.StageAttempts).IsRequired();
17+
18+
// Indexes
19+
builder.HasIndex(e => e.FailedMessageId);
20+
builder.HasIndex(e => e.RetryBatchId);
21+
}
22+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace ServiceControl.Persistence.Sql.Core.EntityConfigurations;
2+
3+
using Entities;
4+
using Microsoft.EntityFrameworkCore;
5+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
6+
7+
class GroupCommentConfiguration : IEntityTypeConfiguration<GroupCommentEntity>
8+
{
9+
public void Configure(EntityTypeBuilder<GroupCommentEntity> builder)
10+
{
11+
builder.ToTable("GroupComments");
12+
builder.HasKey(e => e.Id);
13+
builder.Property(e => e.Id).HasMaxLength(250).IsRequired();
14+
builder.Property(e => e.GroupId).HasMaxLength(200).IsRequired();
15+
builder.Property(e => e.Comment).IsRequired();
16+
17+
builder.HasIndex(e => e.GroupId);
18+
}
19+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
namespace ServiceControl.Persistence.Sql.Core.EntityConfigurations;
2+
3+
using Entities;
4+
using Microsoft.EntityFrameworkCore;
5+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
6+
7+
class RetryBatchConfiguration : IEntityTypeConfiguration<RetryBatchEntity>
8+
{
9+
public void Configure(EntityTypeBuilder<RetryBatchEntity> builder)
10+
{
11+
builder.ToTable("RetryBatches");
12+
builder.HasKey(e => e.Id);
13+
builder.Property(e => e.Id).HasMaxLength(200).IsRequired();
14+
builder.Property(e => e.RetrySessionId).HasMaxLength(200).IsRequired();
15+
builder.Property(e => e.RequestId).HasMaxLength(200).IsRequired();
16+
builder.Property(e => e.StagingId).HasMaxLength(200);
17+
builder.Property(e => e.Originator).HasMaxLength(500);
18+
builder.Property(e => e.Classifier).HasMaxLength(500);
19+
builder.Property(e => e.StartTime).IsRequired();
20+
builder.Property(e => e.Status).IsRequired();
21+
builder.Property(e => e.RetryType).IsRequired();
22+
builder.Property(e => e.FailureRetriesJson).IsRequired();
23+
24+
// Indexes
25+
builder.HasIndex(e => e.RetrySessionId);
26+
builder.HasIndex(e => e.Status);
27+
builder.HasIndex(e => e.StagingId);
28+
}
29+
}

0 commit comments

Comments
 (0)