public static async Task <bool> AssigningVideosToQueue(int id, string fileNames, VideoQueType type) { //int VMsAvailable = 4; //creating local context to avoid threading issues using (ApplicationDbContext context = new ApplicationDbContext()) { Service serv = context.Services.Find(id); VideoQueue q = new VideoQueue(); q.VideoId = id; q.BlobPath = fileNames; q.CreateDate = DateTime.Now; q.VideoQueType = type; q.VideoStatus = VideoQueueStatus.UploadingToAzureRenderFarm; //Use free server located in Wahpeton to Render videos if avaliable //Look into purchasing a render server for the house //var wahpRenderQ = context.VideoQueues.Where(x => x.VMName == "WIN-8GJ4I6440BF").FirstOrDefault(); //if (wahpRenderQ == null) //{ // q.VMName = "WIN-8GJ4I6440BF"; // q.VideoStatus = VideoQueueStatus.UploadingToAzureRenderFarm; // context.VideoQueues.Add(q); // context.SaveChanges(); //} //else //{ string timeStamp = DateTime.Now.ToString("hhmm"); string PrefixName = serv.Id + "-" + serv.FuneralHome.Name; PrefixName = Regex.Replace(PrefixName, "[^A-Za-z0-9-_]", ""); var groupName = PrefixName + "-RenderGroup"; groupName = Regex.Replace(groupName, "[^A-Za-z0-9-_]", "") + "-" + timeStamp; var vmName = serv.Id + "vm"; q.VMName = vmName; q.VideoStatus = VideoQueueStatus.Created; q.ResourceGroupName = groupName; context.VideoQueues.Add(q); context.SaveChanges(); VMmanager man = new VMmanager(); man.CreateAndDeployRenderVM(serv, groupName, vmName); // } q.VideoStatus = VideoQueueStatus.UploadingToAzureRenderFarm; context.Entry(q).State = EntityState.Modified; context.SaveChanges(); //LOCAL RENDER CODE //q.VMName = "MSI"; //q.VideoStatus = VideoQueueStatus.UploadingToAzureRenderFarm; //q.VideoQueType = type; //context.VideoQueues.Add(q); //context.SaveChanges(); //Turn on azure VM //var StartAzureVMResult = await TurnOnAzureVM(q.AssignedVM.ToString()).ConfigureAwait(false); string[] videoFiles = fileNames.Split(','); //Upload files to Azure bool UploadFilesResult = true; if (type == VideoQueType.FullNoSlate || type == VideoQueType.FullWithSlate) { UploadFilesResult = await UploadFilesToAzure(videoFiles, "videos-in-queue").ConfigureAwait(false); } //Signal Render Machine everything is done if (UploadFilesResult) { q.VideoStatus = VideoQueueStatus.UploadedToAzureRenderFarm; } else { q.VideoStatus = VideoQueueStatus.Error; context.Entry(q).State = EntityState.Modified; Error.ReportError(ErrorSeverity.Severe, "AzureRender", "AssignVideosToQue", "105"); } context.SaveChanges(); Task.Yield(); return(false); } }
public ActionResult Manage(Service service) { var errors = ModelState .Where(x => x.Value.Errors.Count > 0) .Select(x => new { x.Key, x.Value.Errors }) .ToArray(); if (ModelState.IsValid) { if (service.Id == 0) { var loggedInUserId = User.Identity.GetUserId(); FuneralHome home = db.FuneralHomes.Where(f => f.UserId == loggedInUserId).FirstOrDefault(); service.FuneralHome = home; service = db.Services.Add(service); db.SaveChanges(); } else { //Not sure why lazy load isn't working here Video vid = db.Videos.Find(service.Id); if (vid != null) { if (service.Video != null && User.IsInRole("Admin")) { if (service.Video.Status != null) { Video serviceVid = db.Videos.Find(service.Id); serviceVid.Status = service.Video.Status; serviceVid.ConvertedFilePath = service.Video.ConvertedFilePath; db.Entry(serviceVid).State = EntityState.Modified; service.Video = serviceVid; } } Service dbService = db.Services.AsNoTracking().Where(x => x.Id == service.Id).FirstOrDefault(); if (dbService != null) { //Don't allow user to change anything if we are currently rendering a video var videoQs = db.VideoQueues.Where(s => s.VideoId == service.Id).FirstOrDefault(); if (videoQs != null) { ModelState.Clear(); ModelState.AddModelError("RenderInProgress", "Cannot save changes because the video is rendering. Please wait for video to be done rendering, refresh the page and save your changes."); return(View(dbService)); } //Detect changes, and re render video if needed if (service.HasSlate != dbService.HasSlate) { AzureRender.CopyProductionVideoToQueContainer(dbService.Video.ConvertedFilePath); VideoQueType renderType = VideoQueType.StripSlate; if (service.HasSlate) { renderType = VideoQueType.AddSlate; } AzureRender.AssigningVideosToQueue(service.Id, dbService.Video.ConvertedFilePath, renderType); } else if (service.FirstName != dbService.FirstName || service.LastName != dbService.LastName || service.ServiceDate != dbService.ServiceDate) { if (service.HasSlate == true) { AzureRender.CopyProductionVideoToQueContainer(dbService.Video.ConvertedFilePath); AzureRender.AssigningVideosToQueue(service.Id, dbService.Video.ConvertedFilePath, VideoQueType.ReEditSlate); } } } } db.Entry(service).State = EntityState.Modified; db.SaveChanges(); } if (service.IsSecured && service.ViewingUserId == null) { SecuredServiceHelper servHelp = new SecuredServiceHelper(); servHelp.MakeServiceSecure(service, db); } return(RedirectToAction("Manage", new { id = service.Id })); } return(View(service)); }