Improved error handling for message telemetry when sending messages
This commit is contained in:
parent
6375639387
commit
a3d6ed337a
@ -34,37 +34,64 @@ namespace bsmd.database
|
|||||||
|
|
||||||
public static void Enqueue(Message.NSWProvider provider, Message message)
|
public static void Enqueue(Message.NSWProvider provider, Message message)
|
||||||
{
|
{
|
||||||
|
// Validate inputs
|
||||||
|
if (message == null)
|
||||||
|
{
|
||||||
|
_log.ErrorFormat("Enqueue called with null message for provider {0}", provider);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!message.Id.HasValue)
|
||||||
|
{
|
||||||
|
_log.ErrorFormat("Enqueue called with message that has no Id assigned for provider {0}", provider);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!_telemetry.ContainsKey(provider))
|
if (!_telemetry.ContainsKey(provider))
|
||||||
_telemetry.Add(provider, new Dictionary<Guid, MessageTelemetry>());
|
_telemetry.Add(provider, new Dictionary<Guid, MessageTelemetry>());
|
||||||
|
|
||||||
if (_telemetry[provider].ContainsKey(message.Id.Value))
|
Guid messageId = message.Id.Value;
|
||||||
|
|
||||||
|
if (_telemetry[provider].ContainsKey(messageId))
|
||||||
{
|
{
|
||||||
_telemetry[provider][message.Id.Value].NumTries++;
|
_telemetry[provider][messageId].NumTries++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MessageTelemetry mt = new MessageTelemetry();
|
MessageTelemetry mt = new MessageTelemetry();
|
||||||
mt.SendDate = DateTime.Now;
|
mt.SendDate = DateTime.Now;
|
||||||
mt.NumTries = 1;
|
mt.NumTries = 1;
|
||||||
_telemetry[provider][message.Id.Value] = mt;
|
_telemetry[provider][messageId] = mt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Dequeue(Message.NSWProvider provider, Message message)
|
public static void Dequeue(Message.NSWProvider provider, Message message)
|
||||||
{
|
{
|
||||||
|
if (message == null)
|
||||||
|
{
|
||||||
|
_log.ErrorFormat("Dequeue called with null message for provider {0}", provider);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!message.Id.HasValue)
|
||||||
|
{
|
||||||
|
_log.ErrorFormat("Dequeue called with message that has no Id assigned for provider {0}", provider);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_telemetry.ContainsKey(provider))
|
if (_telemetry.ContainsKey(provider))
|
||||||
{
|
{
|
||||||
if (_telemetry[provider].ContainsKey(message.Id.Value))
|
Guid messageId = message.Id.Value;
|
||||||
|
if (_telemetry[provider].ContainsKey(messageId))
|
||||||
{
|
{
|
||||||
MessageTelemetry mt = _telemetry[provider][message.Id.Value];
|
MessageTelemetry mt = _telemetry[provider][messageId];
|
||||||
_log.InfoFormat("[{0,10}][{1,8}][{2:00000}][{3:00}] ",provider, message.MessageNotificationClassDisplay, (DateTime.Now - mt.SendDate).TotalSeconds, mt.NumTries);
|
_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);
|
_telemetry[provider].Remove(messageId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// this can happen if the service gets re-started and not all sent messages have yet been received
|
|
||||||
_log.WarnFormat("trying to deque a message from telemetry that we don't know about. Provider: {0} MessageId: {1}",
|
_log.WarnFormat("trying to deque a message from telemetry that we don't know about. Provider: {0} MessageId: {1}",
|
||||||
provider.ToString(), message.Id.Value);
|
provider.ToString(), messageId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user