diff --git a/bsmd.database/MessageTelemetry.cs b/bsmd.database/MessageTelemetry.cs index 82d8d725..d79d88b2 100644 --- a/bsmd.database/MessageTelemetry.cs +++ b/bsmd.database/MessageTelemetry.cs @@ -34,37 +34,64 @@ namespace bsmd.database 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)) _telemetry.Add(provider, new Dictionary()); - 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 { MessageTelemetry mt = new MessageTelemetry(); mt.SendDate = DateTime.Now; mt.NumTries = 1; - _telemetry[provider][message.Id.Value] = mt; + _telemetry[provider][messageId] = mt; } } 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[provider].ContainsKey(message.Id.Value)) + Guid messageId = message.Id.Value; + if (_telemetry[provider].ContainsKey(messageId)) { - 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); + 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); + _telemetry[provider].Remove(messageId); } 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}", - provider.ToString(), message.Id.Value); + provider.ToString(), messageId); } } }