Skip to content

Commit 88e5412

Browse files
committed
Logs + refactoring
1 parent 9bf314d commit 88e5412

File tree

9 files changed

+134
-42
lines changed

9 files changed

+134
-42
lines changed

Directory.Build.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
<RepositoryUrl>https://github.com/managedcode/Orleans.SignalR</RepositoryUrl>
1818
<PackageProjectUrl>https://github.com/managedcode/Orleans.SignalR</PackageProjectUrl>
1919
<Product>Managed Code - Orleans SignalR</Product>
20-
<Version>7.1.2</Version>
21-
<PackageVersion>7.1.2</PackageVersion>
20+
<Version>7.1.3</Version>
21+
<PackageVersion>7.1.3</PackageVersion>
2222

2323
</PropertyGroup>
2424
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
using Microsoft.Extensions.Logging;
2+
3+
namespace ManagedCode.Orleans.SignalR.Core.Helpers;
4+
5+
public static partial class Logs
6+
{
7+
[LoggerMessage(
8+
Level = LogLevel.Trace,
9+
Message = "{grainType}:{grainId} OnDeactivateAsync")]
10+
public static partial void OnDeactivateAsync(ILogger logger, string grainType, string grainId);
11+
12+
[LoggerMessage(
13+
Level = LogLevel.Trace,
14+
Message = "{grainType}:{grainId} Ping")]
15+
public static partial void Ping(ILogger logger, string grainType, string grainId);
16+
17+
[LoggerMessage(
18+
Level = LogLevel.Trace,
19+
Message = "{grainType}:{grainId} AddConnection `{connectionId}`")]
20+
public static partial void AddConnection(ILogger logger, string grainType, string grainId, string connectionId);
21+
22+
[LoggerMessage(
23+
Level = LogLevel.Trace,
24+
Message = "{grainType}:{grainId} RemoveConnection `{connectionId}`")]
25+
public static partial void RemoveConnection(ILogger logger, string grainType, string grainId, string connectionId);
26+
27+
[LoggerMessage(
28+
Level = LogLevel.Trace,
29+
Message = "{grainType}:{grainId} SendToAll")]
30+
public static partial void SendToAll(ILogger logger, string grainType, string grainId);
31+
32+
[LoggerMessage(
33+
Level = LogLevel.Trace,
34+
Message = "{grainType}:{grainId} SendToAllExcept")]
35+
public static partial void SendToAllExcept(ILogger logger, string grainType, string grainId, string[] expectedConnectionIds);
36+
37+
[LoggerMessage(
38+
Level = LogLevel.Trace,
39+
Message = "{grainType}:{grainId} SendToConnection")]
40+
public static partial void SendToConnection(ILogger logger, string grainType, string grainId, string connectionId);
41+
42+
[LoggerMessage(
43+
Level = LogLevel.Trace,
44+
Message = "{grainType}:{grainId} SendToConnections")]
45+
public static partial void SendToConnections(ILogger logger, string grainType, string grainId, string[] expectedConnectionIds);
46+
47+
48+
[LoggerMessage(
49+
Level = LogLevel.Trace,
50+
Message = "{grainType}:{grainId} SendToGroup")]
51+
public static partial void SendToGroup(ILogger logger, string grainType, string grainId);
52+
53+
[LoggerMessage(
54+
Level = LogLevel.Trace,
55+
Message = "{grainType}:{grainId} SendToGroupExcept")]
56+
public static partial void SendToGroupExcept(ILogger logger, string grainType, string grainId, string[] expectedConnectionIds);
57+
58+
[LoggerMessage(
59+
Level = LogLevel.Trace,
60+
Message = "{grainType}:{grainId} TryCompleteResult")]
61+
public static partial void TryCompleteResult(ILogger logger, string grainType, string grainId, string connectionId);
62+
63+
[LoggerMessage(
64+
Level = LogLevel.Trace,
65+
Message = "{grainType}:{grainId} TryGetReturnType")]
66+
public static partial void TryGetReturnType(ILogger logger, string grainType, string grainId);
67+
68+
[LoggerMessage(
69+
Level = LogLevel.Trace,
70+
Message = "{grainType}:{grainId} AddInvocation")]
71+
public static partial void AddInvocation(ILogger logger, string grainType, string grainId, string invocationId, string connectionId);
72+
73+
[LoggerMessage(
74+
Level = LogLevel.Trace,
75+
Message = "{grainType}:{grainId} RemoveInvocation")]
76+
public static partial void RemoveInvocation(ILogger logger, string grainType, string grainId);
77+
78+
[LoggerMessage(
79+
Level = LogLevel.Trace,
80+
Message = "{grainType}:{grainId} SendToUser")]
81+
public static partial void SendToUser(ILogger logger, string grainType, string grainId);
82+
83+
84+
}

