Exemple #1
0
        void ExportToTextFile(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.SaveFileDialog d = new Microsoft.Win32.SaveFileDialog();
            d.DefaultExt = ".txt";
            d.Filter     = "Text documents (.txt)|*.txt";
            if (d.ShowDialog() == true)
            {
                string OutputFileName = d.FileName;

                try
                {
                    using (System.IO.StreamWriter writer = System.IO.File.CreateText(OutputFileName))
                    {
                        DataStreamer.StreamFile(
                            chkWriteOutSectionHeaders.IsChecked.Value, chkScriptDrops.IsChecked.Value, chkScriptCreates.IsChecked.Value, writer,
                            txtPrimaryInstance.Text, cmbPrimaryDatabase.SelectedValue.ToString(),
                            txtSecondaryInstance.Text, cmbSecondaryDatabase.SelectedValue.ToString(),
                            PrimaryGroup, SecondaryGroup);
                    }

                    System.Windows.MessageBox.Show(String.Format("Your file is now available at {0}.", OutputFileName), "File Export Successful.", MessageBoxButton.OK, MessageBoxImage.Information);
                }
                catch (Exception ex)
                {
                    ShowErrorMessage(ex.Message);
                }
            }
        }
Exemple #2
0
 public IAsyncEnumerable <TDataType> ReadAll <TDataType>() where TDataType : DataEntity
 {
     using (Logger.BeginScope("{Operation} is {Action} {DataType} with Id ({Id})", nameof(DataManager),
                              "reading all", typeof(TDataType).Name))
     {
         return(DataStreamer.ReadAll <TDataType>());
     }
 }
Exemple #3
0
 public int GetNextId <TDataType>() where TDataType : DataEntity
 {
     using (Logger.BeginScope("{Operation} is {Action} for {DataType}", nameof(DataManager), "getting next id",
                              typeof(TDataType).Name))
     {
         Logger.LogTrace("Getting next id from store");
         var id = DataStreamer.NextId <TDataType>();
         Logger.LogInformation("Next id is {id}", id);
         return(id);
     }
 }
Exemple #4
0
 public async Task <TDataType> Read <TDataType>(int id) where TDataType : DataEntity
 {
     using (Logger.BeginScope("{Operation} is {Action}ing {DataType} with Id ({Id})", nameof(DataManager),
                              "read", typeof(TDataType).Name, id))
     {
         Logger.LogTrace("Started to read");
         if (await DataStreamer.Exists <TDataType>(id))
         {
             return(await DataStreamer.Read <TDataType>(id));
         }
         Logger.LogInformation("Didn't find the data");
         return(null);
     }
 }
Exemple #5
0
        static void Main(string[] args)
        {
            Console.CancelKeyPress += delegate { Console.WriteLine(String.Format("{0}Goodbye.{0}", Environment.NewLine)); };

            string PrimaryServerName, SecondaryServerName, PrimaryDatabaseName, SecondaryDatabaseName, OutputFileName;

            if (args.Count() == 5)
            {
                PrimaryServerName     = args[0];
                SecondaryServerName   = args[1];
                PrimaryDatabaseName   = args[2];
                SecondaryDatabaseName = args[3];
                OutputFileName        = args[4];
            }
            else
            {
                if (args.Count() > 0)
                {
                    Console.WriteLine("Invalid argument listing passed.  A valid call looks like:");
                    Console.WriteLine("IndexComparer.exe PrimaryServerName SecondaryServerName PrimaryDatabaseName SecondaryDatabaseName OutputFileName");
                    Console.WriteLine("");
                    Console.WriteLine("");
                }

                #region Console Activity

                do
                {
                    Console.Write("Give the primary server name. ");
                    PrimaryServerName = Console.ReadLine();
                } while (String.IsNullOrWhiteSpace(PrimaryServerName));

                do
                {
                    Console.Write("Give the primary database name. ");
                    PrimaryDatabaseName = Console.ReadLine();
                } while (String.IsNullOrWhiteSpace(PrimaryDatabaseName));

                Console.Write("Give the secondary server name.  If this is the same as the primary server, just hit Enter. ");
                SecondaryServerName = Console.ReadLine();
                if (String.IsNullOrWhiteSpace(SecondaryServerName))
                {
                    SecondaryServerName = PrimaryServerName;
                }

                Console.Write("Give the secondary database name.  If this is the same as the primary database, just hit Enter. ");
                SecondaryDatabaseName = Console.ReadLine();
                if (String.IsNullOrWhiteSpace(SecondaryDatabaseName))
                {
                    SecondaryDatabaseName = PrimaryDatabaseName;
                }

                Console.Write("Tell where you would like the output file to go.  Default: C:\\Temp\\IndexComparisonLog.txt  -- ");
                OutputFileName = Console.ReadLine();
                if (String.IsNullOrWhiteSpace(OutputFileName))
                {
                    OutputFileName = @"C:\Temp\IndexComparisonLog.txt";
                }

                #endregion
            }

            List <IndexSet> PrimaryResults   = IndexSet.RetrieveIndexData(PrimaryServerName, PrimaryDatabaseName);
            List <IndexSet> SecondaryResults = IndexSet.RetrieveIndexData(SecondaryServerName, SecondaryDatabaseName);

            using (System.IO.StreamWriter writer = System.IO.File.CreateText(OutputFileName))
            {
                DataStreamer.StreamFile(true, true, true, writer, PrimaryServerName, PrimaryDatabaseName, SecondaryServerName, SecondaryDatabaseName, PrimaryResults, SecondaryResults);
            }
        }
