Пример #1
0
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();
            var            freq     = BackupRestoreUtils.StringToFrequencyUnit(FrequencyUnit);
            BackupSchedule schedule = new BackupSchedule(
                FrequencyInterval, freq,
                KeepAtLeastOneBackup.IsPresent,
                RetentionPeriodInDays, StartTime);
            BackupRequest request = new BackupRequest()
            {
                Enabled           = true,
                StorageAccountUrl = this.StorageAccountUrl,
                BackupSchedule    = schedule,
                Databases         = this.Databases,
            };

            WebsitesClient.UpdateWebAppBackupConfiguration(ResourceGroupName, Name, Slot, request);
            var config = new AzureWebAppBackupConfiguration()
            {
                Name = this.Name,
                ResourceGroupName     = this.ResourceGroupName,
                StorageAccountUrl     = this.StorageAccountUrl,
                FrequencyInterval     = this.FrequencyInterval,
                FrequencyUnit         = this.FrequencyUnit,
                RetentionPeriodInDays = this.RetentionPeriodInDays,
                StartTime             = this.StartTime,
                KeepAtLeastOneBackup  = this.KeepAtLeastOneBackup.IsPresent,
                Databases             = this.Databases,
                Enabled = true
            };

            WriteObject(config);
        }
Пример #2
0
        public override async Task <BackupResponse> Backup(Backup backup, BackupRequest request)
        {
            var service           = new Service(backup.ServiceId);
            var server            = new Server(service.ServerId);
            var fileSystemService = server.FileSystemService;
            var backupLocation    = FileSystem.CombinePath(server.OperatingSystem,
                                                           Configuration.LocalDirectory.ReplaceVariables(service));
            var originalPath = FileSystem.FixAbsoluteFilePath(
                FileSystem.CombinePath(server.OperatingSystem, service.RootDirectory, request.Path,
                                       Compress(backup, request)), server.OperatingSystem);
            var newPath  = FileSystem.CombinePath(server.OperatingSystem, backupLocation, backup.ZipFullName);
            var fileSize = fileSystemService.GetFileSize(originalPath);

            BackupManagerController.ThrowExceedQuota(backup, request, fileSize);
            backup.FileSize = fileSize;

            if (!fileSystemService.DirectoryExists(Path.GetDirectoryName(backupLocation)))
            {
                fileSystemService.CreateDirectory(Path.GetDirectoryName(backupLocation));
            }

            fileSystemService.CopyFile(originalPath, newPath);
            fileSystemService.DeleteFile(originalPath);

            return(new BackupResponse(true));
        }
Пример #3
0
        public override async Task <BackupResponse> Backup(Backup backup, BackupRequest request)
        {
            var bucket            = $"backups-service-{backup.ServiceId}";
            var service           = new Service(backup.ServiceId);
            var server            = new Server(service.ServerId);
            var fileSystemService = server.FileSystemService;
            var combinePath       = FileSystem.FixAbsoluteFilePath(
                FileSystem.CombinePath(server.OperatingSystem, service.RootDirectory, request.Path,
                                       Compress(backup, request)), server.OperatingSystem);
            var fileSize = fileSystemService.GetFileSize(combinePath);

            BackupManagerController.ThrowExceedQuota(backup, request, fileSize);
            backup.FileSize = fileSize;

            if (!await MinioClient.BucketExistsAsync(bucket))
            {
                await MinioClient.MakeBucketAsync(bucket, _region);
            }

            var    contents = fileSystemService.ReadBinary(combinePath);
            Stream stream   = new MemoryStream(contents);
            await MinioClient.PutObjectAsync(bucket, backup.ZipFullName, stream, stream.Length, "application/zip");

            return(new BackupResponse(true));
        }
Пример #4
0
        public static string BuildBackupCancellEmail(BackupRequest backupRequest)
        {
            StringBuilder sb = new StringBuilder();

            try
            {
                using (MTCDBEntities db = new MTCDBEntities())
                {
                    sb.Append(EmailBody(backupRequest));

                    var primaryContractor = GetContractorById(backupRequest.ContractorId);
                    sb.Append("<h3>2. The requestor " + primaryContractor.ContractCompanyName + " has cancelled the Back-up Request.</h3>");

                    sb.Append("<tr>");
                    sb.Append("<td><br/></td>");
                    sb.Append("</tr>");

                    sb.Append("<tr>");
                    sb.Append("<td colspan='2'><h3>Please log on to the LATATrax to respond. <a href='" + GetWebUri() + "/BackupTrucks/ResponseBackup' target='_blank'>Back-up Response</a>.</h3></td>");
                    sb.Append("</tr>");

                    sb.Append("<tr>");
                    sb.Append("<td><br/></td>");
                    sb.Append("</tr>");

                    sb.Append(EmailFooter());
                }
            }
            catch
            {
            }


            return(sb.ToString());
        }
