/
MessageHandlerStats.cs
88 lines (79 loc) · 3.25 KB
/
MessageHandlerStats.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
using System.Text;
namespace ServiceStack.Messaging;
public interface IMessageHandlerStats
{
string Name { get; }
int TotalMessagesProcessed { get; }
int TotalMessagesFailed { get; }
int TotalRetries { get; }
int TotalNormalMessagesReceived { get; }
int TotalPriorityMessagesReceived { get; }
DateTime? LastMessageProcessed { get; }
void Add(IMessageHandlerStats stats);
}
public class MessageHandlerStats : IMessageHandlerStats
{
public MessageHandlerStats(string name)
{
Name = name;
}
public MessageHandlerStats(string name, int totalMessagesProcessed, int totalMessagesFailed, int totalRetries,
int totalNormalMessagesReceived, int totalPriorityMessagesReceived, DateTime? lastMessageProcessed)
{
Name = name;
TotalMessagesProcessed = totalMessagesProcessed;
TotalMessagesFailed = totalMessagesFailed;
TotalRetries = totalRetries;
TotalNormalMessagesReceived = totalNormalMessagesReceived;
TotalPriorityMessagesReceived = totalPriorityMessagesReceived;
LastMessageProcessed = lastMessageProcessed;
}
public string Name { get; private set; }
public DateTime? LastMessageProcessed { get; private set; }
public int TotalMessagesProcessed { get; private set; }
public int TotalMessagesFailed { get; private set; }
public int TotalRetries { get; private set; }
public int TotalNormalMessagesReceived { get; private set; }
public int TotalPriorityMessagesReceived { get; private set; }
public virtual void Add(IMessageHandlerStats stats)
{
TotalMessagesProcessed += stats.TotalMessagesProcessed;
TotalMessagesFailed += stats.TotalMessagesFailed;
TotalRetries += stats.TotalRetries;
TotalNormalMessagesReceived += stats.TotalNormalMessagesReceived;
TotalPriorityMessagesReceived += stats.TotalPriorityMessagesReceived;
if (LastMessageProcessed == null || stats.LastMessageProcessed > LastMessageProcessed)
LastMessageProcessed = stats.LastMessageProcessed;
}
public override string ToString()
{
var sb = new StringBuilder();
sb.AppendLine($"STATS for {Name}:").AppendLine();
sb.AppendLine($" TotalNormalMessagesReceived: {TotalNormalMessagesReceived}");
sb.AppendLine($" TotalPriorityMessagesReceived: {TotalPriorityMessagesReceived}");
sb.AppendLine($" TotalProcessed: {TotalMessagesProcessed}");
sb.AppendLine($" TotalRetries: {TotalRetries}");
sb.AppendLine($" TotalFailed: {TotalMessagesFailed}");
sb.AppendLine($" LastMessageProcessed: {LastMessageProcessed?.ToString() ?? ""}");
return sb.ToString();
}
}
public static class MessageHandlerStatsExtensions
{
public static IMessageHandlerStats CombineStats(this IEnumerable<IMessageHandlerStats> stats)
{
IMessageHandlerStats to = null;
if (stats != null)
{
foreach (var stat in stats)
{
if (to == null)
to = new MessageHandlerStats(stat.Name);
to.Add(stat);
}
}
return to;
}
}