ManagedCode.Orleans.SignalR.Core/Helpers/TimeIntervalHelper.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,9 @@ public static TimeSpan GetKeepAliveInterval(IOptions<HubOptions> globalHubOption
6161

6262
return timeSpan;
6363
}
64+
65+
public static TimeSpan AddExpirationIntervalBuffer(TimeSpan timeSpan)
66+
{
67+
return timeSpan * 1.2;
68+
}
6469
}

ManagedCode.Orleans.SignalR.Core/SignalR/OrleansHubLifetimeManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ private Subscription CreateConnectionObserver(HubConnectionContext connection)
297297
private Subscription CreateSubscription(Func<HubMessage, Task>? onNextAction)
298298
{
299299
var timeSpan = TimeIntervalHelper.GetClientTimeoutInterval(_orleansSignalOptions, _globalHubOptions, _hubOptions);
300-
var subscription = new Subscription(new SignalRObserver(onNextAction), timeSpan * 0.8);
300+
var subscription = new Subscription(new SignalRObserver(onNextAction), timeSpan);
301301
var reference = _clusterClient.CreateObjectReference<ISignalRObserver>(subscription.GetObserver());
302302
subscription.SetReference(reference);
303303
return subscription;

ManagedCode.Orleans.SignalR.Server/Extensions/OrleansDependencyInjectionExtensions.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,11 @@
88
using Orleans;
99
using Orleans.Configuration;
1010
using Orleans.Hosting;
11-
using Orleans.Runtime;
1211

1312
namespace ManagedCode.Orleans.SignalR.Server.Extensions;
1413

1514
/// <summary>
1615
/// Extension methods for configuring Orleans-based scale-out for a SignalR Server in an
17-
/// <see cref="ISignalRServerBuilder" />.
1816
/// </summary>
1917
public static class OrleansDependencyInjectionExtensions
2018
{
@@ -35,7 +33,7 @@ public static ISignalRServerBuilder AddOrleans(this ISignalRServerBuilder signal
3533

3634
public static ISiloBuilder ConfigureOrleansSignalR(this ISiloBuilder siloBuilder)
3735
{
38-
var timeSpan = TimeSpan.FromMinutes(5);
36+
var timeSpan = TimeSpan.FromMinutes(7);
3937

4038
void SetSpecificCollectionAge<T>(GrainCollectionOptions options)
4139
{

ManagedCode.Orleans.SignalR.Server/SignalRConnectionHolderGrain.cs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,38 +33,36 @@ public SignalRConnectionHolderGrain(ILogger<SignalRConnectionHolderGrain> logger
3333
_stateStorage = stateStorage;
3434

3535
var timeSpan = TimeIntervalHelper.GetClientTimeoutInterval(orleansSignalOptions, hubOptions);
36-
_observerManager = new ObserverManager<ISignalRObserver>(timeSpan * 1.2, _logger);
36+
_observerManager = new ObserverManager<ISignalRObserver>(TimeIntervalHelper.AddExpirationIntervalBuffer(timeSpan), _logger);
3737
}
3838

3939
public async Task AddConnection(string connectionId, ISignalRObserver observer)
4040
{
4141
await Task.Yield();
42-
_logger.LogInformation("Hub: {PrimaryKeyString}; AddConnection: {ConnectionId}", this.GetPrimaryKeyString(),
43-
connectionId);
42+
Logs.AddConnection(_logger, nameof(SignalRConnectionHolderGrain),this.GetPrimaryKeyString(), connectionId);
4443
_observerManager.Subscribe(observer, observer);
4544
_stateStorage.State.ConnectionIds.Add(connectionId, observer.GetPrimaryKeyString());
4645
}
4746

4847
public async Task RemoveConnection(string connectionId, ISignalRObserver observer)
4948
{
5049
await Task.Yield();
51-
_logger.LogInformation("Hub: {PrimaryKeyString}; RemoveConnection: {ConnectionId}", this.GetPrimaryKeyString(),
52-
connectionId);
50+
Logs.RemoveConnection(_logger, nameof(SignalRConnectionHolderGrain),this.GetPrimaryKeyString(), connectionId);
5351
_observerManager.Unsubscribe(observer);
5452
_stateStorage.State.ConnectionIds.Remove(connectionId);
5553
}
5654

5755
public async Task SendToAll(HubMessage message)
5856
{
5957
await Task.Yield();
60-
_logger.LogInformation("Hub: {PrimaryKeyString}; SendToAll", this.GetPrimaryKeyString());
58+
Logs.SendToAll(_logger, nameof(SignalRConnectionHolderGrain),this.GetPrimaryKeyString());
6159
await _observerManager.Notify(s => s.OnNextAsync(message));
6260
}
6361

6462
public async Task SendToAllExcept(HubMessage message, string[] excludedConnectionIds)
6563
{
6664
await Task.Yield();
67-
_logger.LogInformation("Hub: {PrimaryKeyString}; SendToAllExcept", this.GetPrimaryKeyString());
65+
Logs.SendToAllExcept(_logger, nameof(SignalRConnectionHolderGrain),this.GetPrimaryKeyString(), excludedConnectionIds);
6866
var hashSet = new HashSet<string>();
6967
foreach (var connectionId in excludedConnectionIds)
7068
if (_stateStorage.State.ConnectionIds.TryGetValue(connectionId, out var observer))
@@ -77,8 +75,8 @@ await _observerManager.Notify(s => s.OnNextAsync(message),
7775
public async Task<bool> SendToConnection(HubMessage message, string connectionId)
7876
{
7977
await Task.Yield();
80-
_logger.LogInformation("Hub: {PrimaryKeyString}; SendToConnection {ConnectionId}", this.GetPrimaryKeyString(),
81-
connectionId);
78+
Logs.SendToConnection(_logger, nameof(SignalRConnectionHolderGrain),this.GetPrimaryKeyString(), connectionId);
79+
8280
if (!_stateStorage.State.ConnectionIds.TryGetValue(connectionId, out var observer))
8381
return false;
8482

@@ -91,10 +89,9 @@ await _observerManager.Notify(s => s.OnNextAsync(message),
9189
public async Task SendToConnections(HubMessage message, string[] connectionIds)
9290
{
9391
await Task.Yield();
94-
_logger.LogInformation("Hub: {PrimaryKeyString}; SendToConnections {ConnectionId}", this.GetPrimaryKeyString(),
95-
connectionIds);
92+
Logs.SendToConnections(_logger, nameof(SignalRConnectionHolderGrain),this.GetPrimaryKeyString(), connectionIds);
93+
9694
var hashSet = new HashSet<string>();
97-
9895
foreach (var connectionId in connectionIds)
9996
if (_stateStorage.State.ConnectionIds.TryGetValue(connectionId, out var observer))
10097
hashSet.Add(observer);
@@ -106,11 +103,13 @@ await _observerManager.Notify(s => s.OnNextAsync(message),
106103
public async Task Ping(ISignalRObserver observer)
107104
{
108105
await Task.Yield();
106+
Logs.Ping(_logger, nameof(SignalRConnectionHolderGrain),this.GetPrimaryKeyString());
109107
_observerManager.Subscribe(observer, observer);
110108
}
111109

112110
public override async Task OnDeactivateAsync(DeactivationReason reason, CancellationToken cancellationToken)
113111
{
112+
Logs.OnDeactivateAsync(_logger, nameof(SignalRConnectionHolderGrain),this.GetPrimaryKeyString());
114113
_observerManager.ClearExpired();
115114

116115
if (_observerManager.Count == 0 || _stateStorage.State.ConnectionIds.Count == 0)

ManagedCode.Orleans.SignalR.Server/SignalRGroupGrain.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,20 @@ public SignalRGroupGrain(ILogger<SignalRGroupGrain> logger, IOptions<OrleansSign
3333
_stateStorage = stateStorage;
3434

3535
var timeSpan = TimeIntervalHelper.GetClientTimeoutInterval(orleansSignalOptions, hubOptions);
36-
_observerManager = new ObserverManager<ISignalRObserver>(timeSpan * 1.2, _logger);
36+
_observerManager = new ObserverManager<ISignalRObserver>(TimeIntervalHelper.AddExpirationIntervalBuffer(timeSpan), _logger);
3737
}
3838

3939
public async Task SendToGroup(HubMessage message)
4040
{
4141
await Task.Yield();
42-
_logger.LogInformation("Hub: {PrimaryKeyString}; SendToGroup", this.GetPrimaryKeyString());
42+
Logs.SendToGroup(_logger, nameof(SignalRGroupGrain),this.GetPrimaryKeyString());
4343
await _observerManager.Notify(s => s.OnNextAsync(message));
4444
}
4545

4646
public async Task SendToGroupExcept(HubMessage message, string[] excludedConnectionIds)
4747
{
4848
await Task.Yield();
49-
_logger.LogInformation("Hub: {PrimaryKeyString}; SendToGroupExcept: {ConnectionId}", this.GetPrimaryKeyString(),
50-
excludedConnectionIds);
49+
Logs.SendToGroupExcept(_logger, nameof(SignalRGroupGrain),this.GetPrimaryKeyString(), excludedConnectionIds);
5150
var hashSet = new HashSet<string>();
5251
foreach (var connectionId in excludedConnectionIds)
5352
if (_stateStorage.State.ConnectionIds.TryGetValue(connectionId, out var observer))
@@ -60,29 +59,29 @@ await _observerManager.Notify(s => s.OnNextAsync(message),
6059
public async Task AddConnection(string connectionId, ISignalRObserver observer)
6160
{
6261
await Task.Yield();
63-
_logger.LogInformation("Hub: {PrimaryKeyString}; AddConnection: {ConnectionId}", this.GetPrimaryKeyString(),
64-
connectionId);
62+
Logs.AddConnection(_logger, nameof(SignalRGroupGrain),this.GetPrimaryKeyString(), connectionId);
6563
_observerManager.Subscribe(observer, observer);
6664
_stateStorage.State.ConnectionIds.Add(connectionId, observer.GetPrimaryKeyString());
6765
}
6866

6967
public async Task RemoveConnection(string connectionId, ISignalRObserver observer)
7068
{
7169
await Task.Yield();
72-
_logger.LogInformation("Hub: {PrimaryKeyString}; RemoveConnection: {ConnectionId}", this.GetPrimaryKeyString(),
73-
connectionId);
70+
Logs.RemoveConnection(_logger, nameof(SignalRGroupGrain),this.GetPrimaryKeyString(), connectionId);
7471
_observerManager.Unsubscribe(observer);
7572
_stateStorage.State.ConnectionIds.Remove(connectionId);
7673
}
7774

7875
public async Task Ping(ISignalRObserver observer)
7976
{
8077
await Task.Yield();
78+
Logs.Ping(_logger, nameof(SignalRGroupGrain),this.GetPrimaryKeyString());
8179
_observerManager.Subscribe(observer, observer);
8280
}
8381

8482
public override async Task OnDeactivateAsync(DeactivationReason reason, CancellationToken cancellationToken)
8583
{
84+
Logs.OnDeactivateAsync(_logger, nameof(DeactivationReason),this.GetPrimaryKeyString());
8685
_observerManager.ClearExpired();
8786

8887
if (_observerManager.Count == 0 || _stateStorage.State.ConnectionIds.Count == 0)

ManagedCode.Orleans.SignalR.Server/SignalRInvocationGrain.cs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,13 @@ public SignalRInvocationGrain(ILogger<SignalRInvocationGrain> logger,
3232
_stateStorage = stateStorage;
3333

3434
var timeSpan = TimeIntervalHelper.GetClientTimeoutInterval(orleansSignalOptions, hubOptions);
35-
_observerManager = new ObserverManager<ISignalRObserver>(timeSpan * 1.2, _logger);
35+
_observerManager = new ObserverManager<ISignalRObserver>(TimeIntervalHelper.AddExpirationIntervalBuffer(timeSpan), _logger);
3636
}
3737

3838
public async Task TryCompleteResult(string connectionId, HubMessage message)
3939
{
4040
await Task.Yield();
41+
Logs.TryCompleteResult(_logger, nameof(SignalRInvocationGrain),this.GetPrimaryKeyString(), connectionId);
4142
_logger.LogInformation("Hub: {PrimaryKeyString}; TryCompleteResult: {ConnectionId}", this.GetPrimaryKeyString(),
4243
connectionId);
4344
if (_stateStorage.State == null || _stateStorage.State.ConnectionId != connectionId)
@@ -49,6 +50,8 @@ public async Task TryCompleteResult(string connectionId, HubMessage message)
4950
public async Task<ReturnType> TryGetReturnType()
5051
{
5152
await Task.Yield();
53+
54+
Logs.TryGetReturnType(_logger, nameof(SignalRInvocationGrain),this.GetPrimaryKeyString());
5255
if (_stateStorage.State == null)
5356
return new ReturnType();
5457

@@ -62,15 +65,19 @@ public async Task<ReturnType> TryGetReturnType()
6265
public async Task AddInvocation(ISignalRObserver observer, InvocationInfo invocationInfo)
6366
{
6467
await Task.Yield();
65-
_logger.LogInformation("Hub: {PrimaryKeyString}; AddInvocation", this.GetPrimaryKeyString());
68+
Logs.AddInvocation(_logger, nameof(SignalRInvocationGrain),this.GetPrimaryKeyString(), invocationInfo.InvocationId, invocationInfo.ConnectionId);
69+
70+
if(invocationInfo?.InvocationId is null || invocationInfo?.ConnectionId is null)
71+
return;
72+
6673
_observerManager.Subscribe(observer, observer);
6774
_stateStorage.State = invocationInfo;
6875
}
6976

7077
public async Task<InvocationInfo?> RemoveInvocation()
7178
{
7279
await Task.Yield();
73-
_logger.LogInformation("Hub: {PrimaryKeyString}; RemoveInvocation", this.GetPrimaryKeyString());
80+
Logs.RemoveInvocation(_logger, nameof(SignalRInvocationGrain),this.GetPrimaryKeyString());
7481
_observerManager.Clear();
7582
var into = _stateStorage.State;
7683
await _stateStorage.ClearStateAsync();
@@ -81,23 +88,21 @@ public async Task AddInvocation(ISignalRObserver observer, InvocationInfo invoca
8188
public async Task Ping(ISignalRObserver observer)
8289
{
8390
await Task.Yield();
91+
Logs.Ping(_logger, nameof(SignalRInvocationGrain),this.GetPrimaryKeyString());
8492
_observerManager.Subscribe(observer, observer);
8593
}
8694

87-
public async Task AddConnection(string connectionId, ISignalRObserver observer)
95+
public Task AddConnection(string connectionId, ISignalRObserver observer)
8896
{
89-
await Task.Yield();
9097
//ignore for this grain
91-
_logger.LogInformation("Hub: {PrimaryKeyString}; AddConnection: {ConnectionId}", this.GetPrimaryKeyString(),
92-
connectionId);
98+
Logs.AddConnection(_logger, nameof(SignalRInvocationGrain),this.GetPrimaryKeyString(), connectionId);
99+
return Task.CompletedTask;
93100
}
94101

95102
public async Task RemoveConnection(string connectionId, ISignalRObserver observer)
96103
{
97104
await Task.Yield();
98-
//ignore connectionId
99-
_logger.LogInformation("Hub: {PrimaryKeyString}; RemoveConnection: {ConnectionId}", this.GetPrimaryKeyString(),
100-
connectionId);
105+
Logs.RemoveConnection(_logger, nameof(SignalRInvocationGrain),this.GetPrimaryKeyString(), connectionId);
101106
_observerManager.Unsubscribe(observer);
102107
_observerManager.Clear();
103108
await _stateStorage.ClearStateAsync();
@@ -106,6 +111,8 @@ public async Task RemoveConnection(string connectionId, ISignalRObserver observe
106111

107112
public override async Task OnDeactivateAsync(DeactivationReason reason, CancellationToken cancellationToken)
108113
{
114+
Logs.OnDeactivateAsync(_logger, nameof(SignalRInvocationGrain),this.GetPrimaryKeyString());
115+
109116
_observerManager.ClearExpired();
110117

111118
if (string.IsNullOrEmpty(_stateStorage.State.ConnectionId) ||

0 commit comments

Comments
 (0)