Пример #5
0
        public ActionResult ScheduleBackupRequest()
        {
            if (ModelState.IsValid)
            {
                var request = new BackupRequest(BackupType.Full, BackupSchedule.OnDemand);

                Context.AddBackupRequest(request);
                Context.SaveChanges();
            }

            return PartialView("_AddBackupRequest");
        }
Пример #6
0
        public override Task <BackupResponse> Backup(BackupRequest request, ServerCallContext context)
        {
            var result = _indexService.Backup(new Indexing.IndexingActivityStatus
            {
                LastActivityId = request.Status.LastActivityId,
                Gaps           = request.Status.Gaps.ToArray()
            }, request.Target);

            return(Task.FromResult(new BackupResponse
            {
                Response = JsonConvert.SerializeObject(result)
            }));
        }
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();
            BackupRequest request = new BackupRequest()
            {
                StorageAccountUrl = this.StorageAccountUrl,
                BackupName        = this.BackupName,
                Databases         = this.Databases
            };
            var backup = WebsitesClient.BackupSite(ResourceGroupName, Name, Slot, request);

            WriteObject(BackupRestoreUtils.BackupItemToAppBackup(backup, ResourceGroupName, Name, Slot));
        }
Пример #8
0
        public virtual string Compress(Backup backup, BackupRequest request)
        {
            var service           = new Service(backup.ServiceId);
            var server            = new Server(service.ServerId);
            var fileSystemService = server.FileSystemService;
            var baseDir           = FileSystem.CombinePath(server.OperatingSystem, service.RootDirectory, request.Path);
            var toCompress        = request.Directories.Select(x => x.Name).ToList();

            toCompress.AddRange(request.Files.Select(x => x.Name + x.Extension));

            return(fileSystemService.CompressFiles(baseDir, toCompress.ToArray(),
                                                   ObjectXml.ObjectToXml(GenerateVirtualDirectorySecurity(service)), 5000000000));
        }
Пример #9
0
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();
            BackupRequest request = new BackupRequest()
            {
                // Location is required by Resource (base class of BackupRequest)
                // to not be null, but is not actually significant for the request.
                Location          = "",
                StorageAccountUrl = this.StorageAccountUrl,
                BackupRequestName = this.BackupName,
                Databases         = this.Databases
            };
            var backup = WebsitesClient.BackupSite(ResourceGroupName, Name, Slot, request);

            WriteObject(BackupRestoreUtils.BackupItemToAppBackup(backup, ResourceGroupName, Name, Slot));
        }
Пример #10
0
        public static void ThrowExceedQuota(Backup backup, BackupRequest request, long fileSize)
        {
            var service = new Service(backup.ServiceId);
            var t       = GetBackupsQuotaUsed(service, backup.Provider);
            var t2      = GetBackupsQuota(service, backup.Provider);
            var newSize = t + fileSize;

            Console.WriteLine(t);
            Console.WriteLine(t2);
            Console.WriteLine(newSize);
            Console.WriteLine(newSize > t2);
            if (newSize > t2)
            {
                throw new QuotaException(backup, request);
            }
        }
        public BackupItem GetSiteBackupStatusSecrets(string resourceGroupName, string webSiteName, string slotName,
                                                     string backupId, BackupRequest request = null)
        {
            string qualifiedSiteName;
            var    useSlot = CmdletHelpers.ShouldUseDeploymentSlot(webSiteName, slotName, out qualifiedSiteName);

            if (useSlot)
            {
                return(WrappedWebsitesClient.WebApps().GetSiteBackupStatusSecretsSlot(resourceGroupName, webSiteName,
                                                                                      backupId, request, slotName));
            }
            else
            {
                return(WrappedWebsitesClient.WebApps().GetSiteBackupStatusSecrets(resourceGroupName, webSiteName, backupId, request));
            }
        }
