private static void GetCurrentAnalysisRequest(ActionExecutingContext filterContext, GNEntityModelContainer db) { try { GNAnalysisRequest currentAnalysisRequest = null; string analysisRequestId = filterContext.HttpContext.Request["analysisRequestId"]; if (!string.IsNullOrEmpty(analysisRequestId)) { currentAnalysisRequest = db.GNAnalysisRequests.Find(Guid.Parse(analysisRequestId)); } if (currentAnalysisRequest != null) { filterContext.Controller.ViewBag.CurrentAnalysisRequest = currentAnalysisRequest; } else { filterContext.Controller.ViewBag.CurrentAnalysisRequest = null; } } catch (Exception e) { LogUtil.Error(logger, "Unable to retrieve Current AnalysisRequest!!", e); } }
public override GNSample DetailsOnLoad(GNSample sample) { auditResult = audit.LogEvent(UserContact, sample.Id, this.ENTITY, this.Request.UserHostAddress, EVENT_LOAD_DETAILS_UI); sample.IsValidPairEnded = ((SampleService)entityService).IsValidPairEnded(sample); sample.IsValidSingleEnded = ((SampleService)entityService).IsValidSingleEnded(sample); List <GNSampleRelationshipType> RelationshipTypes = db.GNSampleRelationshipTypes.OrderBy(a => a.MaxRelationships).ThenBy(a => a.Name).ToList(); ViewBag.GNSampleRelationshipTypes = new SelectList(RelationshipTypes, "Id", "Name"); if (Request["analysisRequestId"] != null) { Guid AnalysisRequestId = Guid.Parse(Request["analysisRequestId"]); GNAnalysisRequest AnalysisRequest = db.GNAnalysisRequests.Where(a => a.Id.Equals(AnalysisRequestId)).FirstOrDefault(); ViewBag.CurrentAnalysisRequest = AnalysisRequest; GNProject Project = db.GNProjects.Where(a => a.Id.Equals(AnalysisRequest.GNProjectId)).FirstOrDefault(); ViewBag.CurrentProject = Project; Guid TeamId = Project.Teams.FirstOrDefault().Id; GNTeam Team = db.GNTeams.Where(a => a.Id.Equals(TeamId)).FirstOrDefault(); ViewBag.CurrentTeam = Team; } return(base.DetailsOnLoad(sample)); }
private static void MarkAnalysisAsFailed(AnalysisRequestService analysisRequestService, GNAnalysisRequest analysisRequest) { if (MARK_ANALYSIS_IN_ERROR_FEATURE_ACTIVE) { try { //get analysis request from db GNAnalysisRequest ar = analysisRequestService.db.GNAnalysisRequests .Include(a => a.AnalysisType) .Include(a => a.AnalysisStatus) .Include(a => a.AnalysisResult) .Where(a => a.Id == analysisRequest.Id) .FirstOrDefault(); //mark analysis as failed if (!ar.IsFailedRequest) { LogUtil.Info(logger, "Mark Analysis As Failed for AR ID [" + ar.Id + "]..."); System.Console.WriteLine("\nMark Analysis As Failed for AR ID [" + ar.Id + "]..."); analysisRequestService.MarkAnalysisAsFailed(analysisRequestService, ar); } } catch (Exception e) { LogUtil.Error(logger, "Unable to Process Failure of Analysis " + analysisRequest.Id + " : " + e.Message, e); } } }
public bool Notify(GNAnalysisRequest analysisRequest) { LogUtil.LogMethod(logger, MethodBase.GetCurrentMethod()); try { GNCloudFile GNCloudVCF = (from a in analysisRequest.AnalysisResult.ResultFiles where a.GNCloudFileCategoryId == 2 select a).FirstOrDefault <GNCloudFile>(); GNNewSampleBatch batch = analysisRequest.GNAnalysisRequestGNSamples.FirstOrDefault().GNSample.GNNewSampleBatchSample.GNNewSampleBatch; AnalysisCompletionMessage message = new AnalysisCompletionMessage { analysisId = analysisRequest.Id.ToString(), batchId = batch.BatchId, project = batch.Project, repository = batch.Repository, bamViewerURL = "https://secure.genomenext.net/GNPortal-1.3/AnalysisRequests/BamViewer?analysisId=" + analysisRequest.Id.ToString(), vcfFilename = GNCloudVCF.FileURL.Replace("https://", "s3://").Replace(".s3.amazonaws.com", "") }; System.Console.WriteLine("***\n ****** Sending message " + analysisRequest.CreateDateTime); this.SendMessage(message); } catch (Exception e1) { System.Console.WriteLine("***\n ****** Exception Sending message " + e1.InnerException + e1.Message + e1.StackTrace); Exception e2 = new Exception("Unable to send notification to queue.", e1); LogUtil.Warn(logger, e2.Message, e2); return(false); } return(true); }
public async Task <bool> AutostartAnalysis(GNAnalysisRequest analysis) { AnalysisRequestService analysisService = new AnalysisRequestService(db); GNContact userContact = db.GNContacts.Find(Guid.Parse("0750f896-e7d6-48d4-a1b9-007059f62784")); await analysisService.StartAnalysis(userContact, analysis.Id); return(true); }
public async Task <ActionResult> List() { PopulateSelectLists(); EvalCanCreate(); Dictionary <string, object> filters = new Dictionary <string, object>(); List <GNTemplate> GNTemplates = new List <GNTemplate>(); if (!string.IsNullOrEmpty(Request["analysisRequestId"])) { Guid guidAnalysisRequest = Guid.Parse(Request["analysisRequestId"]); GNAnalysisRequest AnalysisRequest = db.GNAnalysisRequests.Where(a => a.Id.Equals(guidAnalysisRequest)).FirstOrDefault(); ViewBag.AnalysisRequest = AnalysisRequest; ViewBag.AnalysisName = AnalysisRequest.Description; ViewBag.AnalysisRequestId = guidAnalysisRequest; } if (!string.IsNullOrEmpty(Request["addSampleRelationship"])) { int sampleRel = Int32.Parse(Request["GNSampleRelationshipTypeId"]); Guid thisSample = Guid.Parse(Request["GNLeftSampleId"]); int maxRelAllowed = db.GNSampleRelationshipTypes.Where(a => a.Id == sampleRel).Select(b => b.MaxRelationships).FirstOrDefault(); int thisSampleRelIdCount = db.GNSampleRelationships.Where(a => a.GNLeftSampleId.Equals(thisSample) && a.GNSampleRelationshipTypeId == sampleRel).Count(); if (thisSampleRelIdCount < maxRelAllowed) { //continue filters.Add("Gender", db.GNSampleRelationshipTypes.Where(a => a.Id == sampleRel).Select(b => b.Gender).FirstOrDefault()); filters.Add("GNOrganizationId", Request["GNOrganizationId"]); filters.Add("GNLeftSampleId", Request["GNLeftSampleId"]); GNTemplates = await this.entityService.FindAll(UserContact, IndexStart(), IndexEnd(), filters); } else { string sampleRelName = db.GNSampleRelationshipTypes.Where(a => a.Id == sampleRel).Select(b => b.Name).FirstOrDefault(); //return error and return to the Details page string add_s = ""; if (thisSampleRelIdCount > 1) { add_s = "s"; } ViewBag.PedigreeErrorMessage = "This Sample already has " + thisSampleRelIdCount + " " + sampleRelName.ToLower() + add_s + ", the maximum number allowed."; GNSample sample = db.GNSamples.Where(a => a.Id.Equals(thisSample)).FirstOrDefault(); } } GNTemplates = await this.entityService.FindAll(UserContact, IndexStart(), IndexEnd(), filters); return(View(GNTemplates)); }
private static void ReStartFailedAnalysis(AnalysisRequestService analysisRequestService, GNAnalysisRequest analysisRequest) { if (RESTART_ANALYSIS_FEATURE_ACTIVE) { try { //get analysis request from db GNAnalysisRequest ar = analysisRequestService.db.GNAnalysisRequests .Include(a => a.AnalysisType) .Include(a => a.GNAnalysisRequestGNSamples.Select(s => s.GNSample).Select(s => s.CloudFiles)) .Include(a => a.AnalysisStatus) .Include(a => a.AnalysisResult) .Where(a => a.Id == analysisRequest.Id) .FirstOrDefault(); //determine if analysis re-start is allowed ar = analysisRequestService.IsValidSampleSet(ar); ar.CanReStartAnalysis = analysisRequestService.IsAnalysisRestartAllowed(ar, FORCE_RESTART_ANALYSIS); //restart analysis if (ar.CanReStartAnalysis && ar.IsFailedRequest) { LogUtil.Info(logger, "Restart Analysis for AR ID [" + ar.Id + "]..."); System.Console.WriteLine("\nRestart Analysis for AR ID [" + ar.Id + "]..."); var t = Task.Run(async delegate { var arService = new AnalysisRequestService(new GNEntityModelContainer(), new IdentityModelContainer()); //get user contact GNContact userContact = arService.db.GNContacts.Find(ar.CreatedBy); if (arService.analysisRequestPendingCloudMessageService == null || arService.cloudStorageService == null) { arService.InitCloudServices(userContact.GNOrganization.AWSConfigId); } await arService.StartAnalysis(userContact, ar.Id); }); } else { LogUtil.Info(logger, "UNABLE to Restart Analysis for AR ID [" + ar.Id + "]..."); System.Console.WriteLine("\nUNABLE to Restart Analysis for AR ID [" + ar.Id + "]..."); } } catch (Exception e) { LogUtil.Error(logger, "Unable to Process Failure of Analysis " + analysisRequest.Id + " : " + e.Message, e); } } }
public async Task <ActionResult> RemoveFromAnalysisRequest(Guid?id) { string analysisRequestId = Request["analysisRequestId"]; bool returnToAnalysis = (string.IsNullOrEmpty(Request["returnToAnalysis"]) ? false : bool.Parse(Request["returnToAnalysis"])); if (id != null && !string.IsNullOrEmpty(analysisRequestId)) { int result = await((SampleService)entityService).RemoveSampleFromAnalysisRequest(id, analysisRequestId); //tfrege 2016.03.21 Check if also a group Id was passed (in which case it's an RNA sample) if (!string.IsNullOrEmpty(Request["GroupId"])) { int result2 = await((SampleService)entityService).RemoveSampleFromAnalysisRequestGroup(id, Guid.Parse(Request["GroupId"])); } if (returnToAnalysis) { Guid GAnalysisRequestId = Guid.Parse(analysisRequestId); GNAnalysisRequest analysisRequest = db.GNAnalysisRequests.Where(a => a.Id.Equals(GAnalysisRequestId)).FirstOrDefault(); if (analysisRequest.GNAnalysisRequestTypeCode == "DNA") { return(RedirectToAction("Edit", "AnalysisRequests", new { id = analysisRequestId })); } else { return(RedirectToAction("Details", "AnalysisRequests", new { id = analysisRequestId })); } } else { Guid sampleId = Guid.Parse(id.ToString()); auditResult = audit.LogEvent(UserContact, sampleId, this.ENTITY, this.Request.UserHostAddress, "REMOVE_FROM_ANALYSIS " + analysisRequestId.ToString()); int addedSampleTypeId = db.GNSamples.Where(a => a.Id.Equals(sampleId)).FirstOrDefault().GNSampleTypeId; //return RedirectToAction("List", "Samples", new { analysisRequestId = analysisRequestId, GNSampleTypeId = addedSampleTypeId }); if (!string.IsNullOrEmpty(Request["GroupId"])) { return(RedirectToAction("List", "Samples", new { analysisRequestId = analysisRequestId, GNSampleTypeId = addedSampleTypeId, GroupId = Request["GroupId"] })); } else { return(RedirectToAction("List", "Samples", new { analysisRequestId = analysisRequestId, GNSampleTypeId = addedSampleTypeId })); } } } ViewBag.AnalysisRequestId = analysisRequestId; return(View()); }
public bool NotifyQCSystem(GNAnalysisRequest analysisRequest, string bucket, string key) { LogUtil.LogMethod(logger, MethodBase.GetCurrentMethod()); string fileLocation = bucket + "/" + key; string vcfPaths = "s3://" + bucket + "/" + key; string fileName = key.Substring(key.LastIndexOf("/") + 1); fileLocation = fileLocation.Substring(0, (fileLocation.LastIndexOf("/"))); try { StartVcfStatsReport startStatsReport = new StartVcfStatsReport { entityId = analysisRequest.Id.ToString(), entityType = "ANALYSIS", fileLocation = fileLocation, filename = fileName, vcfPaths = vcfPaths }; string filename = analysisRequest.Id.ToString() + ".txt"; //string filename = "gn_sample_vcfqc.json"; //System.Threading.Thread.Sleep(5000); System.Console.WriteLine("***\n ****** Sending message " + analysisRequest.CreateDateTime); this.SendMessage(startStatsReport); this.StoreMessage(startStatsReport, "telma.gn.com", filename); } catch (Exception e1) { System.Console.WriteLine("***\n ****** Exception Sending message " + e1.InnerException + e1.Message + e1.StackTrace); Exception e2 = new Exception("Unable to send notification to queue.", e1); LogUtil.Warn(logger, e2.Message, e2); return(false); } return(true); }
private static void TerminateInstancesForAnalysis(GNAnalysisRequest analysisRequest) { List <Reservation> analysisMasterInstances = null; List <Reservation> analysisWorkerInstances = null; if (TERMINATE_INSTANCE_FEATURE_ACTIVE) { LogUtil.Info(logger, "Terminating Instances for AR ID [" + analysisRequest.Id + "]..."); System.Console.WriteLine("\nTerminating Instances for AR ID [" + analysisRequest.Id + "]..."); try { //lookup analysis master instances analysisMasterInstances = cloudComputeService.GetComputeInstances( new Dictionary <string, List <string> > { { "Name", new List <string> { "churchill_" + analysisRequest.Id + "_master" } } }); //lookup analysis worker instances analysisWorkerInstances = cloudComputeService.GetComputeInstances( new Dictionary <string, List <string> > { { "Name", new List <string> { "churchill_" + analysisRequest.Id + "_worker" } } }); //send termination commands to stale AWS instances try { List <string> instancesToTerminate = new List <string>(); //terminate master instances if (analysisMasterInstances != null && analysisMasterInstances.Sum(r => r.Instances.Count) != 0) { instancesToTerminate.AddRange( analysisMasterInstances.SelectMany(r => r.Instances).Select(i => i.InstanceId).ToList()); } //terminate worker instances if (analysisWorkerInstances != null && analysisWorkerInstances.Sum(r => r.Instances.Count) != 0) { instancesToTerminate.AddRange( analysisWorkerInstances.SelectMany(r => r.Instances).Select(i => i.InstanceId).ToList()); } //submit instance termination request to AWS if (instancesToTerminate != null && instancesToTerminate.Count != 0) { var terminateResult = cloudComputeService.TerminateComputeInstances(instancesToTerminate); } } catch (Exception e) { LogUtil.Error(logger, "Unable to Terminate Instances for stale Analysis " + analysisRequest.Id + " : " + e.Message, e); } } catch (Exception e) { LogUtil.Error(logger, "Unable to Lookup Instances for stale Analysis " + analysisRequest.Id + " : " + e.Message, e); } } }
public async Task <bool> ProcessQCMessage(NewSampleBatchStatus newSampleMessageStatus) { System.Console.WriteLine("QCQCQC " + newSampleMessageStatus.name); try { GNCloudFileCategory fileCategory = db.GNCloudFileCategories.Where(a => a.Id == 1).FirstOrDefault(); string sampleName1 = newSampleMessageStatus.name; string sampleName = sampleName1.Substring(0, sampleName1.IndexOf("_")); //s3://sanford-fastq/151204_SN7001383_0164_AC7Y91ACXX/FASTQ/fastqc/AAA076960/AAA076960_S6_R2_001/ GNSample sample = db.GNSamples.Where(a => a.Name.Equals(sampleName) && a.IsReady == false).FirstOrDefault(); GNCloudStorageService st = new GNCloudStorageService(); string volume = "dev-gn-s3-01"; Guid fileId = Guid.NewGuid(); string folderPath = "fastq/" + sample.Id + "/" + fileId + "/"; string fastqFileName = folderPath + newSampleMessageStatus.name + ".fastq.gz"; string fileURL = "https://dev-gn-s3-01.s3.amazonaws.com/" + fastqFileName; string originBucket = newSampleMessageStatus.filesBucket; originBucket = originBucket.Replace("s3://", ""); originBucket = originBucket.Substring(0, originBucket.IndexOf("/")); //"sanford-fastq"; string QcOriginKey = newSampleMessageStatus.filesBucket; QcOriginKey = QcOriginKey.Replace("s3://", ""); QcOriginKey = QcOriginKey.Substring(originBucket.Length + 1); string FileDescription = newSampleMessageStatus.name + ".fastq.gz"; string fastqOriginKey = QcOriginKey.Substring(0, QcOriginKey.IndexOf("FASTQ/") + 5); fastqOriginKey = fastqOriginKey + "/" + FileDescription; QcOriginKey = QcOriginKey + "fastqc_report.html"; string destinationBucket = "dev-gn-s3-01/" + folderPath; destinationBucket = "dev-gn-s3-01"; string QcFileName = folderPath + "fastqc_report.html"; string QcDestinationURL = "https://dev-gn-s3-01.s3.amazonaws.com/" + QcFileName; st.CopyS3Object(originBucket, fastqOriginKey, destinationBucket, fastqFileName); st.CopyS3Object(originBucket, QcOriginKey, destinationBucket, QcFileName); GNCloudFile cloudFile = new GNCloudFile { Id = fileId, GNCloudFileCategoryId = fileCategory.Id, //FASTQ CloudFileCategory = fileCategory, FileName = folderPath + fastqFileName, FileURL = fileURL, FolderPath = folderPath, Volume = volume, Description = fastqFileName, FileSize = st.GetObjectSize(originBucket, fastqOriginKey), AWSRegionSystemName = db.AWSRegions.FirstOrDefault().AWSRegionSystemName, CreateDateTime = DateTime.Now, CreatedBy = Guid.Parse("0750f896-e7d6-48d4-a1b9-007059f62784"), SampleId = sample.Id.ToString(), PassedQC = (newSampleMessageStatus.isError.Equals("false")), QcReportLocation = QcDestinationURL }; db.GNCloudFiles.Add(cloudFile); sample.CloudFiles.Add(cloudFile); if (sample.CloudFiles.Count() == 2 && sample.CloudFiles.Where(a => a.PassedQC == false).Count() == 0) { sample.IsReady = true; if (sample.GNNewSampleBatchSample.GNNewSampleBatch.AutoStartAnalysis) { GNAnalysisRequest analysis = sample.GNAnalysisRequestGNSamples.FirstOrDefault().GNAnalysisRequest; AnalysisRequestService analysisService = new AnalysisRequestService(db); GNContact userContact = db.GNContacts.Find(Guid.Parse("0750f896-e7d6-48d4-a1b9-007059f62784")); await analysisService.StartAnalysis(userContact, analysis.Id); } } db.SaveChanges(); } catch (Exception e) { System.Console.WriteLine("***Unable to Update QC-COMPLETED status. " + e.Message + e.StackTrace + " **********************************"); Exception e2 = new Exception("Unable to Update QC-COMPLETED status.", e); LogUtil.Warn(logger, e2.Message, e2); return(false); } return(true); }
public override bool ProcessMessage(NewSampleBatch newSampleMessage, object queueMessage) { System.Console.WriteLine("***\n ****** Batch Id: " + newSampleMessage.batchId); System.Console.WriteLine("***\n ****** Sample type: " + newSampleMessage.type); System.Console.WriteLine("***\n ****** Sample repositoryId: " + newSampleMessage.repositoryId); SampleResponseService sampleResponseService = new SampleResponseService(); GNOrganization Organization = db.GNOrganizations.Where(a => a.Repository.Equals(newSampleMessage.repositoryId)).FirstOrDefault(); //Find sequencer job GNSequencerJob sequencerJob = db.GNSequencerJobs.Where(a => a.GNOrganizationId.Equals(Organization.Id) && a.Project.Equals(newSampleMessage.project)).FirstOrDefault(); sequencerJob.Status = "PROCESSING SAMPLES"; GNNewSampleBatch newSampleBatch = new GNNewSampleBatch { Id = Guid.NewGuid(), BatchId = newSampleMessage.batchId, GNSequencerJobId = sequencerJob.Id, GNSequencerJob = sequencerJob, Project = newSampleMessage.project, AutoStartAnalysis = (newSampleMessage.autoStartAnalysis.Equals("true")), CreateAnalysisPerSample = (newSampleMessage.createAnalysisPerSample.Equals("true")), Qualifier = newSampleMessage.qualifier, Type = newSampleMessage.type, RepositoryId = newSampleMessage.repositoryId, Gender = newSampleMessage.gender, ReadType = newSampleMessage.read, TotalSamples = newSampleMessage.samples.Count(), TotalSamplesCompleted = 0, CreateDateTime = DateTime.Now }; db.GNNewSampleBatches.Add(newSampleBatch); db.SaveChanges(); bool success = false; try { GNSampleType type = db.GNSampleTypes.Where(a => a.Name.Equals(newSampleMessage.type.ToUpper())).FirstOrDefault(); System.Console.WriteLine("***\n type " + type.Name); System.Console.WriteLine("***\n Organization " + Organization.Name); GNTeam newTeam = null; GNProject newProject = null; GNAnalysisType analysisType = null; String AnalysisCode = newSampleMessage.qualifier; if (newSampleBatch.CreateAnalysisPerSample) { /** * 1. Create a Team * 2. Create a Project */ GNContact contact = db.GNContacts.Find(Organization.GNContactId); newTeam = new GNTeam { Id = Guid.NewGuid(), CreateDateTime = DateTime.Now, CreatedBy = Guid.Parse("0750f896-e7d6-48d4-a1b9-007059f62784"), Name = "TeamBatch" + newSampleBatch.BatchId.Substring(0, 15), GNContactId = contact.Id, Organization = Organization, OrganizationId = Organization.Id, TeamLead = contact }; db.GNTeams.Add(newTeam); db.SaveChanges(); System.Console.WriteLine("***\n New newTeam Created: " + newTeam.Id); newProject = new GNProject { Id = Guid.NewGuid(), CreateDateTime = DateTime.Now, CreatedBy = Guid.Parse("0750f896-e7d6-48d4-a1b9-007059f62784"), ProjectLead = contact, ProjectLeadId = contact.Id.ToString(), Name = "ProjectBatch-" + newSampleBatch.BatchId.Substring(0, 15), TeamId = newTeam.Id.ToString(), StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(30), Description = "Created automatically from the Sample Batch Process" }; System.Console.WriteLine("***\n New newProject Created: " + newProject.Id); newTeam.Projects.Add(newProject); newProject.Teams.Add(newTeam); db.GNProjects.Add(newProject); db.SaveChanges(); if (newSampleMessage.qualifier.Equals("TUMOR")) { AnalysisCode = "TUMORNORMAL"; } analysisType = db.GNAnalysisTypes.Where(a => a.Name.Equals(newSampleMessage.type.ToUpper())).FirstOrDefault(); } foreach (String sampleName in newSampleMessage.samples) { String newSampleName = sampleName; GNSample sampleExist = db.GNSamples.Where(a => a.Name.Equals(sampleName) && a.GNOrganizationId.Equals(Organization.Id)).FirstOrDefault(); bool createNewSample = false; if (sampleExist != null) { if (sampleExist.IsReady) { //the sample is ready, let's create a new one with a suffix of (1) newSampleName = sampleName + " (1)"; createNewSample = true; } else { //the sample is in the middle of being created, so ignore the message createNewSample = false; } } else { createNewSample = true; } try { if (createNewSample) { GNSample newSample = new GNSample { Id = Guid.NewGuid(), GNOrganizationId = Organization.Id, Name = newSampleName, Gender = newSampleMessage.gender, GNSampleTypeId = type.Id, GNSampleQualifierCode = newSampleMessage.qualifier, IsReady = false, IsPairEnded = (newSampleMessage.read == "paired-end"), CreateDateTime = DateTime.Now, CreatedBy = Guid.Parse("0750f896-e7d6-48d4-a1b9-007059f62784") }; db.GNSamples.Add(newSample); db.SaveChanges(); System.Console.WriteLine("***\n New Sample Created: " + newSample.Id); GNNewSampleBatchSamples batchSample = new GNNewSampleBatchSamples { Id = Guid.NewGuid(), GNSample = newSample, CreateDateTime = DateTime.Now, GNNewSampleBatch = newSampleBatch, GNNewSampleBatchId = newSampleBatch.Id, Name = sampleName }; db.GNNewSampleBatchSamples.Add(batchSample); db.SaveChanges(); System.Console.WriteLine("***\n New batchSample Created: " + batchSample.Id); GNNewSampleBatchStatus batchStatus = new GNNewSampleBatchStatus { Id = Guid.NewGuid(), CreateDateTime = DateTime.Now, GNNewSampleBatch = newSampleBatch, GNNewSampleBatchId = newSampleBatch.Id, IsError = false, PercentComplete = 0, Status = "STARTING PROCESS", RepositoryId = newSampleMessage.repositoryId }; db.GNNewSampleBatchStatus.Add(batchStatus); db.SaveChanges(); System.Console.WriteLine("***\n New batchStatus Created: " + batchStatus.Id); if (newSampleBatch.CreateAnalysisPerSample) { GNAnalysisRequest newAnalysis = new GNAnalysisRequest { Id = Guid.NewGuid(), Project = newProject, GNProjectId = newProject.Id, CreateDateTime = DateTime.Now, CreatedBy = Guid.Parse("0750f896-e7d6-48d4-a1b9-007059f62784"), AnalysisType = analysisType, RequestProgress = 0, RequestDateTime = DateTime.Now, GNAnalysisRequestTypeCode = AnalysisCode, Description = newSampleName, GNAnalysisAdaptorCode = "NONE", AnalysisTypeId = analysisType.Id.ToString(), AutoStart = newSampleBatch.AutoStartAnalysis, AWSRegionSystemName = db.AWSRegions.FirstOrDefault().AWSRegionSystemName }; db.GNAnalysisRequests.Add(newAnalysis); db.SaveChanges(); System.Console.WriteLine("***\n New newAnalysis Created: " + newAnalysis.Id); GNAnalysisRequestGNSample newAnalysisSample = new GNAnalysisRequestGNSample { AffectedIndicator = "N", TargetIndicator = "N", GNAnalysisRequest = newAnalysis, GNSample = newSample, GNAnalysisRequestId = newAnalysis.Id, GNSampleId = newSample.Id }; db.GNAnalysisRequestGNSamples.Add(newAnalysisSample); } //end of "if(newSampleBatch.CreateAnalysisPerSample)" System.Console.WriteLine("***\n Sample Name: " + sampleName); //Notify BCL2FASTQ service sampleResponseService.NotifyBcl2FastqSystem(newSample, newSampleBatch.RepositoryId); } db.SaveChanges(); } catch (Exception e1) { System.Console.WriteLine("***\n Exception: " + e1.Message + e1.InnerException); } } System.Console.WriteLine("***\n EVERYTHING WORKED!"); //NOTIFY USER bool notifySuccess = new GenomeNext.App.NotificationCloudMessageService().NotifyGNContact( "SAMPLE_CREATION", "*****@*****.**", "Sample Creation", new Dictionary <string, string> { { "BatchId", newSampleMessage.batchId }, { "TotalSamples", newSampleBatch.TotalSamples.ToString() }, { "CreatorName", Organization.OrgMainContact.FullName }, { "CreateDateTime", DateTime.Now.ToString() } }); success = true; } catch (Exception e1) { Exception e2 = new Exception("Unable to Create New Sample.", e1); LogUtil.Warn(logger, e2.Message, e2); success = false; } return(success); }
/** * JSON Format */ public void PrepareBamViewer(GNAnalysisRequest analysisRequest) { GNCloudFile GNCloudVCF = (from a in analysisRequest.AnalysisResult.ResultFiles where a.GNCloudFileCategoryId == 2 select a).FirstOrDefault <GNCloudFile>(); string vcfFilePath = GNCloudVCF.FileURL.Substring(0, GNCloudVCF.Description.LastIndexOf('/')); string vcfFile = GNCloudVCF.Description.Substring(GNCloudVCF.Description.LastIndexOf('/') + 1); string fileContents = ""; //List<string>.Enumerator enumerator = samplesSelected.GetEnumerator(); BamConfigFile bamRequest = new BamConfigFile(); bamRequest.analysisId = analysisRequest.Id.ToString(); bamRequest.analysisDescription = analysisRequest.Description; bamRequest.vcfFilename = vcfFile; bamRequest.listOfSamples = new List <AnalysisResultSample>(); bamRequest.totalNumberOfSamples = analysisRequest.GNAnalysisRequestGNSamples.Count(); try { int lineNum = 0; foreach (GNAnalysisRequestGNSample analysisSampleInput in analysisRequest.GNAnalysisRequestGNSamples) { lineNum++; GNSample sampleInput = analysisSampleInput.GNSample; string sampleInputName = sampleInput.Name; sampleInputName = sampleInputName.Replace(" ", "_").Replace("(", "_").Replace(")", "_").ToUpper(); string baiFile = analysisRequest.AnalysisResult.ResultFiles.Where(a => a.FileName.Contains(sampleInputName) && a.FileName.Contains("bai")).FirstOrDefault().FileName; string bamFile = analysisRequest.AnalysisResult.ResultFiles.Where(a => a.FileName.Contains(sampleInputName) && a.FileName.Contains("bam") && !a.FileName.Contains("bai")).FirstOrDefault().FileName; string item = bamFile + " " + baiFile + " " + analysisRequest.Id.ToString() + " " + vcfFile + " " + sampleInput.Name + " " + lineNum + " " + analysisRequest.Description.Replace(" ", "_").Trim().ToUpper(); fileContents = fileContents + item + "\n"; // await this.transactionService.CreateBillingTransactionsPerAnalysisSample(userContact, analysisRequest, analysisRequest.AnalysisType.Name, analysisRequest.Description, false, false, "REPORT_BAM_VIEWER", sampleInput); bamRequest.listOfSamples.Add(new AnalysisResultSample { index = lineNum, sampleId = sampleInput.Id.ToString(), name = sampleInputName, baiFilename = baiFile, bamFilename = bamFile } ); } } catch (Exception e) { logger.Error("Error while launching BAM Viewer " + e.Message); } GNNewSampleBatch batch = analysisRequest.GNAnalysisRequestGNSamples.FirstOrDefault().GNSample.GNNewSampleBatchSample.GNNewSampleBatch; BamViewerRequest bamViewerRequest = new BamViewerRequest { bamViewerURL = vcfFilePath, batchId = batch.BatchId, organization = batch.GNSequencerJob.GNOrganization.Name, project = batch.GNSequencerJob.Project, repository = batch.Repository, vcfFilepath = vcfFilePath, bamConfigFile = bamRequest }; try { System.Console.WriteLine("***\n ****** Sending message "); this.SendMessage(bamViewerRequest); } catch (Exception exception) { logger.Error(exception.Message); throw; } }
/** * For this batch: * - Add a status of 90%: Running quality control * - Check that each sample: * - Has at least one file * - If the sample is pair-ended, it has an even number of files * - If so, change to "is ready" * If the batch has the "start analysis" in true, start analyses * Log errors if apply * Change status to 100% if no errors were found */ public void QualityControl(GNNewSampleBatch Batch) { bool result = true; GNNewSampleBatchStatus batchStatus = new GNNewSampleBatchStatus { Id = Guid.NewGuid(), CreateDateTime = DateTime.Now, GNNewSampleBatch = Batch, GNNewSampleBatchId = Batch.Id, IsError = false, PercentComplete = 90, Status = "RUNNING QUALITY CONTROL", Repository = Batch.Repository, Message = "" }; db.GNNewSampleBatchStatus.Add(batchStatus); string errorMessage = ""; foreach (GNNewSampleBatchSamples BatchSample in Batch.GNNewSampleBatchSamples) { GNSample sample = BatchSample.GNSample; if (sample.IsPairEnded && sample.CloudFiles.Count() > 0 && sample.CloudFiles.Count() % 2 == 0) { sample.IsReady = true; } else if (!sample.IsPairEnded && sample.CloudFiles.Count() > 0 && sample.CloudFiles.Count() % 2 == 1) { sample.IsReady = true; } else { errorMessage += "Sample " + sample.Id.ToString() + "doesn't have the right number of files.\n"; result = false; } } if (result && Batch.AutoStartAnalysis) { GNNewSampleBatchStatus batchStatus2 = new GNNewSampleBatchStatus { Id = Guid.NewGuid(), CreateDateTime = DateTime.Now, GNNewSampleBatch = Batch, GNNewSampleBatchId = Batch.Id, IsError = false, PercentComplete = 95, Status = "STARTING ANALYSIS", Repository = Batch.Repository, Message = "" }; db.GNNewSampleBatchStatus.Add(batchStatus2); List <GNAnalysisRequest> analysisRequestsToStart = new List <GNAnalysisRequest>(); foreach (GNNewSampleBatchSamples BatchSample in Batch.GNNewSampleBatchSamples) { GNSample sample = BatchSample.GNSample; GNAnalysisRequest analysis = sample.GNAnalysisRequestGNSamples.FirstOrDefault().GNAnalysisRequest; if (!analysisRequestsToStart.Contains(analysis)) { analysisRequestsToStart.Add(analysis); } } foreach (GNAnalysisRequest analysis in analysisRequestsToStart) { this.AutostartAnalysis(analysis); } GNNewSampleBatchStatus batchStatus3 = new GNNewSampleBatchStatus { Id = Guid.NewGuid(), CreateDateTime = DateTime.Now, GNNewSampleBatch = Batch, GNNewSampleBatchId = Batch.Id, IsError = false, PercentComplete = 100, Status = "COMPLETED", Repository = Batch.Repository, Message = "" }; db.GNNewSampleBatchStatus.Add(batchStatus3); this.NotifyEndOfBatch(Batch); } if (!result) { GNNewSampleBatchStatus batchStatus4 = new GNNewSampleBatchStatus { Id = Guid.NewGuid(), CreateDateTime = DateTime.Now, GNNewSampleBatch = Batch, GNNewSampleBatchId = Batch.Id, IsError = true, PercentComplete = 92, Status = "ERRORS DETECTED", Repository = Batch.Repository, Message = "" }; db.GNNewSampleBatchStatus.Add(batchStatus4); this.NotifyErrorAtEndOfBatch(Batch, errorMessage); } db.SaveChanges(); }
public override bool ProcessMessage(NewSampleBatch newSampleMessage, object queueMessage) { System.Console.WriteLine("***\n ****** Batch Id: " + newSampleMessage.batchId); System.Console.WriteLine("***\n ****** Sample type: " + newSampleMessage.type); System.Console.WriteLine("***\n ****** Sample repository: " + newSampleMessage.repository); SampleResponseService sampleResponseService = new SampleResponseService(); List <GNSample> listOfSamples = new List <GNSample>(); List <GNNewSampleBatchSamples> listOfBatchSamples = new List <GNNewSampleBatchSamples>(); List <String> listOfAnalysisNames = new List <String>(); GNOrganization Organization = db.GNOrganizations.Where(a => a.Repository.Equals(newSampleMessage.repository)).FirstOrDefault(); System.Console.WriteLine("***\n Organization " + Organization.Name); System.Console.WriteLine("***\n Organization Id " + Organization.Id); System.Console.WriteLine("***\n Project " + newSampleMessage.project); bool success = false; try { System.Console.WriteLine("***\n Searching sequencerJob "); //Find sequencer job GNSequencerJob sequencerJob = db.GNSequencerJobs.Where(a => a.GNOrganizationId.Equals(Organization.Id) && a.Project.Equals(newSampleMessage.project)).FirstOrDefault(); if (sequencerJob == null) { throw new Exception("Unable to find Sequencer Job!"); } sequencerJob.Status = "PROCESSING SAMPLES"; System.Console.WriteLine("***\n Starting. sequencerJob project: " + sequencerJob.Project); GNProject newProject = sequencerJob.GNProject; GNTeam newTeam = newProject.Teams.FirstOrDefault(); GNNewSampleBatch newSampleBatch = new GNNewSampleBatch { Id = Guid.NewGuid(), BatchId = newSampleMessage.batchId, GNSequencerJobId = sequencerJob.Id, GNSequencerJob = sequencerJob, Project = newSampleMessage.project, AutoStartAnalysis = (newSampleMessage.autoStartAnalysis.ToLower().Equals("true")), CreateAnalysisPerSample = (newSampleMessage.createAnalysisPerSample.ToLower().Equals("true")), Qualifier = newSampleMessage.qualifier, Type = newSampleMessage.type, Repository = newSampleMessage.repository, ReadType = newSampleMessage.read, TotalSamples = newSampleMessage.samples.Count(), TotalSamplesCompleted = 0, TotalNumberOfFastqFiles = 0, CreateDateTime = DateTime.Now }; db.GNNewSampleBatches.Add(newSampleBatch); GNSampleType type = db.GNSampleTypes.Where(a => a.Name.Equals(newSampleMessage.type.ToUpper())).FirstOrDefault(); System.Console.WriteLine("***\n type " + type.Name); string datetimeString = DateTime.Now.ToString("MM-dd 0:HH:mm:ss"); GNAnalysisType analysisType = null; String AnalysisCode = newSampleMessage.qualifier; if (newSampleBatch.CreateAnalysisPerSample) { /** * 1. Create a Team * 2. Create a Project */ GNContact contact = db.GNContacts.Find(Organization.GNContactId); if (newSampleMessage.qualifier.Equals("TUMOR")) { AnalysisCode = "TUMORNORMAL"; } analysisType = db.GNAnalysisTypes.Where(a => a.Name.Equals(newSampleMessage.type.ToUpper())).FirstOrDefault(); } int i = 0; GNAnalysisRequest newAnalysis = null; /** * Loop samples */ GNNewSampleBatchStatus batchStatus = new GNNewSampleBatchStatus { Id = Guid.NewGuid(), CreateDateTime = DateTime.Now, GNNewSampleBatch = newSampleBatch, GNNewSampleBatchId = newSampleBatch.Id, IsError = false, PercentComplete = 0, Status = "STARTING PROCESS", Repository = newSampleMessage.repository }; db.GNNewSampleBatchStatus.Add(batchStatus); System.Console.WriteLine("***\n New batchStatus Created: " + batchStatus.Id); foreach (SampleBatch sampleBatch in newSampleMessage.samples) { String newSampleName = sampleBatch.name; //tfrege 2016.12.07 do not append family id to sample name anymore /* * if(sampleBatch.familyId != "") * { * newSampleName = newSampleName + " (" + sampleBatch.familyId + ")"; * System.Console.WriteLine("***\n -------------> newSampleName: " + newSampleName); * } */ GNSample sampleExist = db.GNSamples.Where(a => a.Name.Equals(sampleBatch.name) && a.GNOrganizationId.Equals(Organization.Id)).FirstOrDefault(); bool createNewSample = false; //Since BCL2FASTQ is not passing gender for now, figure it out based on the family relation String sampleBatchgender = "U"; switch (sampleBatch.familyRelation) { case "F": case "S": sampleBatchgender = "M"; break; case "M": case "D": sampleBatchgender = "F"; break; default: sampleBatchgender = "F"; break; } if (sampleExist != null) { if (sampleExist.IsReady) { //the sample is ready, let's create a new one with a suffix of (1) newSampleName = sampleBatch.name + " (1)"; createNewSample = true; } else { //the sample is in the middle of being created, so ignore the message createNewSample = false; //tfrege remove this control just for testing purposes, create new sample always newSampleName = sampleBatch.name + " (1)"; //remove this after validation is put back in createNewSample = true; } } else { createNewSample = true; } try { if (createNewSample) { GNReplicate replicate = db.GNReplicates.Where(a => a.Name.Equals("NO")).FirstOrDefault(); GNSample newSample = new GNSample { Id = Guid.NewGuid(), GNOrganizationId = Organization.Id, Name = newSampleName, Gender = sampleBatchgender, GNSampleTypeId = type.Id, GNSampleQualifierCode = newSampleMessage.qualifier, IsReady = false, IsPairEnded = (newSampleMessage.read == "paired-end"), GNReplicateCode = "0", GNReplicate = replicate, CreateDateTime = DateTime.Now, CreatedBy = CreatedBy }; db.GNSamples.Add(newSample); System.Console.WriteLine("***\n New Sample Created: " + newSample.Id); string analysisName = sampleBatch.name; if (sampleBatch.familyId != null) { analysisName = sampleBatch.familyId; } GNNewSampleBatchSamples batchSample = new GNNewSampleBatchSamples { Id = Guid.NewGuid(), GNSample = newSample, CreateDateTime = DateTime.Now, GNNewSampleBatch = newSampleBatch, GNNewSampleBatchId = newSampleBatch.Id, Name = sampleBatch.name, Affected = sampleBatch.affected, Proband = sampleBatch.proband, FamilyId = sampleBatch.familyId, RelationId = sampleBatch.familyRelation, Gender = sampleBatchgender, AnalysisName = analysisName }; db.GNNewSampleBatchSamples.Add(batchSample); System.Console.WriteLine("***\n New batchSample Created: " + batchSample.Id); System.Console.WriteLine("***\n ====>>>>> Adding to listOfAnalysisNames: " + analysisName); if (!listOfAnalysisNames.Contains(analysisName)) { listOfAnalysisNames.Add(analysisName); } db.SaveChanges(); System.Console.WriteLine("***\n DB CHANGES SAVED."); System.Console.WriteLine("***\n Sample Name: " + sampleBatch.name); //Build list to notify the BCL2FASTQ service later listOfSamples.Add(newSample); listOfBatchSamples.Add(batchSample); } } catch (Exception e1) { System.Console.WriteLine("***\n Exception: " + e1.Message + e1.StackTrace + e1.InnerException); } i++; } /** * Update pedigrees, if applies */ int maxPedigreeId = db.GNSampleRelationships.Max(a => a.Id); System.Console.WriteLine("***\n Updating pedigrees for families "); foreach (GNNewSampleBatchSamples pedigreeSample in listOfBatchSamples.Where(a => a.Gender != "U" && a.RelationId != "")) { switch (pedigreeSample.RelationId) { case "F": case "M": { GNSampleRelationshipType relationshipType = db.GNSampleRelationshipTypes.Where(a => a.Name.Equals("SON")).FirstOrDefault(); //find sons and daughters List <GNNewSampleBatchSamples> sons = listOfBatchSamples.Where(a => a.FamilyId.Equals(pedigreeSample.FamilyId) && a.RelationId.Equals("S")).ToList(); foreach (GNNewSampleBatchSamples son in sons) { GNSampleRelationship sampleRelationship = new GNSampleRelationship { Id = maxPedigreeId++, GNLeftSample = pedigreeSample.GNSample, GNLeftSampleId = pedigreeSample.GNSample.Id, GNRightSample = son.GNSample, GNRightSampleId = son.GNSample.Id, GNSampleRelationshipType = relationshipType, GNSampleRelationshipTypeId = relationshipType.Id, CreateDateTime = DateTime.Now, CreatedBy = CreatedBy }; db.GNSampleRelationships.Add(sampleRelationship); System.Console.WriteLine("***\n Added Son " + son.GNSample.Id + " to Parent Sample : " + pedigreeSample.GNSample.Id); } relationshipType = db.GNSampleRelationshipTypes.Where(a => a.Name.Equals("DAUGHTER")).FirstOrDefault(); //find sons and daughters List <GNNewSampleBatchSamples> daughters = listOfBatchSamples.Where(a => a.FamilyId.Equals(pedigreeSample.FamilyId) && a.RelationId.Equals("D")).ToList(); foreach (GNNewSampleBatchSamples daughter in daughters) { GNSampleRelationship sampleRelationship = new GNSampleRelationship { Id = maxPedigreeId++, GNLeftSample = pedigreeSample.GNSample, GNLeftSampleId = pedigreeSample.GNSample.Id, GNRightSample = daughter.GNSample, GNRightSampleId = daughter.GNSample.Id, GNSampleRelationshipType = relationshipType, GNSampleRelationshipTypeId = relationshipType.Id, CreateDateTime = DateTime.Now, CreatedBy = CreatedBy }; db.GNSampleRelationships.Add(sampleRelationship); System.Console.WriteLine("***\n Added Daughter " + daughter.GNSample.Id + " to Parent Sample : " + pedigreeSample.GNSample.Id); } } break; case "S": case "D": { GNSampleRelationshipType relationshipType = db.GNSampleRelationshipTypes.Where(a => a.Name.Equals("FATHER")).FirstOrDefault(); //find sons and daughters List <GNNewSampleBatchSamples> fathers = listOfBatchSamples.Where(a => a.FamilyId.Equals(pedigreeSample.FamilyId) && a.RelationId.Equals("F")).ToList(); foreach (GNNewSampleBatchSamples dad in fathers) { GNSampleRelationship sampleRelationship = new GNSampleRelationship { Id = maxPedigreeId++, GNLeftSample = pedigreeSample.GNSample, GNLeftSampleId = pedigreeSample.GNSample.Id, GNRightSample = dad.GNSample, GNRightSampleId = dad.GNSample.Id, GNSampleRelationshipType = relationshipType, GNSampleRelationshipTypeId = relationshipType.Id, CreateDateTime = DateTime.Now, CreatedBy = CreatedBy }; db.GNSampleRelationships.Add(sampleRelationship); System.Console.WriteLine("***\n Added Dad " + dad.GNSample.Id + " to Child Sample : " + pedigreeSample.GNSample.Id); } relationshipType = db.GNSampleRelationshipTypes.Where(a => a.Name.Equals("MOTHER")).FirstOrDefault(); //find sons and daughters List <GNNewSampleBatchSamples> mothers = listOfBatchSamples.Where(a => a.FamilyId.Equals(pedigreeSample.FamilyId) && a.RelationId.Equals("M")).ToList(); foreach (GNNewSampleBatchSamples mom in mothers) { GNSampleRelationship sampleRelationship = new GNSampleRelationship { Id = maxPedigreeId++, GNLeftSample = pedigreeSample.GNSample, GNLeftSampleId = pedigreeSample.GNSample.Id, GNRightSample = mom.GNSample, GNRightSampleId = mom.GNSample.Id, GNSampleRelationshipType = relationshipType, GNSampleRelationshipTypeId = relationshipType.Id, CreateDateTime = DateTime.Now, CreatedBy = CreatedBy }; db.GNSampleRelationships.Add(sampleRelationship); System.Console.WriteLine("***\n Added Mom " + mom.GNSample.Id + " to Child Sample : " + pedigreeSample.GNSample.Id); } } break; case "U": default: //don't do a thing. System.Console.WriteLine("***\n Relation is undefined, do not add anything."); break; } } /******************************************************************************************************/ //SAVE ALL CHANGES (new team, new project, new samples, new analyses, new batch records, new pedigrees) /******************************************************************************************************/ try { db.SaveChanges(); } catch (Exception eRDS) { System.Console.WriteLine("***EXCEPTION DB!!! " + eRDS.Message + " " + eRDS.StackTrace + " " + eRDS.InnerException); } try { if (newSampleMessage.autoStartAnalysis.ToLower().Equals("true")) { System.Console.WriteLine("***\n Elements: " + listOfAnalysisNames.Count()); foreach (String anName in listOfAnalysisNames) { List <GNNewSampleBatchSamples> samplesForAnalysis = new List <GNNewSampleBatchSamples>(); newAnalysis = new GNAnalysisRequest { Id = Guid.NewGuid(), Project = newProject, GNProjectId = newProject.Id, CreateDateTime = DateTime.Now, CreatedBy = CreatedBy, AnalysisType = analysisType, RequestProgress = 0, RequestDateTime = DateTime.Now, GNAnalysisRequestTypeCode = AnalysisCode, Description = anName, GNAnalysisAdaptorCode = "NONE", AnalysisTypeId = analysisType.Id.ToString(), AutoStart = (newSampleMessage.autoStartAnalysis.ToLower().Equals("true")), AWSRegionSystemName = db.AWSRegions.FirstOrDefault().AWSRegionSystemName }; db.GNAnalysisRequests.Add(newAnalysis); System.Console.WriteLine("***\n ========================\n New newAnalysis Created: " + newAnalysis.Id); samplesForAnalysis = db.GNNewSampleBatchSamples.Where(a => a.GNNewSampleBatchId.Equals(newSampleBatch.Id) && a.AnalysisName.Equals(anName)).ToList(); foreach (GNNewSampleBatchSamples sample in samplesForAnalysis) { GNAnalysisRequestGNSample newAnalysisSample = new GNAnalysisRequestGNSample { AffectedIndicator = sample.Affected, TargetIndicator = sample.Proband, GNAnalysisRequest = newAnalysis, GNSample = sample.GNSample, GNAnalysisRequestId = newAnalysis.Id, GNSampleId = sample.GNSample.Id }; db.GNAnalysisRequestGNSamples.Add(newAnalysisSample); System.Console.WriteLine("***\n Sample Added to New newAnalysis: " + sample.GNSample.Name); } } } //end of "if(newSampleBatch.CreateAnalysisPerSample)" } catch (Exception eAnalysis) { System.Console.WriteLine("***\n Exception: " + eAnalysis.Message + eAnalysis.StackTrace + eAnalysis.InnerException); } db.SaveChanges(); //Notify BCL2FASTQ service sampleResponseService.NotifyBcl2FastqSystem(listOfBatchSamples); System.Console.WriteLine("***\n EVERYTHING WORKED!"); //NOTIFY USER bool notifySuccess = new GenomeNext.App.NotificationCloudMessageService().NotifyGNContact( "SAMPLE_CREATION", Organization.OrgMainContact.Email, "Sample Creation", new Dictionary <string, string> { { "BatchId", newSampleMessage.batchId }, { "TotalSamples", newSampleBatch.TotalSamples.ToString() }, { "CreatorName", Organization.OrgMainContact.FullName }, { "JobId", sequencerJob.Id.ToString() }, { "ProjectName", sequencerJob.Project }, { "CreateDateTime", DateTime.Now.ToString() } }); success = true; } catch (Exception e1) { Exception e2 = new Exception("Unable to Create New Sample.", e1); LogUtil.Warn(logger, e2.Message, e2); success = false; } return(success); }
public override bool ProcessMessage(QcReport qcReportSqsMessage, object queueMessage) { System.Console.WriteLine("***\n ****** Sample Name: " + qcReportSqsMessage.entityID); System.Console.WriteLine("***\n ****** Sample type: " + qcReportSqsMessage.entityType); System.Console.WriteLine("***\n ---->QC REPORT PROCESSING FOR ENTITY: " + qcReportSqsMessage.entityID + " (" + qcReportSqsMessage.entityType + ")"); /** * Find Sample in NewSamplesBatch * */ bool success = false; try { Guid entityId = Guid.Parse(qcReportSqsMessage.entityID); if (qcReportSqsMessage.entityType.ToUpper().Equals("SAMPLE")) { GNSample sample = db.GNSamples.Find(entityId); //Find Batch //GNNewSampleBatch Batch = db.GNNewSampleBatchSamples.Where(a => a.GNSample.Id.Equals(sample.Id)).FirstOrDefault().GNNewSampleBatch; System.Console.WriteLine("***\n ----> SAMPLE FOUND: " + sample.Name); GNCloudFileCategory fileCategory = db.GNCloudFileCategories.Where(a => a.Id == 1).FirstOrDefault(); string description = qcReportSqsMessage.fileName; string volume = "dev-gn-s3-01"; string folderPath = qcReportSqsMessage.fileLocation.Substring(qcReportSqsMessage.fileLocation.IndexOf("fastq/")); string fileURL = "https://dev-gn-s3-01.s3.amazonaws.com/" + folderPath + description; System.Console.WriteLine("***\n ----> fileURL: " + fileURL); //check first if file already exists int cloudFileExists = db.GNCloudFiles.Where(a => a.FileURL.Equals(fileURL)).Count(); System.Console.WriteLine("\n\n\n ----> FILE EXISTS?: " + cloudFileExists + " - " + sample.Id + " - " + fileURL); //if not, insert if (cloudFileExists == 0) { GNCloudFile cloudFile = new GNCloudFile { Id = Guid.NewGuid(), GNCloudFileCategoryId = fileCategory.Id, //FASTQ CloudFileCategory = fileCategory, FileName = folderPath + description, FileURL = fileURL, FolderPath = folderPath, Volume = volume, Description = description, FileSize = Int64.Parse(qcReportSqsMessage.fileSize) * 1024, AWSRegionSystemName = db.AWSRegions.FirstOrDefault().AWSRegionSystemName, CreateDateTime = DateTime.Now, CreatedBy = Guid.Parse("0750f896-e7d6-48d4-a1b9-007059f62784"), SampleId = sample.Id.ToString(), QcStatsAvailable = (qcReportSqsMessage.qcResult.Equals("true")), QcStatsReportLocation = qcReportSqsMessage.qcReportLocation }; db.GNCloudFiles.Add(cloudFile); sample.CloudFiles.Add(cloudFile); System.Console.WriteLine("***\n ----> FILE ADDED TO SAMPLE: " + cloudFile.Id); /* * Batch.TotalNumberOfFastqFilesCompleted = Batch.TotalNumberOfFastqFilesCompleted + 1; * * if (Batch.TotalNumberOfFastqFiles == Batch.TotalNumberOfFastqFilesCompleted) * { * SampleBatchRequestService batchService = new SampleBatchRequestService(); * batchService.QualityControl(Batch); * }*/ } } else { //Update VCF-QC for an existing VCF System.Console.WriteLine("***\n ****** UPDATING ANALYSIS : " + qcReportSqsMessage.entityID); System.Console.WriteLine("***\n ****** " + qcReportSqsMessage.entityType); GNAnalysisRequest analysisRequest = db.GNAnalysisRequests.Find(entityId); System.Console.WriteLine("***\n ****** CreateDateTime" + analysisRequest.CreateDateTime); GNCloudFile vcfFile = analysisRequest.AnalysisResult.ResultFiles.Where(a => a.FileName.Contains(qcReportSqsMessage.fileName)).FirstOrDefault(); System.Console.WriteLine("***\n ****** File found " + vcfFile.FileURL); vcfFile.QcStatsReportLocation = qcReportSqsMessage.qcReportLocation; vcfFile.QcStatsAvailable = true; System.Console.WriteLine("***\n ----> Analysis Request: " + analysisRequest.Description); System.Console.WriteLine("***\n ----> VCF File Found: " + vcfFile.Description); } db.SaveChanges(); success = true; } catch (Exception e1) { Exception e2 = new Exception("Unable to process QCReport Message.", e1); LogUtil.Warn(logger, e2.Message, e2); success = false; } return(success); }