private void DoSearchTimeline( Build build, Timeline timeline, ModelBuild modelBuild, ModelTimelineQuery modelTimelineQuery) { var searchText = modelTimelineQuery.SearchText; Logger.LogInformation($@"Text: ""{searchText}"""); if (TriageContextUtil.IsProcessed(modelTimelineQuery, modelBuild)) { Logger.LogInformation($@"Skipping"); return; } var count = 0; foreach (var result in QueryUtil.SearchTimeline(build, timeline, text: searchText)) { count++; var modelTimelineItem = new ModelTimelineItem() { TimelineRecordName = result.TimelineRecord.Name, Line = result.Line, ModelBuild = modelBuild, ModelTimelineQuery = modelTimelineQuery, BuildNumber = result.Build.GetBuildKey().Number, }; Context.ModelTimelineItems.Add(modelTimelineItem); } var modelTimelineQueryComplete = new ModelTimelineQueryComplete() { ModelTimelineQuery = modelTimelineQuery, ModelBuild = modelBuild, }; Context.ModelTimelineQueryCompletes.Add(modelTimelineQueryComplete); try { Logger.LogInformation($@"Saving {count} jobs"); Context.SaveChanges(); } catch (Exception ex) { Logger.LogError($"Cannot save timeline complete: {ex.Message}"); } }