Пример #12
0
        public BackupRequest UpdateWebAppBackupConfiguration(string resourceGroupName, string webSiteName,
                                                             string slotName, BackupRequest newSchedule)
        {
            string qualifiedSiteName;
            var    useSlot = CmdletHelpers.ShouldUseDeploymentSlot(webSiteName, slotName, out qualifiedSiteName);

            if (useSlot)
            {
                return(WrappedWebsitesClient.Sites.UpdateSiteBackupConfigurationSlot(resourceGroupName,
                                                                                     webSiteName, newSchedule, slotName));
            }
            else
            {
                return(WrappedWebsitesClient.Sites.UpdateSiteBackupConfiguration(resourceGroupName, webSiteName, newSchedule));
            }
        }
        public void BackupSite()
        {
            var response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(HttpPayload.BackupSite)
            };

            var handler = new RecordedDelegatingHandler(response)
            {
                StatusCodeToReturn = HttpStatusCode.OK
            };

            var client = GetWebSiteManagementClient(handler);

            BackupRequest backupRequest = new BackupRequest()
            {
                Name              = "abc.zip",
                Databases         = new List <DatabaseBackupSetting>(),
                StorageAccountUrl = "https://username.blob.core.windows.net/backup/?sv=2012-02-12"
            };

            backupRequest.Databases.Add(new DatabaseBackupSetting()
            {
                ConnectionString = "Server=someserver;Database=somedatabase;Uid=someusername;Pwd=somepassword;",
                DatabaseType     = "MySql",
                Name             = "db1"
            });

            var backupResponse = client.WebSites.Backup("space1", "baysite", backupRequest);

            Assert.Equal(HttpStatusCode.OK, backupResponse.StatusCode);

            var backupResult = backupResponse.BackupItem;

            Assert.Equal(backupResult.Status, BackupItemStatus.Created);
            Assert.Equal(1, backupResult.Databases.Count);

            Assert.Equal("abc.zip", backupResult.BlobName);
            Assert.Equal("abc.zip", backupResult.Name);
            Assert.Equal(0, backupResult.SizeInBytes);
            Assert.False(backupResult.Scheduled);
            Assert.True(backupResult.StorageAccountUrl.StartsWith("https://"));

            Assert.Equal("MySql", backupResult.Databases[0].DatabaseType);
            Assert.Equal("db1", backupResult.Databases[0].Name);
            Assert.True(!string.IsNullOrEmpty(backupResult.Databases[0].ConnectionString));
        }
        public BackupItem BackupSite(string resourceGroupName, string webSiteName, string slotName,
                                     BackupRequest request)
        {
            string qualifiedSiteName;
            var    useSlot = CmdletHelpers.ShouldUseDeploymentSlot(webSiteName, slotName, out qualifiedSiteName);

            if (useSlot)
            {
                var backup = WrappedWebsitesClient.WebApps().BackupSiteSlot(resourceGroupName, webSiteName, request, slotName);
                return(backup);
            }
            else
            {
                var backup = WrappedWebsitesClient.WebApps().BackupSite(resourceGroupName, webSiteName, request);
                return(backup);
            }
        }
        public virtual Response <SiteSlotBackupResource> GetBackupStatusSecretsSlot(BackupRequest request, CancellationToken cancellationToken = default)
        {
            Argument.AssertNotNull(request, nameof(request));

            using var scope = _siteSlotBackupWebAppsClientDiagnostics.CreateScope("SiteSlotBackupResource.GetBackupStatusSecretsSlot");
            scope.Start();
            try
            {
                var response = _siteSlotBackupWebAppsRestClient.ListBackupStatusSecretsSlot(Id.SubscriptionId, Id.ResourceGroupName, Id.Parent.Parent.Name, Id.Parent.Name, Id.Name, request, cancellationToken);
                return(Response.FromValue(new SiteSlotBackupResource(Client, response.Value), response.GetRawResponse()));
            }
            catch (Exception e)
            {
                scope.Failed(e);
                throw;
            }
        }
Пример #16
0
        public static string BuildBackupResponseSubject(BackupRequest backupRequest, BackupResponse backupResponse)
        {
            string retValue = string.Empty;

            if (backupResponse.BackupResponseStatus == BackupResponseStatus.Accepted)
            {
                retValue = "Back-up Request (" + backupRequest.RequestNumber + ") statisfied";
            }
            else if (backupResponse.BackupResponseStatus == BackupResponseStatus.Qualified)
            {
                retValue = "Back-up Request (" + backupRequest.RequestNumber + ") NOT statisfied";
            }
            else if (backupResponse.BackupResponseStatus == BackupResponseStatus.Declined)
            {
                retValue = "Back-up Request (" + backupRequest.RequestNumber + ") declined";
            }

            return(retValue);
        }
Пример #17
0
        public virtual Response <SiteBackup> GetBackupStatusSecrets(BackupRequest request, CancellationToken cancellationToken = default)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            using var scope = _clientDiagnostics.CreateScope("SiteBackup.GetBackupStatusSecrets");
            scope.Start();
            try
            {
                var response = _webAppsRestClient.ListBackupStatusSecrets(Id.SubscriptionId, Id.ResourceGroupName, Id.Parent.Name, Id.Name, request, cancellationToken);
                return(Response.FromValue(new SiteBackup(this, response.Value), response.GetRawResponse()));
            }
            catch (Exception e)
            {
                scope.Failed(e);
                throw;
            }
        }
Пример #18
0
        public async Task <ActionResult> Backup(int id, BackupRequest backupRequest)
        {
            this.EnforceFeaturePermission("FileManager");
            var service = Service.GetSelectedService();

            if (!backupRequest.Directories.Any() && !backupRequest.Files.Any())
            {
                return(this.SendError("Please choose at least <strong>1</strong> file or directory to backup."));
            }

            try
            {
                var backup = await Models.Objects.Backup.CreateAsync(service, backupRequest);

                backup.Save();
                return(this.SendSuccess($"Backed up <strong>{backupRequest.Name}</strong>"));
            }
            catch (Exception e)
            {
                return(this.SendException(e, "Failed to backup: " + e.Message));
            }
        }
