Exemple #1
0
        private void WriteProgress(BackupResponse response)
        {
            var info = response.Current ?? response.History?.FirstOrDefault();

            if (info == null)
            {
                Console.Write("\t\tBACKUP: {0}, bytes: ?/?, files: ?/?, ?                  \r",
                              response.State);
            }
            else
            {
                Console.Write("\t\tBACKUP: {0}, bytes: {1}/{2}, files: {3}/{4}, {5}                \r",
                              response.State,
                              info.CopiedBytes, info.TotalBytes,
                              info.CopiedFiles, info.CountOfFiles,
                              info.CurrentlyCopiedFile);
            }
        }
Exemple #2
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);
        }
        /// <summary>
        /// Handles a backup request
        /// </summary>
        internal async Task HandleBackupRequest(
            BackupParams backupParams,
            RequestContext <BackupResponse> requestContext)
        {
            try
            {
                BackupResponse response = new BackupResponse();
                ConnectionInfo connInfo;
                bool           supported = IsBackupRestoreOperationSupported(backupParams.OwnerUri, out connInfo);

                if (supported && connInfo != null)
                {
                    DatabaseTaskHelper helper  = AdminService.CreateDatabaseTaskHelper(connInfo, databaseExists: true);
                    SqlConnection      sqlConn = ConnectionService.OpenSqlConnection(connInfo, "Backup");
                    // Connection gets discounnected when backup is done

                    BackupOperation backupOperation = CreateBackupOperation(helper.DataContainer, sqlConn, backupParams.BackupInfo);
                    SqlTask         sqlTask         = null;

                    // create task metadata
                    TaskMetadata metadata = TaskMetadata.Create(backupParams, SR.BackupTaskName, backupOperation, ConnectionServiceInstance);

                    sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);
                    sqlTask.StatusChanged += CloseConnection;
                }
                else
                {
                    response.Result = false;
                }

                await requestContext.SendResult(response);
            }
            catch (Exception ex)
            {
                await requestContext.SendError(ex.ToString());
            }
        }
Exemple #4
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());
        }
        public ActionResult RespondToBackupRequest(BackupResponse model, List <BackupRequestShiftAndDate> BackupDatesAndShifts)
        {
            var retvalue = true;

            using (var db = new MTCDbContext())
            {
                model.CreatedOn  = DateTime.Now;
                model.CreatedBy  = HttpContext.User.Identity.Name;
                model.ModifiedOn = DateTime.Now;
                model.ModifiedBy = HttpContext.User.Identity.Name;

                db.BackupResponses.Add(model);

                if (model.BackupResponseStatus == BackupResponseStatus.Qualified)
                {
                    if (BackupDatesAndShifts != null)
                    {
                        foreach (var item in BackupDatesAndShifts)
                        {
                            var baDs = db.BackupRequestShiftsAndDates.Find(item.Id);
                            if (baDs == null)
                            {
                                continue;
                            }

                            if (item.AMRequested)
                            {
                                baDs.AMSatisfied = item.AMSatisfied;
                            }

                            if (item.MIDRequested)
                            {
                                baDs.MIDSatisfied = item.MIDSatisfied;
                            }

                            if (item.PMRequested)
                            {
                                baDs.PMSatisfied = item.PMSatisfied;
                            }
                        }
                    }
                }


                db.SaveChanges();

                var br = db.BackupRequests.Find(model.BackupRequestId);
                var backupProviders = db.BackupProviders.ToList();
                var ba = db.BackupAssignments.FirstOrDefault(p => p.BeatId == br.BeatId);

                var toContractor = EmailManager.GetContractorById(br.ContractorId);

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

                var ccRecipients = new List <MTCEmailRecipient>();
                var toRecipients = new List <MTCEmailRecipient>();

                if (model.BackupResponseStatus == BackupResponseStatus.Declined || model.BackupResponseStatus == BackupResponseStatus.Qualified)
                {
                    #region

                    if (br.CurrentBackupContractorAssignmentLevel == BackupAssignmentLevel.Primary)
                    {
                        if (model.BackupResponseStatus == BackupResponseStatus.Declined)
                        {
                            br.PrimaryBackupResponseTimeExpiredOrDeclined   = true;
                            br.PrimaryBackupResponseTimeExpiredOrDeclinedOn = DateTime.Now;
                        }

                        br.CurrentBackupContractorId = secondaryContractorId;
                        br.CurrentBackupContractorAssignmentLevel = BackupAssignmentLevel.Secondary;
                    }
                    else if (br.CurrentBackupContractorAssignmentLevel == BackupAssignmentLevel.Secondary)
                    {
                        if (model.BackupResponseStatus == BackupResponseStatus.Declined)
                        {
                            br.SecondaryBackupResponseTimeExpiredOrDeclined   = true;
                            br.SecondaryBackupResponseTimeExpiredOrDeclinedOn = DateTime.Now;
                        }

                        br.CurrentBackupContractorId = tertiaryContractorId;
                        br.CurrentBackupContractorAssignmentLevel = BackupAssignmentLevel.Tertiary;
                    }
                    else if (br.CurrentBackupContractorAssignmentLevel == BackupAssignmentLevel.Tertiary)
                    {
                        if (model.BackupResponseStatus == BackupResponseStatus.Declined)
                        {
                            br.TertiaryBackupResponseTimeExpiredOrDeclined   = true;
                            br.TertiaryBackupResponseTimeExpiredOrDeclinedOn = DateTime.Now;
                        }

                        br.CurrentBackupContractorId = null;
                        br.CurrentBackupContractorAssignmentLevel = BackupAssignmentLevel.AllBackupOperators;

                        foreach (var backupProvider in backupProviders)
                        {
                            var backupProviderContractor = EmailManager.GetContractorById(backupProvider.ContractorId);
                            ccRecipients.Add(new MTCEmailRecipient
                            {
                                Email = backupProviderContractor.Email,
                                Name  = backupProviderContractor.ContractCompanyName
                            });
                        }
                    }

                    #endregion

                    br.ModifiedBy = HttpContext.User.Identity.Name;
                    br.ModifiedOn = DateTime.Now;

                    if (model.BackupResponseStatus == BackupResponseStatus.Qualified)
                    {
                        //check if maybe now all shifts have been covered. then set status to accepted.

                        var backupDatesAndShifts = db.BackupRequestShiftsAndDates.Where(p => p.BackupRequestId == br.Id).ToList();
                        var allShiftsSatisfied   = true;

                        foreach (var item in backupDatesAndShifts)
                        {
                            if (item.AMSatisfied == false || item.MIDSatisfied == false || item.PMSatisfied == false)
                            {
                                allShiftsSatisfied = false;
                            }
                        }

                        if (allShiftsSatisfied)
                        {
                            model.BackupResponseStatus = BackupResponseStatus.Accepted;
                        }
                    }

                    db.SaveChanges();
                }

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

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

                EmailManager.SendEmail(toRecipients, EmailManager.BuildBackupResponseSubject(br, model), EmailManager.BuildBackupResponseEmail(br, model), ccRecipients);
            }
            return(Json(retvalue, JsonRequestBehavior.AllowGet));
        }