public override async Task <GNCloudFile> Insert(object entity)
        {
            LogUtil.LogMethod(logger, MethodBase.GetCurrentMethod());

            GNCloudFile cloudFile = null;

            try
            {
                cloudFile = (GNCloudFile)entity;

                cloudFile.Id             = Guid.NewGuid();
                cloudFile.FolderPath     = cloudFile.FileName.Replace(cloudFile.Description, "");
                cloudFile.FileURL        = GNCloudStorageService.GetObjectUrl(cloudFile.Volume, cloudFile.FileName);
                cloudFile.CreateDateTime = DateTime.Now;

                var tx = db.Database.BeginTransaction();

                string sql = "INSERT INTO [gn].[GNCloudFiles] " +
                             "([Id],[FileURL],[Volume],[FileName],[FolderPath],[FileSize],[Description],[GNCloudFileCategoryId],[AWSRegionSystemName], " +
                             "[CreatedBy],[CreateDateTime]) " +
                             "VALUES " +
                             "(@Id, " +
                             "@FileURL, " +
                             "@Volume, " +
                             "@FileName, " +
                             "@FolderPath, " +
                             "@FileSize, " +
                             "@Description, " +
                             "@GNCloudFileCategoryId, " +
                             "@AWSRegionSystemName, " +
                             "@CreatedBy, " +
                             "@CreateDateTime)";

                db.Database.ExecuteSqlCommand(sql,
                                              new SqlParameter("@Id", cloudFile.Id),
                                              new SqlParameter("@FileURL", cloudFile.FileURL),
                                              new SqlParameter("@Volume", cloudFile.Volume),
                                              new SqlParameter("@FileName", cloudFile.FileName),
                                              new SqlParameter("@FolderPath", cloudFile.FolderPath),
                                              new SqlParameter("@FileSize", cloudFile.FileSize),
                                              new SqlParameter("@Description", cloudFile.Description),
                                              new SqlParameter("@GNCloudFileCategoryId", cloudFile.GNCloudFileCategoryId),
                                              new SqlParameter("@AWSRegionSystemName", cloudFile.AWSRegionSystemName),
                                              new SqlParameter("@CreatedBy", cloudFile.CreatedBy),
                                              new SqlParameter("@CreateDateTime", cloudFile.CreateDateTime.Value));

                tx.Commit();

                Guid sampleId = Guid.Empty;
                Guid.TryParse(cloudFile.SampleId, out sampleId);
                AssociateCloudFileToSample(cloudFile.Id, sampleId);
            }
            catch (Exception ex)
            {
                LogUtil.Error(logger, "Unable to insert Cloud File into Database.", ex);
            }

            return(cloudFile);
        }
        public void InitCloudServices(Guid AWSConfigId)
        {
            LogUtil.LogMethod(logger, MethodBase.GetCurrentMethod());

            if (cloudStorageService == null)
            {
                cloudStorageService             = new GNCloudStorageService();
                cloudStorageService.AWSConfigId = AWSConfigId;
                cloudStorageService.ConnectToCloudStorage();
            }
        }
        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 GNAnalysisRequest DetailsOnLoad(GNAnalysisRequest analysisRequest)
        {
            EvalActionPrivileges(analysisRequest);

            GNCloudStorageService st = new GNCloudStorageService();

            //  bool res = ((AnalysisRequestService)entityService).tempPersistStatus(analysisRequest);


            auditResult = audit.LogEvent(UserContact, analysisRequest.Id, this.ENTITY, this.Request.UserHostAddress, EVENT_LOAD_DETAILS_UI);

            //In case during the creation of result files all where left as type=6, review and update to the corredct types.
            try
            {
                if (analysisRequest.AnalysisResult != null && analysisRequest.AnalysisResult.ResultFiles != null)
                {
                    if (analysisRequest.AnalysisResult.ResultFiles.Where(a => a.GNCloudFileCategoryId == 6).Count() > 0)
                    {
                        ((AnalysisRequestService)entityService).UpdateFileExtensions(analysisRequest.AnalysisResult);
                    }
                }
            }
            catch (Exception e)
            {
            }

            //Breadcrumbs Info
            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;

            ViewBag.DateVCFSentToCartagenia = "NO";
            try
            {
                string           stsCartagenia    = "CARTAGENIA";
                GNAnalysisStatus statusCartagenia = db.GNAnalysisStatus.Where(a => a.GNAnalysisRequestId == analysisRequest.Id && a.Status == stsCartagenia).FirstOrDefault();
                if (statusCartagenia != null)
                {
                    ViewBag.DateVCFSentToCartagenia = TimeZoneInfo.ConvertTime((DateTime)statusCartagenia.CreateDateTime, analysisRequest.Project.Teams.FirstOrDefault().Organization.OrgTimeZoneInfo).ToString();
                }
            }
            catch (Exception notFound)
            {
                ViewBag.DateVCFSentToCartagenia = "NO";
            }


            GNSettingsTemplate Template = db.GNOrganizations.Where(a => a.Id.Equals(Team.OrganizationId)).FirstOrDefault().GNSettingsTemplate;

            ViewBag.TemplateConfigTertiaryFrequency        = (Double.Parse(Template.GNSettingsTemplateConfigs.Where(a => a.GNSettingsTemplateField.Id.Equals("TERTIARY_FREQUENCY")).FirstOrDefault().Value) * 100);
            ViewBag.TemplateConfigTertiarySplicingTreshold = Template.GNSettingsTemplateConfigs.Where(a => a.GNSettingsTemplateField.Id.Equals("TERTIARY_SPLICING_THRESHOLD")).FirstOrDefault().Value;


            //2016.02.04 if the last status was error due to a corrupted file, attach the name of the file to the short status
            ViewBag.CorruptFilenameFound = "NA";
            if (analysisRequest.CurrentStatusShort.Equals("ERROR"))
            {
                string lastStatusReported = analysisRequest.AnalysisStatus.LastOrDefault().Message;
                if (lastStatusReported.Contains("corrupt file"))
                {
                    string corruptFileName = lastStatusReported.Substring(lastStatusReported.LastIndexOf('/') + 1);
                    ViewBag.CorruptFilenameFound = analysisRequest.CurrentStatusShort + ": corrupt file found " + corruptFileName;
                }
            }


            if (Request["sampleId"] != null)
            {
                Guid     sampleId = Guid.Parse(Request["sampleId"]);
                GNSample Sample   = db.GNSamples.Where(a => a.Id.Equals(sampleId)).FirstOrDefault();
                ViewBag.CurrentSample = Sample;
            }

            return(base.DetailsOnLoad(analysisRequest));
        }
Beispiel #5
0
 public S3FileUploadController()
 {
     //instantiate services
     CloudStorageService = new GNCloudStorageService();
 }