Пример #19
0
        public override async Task <BackupResponse> Backup(Backup backup, BackupRequest request)
        {
            var service           = new Service(backup.ServiceId);
            var server            = new Server(service.ServerId);
            var fileSystemService = server.FileSystemService;
            var combinePath       = FileSystem.FixAbsoluteFilePath(
                FileSystem.CombinePath(server.OperatingSystem, service.RootDirectory, request.Path,
                                       Compress(backup, request)), server.OperatingSystem);
            var fileSize = fileSystemService.GetFileSize(combinePath);

            BackupManagerController.ThrowExceedQuota(backup, request, fileSize);
            backup.FileSize = fileSize;

            var contents = fileSystemService.ReadBinary(combinePath);

            fileSystemService.DeleteFile(combinePath);
            var fileLocation = $"/TCAdminBackupManager/{service.UserId}/{backup.ZipFullName}";
            var ftpStatus    = FtpClient.Upload(contents, fileLocation, createRemoteDir: true,
                                                existsMode: FtpRemoteExists.Overwrite);

            return(new BackupResponse(ftpStatus == FtpStatus.Success));
        }
Пример #20
0
        // Backup & download (dump file)
        public async Task <HttpResult> Post(BackupRequest request)
        {
            if (!pool.ContainsKey(request.Id))
            {
                throw HttpError.NotFound($"Deployment {request.Id} not found");
            }

            var keyedInstance = pool.Single(p => p.Key == request.Id);

            if (!request.ObtainLastBackup)
            {
                using (var cancellableRequest = Request.CreateCancellableRequest())
                {
                    await keyedInstance.Value.Backup(
                        cancellableRequest.Token);
                }
            }

            return(new HttpResult(
                       new FileInfo(keyedInstance.Value.Deployment.LastBackupFile),
                       "application/octet-stream",
                       true));
        }
