Ejemplo n.º 1
0
        public static async Task <ReturnedSaveFuncInfo> SaveAsync(BackupHistory item)
        {
            var ret = new ReturnedSaveFuncInfo();

            try
            {
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                ret.AddReturnedValue(ex);
            }
            return(ret);
        }
Ejemplo n.º 2
0
        public static async Task <ReturnedSaveFuncInfo> BackupDbAsync(string connectionString, ENSource Source, string path = "", Guid?Guid = null, CancellationToken token = default)
        {
            var    line         = 0;
            var    res          = new ReturnedSaveFuncInfo();
            bool   IsAutomatic  = string.IsNullOrEmpty(path);
            string DatabaseName = "";

            try
            {
                OnCreateBackup?.Invoke(null, new CreateBackupArgs()
                {
                    Message = "", State = CreateBackupState.Start
                });
                token.ThrowIfCancellationRequested();
                DeleteTempFilesToken?.Cancel();

                if (IsAutomatic)
                {
                    path = CreateFileName(connectionString);
                }
                if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
                {
                    //در نرم افزار حسابداری آدرس پوشه پشتیبان گیری اتوماتیک داده شده است
                    //باید فایل پشتیبان در این پوشه ایجاد گردد
                    path        = CreateFileName(connectionString, path);
                    IsAutomatic = true;
                }

                DeleteTempFilesToken?.Cancel();
                token.ThrowIfCancellationRequested();

                //تهیه اولین نسخه بکاپ توسط سرویس اس کیو ال
                var CreateSqlBackuResult = await CreateSqlServerBackupFileAsync(path, connectionString);

                DatabaseName = CreateSqlBackuResult.value;
                res.AddReturnedValue(CreateSqlBackuResult);
                DeleteTempFilesToken?.Cancel();
                token.ThrowIfCancellationRequested();

                var PathForZipDirectory = Zip.Move2Temp(path);
                res.AddReturnedValue(PathForZipDirectory);
                DeleteTempFilesToken?.Cancel();
                token.ThrowIfCancellationRequested();

                try
                {
                    //please dont remove this try
                    //اگر به خطا خورد باید تابع ادامه پیدا کند و پشتیبان با پسوند .بک تهیه شود
                    res.AddReturnedValue(await CompressFile.CompressFileInstance.CompressFileAsync(PathForZipDirectory.value, path, token));
                }
                catch (Exception ex)
                {
                    WebErrorLog.ErrorInstence.StartErrorLog(ex);
                    res.AddReturnedValue(ex);
                }
                res.value = path.ToLower().Replace(".npz2", ".np").Replace(".npz", ".np").Replace(".np", ".npz2");

                //بنا به هر دلیلی امکان فشرده کردن فایل وجود نداشته است
                //باید همان بکاپ فشرده نشده به آدرس مقصد درخواستی مشتری متقل گردد
                if (res.HasError)
                {
                    var file = Directory.GetFiles(PathForZipDirectory.value).FirstOrDefault();
                    File.Move(file, path.ToLower().Replace(".npz2", ".np").Replace(".npz", ".np"));
                }

                OnCreateBackup?.Invoke(null,
                                       new CreateBackupArgs()
                {
                    Message = "", State = CreateBackupState.End
                });
            }
            catch (OperationCanceledException ex)
            {
                res.AddReturnedValue(ex);
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex, $"Error in Line {line}");
                res.AddReturnedValue(ex);
            }
            finally
            {
                DeleteTempFilesToken?.Cancel();
                DeleteTempFilesToken = new CancellationTokenSource();
                Task.Run(() => deleteTempsAsync(DeleteTempFilesToken.Token));
                Task.Run(() => BackupHistory.DeleteOldBackupsAsync());
                Task.Run(() => BackupHistory.SaveAsync(new BackupHistory()
                {
                    Date         = DateTime.Now,
                    Guid         = Guid ?? System.Guid.NewGuid(),
                    IsAutomatic  = IsAutomatic,
                    DatabaseName = DatabaseName,
                    Path         = path,
                    IsSuccess    = !res.HasError,
                    Source       = Source
                }));
            }
            return(res);
        }