public static void Execute(string[] args) { if (!CliUtils.ParseArgs(Options, args)) { return; } if (_isHelp) { PrintUsage(); return; } if (string.IsNullOrEmpty(_directory)) { _directory = $"backup/{DateTime.Now:yyyy-MM-dd}"; } if (string.IsNullOrEmpty(_webConfigFileName)) { _webConfigFileName = "web.config"; } var treeInfo = new TreeInfo(_directory); if (!DirectoryUtils.IsDirectoryExists(treeInfo.DirectoryPath)) { CliUtils.PrintError($"Error, Directory {treeInfo.DirectoryPath} Not Exists"); return; } var tablesFilePath = treeInfo.TablesFilePath; if (!FileUtils.IsFileExists(tablesFilePath)) { CliUtils.PrintError($"Error, File {treeInfo.TablesFilePath} Not Exists"); return; } WebConfigUtils.Load(CliUtils.PhysicalApplicationPath, _webConfigFileName); Console.WriteLine($"Database Type: {WebConfigUtils.DatabaseType.Value}"); Console.WriteLine($"Connection String: {WebConfigUtils.ConnectionString}"); Console.WriteLine($"Restore Directory: {treeInfo.DirectoryPath}"); if (string.IsNullOrEmpty(WebConfigUtils.ConnectionString)) { CliUtils.PrintError("Error, Connection String Is Empty"); return; } List <string> databaseNameList; string errorMessage; var isConnectValid = DataProvider.DatabaseDao.ConnectToServer(WebConfigUtils.DatabaseType, WebConfigUtils.ConnectionString, out databaseNameList, out errorMessage); if (!isConnectValid) { CliUtils.PrintError("Error, Connection String Not Correct"); return; } var tableNames = TranslateUtils.JsonDeserialize <List <string> >(FileUtils.ReadText(tablesFilePath, Encoding.UTF8)); CliUtils.PrintLine(); CliUtils.PrintRow("Import Table Name", "Total Count"); CliUtils.PrintLine(); var logs = new List <TextLogInfo>(); foreach (var tableName in tableNames) { var metadataFilePath = treeInfo.GetTableMetadataFilePath(tableName); if (!FileUtils.IsFileExists(metadataFilePath)) { continue; } var tableInfo = TranslateUtils.JsonDeserialize <TableInfo>(FileUtils.ReadText(metadataFilePath, Encoding.UTF8)); CliUtils.PrintRow(tableName, tableInfo.TotalCount.ToString("#,0")); if (!DataProvider.DatabaseDao.IsTableExists(tableName)) { DataProvider.DatabaseDao.CreateSystemTable(tableName, tableInfo.Columns); } else { DataProvider.DatabaseDao.AlterSystemTable(tableName, tableInfo.Columns); } using (var progress = new ProgressBar()) { for (var i = 0; i < tableInfo.RowFiles.Count; i++) { progress.Report((double)i / tableInfo.RowFiles.Count); var fileName = tableInfo.RowFiles[i]; var objects = TranslateUtils.JsonDeserialize <List <JObject> >(FileUtils.ReadText(treeInfo.GetTableContentFilePath(tableName, fileName), Encoding.UTF8)); try { DataProvider.DatabaseDao.InsertMultiple(tableName, objects, tableInfo.Columns); } catch (Exception ex) { logs.Add(new TextLogInfo { DateTime = DateTime.Now, Detail = $"tableName {tableName}, fileName {fileName}", Exception = ex }); } } } } CliUtils.PrintLine(); SystemManager.SyncDatabase(); CliUtils.LogErrors(CommandName, logs); Console.WriteLine("Well done! Thanks for Using SiteServer Cli Tool"); }
public static void Execute(string[] args) { if (!CliUtils.ParseArgs(Options, args)) { return; } if (_isHelp) { PrintUsage(); return; } if (string.IsNullOrEmpty(_directory)) { _directory = $"backup/{DateTime.Now:yyyy-MM-dd}"; } var treeInfo = new TreeInfo(_directory); DirectoryUtils.CreateDirectoryIfNotExists(treeInfo.DirectoryPath); ConfigInfo configInfo; if (!string.IsNullOrEmpty(_databaseType) && !string.IsNullOrEmpty(_connectionString)) { configInfo = CliUtils.LoadConfigByArgs(_databaseType, _connectionString); } else { configInfo = CliUtils.LoadConfigByFile(_configFileName); } if (configInfo == null) { CliUtils.PrintError("Error, config not exists"); return; } if (string.IsNullOrEmpty(WebConfigUtils.ConnectionString)) { CliUtils.PrintError("Error, connection string is empty"); return; } if (!DataProvider.DatabaseDao.IsConnectionStringWork(WebConfigUtils.DatabaseType, WebConfigUtils.ConnectionString)) { CliUtils.PrintError("Error, can not connect to the database"); return; } Console.WriteLine($"Database Type: {WebConfigUtils.DatabaseType.Value}"); Console.WriteLine($"Connection String: {WebConfigUtils.ConnectionString}"); Console.WriteLine($"Backup Directory: {treeInfo.DirectoryPath}"); var tableNames = DataProvider.DatabaseDao.GetTableNameList(); FileUtils.WriteText(treeInfo.TablesFilePath, Encoding.UTF8, TranslateUtils.JsonSerialize(tableNames)); CliUtils.PrintLine(); CliUtils.PrintRow("Backup Table Name", "Total Count"); CliUtils.PrintLine(); foreach (var tableName in tableNames) { if (configInfo.BackupConfig.Includes != null) { if (!StringUtils.ContainsIgnoreCase(configInfo.BackupConfig.Includes, tableName)) { continue; } } if (configInfo.BackupConfig.Excludes != null) { if (StringUtils.ContainsIgnoreCase(configInfo.BackupConfig.Includes, tableName)) { continue; } } var tableInfo = new TableInfo { Columns = DataProvider.DatabaseDao.GetTableColumnInfoList(WebConfigUtils.ConnectionString, tableName), TotalCount = DataProvider.DatabaseDao.GetCount(tableName), RowFiles = new List <string>() }; CliUtils.PrintRow(tableName, tableInfo.TotalCount.ToString("#,0")); var identityColumnName = DataProvider.DatabaseDao.AddIdentityColumnIdIfNotExists(tableName, tableInfo.Columns); if (tableInfo.TotalCount > 0) { var current = 1; if (tableInfo.TotalCount > CliUtils.PageSize) { var pageCount = (int)Math.Ceiling((double)tableInfo.TotalCount / CliUtils.PageSize); using (var progress = new ProgressBar()) { for (; current <= pageCount; current++) { progress.Report((double)(current - 1) / pageCount); var fileName = $"{current}.json"; tableInfo.RowFiles.Add(fileName); var offset = (current - 1) * CliUtils.PageSize; var limit = CliUtils.PageSize; var rows = DataProvider.DatabaseDao.GetPageObjects(tableName, identityColumnName, offset, limit); FileUtils.WriteText(treeInfo.GetTableContentFilePath(tableName, fileName), Encoding.UTF8, TranslateUtils.JsonSerialize(rows)); } } } else { var fileName = $"{current}.json"; tableInfo.RowFiles.Add(fileName); var rows = DataProvider.DatabaseDao.GetObjects(tableName); FileUtils.WriteText(treeInfo.GetTableContentFilePath(tableName, fileName), Encoding.UTF8, TranslateUtils.JsonSerialize(rows)); } } FileUtils.WriteText(treeInfo.GetTableMetadataFilePath(tableName), Encoding.UTF8, TranslateUtils.JsonSerialize(tableInfo)); } CliUtils.PrintLine(); Console.WriteLine("Well done! Thanks for Using SiteServer Cli Tool"); }
private static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; var commandName = string.Empty; var commandArgs = new List <string>(); if (args.Length >= 1) { for (var i = 0; i < args.Length; i++) { if (i == 0) { commandName = args[i]; } else { commandArgs.Add(args[i]); } } } Console.WriteLine("Welcome to SiteServer Cli Tool"); Console.WriteLine(); try { if (StringUtils.EqualsIgnoreCase(commandName, BackupManager.CommandName)) { BackupManager.Execute(commandArgs.ToArray()); } else if (StringUtils.EqualsIgnoreCase(commandName, RestoreManager.CommandName)) { RestoreManager.Execute(commandArgs.ToArray()); } else if (StringUtils.EqualsIgnoreCase(commandName, UpdateManager.CommandName)) { UpdateManager.Execute(commandArgs.ToArray()); } else if (StringUtils.EqualsIgnoreCase(commandName, VersionManager.CommandName)) { VersionManager.Execute(commandArgs.ToArray()); } else { CliUtils.PrintLine(); CliUtils.PrintRow("Usage"); CliUtils.PrintLine(); BackupManager.PrintUsage(); RestoreManager.PrintUsage(); UpdateManager.PrintUsage(); VersionManager.PrintUsage(); CliUtils.PrintLine(); CliUtils.PrintRow("http://www.siteserver.cn/docs/cli"); CliUtils.PrintLine(); Console.ReadLine(); } } catch (Exception ex) { CliUtils.PrintError(ex.Message); CliUtils.LogErrors(commandName, new List <TextLogInfo> { new TextLogInfo { DateTime = DateTime.Now, Detail = "Console Error", Exception = ex } }); } }
public static void Execute(string[] args) { if (!CliUtils.ParseArgs(Options, args)) { return; } if (_isHelp) { PrintUsage(); return; } if (string.IsNullOrEmpty(_directory)) { CliUtils.PrintError("Error, the restore {directory} name is empty"); return; } var treeInfo = new TreeInfo(_directory); if (!DirectoryUtils.IsDirectoryExists(treeInfo.DirectoryPath)) { CliUtils.PrintError($"Error, directory {treeInfo.DirectoryPath} not exists"); return; } var tablesFilePath = treeInfo.TablesFilePath; if (!FileUtils.IsFileExists(tablesFilePath)) { CliUtils.PrintError($"Error, file {treeInfo.TablesFilePath} not exists"); return; } ConfigInfo configInfo; if (!string.IsNullOrEmpty(_databaseType) && !string.IsNullOrEmpty(_connectionString)) { configInfo = CliUtils.LoadConfigByArgs(_databaseType, _connectionString); } else { configInfo = CliUtils.LoadConfigByFile(_configFileName); } if (configInfo == null) { CliUtils.PrintError("Error, config not exists"); return; } if (string.IsNullOrEmpty(WebConfigUtils.ConnectionString)) { CliUtils.PrintError("Error, connection string is empty"); return; } if (!DataProvider.DatabaseDao.IsConnectionStringWork(WebConfigUtils.DatabaseType, WebConfigUtils.ConnectionString)) { CliUtils.PrintError("Error, can not connect to the database"); return; } Console.WriteLine($"Database Type: {WebConfigUtils.DatabaseType.Value}"); Console.WriteLine($"Connection String: {WebConfigUtils.ConnectionString}"); Console.WriteLine($"Restore Directory: {treeInfo.DirectoryPath}"); var tableNames = TranslateUtils.JsonDeserialize <List <string> >(FileUtils.ReadText(tablesFilePath, Encoding.UTF8)); CliUtils.PrintLine(); CliUtils.PrintRow("Import Table Name", "Total Count"); CliUtils.PrintLine(); var errorLogFilePath = CliUtils.CreateErrorLogFile(CommandName); foreach (var tableName in tableNames) { var logs = new List <TextLogInfo>(); if (configInfo.RestoreConfig.Includes != null) { if (!StringUtils.ContainsIgnoreCase(configInfo.RestoreConfig.Includes, tableName)) { continue; } } if (configInfo.RestoreConfig.Excludes != null) { if (StringUtils.ContainsIgnoreCase(configInfo.RestoreConfig.Excludes, tableName)) { continue; } } var metadataFilePath = treeInfo.GetTableMetadataFilePath(tableName); if (!FileUtils.IsFileExists(metadataFilePath)) { continue; } var tableInfo = TranslateUtils.JsonDeserialize <TableInfo>(FileUtils.ReadText(metadataFilePath, Encoding.UTF8)); CliUtils.PrintRow(tableName, tableInfo.TotalCount.ToString("#,0")); if (!DataProvider.DatabaseDao.IsTableExists(tableName)) { if (!DataProvider.DatabaseDao.CreateSystemTable(tableName, tableInfo.Columns, out var ex, out var sqlString)) { logs.Add(new TextLogInfo { DateTime = DateTime.Now, Detail = $"create table {tableName}: {sqlString}", Exception = ex }); continue; } } else { DataProvider.DatabaseDao.AlterSystemTable(tableName, tableInfo.Columns); } using (var progress = new ProgressBar()) { for (var i = 0; i < tableInfo.RowFiles.Count; i++) { progress.Report((double)i / tableInfo.RowFiles.Count); var fileName = tableInfo.RowFiles[i]; var objects = TranslateUtils.JsonDeserialize <List <JObject> >(FileUtils.ReadText(treeInfo.GetTableContentFilePath(tableName, fileName), Encoding.UTF8)); try { DataProvider.DatabaseDao.InsertMultiple(tableName, objects, tableInfo.Columns); } catch (Exception ex) { logs.Add(new TextLogInfo { DateTime = DateTime.Now, Detail = $"insert table {tableName}, fileName {fileName}", Exception = ex }); } } } CliUtils.AppendErrorLogs(errorLogFilePath, logs); } CliUtils.PrintLine(); if (configInfo.RestoreConfig.SyncDatabase) { SystemManager.SyncDatabase(); } Console.WriteLine("Well done! Thanks for Using SiteServer Cli Tool"); }
public static void Execute(string[] args) { if (!CliUtils.ParseArgs(Options, args)) { return; } if (_isHelp) { PrintUsage(); return; } if (string.IsNullOrEmpty(_version)) { Console.WriteLine("Error, the {version} to update is empty"); return; } if (string.IsNullOrEmpty(_directory)) { CliUtils.PrintError("Error, the update {directory} name is empty"); return; } var oldTreeInfo = new TreeInfo(_directory); var newTreeInfo = new TreeInfo(Folder); if (!DirectoryUtils.IsDirectoryExists(oldTreeInfo.DirectoryPath)) { CliUtils.PrintError($"Error, directory {oldTreeInfo.DirectoryPath} not exists"); return; } DirectoryUtils.CreateDirectoryIfNotExists(newTreeInfo.DirectoryPath); UpdaterBase updater = null; if (_version == Updater36.Version) { updater = new Updater36(oldTreeInfo, newTreeInfo); } else if (_version == Updater40.Version) { updater = new Updater40(oldTreeInfo, newTreeInfo); } else if (_version == Updater41.Version) { updater = new Updater41(oldTreeInfo, newTreeInfo); } else if (_version == Updater50.Version) { updater = new Updater50(oldTreeInfo, newTreeInfo); } if (updater == null) { Console.WriteLine($"Error, the currently supported update versions are {Updater36.Version},{Updater40.Version},{Updater41.Version},{Updater50.Version}"); return; } var newVersion = "latest"; Console.WriteLine($"Old Version: {_version}, Old Directory: {oldTreeInfo.DirectoryPath}"); Console.WriteLine($"New Version: {newVersion}, New Directory: {newTreeInfo.DirectoryPath}"); var oldTableNames = TranslateUtils.JsonDeserialize <List <string> >(FileUtils.ReadText(oldTreeInfo.TablesFilePath, Encoding.UTF8)); var newTableNames = new List <string>(); CliUtils.PrintLine(); CliUtils.PrintRow("Old Table Name", "New Table Name", "Total Count"); CliUtils.PrintLine(); var contentTableNameList = new List <string>(); UpdateUtils.LoadContentTableNameList(oldTreeInfo, "siteserver_PublishmentSystem", contentTableNameList); UpdateUtils.LoadContentTableNameList(oldTreeInfo, "wcm_PublishmentSystem", contentTableNameList); foreach (var oldTableName in oldTableNames) { var oldMetadataFilePath = oldTreeInfo.GetTableMetadataFilePath(oldTableName); if (!FileUtils.IsFileExists(oldMetadataFilePath)) { continue; } var oldTableInfo = TranslateUtils.JsonDeserialize <TableInfo>(FileUtils.ReadText(oldMetadataFilePath, Encoding.UTF8)); string newTableName; TableInfo newTableInfo; if (updater.UpdateTableInfo(oldTableName, oldTableInfo, contentTableNameList, out newTableName, out newTableInfo)) { newTableNames.Add(newTableName); FileUtils.WriteText(newTreeInfo.GetTableMetadataFilePath(newTableName), Encoding.UTF8, TranslateUtils.JsonSerialize(newTableInfo)); } } FileUtils.WriteText(newTreeInfo.TablesFilePath, Encoding.UTF8, TranslateUtils.JsonSerialize(newTableNames)); CliUtils.PrintLine(); Console.WriteLine("Well done! Thanks for Using SiteServer Cli Tool"); }
public static void Execute(string[] args) { if (!CliUtils.ParseArgs(Options, args)) { return; } if (_isHelp) { PrintUsage(); return; } if (string.IsNullOrEmpty(_version)) { Console.WriteLine("Error, Please input the version to update"); return; } if (string.IsNullOrEmpty(_directory)) { _directory = $"backup/{DateTime.Now:yyyy-MM-dd}"; } var oldTreeInfo = new TreeInfo(_directory); var newTreeInfo = new TreeInfo(Folder); if (!DirectoryUtils.IsDirectoryExists(oldTreeInfo.DirectoryPath)) { CliUtils.PrintError($"Error, Directory {oldTreeInfo.DirectoryPath} Not Exists"); return; } DirectoryUtils.CreateDirectoryIfNotExists(newTreeInfo.DirectoryPath); UpdaterBase updater = null; if (_version == Updater36.Version) { updater = new Updater36(oldTreeInfo, newTreeInfo); } else if (_version == Updater40.Version) { updater = new Updater40(oldTreeInfo, newTreeInfo); } else if (_version == Updater41.Version) { updater = new Updater41(oldTreeInfo, newTreeInfo); } else if (_version == Updater50.Version) { updater = new Updater50(oldTreeInfo, newTreeInfo); } if (updater == null) { Console.WriteLine($"Error, The currently supported update versions are {Updater36.Version}"); return; } var newVersion = "latest"; Console.WriteLine($"Old Version: {_version}, Old Directory: {oldTreeInfo.DirectoryPath}"); Console.WriteLine($"New Version: {newVersion}, New Directory: {newTreeInfo.DirectoryPath}"); var oldTableNames = TranslateUtils.JsonDeserialize <List <string> >(FileUtils.ReadText(oldTreeInfo.TablesFilePath, Encoding.UTF8)); var newTableNames = new List <string>(); CliUtils.PrintLine(); CliUtils.PrintRow("Old Table Name", "New Table Name", "Total Count"); CliUtils.PrintLine(); var contentTableNameList = new List <string>(); var siteMetadataFilePath = oldTreeInfo.GetTableMetadataFilePath("siteserver_PublishmentSystem"); if (FileUtils.IsFileExists(siteMetadataFilePath)) { var siteTableInfo = TranslateUtils.JsonDeserialize <TableInfo>(FileUtils.ReadText(siteMetadataFilePath, Encoding.UTF8)); foreach (var fileName in siteTableInfo.RowFiles) { var filePath = oldTreeInfo.GetTableContentFilePath("siteserver_PublishmentSystem", fileName); var rows = TranslateUtils.JsonDeserialize <List <JObject> >(FileUtils.ReadText(filePath, Encoding.UTF8)); foreach (var row in rows) { var dict = TranslateUtils.JsonGetDictionaryIgnorecase(row); object obj; if (dict.TryGetValue(nameof(TableSite.AuxiliaryTableForContent), out obj)) { if (obj != null) { contentTableNameList.Add(obj.ToString()); } } } } } foreach (var oldTableName in oldTableNames) { var oldMetadataFilePath = oldTreeInfo.GetTableMetadataFilePath(oldTableName); if (!FileUtils.IsFileExists(oldMetadataFilePath)) { continue; } var oldTableInfo = TranslateUtils.JsonDeserialize <TableInfo>(FileUtils.ReadText(oldMetadataFilePath, Encoding.UTF8)); var kvp = updater.UpdateTableInfo(oldTableName, oldTableInfo, contentTableNameList); var newTableName = kvp.Key; var newTableInfo = kvp.Value; CliUtils.PrintRow(oldTableName, newTableName, oldTableInfo.TotalCount.ToString("#,0")); newTableNames.Add(newTableName); FileUtils.WriteText(newTreeInfo.GetTableMetadataFilePath(newTableName), Encoding.UTF8, TranslateUtils.JsonSerialize(newTableInfo)); //DataProvider.DatabaseDao.CreateSystemTable(tableName, tableInfo.Columns); //foreach (var rowFileName in tableInfo.RowFiles) //{ // var filePath = PathUtils.Combine(oldDbFilesDirectoryPath, rowFileName); // var objects = TranslateUtils.JsonDeserialize<List<JObject>>(FileUtils.ReadText(filePath, Encoding.UTF8)); // DataProvider.DatabaseDao.SyncObjects(tableName, objects, tableInfo.Columns); //} } FileUtils.WriteText(newTreeInfo.TablesFilePath, Encoding.UTF8, TranslateUtils.JsonSerialize(newTableNames)); CliUtils.PrintLine(); Console.WriteLine("Well done! Thanks for Using SiteServer Cli Tool"); }
public static void Execute(string[] args) { if (!CliUtils.ParseArgs(Options, args)) { return; } if (_isHelp) { PrintUsage(); return; } if (string.IsNullOrEmpty(_directory)) { _directory = $"backup/{DateTime.Now:yyyy-MM-dd}"; } if (string.IsNullOrEmpty(_webConfigFileName)) { _webConfigFileName = "web.config"; } var treeInfo = new TreeInfo(_directory); DirectoryUtils.CreateDirectoryIfNotExists(treeInfo.DirectoryPath); WebConfigUtils.Load(CliUtils.PhysicalApplicationPath, _webConfigFileName); Console.WriteLine($"Database Type: {WebConfigUtils.DatabaseType.Value}"); Console.WriteLine($"Connection String: {WebConfigUtils.ConnectionString}"); Console.WriteLine($"Backup Directory: {treeInfo.DirectoryPath}"); if (string.IsNullOrEmpty(WebConfigUtils.ConnectionString)) { CliUtils.PrintError("Error, Connection String Is Empty"); return; } List <string> databaseNameList; string errorMessage; var isConnectValid = DataProvider.DatabaseDao.ConnectToServer(WebConfigUtils.DatabaseType, WebConfigUtils.ConnectionString, out databaseNameList, out errorMessage); if (!isConnectValid) { CliUtils.PrintError("Error, Connection String Not Correct"); return; } var tableNames = DataProvider.DatabaseDao.GetTableNameList(); FileUtils.WriteText(treeInfo.TablesFilePath, Encoding.UTF8, TranslateUtils.JsonSerialize(tableNames)); CliUtils.PrintLine(); CliUtils.PrintRow("Backup Table Name", "Total Count"); CliUtils.PrintLine(); foreach (var tableName in tableNames) { var tableInfo = new TableInfo { Columns = DataProvider.DatabaseDao.GetTableColumnInfoListLowercase(WebConfigUtils.ConnectionString, tableName), TotalCount = DataProvider.DatabaseDao.GetCount(tableName), RowFiles = new List <string>() }; CliUtils.PrintRow(tableName, tableInfo.TotalCount.ToString("#,0")); var identityColumnName = DataProvider.DatabaseDao.AddIdentityColumnIdIfNotExists(tableName, tableInfo.Columns); if (tableInfo.TotalCount > 0) { var current = 1; if (tableInfo.TotalCount > CliUtils.PageSize) { var pageCount = (int)Math.Ceiling((double)tableInfo.TotalCount / CliUtils.PageSize); using (var progress = new ProgressBar()) { for (; current <= pageCount; current++) { progress.Report((double)(current - 1) / pageCount); var fileName = $"{current}.json"; tableInfo.RowFiles.Add(fileName); var offset = (current - 1) * CliUtils.PageSize; var limit = CliUtils.PageSize; var rows = DataProvider.DatabaseDao.GetPageObjects(tableName, identityColumnName, offset, limit); FileUtils.WriteText(treeInfo.GetTableContentFilePath(tableName, fileName), Encoding.UTF8, TranslateUtils.JsonSerialize(rows)); } } } else { var fileName = $"{current}.json"; tableInfo.RowFiles.Add(fileName); var rows = DataProvider.DatabaseDao.GetObjects(tableName); FileUtils.WriteText(treeInfo.GetTableContentFilePath(tableName, fileName), Encoding.UTF8, TranslateUtils.JsonSerialize(rows)); } } FileUtils.WriteText(treeInfo.GetTableMetadataFilePath(tableName), Encoding.UTF8, TranslateUtils.JsonSerialize(tableInfo)); } CliUtils.PrintLine(); Console.WriteLine("Well done! Thanks for Using SiteServer Cli Tool"); }