Пример #21
0
        public static string BuildBackupRequestEmail(BackupRequest backupRequest)
        {
            StringBuilder sb = new StringBuilder();

            try
            {
                using (MTCDBEntities db = new MTCDBEntities())
                {
                    sb.Append(EmailBody(backupRequest));

                    sb.Append("<table>");


                    using (MTCDbContext dc = new MTCDbContext())
                    {
                        var backupProviders = dc.BackupProviders.ToList();
                        var ba = dc.BackupAssignments.FirstOrDefault(p => p.BeatId == backupRequest.BeatId);

                        var primaryContractorId   = backupProviders.FirstOrDefault(c => c.BackupBeatId == ba.PrimaryBackupBeatId).ContractorId;
                        var primaryContractor     = GetContractorById(primaryContractorId);
                        var secondaryContractorId = backupProviders.FirstOrDefault(c => c.BackupBeatId == ba.SecondaryBackupBeatId).ContractorId;
                        var secondaryContractor   = GetContractorById(secondaryContractorId);
                        var tertiaryContractorId  = backupProviders.FirstOrDefault(c => c.BackupBeatId == ba.TertiaryBackupBeatId).ContractorId;
                        var tertiaryContractor    = GetContractorById(tertiaryContractorId);

                        if (backupRequest.CurrentBackupContractorAssignmentLevel == BackupAssignmentLevel.Secondary)
                        {
                            sb.Append("<h3>2. Back-up Contractor responses:</h3>");
                            sb.Append("<tr>");
                            sb.Append("<td>The primary back-up contractor " + primaryContractor.ContractCompanyName + " has either declined or only partially accepted the back-up request.</td>");
                            sb.Append("</tr>");
                        }
                        else if (backupRequest.CurrentBackupContractorAssignmentLevel == BackupAssignmentLevel.Tertiary)
                        {
                            sb.Append("<h3>2. Back-up Contractor responses:</h3>");
                            sb.Append("<tr>");
                            sb.Append("<td>The primary back-up contractor " + primaryContractor.ContractCompanyName + " has either declined or only partially accepted the back-up request.</td>");
                            sb.Append("</tr>");
                            sb.Append("<tr>");
                            sb.Append("<td>The secondary back-up contractor " + secondaryContractor.ContractCompanyName + " has either declined or only partially accepted the back-up request.</td>");
                            sb.Append("</tr>");
                        }
                        else if (backupRequest.CurrentBackupContractorAssignmentLevel == BackupAssignmentLevel.AllBackupOperators)
                        {
                            sb.Append("<h3>2. Back-up Contractor responses:</h3>");
                            sb.Append("<tr>");
                            sb.Append("<td>The primary back-up contractor " + primaryContractor.ContractCompanyName + " has either declined or only partially accepted the back-up request.</td>");
                            sb.Append("</tr>");
                            sb.Append("<tr>");
                            sb.Append("<td>The secondary back-up contractor " + secondaryContractor.ContractCompanyName + " has either declined or only partially accepted the back-up request.</td>");
                            sb.Append("</tr>");
                            sb.Append("<tr>");
                            sb.Append("<td>The tertiary back-up contractor " + tertiaryContractor.ContractCompanyName + " has either declined or only partially accepted the back-up request.</td>");
                            sb.Append("</tr>");
                        }
                    }
                }

                sb.Append("<tr>");
                sb.Append("<td><br/></td>");
                sb.Append("</tr>");

                sb.Append("<tr>");
                sb.Append("<td colspan='2'><h3>Please log on to the LATATrax to respond. <a href='" + GetWebUri() + "/BackupTrucks/ResponseBackup' target='_blank'>Back-up Response</a>.</h3></td>");
                sb.Append("</tr>");

                sb.Append("<tr>");
                sb.Append("<td><br/></td>");
                sb.Append("</tr>");

                sb.Append("</table>");


                sb.Append(EmailFooter());
            }
            catch
            {
            }


            return(sb.ToString());
        }
 public void Setup()
 {
     _backupRequest = A.Fake<BackupRequest>();
     _backupValidator = A.Fake<BackupValidator>();
 }
 public ValidatedBackupProcess(BackupRequest backupRequest, BackupValidator backupValidator)
 {
     _backupRequest = backupRequest;
     _backupValidator = backupValidator;
 }
        public static AzureWebAppBackupConfiguration BackupRequestToAppBackupConfiguration(BackupRequest configuration, string resourceGroupName, string name, string slot)
        {
            if (configuration == null)
            {
                return(new AzureWebAppBackupConfiguration());
            }
            BackupSchedule schedule = configuration.BackupSchedule;

            DatabaseBackupSetting[] databases = null;
            bool?enabled = configuration.Enabled;

            if (configuration.Databases != null)
            {
                databases = configuration.Databases.ToArray();
            }

            int?     frequencyInterval     = null;
            string   frequencyUnit         = null;
            int?     retentionPeriodInDays = null;
            DateTime?startTime             = null;
            bool?    keepAtLeastOneBackup  = null;

            if (schedule != null)
            {
                frequencyInterval = schedule.FrequencyInterval;
                if (schedule.FrequencyUnit != null)
                {
                    frequencyUnit = schedule.FrequencyUnit.ToString();
                }
                retentionPeriodInDays = schedule.RetentionPeriodInDays;
                startTime             = schedule.StartTime;
                keepAtLeastOneBackup  = schedule.KeepAtLeastOneBackup;
            }

            return(new AzureWebAppBackupConfiguration()
            {
                Name = name,
                ResourceGroupName = resourceGroupName,
                StorageAccountUrl = configuration.StorageAccountUrl,
                FrequencyInterval = frequencyInterval,
                FrequencyUnit = frequencyUnit,
                RetentionPeriodInDays = retentionPeriodInDays,
                StartTime = startTime,
                Databases = databases,
                KeepAtLeastOneBackup = keepAtLeastOneBackup,
                Enabled = enabled
            });
        }
 public static BackupRequest AddBackupRequest(this IDatabaseContext context, BackupRequest request)
 {
     return context.BackupRequests.Add(request);
 }
 public async Task<Stream> BackupAsync(BackupRequest request)
 {
     return await client.PostAsync(request);
 }
 public Stream Backup(BackupRequest request)
 {
     return client.Post(request);
 }
