Skip to content

Commit 62bf31d

Browse files
committed
Add MQ profiling support
1 parent 53cb475 commit 62bf31d

File tree

20 files changed

+342
-27
lines changed

20 files changed

+342
-27
lines changed

ServiceStack.Aws/src/ServiceStack.Aws/Sqs/SqsMqMessageProducer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public void Publish<T>(T messageBody)
3131
{
3232
if (messageBody is IMessage message)
3333
{
34+
Diagnostics.ServiceStack.Init(message);
3435
Publish(message.ToInQueueName(), message);
3536
}
3637
else

ServiceStack.Azure/src/ServiceStack.Azure/Messaging/ServiceBusMqMessageProducer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public void Publish<T>(T messageBody)
4242
// Ensure we're publishing an IMessage
4343
if (messageBody is IMessage message)
4444
{
45+
Diagnostics.ServiceStack.Init(message);
4546
Publish(message.ToInQueueName(), message);
4647
}
4748
else

ServiceStack.Text/src/ServiceStack.Text/Diagnostics.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ public static class ServiceStack
4141
public const string WriteGatewayBefore = Prefix + nameof(WriteGatewayBefore);
4242
public const string WriteGatewayAfter = Prefix + nameof(WriteGatewayAfter);
4343
public const string WriteGatewayError = Prefix + nameof(WriteGatewayError);
44+
45+
public const string WriteMqRequestBefore = Prefix + nameof(WriteMqRequestBefore);
46+
public const string WriteMqRequestAfter = Prefix + nameof(WriteMqRequestAfter);
47+
public const string WriteMqRequestError = Prefix + nameof(WriteMqRequestError);
48+
public const string WriteMqRequestPublish = Prefix + nameof(WriteMqRequestPublish);
4449
}
4550

4651
public static class Client
@@ -108,6 +113,9 @@ public static class Activity
108113
public const string OperationId = nameof(OperationId);
109114
public const string UserId = nameof(UserId);
110115
public const string Tag = nameof(Tag);
116+
public const string MqBegin = nameof(MqBegin);
117+
public const string MqEnd = nameof(MqEnd);
118+
111119
}
112120

113121
private DiagnosticListener servicestack { get; set; } = new(Listeners.ServiceStack);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Diagnostics;
2+
using System.Runtime.CompilerServices;
3+
using ServiceStack.Messaging;
4+
5+
namespace ServiceStack;
6+
7+
// sync with CommonDiagnosticUtils
8+
public static class ClientDiagnosticUtils
9+
{
10+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
11+
public static void InitMessage(this DiagnosticListener listener, IMessage msg)
12+
{
13+
if (listener.IsEnabled(Diagnostics.Events.ServiceStack.WriteMqRequestBefore))
14+
{
15+
var activity = Activity.Current;
16+
if (activity != null)
17+
{
18+
msg.TraceId ??= activity.GetTraceId();
19+
msg.Tag ??= activity.GetTag();
20+
}
21+
}
22+
}
23+
}

ServiceStack/src/ServiceStack.Client/Messaging/RedisMessageProducer.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,16 @@ public IRedisNativeClient ReadWriteClient
2727
{
2828
get
2929
{
30-
if (this.readWriteClient == null)
31-
{
32-
this.readWriteClient = (IRedisNativeClient)clientsManager.GetClient();
33-
}
30+
this.readWriteClient ??= (IRedisNativeClient)clientsManager.GetClient();
3431
return readWriteClient;
3532
}
3633
}
3734

3835
public void Publish<T>(T messageBody)
3936
{
40-
var message = messageBody as IMessage;
41-
if (message != null)
37+
if (messageBody is IMessage message)
4238
{
39+
Diagnostics.ServiceStack.InitMessage(message);
4340
Publish(message.ToInQueueName(), message);
4441
}
4542
else

ServiceStack/src/ServiceStack.Client/Messaging/RedisMessageQueueClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public void Publish<T>(T messageBody)
3636
{
3737
if (messageBody is IMessage message)
3838
{
39+
Diagnostics.ServiceStack.InitMessage(message);
3940
Publish(message.ToInQueueName(), message);
4041
}
4142
else

ServiceStack/src/ServiceStack.Client/ServiceClientBase.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,6 +1127,7 @@ public void Publish<T>(T requestDto)
11271127

11281128
public void Publish<T>(IMessage<T> message)
11291129
{
1130+
Diagnostics.ServiceStack.InitMessage(message);
11301131
var requestDto = message.GetBody();
11311132

11321133
if (message.CreatedDate != default(DateTime))
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using System.Diagnostics;
3+
using System.Runtime.CompilerServices;
4+
using ServiceStack.Messaging;
5+
6+
namespace ServiceStack;
7+
8+
// sync with ClientDiagnosticUtils
9+
public static class CommonDiagnosticUtils
10+
{
11+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
12+
public static void Init(this DiagnosticListener listener, IMessage msg)
13+
{
14+
if (listener.IsEnabled(Diagnostics.Events.ServiceStack.WriteMqRequestBefore))
15+
{
16+
var activity = Activity.Current;
17+
if (activity != null)
18+
{
19+
msg.TraceId ??= activity.GetTraceId();
20+
msg.Tag ??= activity.GetTag();
21+
}
22+
}
23+
}
24+
}

ServiceStack/src/ServiceStack.Interfaces/Messaging/IMessage.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public interface IMessage
2323
string Tag { get; set; }
2424

2525
object Body { get; set; }
26+
27+
string TraceId { get; set; }
2628
}
2729

2830
public interface IMessage<T>

ServiceStack/src/ServiceStack.Interfaces/Messaging/MessageFactory.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class Message : IMessage
5151
public string Tag { get; set; }
5252
public Dictionary<string, string> Meta { get; set; }
5353
public object Body { get; set; }
54+
public string TraceId { get; set; }
5455

5556
public static Message<T> Create<T>(T request) => new(request);
5657
}

0 commit comments

Comments
 (0)