internal static async Task LaunchCommandAsync(this GeneralCommandInfos command, ILogger logger, CancellationToken ct) { switch (command) { case CleanCommand clean: await CleanRunner.CleanAsync(clean, logger, ct); break; case RestoreCommand restoreCommand: await RestoreRunner.RestoreAsync(restoreCommand, logger, ct); break; case DropDatabaseCommand drop: await DropRunner.DropDatabasesAsync(drop, logger, ct); break; } }
private static Logger CreateLogger(GeneralCommandInfos commandInfos) { var logFileName = commandInfos switch { CleanCommand _ => "clean.log", RestoreCommand _ => "restore.log", DropDatabaseCommand _ => "drop.log", _ => throw new NotImplementedException("Type not supported") }; var level = commandInfos.Verbose ? LogEventLevel.Debug : LogEventLevel.Information; var loggerConf = new LoggerConfiguration() .WriteTo.Async(conf => { var path = commandInfos.LogsPath?.Exists == true ? Path.Combine(commandInfos.LogsPath.FullName, logFileName) : "logs/" + logFileName; conf.File(path, rollingInterval: RollingInterval.Day, retainedFileCountLimit: 31); conf.Console(); }).MinimumLevel.Is(level); return(loggerConf.CreateLogger()); } }
internal static bool TryParseCommand(this string[] args, out GeneralCommandInfos command) { var parsed = Parser.Default.ParseArguments <RestoreCommand, CleanCommand, DropDatabaseCommand>(args); IEnumerable <Error> errors = null; command = parsed.MapResult( (RestoreCommand restoreCommand) => restoreCommand, (CleanCommand cleanCommand) => cleanCommand, (DropDatabaseCommand dropCommand) => dropCommand, parsingErrors => { errors = parsingErrors; return((GeneralCommandInfos)null); }); if (errors != null && errors.Any()) { return(false); } command.Validate(); return(true); }