Пример #28
0
        public ActionResult RequestBackup(BackupRequest model, List <BackupRequestShiftAndDate> BackupDatesAndShifts)
        {
            var retvalue = true;

            using (var db = new MTCDbContext())
            {
                var currentMonth = DateTime.Today.ToString("MM");

                model.RequestNumber = currentMonth + (db.BackupRequests.Count(p => p.RequestNumber.StartsWith(currentMonth)) + 1).ToString().PadLeft(2, "0"[0]);
                model.CreatedOn     = DateTime.Now;
                model.LastExpiredOn = DateTime.Now;
                model.CreatedBy     = HttpContext.User.Identity.Name;
                model.ModifiedOn    = DateTime.Now;
                model.ModifiedBy    = HttpContext.User.Identity.Name;
                model.IsCancelled   = false;

                if (BackupDatesAndShifts != null)
                {
                    foreach (var item in BackupDatesAndShifts)
                    {
                        db.BackupRequestShiftsAndDates.Add(item);
                    }
                }

                Contractor toContractor    = null;
                var        backupProviders = db.BackupProviders.ToList();
                var        ba = db.BackupAssignments.FirstOrDefault(p => p.BeatId == model.BeatId);
                var        assignmentLevel = BackupAssignmentLevel.Primary;

                if (model.SelectedBackupContractorId == Guid.Empty)
                {
                    //no prior arrangements have been made. Get the primary back-up for this contractorId and beatId combination.
                    if (ba != null)
                    {
                        var baProvider = backupProviders.FirstOrDefault(p => p.BackupBeatId == ba.PrimaryBackupBeatId);
                        if (baProvider != null)
                        {
                            model.SelectedBackupContractorId = baProvider.ContractorId;
                        }
                        model.SelectedBackupContractorAssignmentLevel = assignmentLevel;
                        toContractor = EmailManager.GetContractorById(model.SelectedBackupContractorId);
                    }
                }
                else
                {
                    toContractor    = EmailManager.GetContractorById(model.SelectedBackupContractorId);
                    assignmentLevel = model.SelectedBackupContractorAssignmentLevel;
                }

                model.CurrentBackupContractorId = model.SelectedBackupContractorId;
                model.CurrentBackupContractorAssignmentLevel = model.SelectedBackupContractorAssignmentLevel;
                db.BackupRequests.Add(model);
                db.SaveChanges();


                var requestingContractor = EmailManager.GetContractorById(model.ContractorId);
                var toRecipients         = new List <MTCEmailRecipient>();
                var ccRecipients         = new List <MTCEmailRecipient>();

                toRecipients.Add(new MTCEmailRecipient
                {
                    Email = toContractor?.Email,
                    Name  = toContractor?.ContractCompanyName
                });

                ccRecipients.Add(new MTCEmailRecipient
                {
                    Email = Utilities.GetApplicationSettingValue("MTCContactEmail"),
                    Name  = Utilities.GetApplicationSettingValue("MTCContactName")
                });
                ccRecipients.Add(new MTCEmailRecipient
                {
                    Email = requestingContractor.Email,
                    Name  = requestingContractor.ContractCompanyName
                });

                var body = EmailManager.BuildBackupRequestEmail(model);

                EmailManager.SendEmail(toRecipients, EmailManager.BuildBackupRequestSubject(model.RequestNumber, assignmentLevel), body, ccRecipients);
            }
            return(Json(retvalue, JsonRequestBehavior.AllowGet));
        }
 public void SendBackupFile(BackupRequest request)
 {
     this.Retry((Action)(() => this._service.SendBackupFile(request)), this.RetryInterval, this.RetryCount);
 }
Пример #30
0
        public void ListBackupsAndScheduledBackupRoundTrip()
        {
            using (var context = MockContext.Start(this.GetType().FullName))
            {
                var webSitesClient  = this.GetWebSiteManagementClient(context);
                var resourcesClient = this.GetResourceManagementClient(context);

                string farmName          = TestUtilities.GenerateName("csmsf");
                string resourceGroupName = TestUtilities.GenerateName("csmrg");

                string locationName = "West US";
                string siteName     = TestUtilities.GenerateName("csmws");

                resourcesClient.ResourceGroups.CreateOrUpdate(resourceGroupName,
                                                              new ResourceGroup
                {
                    Location = locationName
                });

                webSitesClient.ServerFarms.CreateOrUpdateServerFarm(resourceGroupName, farmName, new ServerFarmWithRichSku
                {
                    ServerFarmWithRichSkuName = farmName,
                    Location = locationName,
                    Sku      = new SkuDescription
                    {
                        Name     = "F1",
                        Tier     = "Free",
                        Capacity = 1
                    }
                });

                var serverfarmId = ResourceGroupHelper.GetServerFarmId(webSitesClient.SubscriptionId, resourceGroupName, farmName);
                webSitesClient.Sites.CreateOrUpdateSite(resourceGroupName, siteName, new Site
                {
                    SiteName     = siteName,
                    Location     = locationName,
                    ServerFarmId = serverfarmId
                });

                var backupResponse = webSitesClient.Sites.ListSiteBackups(resourceGroupName, siteName);
                Assert.Equal(0, backupResponse.Value.Count); // , "Backup list should be empty"

                // the following URL just have a proper format, but it is not valid - for an API test it is not needed to be valid,
                // since we are just testing a roundtrip here
                // [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine")]
                string storageUrl = "https://nonexistingusername3567.blob.core.windows.net/backup/?sv=2012-02-12&st=2013-12-05T19%3A30%3A45Z&se=2017-12-04T19%3A30%3A45Z&sr=c&sp=rwdl&sig=3BY5sbzQ2NeKvdaelzxc8inxJgE1mGq2a%2BaqUeFGJYo%3D";

                var sr = new BackupRequest()
                {
                    Enabled        = false,
                    BackupSchedule = new BackupSchedule()
                    {
                        FrequencyInterval     = 17,
                        FrequencyUnit         = FrequencyUnit.Day,
                        KeepAtLeastOneBackup  = true,
                        RetentionPeriodInDays = 26,
                        StartTime             = DateTime.Now.AddDays(5)
                    },
                    BackupRequestName = "abc",
                    StorageAccountUrl = storageUrl
                };

                webSitesClient.Sites.UpdateSiteBackupConfiguration(resourceGroupName, siteName, sr);

                var backupConfiguration = webSitesClient.Sites.GetSiteBackupConfiguration(resourceGroupName, siteName);

                Assert.Equal(sr.Enabled, backupConfiguration.Enabled);
                Assert.Equal(sr.BackupSchedule.FrequencyInterval, backupConfiguration.BackupSchedule.FrequencyInterval);
                Assert.Equal(sr.BackupSchedule.FrequencyUnit, backupConfiguration.BackupSchedule.FrequencyUnit);
                Assert.Equal(sr.BackupSchedule.KeepAtLeastOneBackup, backupConfiguration.BackupSchedule.KeepAtLeastOneBackup);
                Assert.Equal(sr.Name, backupConfiguration.BackupRequestName);

                webSitesClient.Sites.DeleteSite(resourceGroupName, siteName, deleteAllSlots: true.ToString(), deleteMetrics: true.ToString());

                webSitesClient.ServerFarms.DeleteServerFarm(resourceGroupName, farmName);

                var serverFarmResponse = webSitesClient.ServerFarms.GetServerFarms(resourceGroupName);

                Assert.Equal(0, serverFarmResponse.Value.Count);
            }
        }
