private void AppendDetailsToJob(BackgrounderJob job, BsonDocument endEvent)
        {
            DateTime endTime          = BsonDocumentHelper.GetDateTime("ts", endEvent);
            var      eventsInJobRange = MongoQueryHelper.GetEventsInRange(backgrounderJavaCollection, job.WorkerId, job.BackgrounderId, job.StartTime, endTime).ToList();

            // Append all errors associated with job.
            job.Errors = CollectErrorsForJob(job, eventsInJobRange);

            // Append details for certain job types of interest.
            if (job.JobType.Equals("refresh_extracts") || job.JobType.Equals("increment_extracts"))
            {
                BackgrounderExtractJobDetail extractJobDetail = new BackgrounderExtractJobDetail(job, GetVqlSessionServiceEvents(eventsInJobRange));
                if (!String.IsNullOrEmpty(extractJobDetail.VizqlSessionId))
                {
                    job.BackgrounderJobDetail = extractJobDetail;
                }
            }
            else if (job.JobType.Equals("single_subscription_notify"))
            {
                List <BsonDocument> eventList = new List <BsonDocument>(GetVqlSessionServiceEvents(eventsInJobRange));
                eventList.AddRange(GetSubscriptionRunnerEvents(eventsInJobRange));

                BackgrounderSubscriptionJobDetail subscriptionJobDetail = new BackgrounderSubscriptionJobDetail(job, eventList);
                if (!String.IsNullOrEmpty(subscriptionJobDetail.VizqlSessionId))
                {
                    job.BackgrounderJobDetail = subscriptionJobDetail;
                }
            }
        }
        public void ExtractDetails()
        {
            var startEvent1 = GetStartEvent(1, "refresh_extracts"); // Extract refresh with details

            startEvent1.Args = "[TestyTest, blah, Datasource]";
            var startEvent2 = GetStartEvent(2, "refresh_extracts");   // Extract refresh without details
            var startEvent3 = GetStartEvent(3, "increment_extracts"); // Incremental refresh
            var startEvent4 = GetStartEvent(4, "some_other_job");     // Some other job type

            var endEvent1 = GetEndEvent(1);
            var endEvent2 = GetEndEvent(2);
            var endEvent3 = GetEndEvent(3);
            var endEvent4 = GetEndEvent(4);

            var detail1 = GetExtractJobDetail(1);
            var detail2 = new BackgrounderExtractJobDetail()
            {
                BackgrounderJobId = 2,
                ResourceType      = "testArgument"
            };
            var detail3 = GetExtractJobDetail(3);
            var detail4 = GetExtractJobDetail(4);

            _persister.AddStartEvent(startEvent1);
            _persister.AddStartEvent(startEvent2);
            _persister.AddStartEvent(startEvent3);
            _persister.AddStartEvent(startEvent4);
            _persister.AddExtractJobDetails(detail1);
            _persister.AddExtractJobDetails(detail3);
            _persister.AddExtractJobDetails(detail4);
            _persister.AddEndEvent(endEvent1);
            _persister.AddEndEvent(endEvent2);
            _persister.AddEndEvent(endEvent3);
            _persister.AddEndEvent(endEvent4);

            var jobWriter = _writerFactory.GetWriterByName <BackgrounderJob>("BackgrounderJobs");

            jobWriter.ReceivedObjects.Count.Should().Be(4);

            var extractJobDetailWriter = _writerFactory.GetWriterByName <BackgrounderExtractJobDetail>("BackgrounderExtractJobDetails");

            extractJobDetailWriter.ReceivedObjects.Count.Should().Be(3);
            var actualDetail1 = extractJobDetailWriter.ReceivedObjects[0] as BackgrounderExtractJobDetail;
            var actualDetail2 = extractJobDetailWriter.ReceivedObjects[1] as BackgrounderExtractJobDetail;
            var actualDetail3 = extractJobDetailWriter.ReceivedObjects[2] as BackgrounderExtractJobDetail;

            detail1.ResourceName = "TestyTest";
            detail1.ResourceType = "Datasource";
            actualDetail1.Should().BeEquivalentTo(detail1);
            actualDetail2.Should().BeEquivalentTo(detail2);
            actualDetail3.Should().BeEquivalentTo(detail3);
        }
 public void AddExtractJobDetails(BackgrounderExtractJobDetail extractJobDetail)
 {
     if (_events.ContainsKey(extractJobDetail.BackgrounderJobId))
     {
         _events[extractJobDetail.BackgrounderJobId].ExtractJobDetails = extractJobDetail;
     }
     else
     {
         _events.Add(extractJobDetail.BackgrounderJobId, new BackgrounderEvent {
             ExtractJobDetails = extractJobDetail
         });
     }
 }