Exemplo n.º 1
0
        public static async Task MigrateNoSqlDatabase(
            AbstractMigrationConfiguration configuration,
            Func <string, string, JsonTextWriter, StreamWriter, Task> migrateSingleCollection,
            Func <JsonTextWriter, StreamWriter, Task> migrateAttachments = null)
        {
            Stream stream;

            if (configuration.ConsoleExport)
            {
                stream = Console.OpenStandardOutput();
            }
            else
            {
                var fileName = $"Dump of {configuration.DatabaseName} {DateTime.UtcNow.ToString("yyyy-MM-dd HH-mm", CultureInfo.InvariantCulture)}.ravendbdump";
                var basePath = string.IsNullOrWhiteSpace(configuration.ExportFilePath) ? Directory.GetCurrentDirectory() : configuration.ExportFilePath;
                stream = File.Create(Path.Combine(basePath, fileName));
            }

            using (GetStream(configuration, stream, out var outStream))
                await using (var streamWriter = new StreamWriter(outStream))
                    using (var jsonTextWriter = new JsonTextWriter(streamWriter))
                    {
                        if (configuration.ConsoleExport == false)
                        {
                            jsonTextWriter.Formatting = Formatting.Indented;
                        }

                        await jsonTextWriter.WriteStartObjectAsync();

                        await jsonTextWriter.WritePropertyNameAsync("BuildVersion");

                        await jsonTextWriter.WriteValueAsync(RavenVersionAttribute.Instance.BuildVersion);

                        await jsonTextWriter.WritePropertyNameAsync("Docs");

                        await jsonTextWriter.WriteStartArrayAsync();

                        foreach (var collection in configuration.CollectionsToMigrate)
                        {
                            var mongoCollectionName = collection.Name;
                            var ravenCollectionName = collection.NewName;
                            if (string.IsNullOrWhiteSpace(ravenCollectionName))
                            {
                                ravenCollectionName = mongoCollectionName;
                            }

                            await migrateSingleCollection(mongoCollectionName, ravenCollectionName, jsonTextWriter, streamWriter);
                        }

                        if (migrateAttachments != null)
                        {
                            await migrateAttachments(jsonTextWriter, streamWriter);
                        }

                        await jsonTextWriter.WriteEndArrayAsync();

                        await jsonTextWriter.WriteEndObjectAsync();
                    }
        }
Exemplo n.º 2
0
        private static IDisposable GetStream(
            AbstractMigrationConfiguration configuration,
            Stream stream, out Stream outStream)
        {
            if (configuration.ConsoleExport)
            {
                outStream = stream;
                return(new DisposableAction(stream.Dispose));
            }

            var gzipStream = outStream = new GZipStream(stream, CompressionMode.Compress, leaveOpen: true);

            return(new DisposableAction(() =>
            {
                using (stream)
                    using (gzipStream)
                    {
                    }
            }));
        }
Exemplo n.º 3
0
        public static void OutputClass(
            AbstractMigrationConfiguration configuration,
            object obj)
        {
            if (configuration.ConsoleExport)
            {
                var jsonString = JsonConvert.SerializeObject(obj);
                Console.WriteLine(jsonString);
                return;
            }

            foreach (var prop in obj.GetType().GetProperties())
            {
                var value = prop.GetValue(obj, null);
                if (value is List <string> list)
                {
                    value = string.Join(", ", list);
                }

                Console.WriteLine("{0}: {1}", prop.Name, value);
            }
        }