Пример #31
0
 public static Backup Create(Service service, BackupRequest request)
 {
     return(CreateAsync(service, request).ConfigureAwait(false).GetAwaiter().GetResult());
 }
Пример #32
0
        private static string EmailBody(BackupRequest backupRequest)
        {
            StringBuilder sb = new StringBuilder();

            try
            {
                int          _urgentBackupRequestResponseTimeInMinutes   = 0;
                int          _standardBackupRequestResponseTimeInMinutes = 0;
                BackupReason backupReason = null;
                List <BackupRequestShiftAndDate> backupRequestShiftsAndDates = new List <BackupRequestShiftAndDate>();


                using (MTCDbContext db = new MTCDbContext())
                {
                    _urgentBackupRequestResponseTimeInMinutes   = Convert.ToInt32(Utilities.GetApplicationSettingValue("UrgentBackupRequestResponseTimeInMinutes"));
                    _standardBackupRequestResponseTimeInMinutes = Convert.ToInt32(Utilities.GetApplicationSettingValue("StandardBackupRequestResponseTimeInMinutes"));

                    backupReason = db.BackupReasons.Find(backupRequest.BackupReasonId);
                    backupRequestShiftsAndDates = db.BackupRequestShiftsAndDates.Where(p => p.BackupRequestId == backupRequest.Id).ToList();
                }

                string requestPriority = "Standard (You have up to " + _standardBackupRequestResponseTimeInMinutes / 60 + " hours to respond)";
                if (backupRequest.RequestIsUrgent)
                {
                    requestPriority = "Urgent (You have up to " + _urgentBackupRequestResponseTimeInMinutes + " minutes to respond)";
                }

                sb.Append("<h3>1. The following Back-up Truck Service Request has been entered into LATATrax.</h3>");

                sb.Append("<table>");
                sb.Append("<tr>");
                sb.Append("<td>Request #</td>");
                sb.Append("<td>" + backupRequest.RequestNumber + "</td>");
                sb.Append("</tr>");

                sb.Append("<tr>");
                sb.Append("<td>Request Priority</td>");
                sb.Append("<td>" + requestPriority + "</td>");
                sb.Append("</tr>");

                using (var de = new MTCDBEntities())
                {
                    sb.Append("<tr>");
                    sb.Append("<td>Requesting Contractor:</td>");

                    var contractor = de.Contractors.FirstOrDefault(p => p.ContractorID == backupRequest.ContractorId);
                    if (contractor != null)
                    {
                        sb.Append("<td>" + contractor.ContractCompanyName + "</td>");
                    }
                    sb.Append("</tr>");

                    sb.Append("<tr>");
                    sb.Append("<td>Beat needing Back-up:</td>");
                    var beat = de.BeatDatas.FirstOrDefault(p => p.ID == backupRequest.BeatId);
                    if (beat != null)
                    {
                        sb.Append("<td>" + beat.BeatName + "</td>");
                    }
                    sb.Append("</tr>");
                }
                sb.Append("<tr>");
                sb.Append("<td>Dates and Shifts Back-up Needed:</td>");
                sb.Append("<td>");

                foreach (var b in backupRequestShiftsAndDates)
                {
                    var shifts = "";
                    if (b.AMRequested)
                    {
                        shifts = " AM ";
                    }
                    if (b.MIDRequested)
                    {
                        shifts += " MID ";
                    }
                    if (b.PMRequested)
                    {
                        shifts += " PM ";
                    }

                    sb.Append("<span><b>" + b.BackupDate.ToString("MM/dd/yyyy") + "</b>  " + shifts + "</span><br />");
                }

                sb.Append("</td>");
                sb.Append("</tr>");

                sb.Append("<tr>");
                sb.Append("<td>Back-up Reason Code:</td>");
                if (backupReason != null)
                {
                    sb.Append("<td>" + backupReason.ReasonCode + " - " + backupReason.Reason + "</td>");
                }
                sb.Append("</tr>");

                sb.Append("<tr>");
                sb.Append("<td>Requestor's Comments:</td>");
                sb.Append("<td>" + backupRequest.Comments + "</td>");
                sb.Append("</tr>");

                sb.Append("<tr>");
                sb.Append("<td><br/></td>");
                sb.Append("</tr>");

                sb.Append("</table>");
            }
            catch
            {
            }

            return(sb.ToString());
        }
