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(); } }
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) { } })); }
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); } }