public async Task HandleAsync(ColdSpellEnteredNotification message)
        {
            Trace.TraceInformation("{0}: HANDLE: {1} {{Temp: {2}, EnteredAt: {3}}}.", message.DeviceId, message.GetType().Name, message.CurrentTemp, message.EnteredAt);

            var coldSpell = await _coldSpellRepository.GetAsync(message.DeviceId, message.SensorId);

            var utcNow = _dateTimeProvider.UtcNow();

            if (coldSpell != null)
            {
                Trace.TraceInformation("{0}: INFO: Last cold spell for sensor {1} occurred at {2}.", message.DeviceId, message.SensorId, coldSpell.AlertedAt);

                if (utcNow - coldSpell.AlertedAt > TimeSpan.FromHours(6))
                {
                    SendAlert(message);

                    coldSpell.AlertedAt = utcNow;
                    await _coldSpellRepository.SaveAsync(coldSpell);
                }
            }
            else
            {
                SendAlert(message);

                coldSpell = new ColdSpell
                {
                    DeviceId  = message.DeviceId,
                    SensorId  = message.SensorId,
                    AlertedAt = utcNow
                };

                await _coldSpellRepository.SaveAsync(coldSpell);
            }
        }