Пример #33
0
        public static async System.Threading.Tasks.Task <Backup> CreateAsync(Service service, BackupRequest request)
        {
            var backup = new Backup
            {
                ServiceId  = service.ServiceId,
                OwnerId    = service.UserId,
                Name       = request.Name,
                ProviderId = request.ProviderId,
                Guid       = System.Guid.NewGuid().ToString("D"),
                Request    = request
            };

            backup.GenerateKey();
            var provider = backup.Provider.Create <BackupSolution>();
            await provider.Backup(backup, request);

            return(backup);
        }
Пример #34
0
        public static string BuildBackupResponseEmail(BackupRequest backupRequest, BackupResponse backupResponse)
        {
            StringBuilder sb = new StringBuilder();

            try
            {
                using (MTCDBEntities db = new MTCDBEntities())
                {
                    sb.Append(EmailBody(backupRequest));

                    sb.Append("<table>");
                    sb.Append("<tr>");
                    sb.Append("<td colspan='2'><br/></td>");
                    sb.Append("</tr>");

                    sb.Append("<tr>");
                    sb.Append("<td>Responder's Comments:</td>");
                    sb.Append("<td>" + backupResponse.Comments + "</td>");
                    sb.Append("</tr>");


                    sb.Append("<tr>");
                    sb.Append("<td colspan='2'><br/></td>");
                    sb.Append("</tr>");

                    using (MTCDbContext dc = new MTCDbContext())
                    {
                        if (backupResponse.BackupResponseStatus == BackupResponseStatus.Accepted)
                        {
                            sb.Append("<tr>");
                            sb.Append("<td colspan='2'><h3>2. The Back-up Request will be satisfied by the following Back-up Contractors.</h3></td>");
                            sb.Append("</tr>");

                            var respondingContractor = GetContractorById(backupResponse.ContractorId);

                            sb.Append("<tr>");
                            sb.Append("<td colspan='2'>" + respondingContractor.ContractCompanyName + "</td>");
                            sb.Append("</tr>");
                        }
                        else if (backupResponse.BackupResponseStatus == BackupResponseStatus.Qualified)
                        {
                            sb.Append("<tr>");
                            sb.Append("<td colspan='2'><h3>2. The Back-up Request will be partially satisfied by the following Back-up Contractors.</h3></td>");
                            sb.Append("</tr>");

                            var respondingContractor = GetContractorById(backupResponse.ContractorId);

                            sb.Append("<tr>");
                            sb.Append("<td colspan='2'>" + respondingContractor.ContractCompanyName + "</td>");
                            sb.Append("</tr>");

                            sb.Append("<tr>");
                            sb.Append("<td colspan='2'><br/></td>");
                            sb.Append("</tr>");

                            sb.Append("<tr>");
                            sb.Append(
                                "<td colspan='2'>Some or all of the Back-up Request has not been satisfied by any Back-up Contractor. The back-up Request has been referred to MTC for resolution.</td>");
                            sb.Append("</tr>");
                        }
                        else if (backupResponse.BackupResponseStatus == BackupResponseStatus.Declined)
                        {
                            var declinationReason = dc.BackupDeclinationReasons.Find(backupResponse.BackupDeclinationReasonId);
                            if (declinationReason != null)
                            {
                                sb.Append("<tr>");
                                sb.Append("<td>Declination Reason:</td>");
                                sb.Append("<td>" + declinationReason.ReasonCode + " - " + declinationReason.Reason + "</td>");
                                sb.Append("</tr>");
                            }
                        }
                    }

                    sb.Append("<tr>");
                    sb.Append("<td><br/></td>");
                    sb.Append("</tr>");

                    sb.Append("<tr>");
                    sb.Append("<td colspan='2'><h3>Please log on to the LATATrax to respond. <a href='" + GetWebUri() + "/BackupTrucks/ResponseBackup' target='_blank'>Back-up Response</a>.</h3></td>");
                    sb.Append("</tr>");

                    sb.Append("<tr>");
                    sb.Append("<td><br/></td>");
                    sb.Append("</tr>");

                    sb.Append("</table>");

                    sb.Append(EmailFooter());
                }
            }
            catch
            {
            }

            return(sb.ToString());
        }