Exemple #6
0
        public async Task <bool> Restore <TDataType>(int id) where TDataType : DataEntity
        {
            using (Logger.BeginScope("{Operation} is {Action} {DataType} with Id ({Id})", nameof(DataManager),
                                     "restoring", typeof(TDataType).Name, id))
            {
                var data = await Read <TDataType>(id);

                if (data is null)
                {
                    Logger.LogTrace("Data could be deleted");
                    if (await DataStreamer.Undelete <TDataType>(id))
                    {
                        Logger.LogTrace("Data restored to store");
                        data = await Read <TDataType>(id);

                        if (typeof(TDataType).IsDefined(typeof(AuditAttribute), true))
                        {
                            Logger.LogTrace("Data is audited");
                            if (await AuditWorker.UndeleteEvent(data))
                            {
                                if (await AuditWorker.CommitEvents(data))
                                {
                                    Logger.LogTrace("Audit committed to store");
                                    if (await IndexWorker.Index(data))
                                    {
                                        Logger.LogInformation("Restored data with audit");
                                        return(true);
                                    }

                                    Logger.LogWarning("Failed to index data");
                                    await AuditWorker.RollbackEvent(data);
                                }
                                else
                                {
                                    Logger.LogWarning("Failed to commit audit for data to store");
                                    await AuditWorker.DiscardEvents(data);

                                    Logger.LogTrace("Discarded audit record");
                                }
                            }
                            else
                            {
                                Logger.LogWarning("Failed to create undelete audit record for data");
                            }
                        }
                        else
                        {
                            if (await IndexWorker.Index(data))
                            {
                                Logger.LogInformation("Restored data");
                                return(true);
                            }

                            Logger.LogWarning("Failed to index data");
                        }

                        await DataStreamer.Delete <TDataType>(id);

                        Logger.LogInformation("Rolled back restore");
                    }

                    Logger.LogWarning("Failed to restore data");
                    return(false);
                }

                Logger.LogWarning("Data didn't need restoring");
                return(true);
            }
        }
