76 lines
2.4 KiB
C#
76 lines
2.4 KiB
C#
// Copyright (c) 2024-present schick Informatik
|
|
// Description: The purpose of telemetry is to record message transmission times (and failures)
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using log4net;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace bsmd.database
|
|
{
|
|
|
|
public class MessageTelemetry
|
|
{
|
|
|
|
#region Fields
|
|
|
|
private static readonly Dictionary<Message.NSWProvider, Dictionary<Guid, MessageTelemetry>> _telemetry = new Dictionary<Message.NSWProvider, Dictionary<Guid, MessageTelemetry>>();
|
|
|
|
private static readonly ILog _log = LogManager.GetLogger(typeof(MessageTelemetry));
|
|
|
|
#endregion
|
|
|
|
#region Properties
|
|
|
|
public DateTime SendDate { get; private set; }
|
|
|
|
public int NumTries { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region public static methods
|
|
|
|
public static void Enqueue(Message.NSWProvider provider, Message message)
|
|
{
|
|
if (!_telemetry.ContainsKey(provider))
|
|
_telemetry.Add(provider, new Dictionary<Guid, MessageTelemetry>());
|
|
|
|
if (_telemetry[provider].ContainsKey(message.Id.Value))
|
|
{
|
|
_telemetry[provider][message.Id.Value].NumTries++;
|
|
}
|
|
else
|
|
{
|
|
MessageTelemetry mt = new MessageTelemetry();
|
|
mt.SendDate = DateTime.Now;
|
|
mt.NumTries = 1;
|
|
_telemetry[provider][message.Id.Value] = mt;
|
|
}
|
|
}
|
|
|
|
public static void Dequeue(Message.NSWProvider provider, Message message)
|
|
{
|
|
if (_telemetry.ContainsKey(provider))
|
|
{
|
|
if (_telemetry[provider].ContainsKey(message.Id.Value))
|
|
{
|
|
MessageTelemetry mt = _telemetry[provider][message.Id.Value];
|
|
_log.InfoFormat("[{0,10}][{1,8}][{2:00000}][{3:00}] ",provider, message.MessageNotificationClassDisplay, (DateTime.Now - mt.SendDate).TotalSeconds, mt.NumTries);
|
|
_telemetry[provider].Remove(message.Id.Value);
|
|
}
|
|
else
|
|
{
|
|
_log.ErrorFormat("trying to deque a message from telemetry that we don't know about. Provider: {0} MessageId: {1}",
|
|
provider.ToString(), message.Id.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
}
|