/// <summary>
        ///     Process an event asynchronously.
        /// </summary>
        /// <param name="e">event to process</param>
        /// <returns>
        ///     Task to wait on.
        /// </returns>
        public async Task HandleAsync(IMessageContext context, ReportAddedToIncident e)
        {
            if (e.IsStored != true)
            {
                return;
            }

            _logger.Debug("Updating similarities " + e.Incident.Id);
            var adapters = _adapterRepository.GetAdapters();
            var sw2      = new Stopwatch();

            sw2.Start();
            long beginStep, afterFindStep, afterReposStep;

            try
            {
                _logger.Debug("Finding for incident: " + e.Incident.Id);
                beginStep = sw2.ElapsedMilliseconds;

                var similaritiesReport = _similarityRepository.FindForIncident(e.Incident.Id);
                var isNew = false;
                if (similaritiesReport == null)
                {
                    similaritiesReport = new SimilaritiesReport(e.Incident.Id);
                    isNew = true;
                }

                var analyzer = new SimilarityAnalyzer(similaritiesReport);
                afterFindStep = sw2.ElapsedMilliseconds;
                analyzer.AddReport(e.Report, adapters);

                if (isNew)
                {
                    _logger.Debug("Creating new similarity report...");
                    await _similarityRepository.CreateAsync(similaritiesReport);
                }
                else
                {
                    _logger.Debug("Updating existing similarity report...");
                    await _similarityRepository.UpdateAsync(similaritiesReport);
                }

                afterReposStep = sw2.ElapsedMilliseconds;
                _logger.Debug("similarities done ");
            }
            catch (Exception exception)
            {
                _logger.Error("failed to add report to incident " + e.Incident.Id, exception);

                // Live changes since we get deadlocks?
                // TODO: WHY do we get deadlocks, aren't we the only ones reading from the similarity tables?
                return;
            }
            sw2.Stop();
            if (sw2.ElapsedMilliseconds > 200)
            {
                _logger.InfoFormat("Slow similarity handling, times: {0}/{1}/{2}/{3}", beginStep, afterFindStep, afterReposStep,
                                   sw2.ElapsedMilliseconds);
            }
        }
        /// <summary>
        ///     Process an event asynchronously.
        /// </summary>
        /// <param name="e">event to process</param>
        /// <returns>
        ///     Task to wait on.
        /// </returns>
        public async Task HandleAsync(IMessageContext context, ReportAddedToIncident e)
        {
            _logger.Debug("Updating similarities");
            var adapters = _adapterRepository.GetAdapters();
            var sw2      = new Stopwatch();

            sw2.Start();
            long step1, step2, step3;

            try
            {
                _logger.Debug("Finding for incident: " + e.Incident.Id);
                var similaritiesReport = _similarityRepository.FindForIncident(e.Incident.Id);

                step1 = sw2.ElapsedMilliseconds;
                var isNew = false;
                if (similaritiesReport == null)
                {
                    _logger.Debug("Not found, creating a new");
                    similaritiesReport = new SimilaritiesReport(e.Incident.Id);
                    isNew = true;
                }

                var analyzer = new SimilarityAnalyzer(similaritiesReport);
                step2 = sw2.ElapsedMilliseconds;
                analyzer.AddReport(e.Report, adapters);

                if (isNew)
                {
                    _logger.Debug("Creating...");
                    await _similarityRepository.CreateAsync(similaritiesReport);
                }
                else
                {
                    _logger.Debug("Updating...");
                    await _similarityRepository.UpdateAsync(similaritiesReport);
                }

                step3 = sw2.ElapsedMilliseconds;
                _logger.Debug("similarities done ");
            }
            catch (Exception exception)
            {
                _logger.Error("failed to add report to incident " + e.Incident.Id, exception);
                return;
            }
            sw2.Stop();
            if (sw2.ElapsedMilliseconds > 200)
            {
                _logger.InfoFormat("Slow similarity handling, times: {0}/{1}/{2}/{3}", step1, step2, step3,
                                   sw2.ElapsedMilliseconds);
            }
        }