Exemple #7
0
        public async Task <bool> Delete <TDataType>(int id) where TDataType : DataEntity
        {
            using (Logger.BeginScope("{Operation} is {Action} {DataType} with Id ({Id})", nameof(DataManager),
                                     "deleting", typeof(TDataType).Name, id))
            {
                var data = await Read <TDataType>(id);

                if (data is null)
                {
                    Logger.LogWarning("Unable to find the data it may already be deleted");
                    return(false);
                }

                if (typeof(TDataType).IsDefined(typeof(AuditAttribute), true))
                {
                    Logger.LogTrace("Data is audited");
                    if (await AuditWorker.DeleteEvent(data))
                    {
                        Logger.LogTrace("Delete audit record created");
                        if (await DataStreamer.Delete <TDataType>(id))
                        {
                            Logger.LogTrace("Data deleted from store");
                            if (await AuditWorker.CommitEvents(data))
                            {
                                Logger.LogTrace("Audit committed to store");
                                if (await IndexWorker.Unindex(data))
                                {
                                    Logger.LogInformation("Data deleted from store");
                                    return(true);
                                }

                                Logger.LogWarning("Failed to remove indexes for data");
                                await AuditWorker.RollbackEvent(data);

                                Logger.LogInformation("Added rollback audit record");
                            }
                            else
                            {
                                Logger.LogWarning("Failed to commit audit to store");
                            }

                            await DataStreamer.Rollback(id, data);

                            Logger.LogInformation("Rolled data back");
                        }
                        else
                        {
                            Logger.LogWarning("Failed to delete data");
                            await AuditWorker.DiscardEvents(data);

                            Logger.LogTrace("Discarded audit record");
                        }

                        return(false);
                    }

                    Logger.LogWarning("Failed to create audit record for delete");
                    return(false);
                }

                Logger.LogTrace("Data is not audited");
                if (await DataStreamer.Delete <TDataType>(id))
                {
                    Logger.LogInformation("Deleted data");
                    if (await IndexWorker.Unindex(data))
                    {
                        Logger.LogInformation("Removed any indexes for data");
                        return(true);
                    }

                    Logger.LogWarning("Failed to remove indexes for data");
                    await DataStreamer.Rollback(id, data);

                    Logger.LogInformation("Rolled data back");
                }

                Logger.LogWarning("Failed to delete data");
                return(false);
            }
        }
Exemple #8
0
        public async Task <bool> Write <TDataType>(TDataType data) where TDataType : DataEntity
        {
            using (Logger.BeginScope("{Operation} is {Action} {DataType} with Id ({Id})", nameof(DataManager),
                                     "writing", typeof(TDataType).Name, data.Id))
            {
                Logger.LogTrace("Checking if data exists");
                var currentData = await Read <TDataType>(data.Id);

                Logger.LogInformation(currentData is null ? "Creating data" : "Updating data");
                if (typeof(TDataType).IsDefined(typeof(AuditAttribute), true))
                {
                    Logger.LogTrace("{DataType} is audited", typeof(TDataType).Name);
                    var writtenData = await DataStreamer.Write(data.Id, data);

                    if (writtenData)
                    {
                        Logger.LogTrace("Data ready to commit to store");
                        var auditResult = currentData is null
                            ? await AuditWorker.CreationEvent(data)
                            : await AuditWorker.UpdateEvent(data, currentData);

                        if (auditResult)
                        {
                            Logger.LogTrace("Audit record created");
                            writtenData = await DataStreamer.Commit <TDataType>(data.Id);

                            if (writtenData)
                            {
                                Logger.LogTrace("Data saved to store");
                                var committedAudit = await AuditWorker.CommitEvents(data);

                                if (committedAudit)
                                {
                                    Logger.LogTrace("Audit saved to store");
                                    var indexed = await IndexWorker.Index(data);

                                    if (indexed)
                                    {
                                        Logger.LogInformation("Data, Audit saved successfully");
                                        return(true);
                                    }

                                    Logger.LogWarning("Failed to index data");
                                    await AuditWorker.RollbackEvent(data);

                                    Logger.LogInformation("Added rollback to audit");
                                    Logger.LogTrace("Rolled back data");
                                }

                                await DataStreamer.Rollback(data.Id, currentData);

                                Logger.LogInformation("Rolled data back");
                                return(false);
                            }

                            await AuditWorker.DiscardEvents(data);

                            return(false);
                        }

                        Logger.LogWarning("Failed to create audit record for data");
                        await DataStreamer.DiscardChanges <TDataType>(data.Id);

                        Logger.LogTrace("Discard changes");
                    }

                    Logger.LogWarning("Failed to save data to the store");
                    return(false);
                }

                Logger.LogTrace("Data is not audited");
                var writeAndCommit = await DataStreamer.WriteAndCommit(data.Id, data);

                if (writeAndCommit)
                {
                    var indexed = await IndexWorker.Index(data);

                    if (!indexed)
                    {
                        Logger.LogWarning("Failed to index data");
                        await DataStreamer.Rollback(data.Id, currentData);

                        Logger.LogInformation("Rolled data back");
                        return(false);
                    }

                    Logger.LogTrace("Data was indexed");
                    Logger.LogInformation("Data saved successfully");
                }
                else
                {
                    Logger.LogWarning("Failed to save data");
                }

                return(writeAndCommit);
            }
        }