Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix] RMQ Tests need fixing for changes in the Proactor/Reactor changes #3476

Merged
merged 26 commits into from
Feb 17, 2025

Conversation

iancooper
Copy link
Member

We changed the code to use a clearer Reeactor/Proactor model and moved to RMQ V7. We need to fix up the broken tests.

@iancooper iancooper self-assigned this Jan 15, 2025
Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Health Quality Gates: OK

No scoreable code touched

View detailed results in CodeScene

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Health Quality Gates: OK

No scoreable code touched

View detailed results in CodeScene

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Health Quality Gates: OK

No scoreable code touched

View detailed results in CodeScene

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Health Quality Gates: OK

No scoreable code touched

View detailed results in CodeScene

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Health Quality Gates: FAILED

Change in average Code Health of affected files: -0.12 (9.49 -> 9.37)

  • Declining Code Health: 14 findings(s) 🚩

View detailed results in CodeScene

Comment on lines +86 to +110
public override void HandleBasicDeliver(
string consumerTag,
ulong deliveryTag,
bool redelivered,
string exchange,
string routingKey,
IBasicProperties properties,
ReadOnlyMemory<byte> body)
{
//We have to copy the body, before returning, as the memory in body is pooled and may be re-used after (see base class documentation)
//See also https://docs.microsoft.com/en-us/dotnet/standard/memory-and-spans/memory-t-usage-guidelines
var payload = new byte[body.Length];
body.CopyTo(payload);

_messages.Enqueue(new BasicDeliverEventArgs
{
BasicProperties = properties,
Body = payload,
ConsumerTag = consumerTag,
DeliveryTag = deliveryTag,
Exchange = exchange,
Redelivered = redelivered,
RoutingKey = routingKey
});
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Excess Number of Function Arguments
HandleBasicDeliver has 7 arguments, threshold = 4

Suppress

Comment on lines +339 to +377
protected virtual void EnsureChannel()
{
if (Connection.Exchange is null)
throw new InvalidOperationException("RmqMessageConsumer.EnsureChannel - value of Connection.Exchange cannot be null");

if (Connection.AmpqUri is null)
throw new InvalidOperationException("RmqMessageConsumer.EnsureChannel - value of Connection.AmpqUri cannot be null");

if (Channel == null || Channel.IsClosed)
{
EnsureBroker(_queueName);

if (_makeChannels == OnMissingChannel.Create)
{
CreateQueue();
BindQueue();
}
else if (_makeChannels == OnMissingChannel.Validate)
{
ValidateQueue();
}
else if (_makeChannels == OnMissingChannel.Assume)
{
; //-- pass, here for clarity on fall through to use of queue directly on assume
}

CreateConsumer();

s_logger.LogInformation(
"RmqMessageConsumer: Created rabbitmq channel {ConsumerNumber} for queue {ChannelName} with routing key/s {RoutingKeys} via exchange {ExchangeName} on subscription {URL}",
//NOTE: Ensure Broker will create a channel if it is not already created
Channel!.ChannelNumber,
_queueName.Value,
string.Join(";", _routingKeys.Select(rk => rk.Value)),
Connection.Exchange.Name,
Connection.AmpqUri.GetSanitizedUri()
);
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Bumpy Road Ahead
EnsureChannel has 3 blocks with nested conditional logic. Any nesting of 2 or deeper is considered. Threshold is one single, nested block per function

Suppress

Comment on lines +79 to +94
public RmqMessageConsumer(
RmqMessagingGatewayConnection connection,
ChannelName queueName,
RoutingKey routingKey,
bool isDurable,
bool highAvailability = false,
int batchSize = 1,
ChannelName? deadLetterQueueName = null,
RoutingKey? deadLetterRoutingKey = null,
TimeSpan? ttl = null,
int? maxQueueLength = null,
OnMissingChannel makeChannels = OnMissingChannel.Create)
: this(connection, queueName, new RoutingKeys([routingKey]), isDurable, highAvailability,
batchSize, deadLetterQueueName, deadLetterRoutingKey, ttl, maxQueueLength, makeChannels)
{
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Constructor Over-Injection
RmqMessageConsumer has 11 arguments, threshold = 5

Suppress

Comment on lines +110 to +138
public RmqMessageConsumer(
RmqMessagingGatewayConnection connection,
ChannelName queueName,
RoutingKeys routingKeys,
bool isDurable,
bool highAvailability = false,
int batchSize = 1,
ChannelName? deadLetterQueueName = null,
RoutingKey? deadLetterRoutingKey = null,
TimeSpan? ttl = null,
int? maxQueueLength = null,
OnMissingChannel makeChannels = OnMissingChannel.Create)
: base(connection)
{
_queueName = queueName;
_routingKeys = routingKeys;
_isDurable = isDurable;
_highAvailability = highAvailability;
_messageCreator = new RmqMessageCreator();
_batchSize = Convert.ToUInt16(batchSize);
_makeChannels = makeChannels;
_consumerTag = Connection.Name + Guid.NewGuid();
_deadLetterQueueName = deadLetterQueueName;
_deadLetterRoutingKey = deadLetterRoutingKey;
//NOTE: Weird because netstandard20 can't understand that isnullor empty checks for null
_hasDlq = !string.IsNullOrEmpty(deadLetterQueueName ?? string.Empty) && !string.IsNullOrEmpty(_deadLetterRoutingKey ?? string.Empty);
_ttl = ttl;
_maxQueueLength = maxQueueLength;
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Constructor Over-Injection
RmqMessageConsumer has 11 arguments, threshold = 5

Suppress

Comment on lines +42 to +118
public Message CreateMessage(BasicDeliverEventArgs fromQueue)
{
var headers = fromQueue.BasicProperties.Headers ?? new Dictionary<string, object>();
var topic = HeaderResult<RoutingKey>.Empty();
var messageId = HeaderResult<string>.Empty();
var timeStamp = HeaderResult<DateTime>.Empty();
var handledCount = HeaderResult<int>.Empty();
var delay = HeaderResult<TimeSpan>.Empty();
var redelivered = HeaderResult<bool>.Empty();
var deliveryTag = HeaderResult<ulong>.Empty();
var messageType = HeaderResult<MessageType>.Empty();
var replyTo = HeaderResult<string>.Empty();
var deliveryMode = fromQueue.BasicProperties.DeliveryMode;

Message message;
try
{
topic = ReadTopic(fromQueue, headers);
messageId = ReadMessageId(fromQueue.BasicProperties.MessageId);
timeStamp = ReadTimeStamp(fromQueue.BasicProperties);
handledCount = ReadHandledCount(headers);
delay = ReadDelay(headers);
redelivered = ReadRedeliveredFlag(fromQueue.Redelivered);
deliveryTag = ReadDeliveryTag(fromQueue.DeliveryTag);
messageType = ReadMessageType(headers);
replyTo = ReadReplyTo(fromQueue.BasicProperties);

if (false == (topic.Success && messageId.Success && messageType.Success && timeStamp.Success && handledCount.Success))
{
message = FailureMessage(topic, messageId);
}
else
{
//TODO:CLOUD_EVENTS parse from headers

var messageHeader = new MessageHeader(
messageId: messageId.Result ?? string.Empty,
topic: topic.Result ?? RoutingKey.Empty,
messageType.Result,
source: null,
type: "",
timeStamp: timeStamp.Success ? timeStamp.Result : DateTime.UtcNow,
correlationId: "",
replyTo: new RoutingKey(replyTo.Result ?? string.Empty),
contentType: "",
handledCount: handledCount.Result,
dataSchema: null,
subject: null,
delayed: delay.Result
);


//this effectively transfers ownership of our buffer
message = new Message(messageHeader, new MessageBody(fromQueue.Body, fromQueue.BasicProperties.Type));

headers.Each(header => message.Header.Bag.Add(header.Key, ParseHeaderValue(header.Value)));
}

if (headers.TryGetValue(HeaderNames.CORRELATION_ID, out object? correlationHeader))
{
var correlationId = Encoding.UTF8.GetString((byte[])correlationHeader);
message.Header.CorrelationId = correlationId;
}

message.DeliveryTag = deliveryTag.Result;
message.Redelivered = redelivered.Result;
message.Header.ReplyTo = replyTo.Result;
message.Persist = deliveryMode == 2;
}
catch (Exception e)
{
s_logger.LogWarning(e,"Failed to create message from amqp message");
message = FailureMessage(topic, messageId);
}

return message;
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Complex Method
CreateMessage has a cyclomatic complexity of 13, threshold = 9

Suppress

Comment on lines +208 to +256
private HeaderResult<TimeSpan> ReadDelay(IDictionary<string, object> headers)
{
if (headers.ContainsKey(HeaderNames.DELAYED_MILLISECONDS) == false)
{
return new HeaderResult<TimeSpan>(TimeSpan.Zero, true);
}

int delayedMilliseconds;

// on 32 bit systems the x-delay value will be a int and on 64 bit it will be a long, thank you erlang
// The number will be negative after a message has been delayed
// sticking with an int as you should not be delaying for more than 49 days
switch (headers[HeaderNames.DELAYED_MILLISECONDS])
{
case byte[] value:
{
if (!int.TryParse(Encoding.UTF8.GetString(value), out var handledCount))
delayedMilliseconds = 0;
else
{
if (handledCount < 0)
handledCount = Math.Abs(handledCount);
delayedMilliseconds = handledCount;
}

break;
}
case int value:
{
if (value < 0)
value = Math.Abs(value);

delayedMilliseconds = value;
break;
}
case long value:
{
if (value < 0)
value = Math.Abs(value);

delayedMilliseconds = (int)value;
break;
}
default:
return new HeaderResult<TimeSpan>(TimeSpan.Zero, false);
}

return new HeaderResult<TimeSpan>(TimeSpan.FromMilliseconds( delayedMilliseconds), true);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Bumpy Road Ahead
ReadDelay has 2 blocks with nested conditional logic. Any nesting of 2 or deeper is considered. Threshold is one single, nested block per function

Suppress

{
if (disposing)
{
if (Channel != null && Channel.IsOpen && _confirmsSelected)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Complex Conditional
Dispose has 1 complex conditionals with 2 branches, threshold = 2

Suppress

Comment on lines +216 to +240
private bool IsAnAmqpType(object value)
{
switch (value)
{
case null:
case string _:
case byte[] _:
case int _:
case uint _:
case decimal _:
case AmqpTimestamp _:
case IDictionary _:
case IList _:
case byte _:
case sbyte _:
case double _:
case float _:
case long _:
case short _:
case bool _:
return true;
default:
return false;
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Complex Method
IsAnAmqpType has a cyclomatic complexity of 18, threshold = 9

Suppress

Comment on lines +86 to +128
public void PublishMessage(Message message, TimeSpan? delay = null)
{
if (_connection.Exchange is null)
throw new InvalidOperationException("RmqMessagePublisher.PublishMessage: Connections Exchange is null");

var messageId = message.Id;
var deliveryTag = message.Header.Bag.ContainsKey(HeaderNames.DELIVERY_TAG) ? message.DeliveryTag.ToString() : null;

var headers = new Dictionary<string, object>
{
{ HeaderNames.MESSAGE_TYPE, message.Header.MessageType.ToString() },
{ HeaderNames.TOPIC, message.Header.Topic.Value },
{ HeaderNames.HANDLED_COUNT, message.Header.HandledCount }
};

if (message.Header.CorrelationId != string.Empty)
headers.Add(HeaderNames.CORRELATION_ID, message.Header.CorrelationId);

message.Header.Bag.Each(header =>
{
if (!_headersToReset.Any(htr => htr.Equals(header.Key))) headers.Add(header.Key, header.Value);
});

if (!string.IsNullOrEmpty(deliveryTag))
headers.Add(HeaderNames.DELIVERY_TAG, deliveryTag!);

if (delay > TimeSpan.Zero)
headers.Add(HeaderNames.DELAY_MILLISECONDS, delay.Value.TotalMilliseconds);

_channel.BasicPublish(
_connection.Exchange.Name,
message.Header.Topic,
false,
CreateBasicProperties(
messageId,
message.Header.TimeStamp,
message.Body.ContentType,
message.Header.ContentType ?? "plain/text",
message.Header.ReplyTo ?? string.Empty,
message.Persist,
headers),
message.Body.Bytes);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Complex Method
PublishMessage has a cyclomatic complexity of 9, threshold = 9

Suppress

Comment on lines +182 to +207
private IBasicProperties CreateBasicProperties(string id, DateTimeOffset timeStamp, string type, string contentType,
string replyTo, bool persistMessage, IDictionary<string, object>? headers = null)
{
var basicProperties = _channel.CreateBasicProperties();

basicProperties.DeliveryMode = (byte) (persistMessage ? 2 : 1); // delivery mode set to 2 if message is persistent or 1 if non-persistent
basicProperties.ContentType = contentType;
basicProperties.Type = type;
basicProperties.MessageId = id;
basicProperties.Timestamp = new AmqpTimestamp(UnixTimestamp.GetUnixTimestampSeconds(timeStamp.DateTime));
if (!string.IsNullOrEmpty(replyTo))
basicProperties.ReplyTo = replyTo;

if (!(headers is null))
{
foreach (var header in headers)
{
if(!IsAnAmqpType(header.Value))
throw new ConfigurationException($"The value {header.Value} is type {header.Value.GetType()} for header {header.Key} value only supports the AMQP 0-8/0-9 standard entry types S, I, D, T and F, as well as the QPid-0-8 specific b, d, f, l, s, t, x and V types and the AMQP 0-9-1 A type.");
}

basicProperties.Headers = headers;
}

return basicProperties;
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Excess Number of Function Arguments
CreateBasicProperties has 7 arguments, threshold = 4

Suppress

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Health Quality Gates: FAILED

Change in average Code Health of affected files: -0.12 (9.49 -> 9.37)

  • Declining Code Health: 14 findings(s) 🚩

View detailed results in CodeScene

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Health Quality Gates: FAILED

Change in average Code Health of affected files: -0.12 (9.49 -> 9.37)

  • Declining Code Health: 14 findings(s) 🚩

View detailed results in CodeScene

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Health Quality Gates: FAILED

Change in average Code Health of affected files: -0.11 (9.49 -> 9.38)

  • Declining Code Health: 14 findings(s) 🚩

View detailed results in CodeScene

Comment on lines +268 to +339
public Message[] Receive(TimeSpan? timeOut = null)
{

if (Connection.Exchange is null)
throw new InvalidOperationException("RmqMessageConsumer.Receive - value of Connection.Exchange cannot be null");

if (Connection.AmpqUri is null)
throw new InvalidOperationException("RmqMessageConsumer.Receive - value of Connection.AmpqUri cannot be null");

s_logger.LogDebug(
"RmqMessageConsumer: Preparing to retrieve next message from queue {ChannelName} with routing key {RoutingKeys} via exchange {ExchangeName} on subscription {URL}",
_queueName.Value,
string.Join(";", _routingKeys.Select(rk => rk.Value)),
Connection.Exchange.Name,
Connection.AmpqUri.GetSanitizedUri()
);

timeOut ??= TimeSpan.FromMilliseconds(5);

try
{
EnsureChannel();

//NOTE: EnsureChannel means that _consumer cannot be null
var (resultCount, results) = _consumer!.DeQueue(timeOut.Value, _batchSize);

if (results != null && results.Length != 0)
{
var messages = new Message[resultCount];
for (var i = 0; i < resultCount; i++)
{
var message = _messageCreator.CreateMessage(results[i]);
messages[i] = message;

s_logger.LogInformation(
"RmqMessageConsumer: Received message from queue {ChannelName} with routing key {RoutingKeys} via exchange {ExchangeName} on subscription {URL}, message: {Request}",
_queueName.Value,
string.Join(";", _routingKeys.Select(rk => rk.Value)),
Connection.Exchange.Name,
Connection.AmpqUri.GetSanitizedUri(),
JsonSerializer.Serialize(message, JsonSerialisationOptions.Options)
);
}

return messages;
}
else
{

return [_noopMessage];
}
}
catch (Exception exception) when (exception is BrokerUnreachableException ||
exception is AlreadyClosedException ||
exception is TimeoutException)
{
HandleException(exception, true);
}
catch (Exception exception) when (exception is EndOfStreamException ||
exception is OperationInterruptedException ||
exception is NotSupportedException ||
exception is BrokenCircuitException)
{
HandleException(exception);
}
catch (Exception exception)
{
HandleException(exception);
}

return [_noopMessage]; // Default return in case of exception
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Complex Method
Receive has a cyclomatic complexity of 15, threshold = 9

Suppress

@@ -0,0 +1,544 @@
#region Licence

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ New issue: Overall Code Complexity
This module has a mean cyclomatic complexity of 4.17 across 18 functions. The mean complexity threshold is 4

Suppress

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

@iancooper iancooper marked this pull request as ready for review February 9, 2025 13:28
Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

Copy link

@codescene-delta-analysis codescene-delta-analysis bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Failed
New code is healthy (3 new files with code health below 9.00)
Enforce critical code health rules (2 files with Bumpy Road Ahead)
Enforce advisory code health rules (5 files with Excess Number of Function Arguments, Complex Method, Overall Code Complexity, Constructor Over-Injection, Complex Conditional)

Gates Passed
1 Quality Gates Passed

See analysis details in CodeScene

Reason for failure
New code is healthy Violations Code Health Impact
RmqMessageConsumer.cs 4 rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 3 rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 rules 10.00 → 8.97 Suppress
Enforce critical code health rules Violations Code Health Impact
RmqMessageConsumer.cs 1 critical rule 10.00 → 8.59 Suppress
RmqMessageCreator.cs 1 critical rule 10.00 → 8.96 Suppress
Enforce advisory code health rules Violations Code Health Impact
RmqMessageConsumer.cs 3 advisory rules 10.00 → 8.59 Suppress
RmqMessageCreator.cs 2 advisory rules 10.00 → 8.96 Suppress
RmqMessagePublisher.cs 2 advisory rules 10.00 → 8.97 Suppress
PullConsumer.cs 1 advisory rule 10.00 → 9.69 Suppress
RmqMessageProducer.cs 1 advisory rule 10.00 → 9.69 Suppress

Quality Gate Profile: Clean Code Collective
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

@iancooper iancooper added 3 - Done Breaking Change dependencies Pull requests that update a dependency file v10 Allocal to a v10 release .NET Pull requests that update .net code labels Feb 17, 2025
@iancooper iancooper merged commit daed3d3 into master Feb 17, 2025
16 of 20 checks passed
@iancooper iancooper deleted the rmq_fixes branch February 17, 2025 08:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3 - Done Breaking Change dependencies Pull requests that update a dependency file .NET Pull requests that update .net code v10 Allocal to a v10 release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant