public void RunJob() { //download demo data to temporary file var tempFilePath = Path.Combine(tmpfolder, _fromFilePath); try { if (!File.Exists(tempFilePath)) { using (var fs = new FileStream(tempFilePath, FileMode.OpenOrCreate, FileAccess.Write)) { var store = StorageFactory.GetStorage(currentWebConfigPath, "demodata", "demo", null, null); store.GetReadStream(_fromFilePath).StreamCopyTo(fs); } } var restoreTask = new RestorePortalTask(currentWebConfigPath, tempFilePath, ColumnMapper.ForRestoreDemoPortal(_tenantID)); restoreTask.IgnoreTable("tenants_tenants"); restoreTask.IgnoreTable("tenants_tariff"); restoreTask.IgnoreModule(ModuleName.Mail); restoreTask.IgnoreModule(ModuleName.WebStudio); restoreTask.ProgressChanged += (sender, args) => Percentage = args.Progress; restoreTask.Message += (sender, args) => { if (args.Reason == MessageReason.Info) { log.Debug(args.Message); } else if (args.Reason == MessageReason.Warning) { log.Warn(args.Message); } }; restoreTask.Run(); } catch (Exception error) { log.Error(error); Error = error; } finally { IsCompleted = true; } }
public void RunJob() { Tenant tenant = null; var tempFile = PathHelper.GetTempFileName(tempFolder); try { NotifyHelper.SendAboutRestoreStarted(TenantId, Notify); var storage = BackupStorageFactory.GetBackupStorage(StorageType, TenantId); storage.Download(StoragePath, tempFile); Percentage = 10; tenant = CoreContext.TenantManager.GetTenant(TenantId); tenant.SetStatus(TenantStatus.Restoring); CoreContext.TenantManager.SaveTenant(tenant); var columnMapper = new ColumnMapper(); columnMapper.SetMapping("tenants_tenants", "alias", tenant.TenantAlias, ((Guid)Id).ToString("N")); columnMapper.Commit(); var restoreTask = new RestorePortalTask(Log, TenantId, configPaths[currentRegion], tempFile, columnMapper); restoreTask.IgnoreTable("tenants_tariff"); restoreTask.ProgressChanged += (sender, args) => Percentage = (10d + 0.65 * args.Progress); restoreTask.RunJob(); CoreContext.TenantManager.RemoveTenant(tenant.TenantId); var restoredTenant = CoreContext.TenantManager.GetTenant(columnMapper.GetTenantMapping()); restoredTenant.SetStatus(TenantStatus.Active); restoredTenant.TenantAlias = tenant.TenantAlias; restoredTenant.PaymentId = string.Empty; if (string.IsNullOrEmpty(restoredTenant.MappedDomain) && !string.IsNullOrEmpty(tenant.MappedDomain)) { restoredTenant.MappedDomain = tenant.MappedDomain; } CoreContext.TenantManager.SaveTenant(restoredTenant); Percentage = 75; File.Delete(tempFile); // sleep until tenants cache expires Thread.Sleep(TimeSpan.FromMinutes(2)); Percentage = 100; NotifyHelper.SendAboutRestoreCompleted(restoredTenant.TenantId, Notify); } catch (Exception error) { Log.Error(error); Error = error; if (tenant != null) { tenant.SetStatus(TenantStatus.Active); CoreContext.TenantManager.SaveTenant(tenant); } } finally { if (File.Exists(tempFile)) { File.Delete(tempFile); } IsCompleted = true; } }