public override GNCloudFile CreateOnLoad() { GNCloudFile cloudFile = base.CreateOnLoad(); if (cloudFile == null) { cloudFile = new GNCloudFile(); } GNCloudFileCategory cloudFileCat = this.db.GNCloudFileCategories.Where(c => c.Name == "FASTQ File").FirstOrDefault(); if (cloudFileCat != null) { cloudFile.GNCloudFileCategoryId = cloudFileCat.Id; cloudFile.CloudFileCategory = cloudFileCat; } auditResult = audit.LogEvent(UserContact, cloudFile.Id, this.ENTITY, this.Request.UserHostAddress, EVENT_UPLOAD_FILE); return(cloudFile); }
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(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); }