From 62445795987c19f083f95f46eec0adafe79ef5a3 Mon Sep 17 00:00:00 2001 From: Schwirg László Date: Fri, 26 Nov 2021 19:04:54 +0100 Subject: [PATCH] FTPManager előkészítése --- Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools.cs | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Vrh.Log4Pro.MaintenanceConsole/Manager - FTPManager.cs | 357 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Vrh.Log4Pro.MaintenanceConsole/Manager - MSMQManager.cs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ Vrh.Log4Pro.MaintenanceConsole/Program.cs | 104 ++++---------------------------------------------------------------------------------------------------- Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs | 4 ++-- Vrh.Log4Pro.MaintenanceConsole/Tests.cs | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Vrh.Log4Pro.MaintenanceConsole/Vrh.Log4Pro.MaintenanceConsole.csproj | 2 ++ 7 files changed, 648 insertions(+), 102 deletions(-) create mode 100644 Vrh.Log4Pro.MaintenanceConsole/Manager - FTPManager.cs create mode 100644 Vrh.Log4Pro.MaintenanceConsole/Tests.cs diff --git a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools.cs b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools.cs index b8fc1d8..c78c600 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools.cs @@ -304,6 +304,115 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS } } + class ComputerInfo + { + public string PageHeader; + public string ComputerName; + public string DNSHostName; + public string UserName; + public string DomainUserName; + public List IpAddressList; + public string ProcessorArchitecture; + public string OSType; + public string NumOfPhysicalProcessors; + public string NumOfLogicalProcessors; + public string NumOfCores; + public string OSPlatform; + public string OSServicePack; + public string OSVersionString; + public List OSFriendlyNames; + public static void DisplayThis() { new ComputerInfo().Display(); } + public ComputerInfo() + { + var ci = this; + const string XMLCONNECTIONSTRING = "config=MAINTENANCECONSOLE;"; + //const string XMLCONNECTIONSTRING_DEFAULT = "file=Config.Xml;"; + var config = new MaintenanceConsoleXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); + + ci.PageHeader = config.Xml_Header; + ci.ComputerName = System.Environment.MachineName; + ci.DNSHostName = System.Net.Dns.GetHostName(); + ci.UserName = Environment.UserName; + ci.DomainUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; + ci.IpAddressList = System.Net.Dns.GetHostEntry(ci.DNSHostName).AddressList.Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).ToList(); + ci.ProcessorArchitecture = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); + ci.OSType = Tools.GetOSType(); + foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get()) + { + ci.NumOfPhysicalProcessors = item["NumberOfProcessors"].ToString(); + ci.NumOfLogicalProcessors = item["NumberOfLogicalProcessors"].ToString(); + break; + } + + var numofcores = 0; + foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get()) { numofcores += int.Parse(item["NumberOfCores"].ToString()); } + ci.NumOfCores = numofcores.ToString(); + ci.OSPlatform = System.Environment.OSVersion.Platform.ToString(); + ci.OSServicePack = System.Environment.OSVersion.ServicePack; + ci.OSVersionString = System.Environment.OSVersion.VersionString; + + string fn; + ci.OSFriendlyNames = new List(); + fn = Tools.GetOSFriendlyNameA(); if (!string.IsNullOrWhiteSpace(fn) && !ci.OSFriendlyNames.Contains(fn)) ci.OSFriendlyNames.Add(fn); + fn = Tools.GetOSFriendlyNameB(); if (!string.IsNullOrWhiteSpace(fn) && !ci.OSFriendlyNames.Contains(fn)) ci.OSFriendlyNames.Add(fn); + fn = Tools.GetOSFriendlyNameC(); if (!string.IsNullOrWhiteSpace(fn) && !ci.OSFriendlyNames.Contains(fn)) ci.OSFriendlyNames.Add(fn); + } + public void Display() + { + const string XMLCONNECTIONSTRING = "config=MAINTENANCECONSOLE;"; + //const string XMLCONNECTIONSTRING_DEFAULT = "file=Config.Xml;"; + var config = new MaintenanceConsoleXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); + + ColorConsole.WriteLine(PageHeader, ConsoleColor.Yellow, bracket: "[]"); + + //computername + ColorConsole.WriteLine(""); + ColorConsole.Write("Computer name: "); + ColorConsole.Write(ComputerName, ConsoleColor.Yellow, bracket: "[]", prefix: "", suffix: ","); + ColorConsole.Write(DNSHostName, ConsoleColor.Yellow, bracket: "[]", prefix: "DNS hostname:"); + ColorConsole.WriteLine(""); + + //username + ColorConsole.Write("Username:"); + ColorConsole.Write(UserName, ConsoleColor.Yellow, bracket: "[]", prefix: "RunAs:", suffix: ","); + ColorConsole.Write(DomainUserName, ConsoleColor.Yellow, bracket: "[]", prefix: "LoggedIn:"); + ColorConsole.WriteLine(""); + + //ip address + ColorConsole.Write("IP addresses: "); + if (IpAddressList.Any()) { foreach (var ip in IpAddressList) { ColorConsole.Write(ip.ToString(), ConsoleColor.Yellow, bracket: "[]", prefix: $"{ip.AddressFamily}:", suffix: ","); } } + else { ColorConsole.Write("N/A", ConsoleColor.Yellow, bracket: "[]"); } + + ColorConsole.WriteLine(""); + + // processor architecture + ColorConsole.Write("Processors: "); + ColorConsole.Write(System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"), ConsoleColor.Yellow, bracket: "[]", prefix: "Architecture: "); + ColorConsole.Write(OSType ?? "N/A", ConsoleColor.Yellow, bracket: "[]", suffix: ", "); + ColorConsole.Write(NumOfPhysicalProcessors, ConsoleColor.Yellow, bracket: "[]", prefix: "Physical:", suffix: ", "); + ColorConsole.Write(NumOfLogicalProcessors, ConsoleColor.Yellow, bracket: "[]", prefix: "Logical:", suffix: ", "); + ColorConsole.Write(NumOfCores, ConsoleColor.Yellow, bracket: "[]", prefix: "Cores:"); + ColorConsole.WriteLine(""); + + + // os version + ColorConsole.Write("Operating system: "); + ColorConsole.Write(OSPlatform.ToString(), ConsoleColor.Yellow, bracket: "[]", prefix: "Platform:", suffix: ","); + ColorConsole.Write(OSServicePack, ConsoleColor.Yellow, bracket: "[]", prefix: "Service pack:", suffix: ","); + ColorConsole.Write(OSVersionString, ConsoleColor.Yellow, bracket: "[]", prefix: "Version string:"); + ColorConsole.WriteLine(""); + + ColorConsole.Write("", ConsoleColor.Yellow, prefix: "OS Friendly name versions:"); + if (OSFriendlyNames.Any()) { foreach (var fn in OSFriendlyNames) { ColorConsole.Write(fn, ConsoleColor.Yellow, bracket: "[]"); } } + else { ColorConsole.Write("N/A", ConsoleColor.Yellow, bracket: "[]"); } + + ColorConsole.WriteLine(""); + ColorConsole.WriteLine(""); + ColorConsole.WriteLine(""); + } + } + + #region StringExtension class public static class StringExtension { diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - FTPManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - FTPManager.cs new file mode 100644 index 0000000..ce63e85 --- /dev/null +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - FTPManager.cs @@ -0,0 +1,357 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Net; +using System.Text.RegularExpressions; +using System.IO; + +namespace Vrh.Log4Pro.MaintenanceConsole +{ + static class FTPManagerCore + { + public class FTPFileList + { + #region constructor + /// + /// Létrehoz egy FTP kapcsolódáshoz szükséges obektumot + /// + /// az ftp server neve + /// a felhasználó neve + /// a felhasználó jelszava + public FTPFileList(string servername, string username, string password) + { + this.servername = servername; + this.username = username; + this.password = password; + } + #endregion constructor + + #region fields + public string servername; + public string ftprootdirectory; + public string localrootdirectory; + public string username; + private string password; + private string directorydisplaymask; + private string filedisplaymask; + public List ftpfilelist; + public List localfilelist; + #endregion fields + + #region SetRootDirectories + /// + /// Beállítja az ftp szerveren a root könyvtárat, valamint a lokális szerveren a root könyvtárat; + /// a könyvtárútvonalakat a lokális gépen és az ftp szerveren is ezekhez képest kell megadni + /// + /// + /// + public void SetRootDirectories(string ftprootdirectory=null,string localrootdirectory=null) + { + this.ftprootdirectory = ftprootdirectory ?? ""; + this.localrootdirectory = localrootdirectory ?? ""; + } + #endregion SetRootDirectories + + #region BuildForUpload + /// + /// Elkészíti a megadott paraméterek alapján a feltöltéshez szükséges file listát (a lokális gépen levő file-ok listája) + /// + /// a lokális könyvtár útvonal, aminek a tartalmát kell a listába betölteni + /// (a megadott lokális root könyvtárhoz képest van megadva a path) + /// alkönyvtárakba is bemegy + /// regex a file-ok szűrésére + /// true=a regex-et a teljes elérési útra kell alkalmazni, false=csak a file nevére + /// true=a regex-nek megfelelő file-okat nem kell betenni,false=be kell tenni + public void BuildForUpload(string directorypath, bool recurse, string filterregex = "", bool filterregexappliedtopath = false, bool filterregextoexclude = false) + { + localfilelist = LocalFileListFactory(this.localrootdirectory,directorypath, recurse, filterregex, filterregexappliedtopath, filterregextoexclude); + } + #endregion BuildForUpload + + #region BuildForDownload + /// + /// Elkészíti a file listát a letöltéshez (az ftp szerveren található file-ok listája) + /// + /// ennek a könyvtárnak a tartalmát kell listázni + /// (a megadott ftp root könyvtárhoz képest van megadva a path) + /// alkönyvtárakba is be kell menni + /// regex a file-ok szűrésére + /// true=a regex-et a teljes elérési útra kell alkalmazni, false=csak a file nevére + /// true=a regex-nek megfelelő file-okat nem kell betenni,false=be kell tenni + public void BuildForDownload(string directorypath, bool recurse, string filterregex = "", bool filterregexappliedtopath = false, bool filterregextoexclude = false) + { + ftpfilelist = FTPFileListFactory(servername, this.ftprootdirectory,directorypath, username, password , recurse, filterregex, filterregexappliedtopath, filterregextoexclude); + } + #endregion BuildForDownload + + #region Download + /// + /// Az ftp file lista letöltése az ftp szerverrőől a lokális gépre. + /// A megadott könyvtárba kerül be az ftp file lista az ftp root könyvtár alatti könyvtár struktúra megörzésével. + /// + /// ebbe a könyvtárba kell letölteni (a lokális root könyvtárhoz képest megadott útvonal) + public void Download(string localdirectory) + { + foreach (var f in this.ftpfilelist) + { + var targetdirectory = Path.Combine(this.localrootdirectory, localdirectory, f.directory); + var sourcedirectory = Path.Combine(f.rootdirectory, f.directory); + FTPManagerCore.FTPTools.FileDownload(targetdirectory, f.name, this.servername, sourcedirectory, f.name, this.username, this.password); + } + } + #endregion Download + + #region Upload + /// + /// A lokális file lista feltöltése az ftp szerverre a lokális gépről. + /// A megadott könyvtárba kerül be az lokális file lista a lokális root könyvtár alatti könyvtár struktúra megörzésével. + /// + /// ebbe a könyvtárba kell feltölteni (az ftproot könyvtárhoz képest megadott útvonal) + public void Upload(string ftpdirectory) + { + foreach (var f in this.localfilelist) + { + var targetdirectory = Path.Combine(this.ftprootdirectory, ftpdirectory, f.directory); + var sourcedirectory = Path.Combine(f.rootdirectory, f.directory); + FTPManagerCore.FTPTools.FileUpload(f.directory, f.name, this.servername, targetdirectory, f.name, this.username, this.password); + } + } + #endregion Upload + + #region other public methods + public void DisplayFTP() + { + if (this.ftpfilelist == null) { return; } + foreach (var did in this.ftpfilelist) + { + Console.WriteLine(did.ToString(this.directorydisplaymask, this.filedisplaymask)); + } + } + public void DisplayLocal() + { + if (this.localfilelist == null) { return; } + foreach (var did in this.localfilelist) + { + Console.WriteLine(did.ToString(this.directorydisplaymask, this.filedisplaymask)); + } + } + #endregion other public methods + + #region private methods + private static List FTPFileListFactory(string servername,string rootdirectory, string directorypath, string username, string password + , bool recurse, string filterregex = "", bool filterregexappliedtopath = false, bool filterregexptoexclude = false) + { + var fulldirectorypath = Path.Combine(rootdirectory, directorypath); + var uristr = $"ftp://{servername}/{fulldirectorypath}/"; + var uri = new Uri(uristr, UriKind.Absolute); + var ftprequest = WebRequest.Create(uri); + ftprequest.Credentials = new NetworkCredential(username, password); + ftprequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; + string[] dirlisting; + try + { + var ftpresponse = ftprequest.GetResponse(); + var ftpresponsestream = ftpresponse.GetResponseStream(); + var streamreader = new System.IO.StreamReader(ftpresponsestream); + dirlisting = streamreader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + streamreader.Close(); + ftpresponse.Close(); + } + catch { return null; } + + var dl = new List(); + var didlist = dirlisting.Select(l => FTPDirectoryItemData.FTPListFactory(l, rootdirectory, directorypath)).Where(id => !id.isdirectory); + foreach (var did in didlist) + { + string includecheckstr = filterregexappliedtopath ? did.fullpath : did.name; + if (Regex.Match(includecheckstr, filterregex).Success != filterregexptoexclude) { dl.Add(did); } + } + if (recurse) + { + didlist = dirlisting.Select(l => FTPDirectoryItemData.FTPListFactory(l, rootdirectory, directorypath)).Where(id => id.isdirectory); + foreach (var did in didlist) + { + var subdirectorypath = (string.IsNullOrWhiteSpace(directorypath) ? "" : "\\") + did.name; + var subdir = FTPFileListFactory(servername, rootdirectory, subdirectorypath, username, password + , recurse, filterregex, filterregexappliedtopath, filterregexptoexclude); + if (subdir != null) { dl = dl.Concat(subdir).ToList(); } + } + } + return dl; + } + + private static List LocalFileListFactory(string localrootdirectory, string directorypath, bool recurse + , string filterregex = "", bool filterregexappliedtopath = false, bool filterregextoexclude = false) + { + var dl = new List(); + string fulldirectorypath = Path.Combine(localrootdirectory, directorypath); + var fnl = Directory.GetFiles(fulldirectorypath).Where(dn => filterregextoexclude == !Regex.Match(filterregexappliedtopath ? dn : Path.GetFileName(dn), filterregex).Success); + fnl = fnl.Select(fp => Path.GetFileName(fp)).ToList(); + var dnl = Directory.GetDirectories(fulldirectorypath).ToList(); + dnl = dnl.Select(dp => new DirectoryInfo(dp).Name).ToList(); + + foreach (var fn in fnl) + { + var did = FTPDirectoryItemData.LocalListFactory(fn, localrootdirectory, directorypath); + if (did != null) { dl.Add(did); } + } + foreach (var dn in dnl) + { + var didlist = LocalFileListFactory(localrootdirectory, Path.Combine(directorypath, dn), recurse, filterregex, filterregexappliedtopath, filterregextoexclude); + if (didlist != null) { dl = dl.Concat(didlist).ToList(); } + } + return dl; + } + private void SetDisplayMasks(string directorydisplaymask = null, string filedisplaymask = null) + { + this.directorydisplaymask = directorydisplaymask; + this.filedisplaymask = filedisplaymask; + } + #endregion private methods + } + public class FTPDirectoryItemData + { + public static FTPDirectoryItemData LocalListFactory(string filename, string rootdirectoryname, string directoryname) + { + if (string.IsNullOrWhiteSpace(filename)) { return null; } + var did = new FTPDirectoryItemData(); + did.listingline = null; + did.rootdirectory = rootdirectoryname; + did.directory = directoryname; + did.name = filename; + did.isdirectory = false; + did.date = File.GetCreationTime(did.fullpath); + did.size = new System.IO.FileInfo(did.fullpath).Length; + return did; + } + public static FTPDirectoryItemData FTPListFactory(string ftplistingline, string rootdirectory, string directoryname) + { + if (string.IsNullOrWhiteSpace(ftplistingline)) { return null; } + var did = new FTPDirectoryItemData(); + did.listingline = ftplistingline; + var words = ftplistingline.Split(new char[] { ' ', '+', }, StringSplitOptions.RemoveEmptyEntries); + did.isdirectory = words[0].StartsWith("d"); + did.name = string.Join(" ", words.Where((x, ix) => ix >= 8)); + if (string.IsNullOrWhiteSpace(did.name)) { return null; } + did.rootdirectory = rootdirectory; + did.directory = directoryname; + if (!long.TryParse(words[4], out did.size)) { did.size = 0; } + if (!DateTime.TryParse($"{words[5]}.{words[6]}.{words[7]}", out did.date)) { did.date = DateTime.MinValue; }; + return did; + } + public string ToString(string dirlinemask = null, string filelinemask = null ) + { + const string defaultlinemask = "{TYPE} {NAME} {ROOTDIRECTORY} {DIRECTORY} {FULLPATH} {SIZE} {DATE} {LISTLINE}"; + if (dirlinemask == null) { dirlinemask = defaultlinemask; } + if (filelinemask == null) { filelinemask = defaultlinemask; } + string linemask = this.isdirectory ? dirlinemask : filelinemask; + return linemask + .Replace("{NAME}", this.name) + .Replace("{TYPE}", this.isdirectory?"DIR":"FILE") + .Replace("{ROOTDIRECTORY}", this.rootdirectory) + .Replace("{DIRECTORY}", this.directory) + .Replace("{FULLPATH}", this.fullpath) + .Replace("{SIZE}", this.size.ToString()) + .Replace("{DATE}", this.date.ToString("yyyy.MM.dd")) + .Replace("{LISTLINE}", this.listingline); + } + public string listingline; + public string name; + public string directory; + public string rootdirectory; + public string fullpath { get {return Path.Combine(this.rootdirectory, this.directory, this.name); } } + public long size; + public DateTime date; + public bool isdirectory; + } + + private static class FTPTools + { + public static bool FileUpload(string localdirectory, string localfilename, string servername, string directory, string filename, string username, string password) + { + try + { + if (!string.IsNullOrWhiteSpace(directory)) { filename = Path.Combine(directory, filename); } + if (!string.IsNullOrWhiteSpace(localdirectory)) { localfilename = Path.Combine(localdirectory, localfilename); } + + var uristr = "ftp://" + username + ":" + password + "@" + servername + "/" + filename; + var webclient = new System.Net.WebClient(); + var uri = new Uri(uristr); + DirectoryCreate(directory, servername, username, password, false); + webclient.UploadFile(uri, localfilename); + return true; + } + catch { return false; } + } + public static bool FileDownload(string localdirectory, string localfilename, string servername, string directory, string filename, string username, string password) + { + try + { + if (string.IsNullOrWhiteSpace(directory)) { directory = ""; } + if (string.IsNullOrWhiteSpace(localdirectory)) { localdirectory = ""; } + filename = Path.Combine(directory, filename); + localfilename = Path.Combine(localdirectory, localfilename); + var uristr = "ftp://" + username + ":" + password + "@" + servername + "/" + filename; + var webclient = new System.Net.WebClient(); + var uri = new Uri(uristr); + if (!Directory.Exists(localdirectory)) { Directory.CreateDirectory(localdirectory); } + webclient.DownloadFile(uri, localfilename); + return true; + } + catch { return false; } + } + + public static string DirectoryCreate(string directoryname, string servername, string username, string password, bool errorifexists = false) + { + var directoryparts = directoryname.Replace("/", "\\").Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries); + string dn = ""; + for (int ix = 0; ix < directoryparts.Length; ix++) + { + dn = Path.Combine(dn, directoryparts[ix]); + OneDirectoryCreate(dn, servername, username, password, errorifexists = false); + } + return null; + } + public static string OneDirectoryCreate(string directoryname, string servername, string username, string password, bool errorifexists = false) + { + var uristr = $"ftp://{servername}/{directoryname}/"; + var uri = new Uri(uristr, UriKind.Absolute); + try + { + WebRequest ftprequest = WebRequest.Create(uri); + WebResponse ftpresponse = null; + ftprequest.Credentials = new NetworkCredential(username, password); + ftprequest.Method = WebRequestMethods.Ftp.MakeDirectory; + ftpresponse = ftprequest.GetResponse(); + ftpresponse?.Close(); + return $"//{servername}/{directoryname}/"; + } + catch (Exception ex) + { + if (errorifexists) { return null; } + else + { + try + { + //if there was an error returned, check if folder already existed on server + WebRequest ftprequest = WebRequest.Create(uri); + WebResponse ftpresponse = null; + ftprequest.Credentials = new NetworkCredential(username, password); + ftprequest.Method = WebRequestMethods.Ftp.PrintWorkingDirectory; + ftpresponse = ftprequest.GetResponse(); + ftpresponse?.Close(); + return $"//{servername}/{directoryname}/"; + } + catch (Exception exx) + { + //if the folder didn't exist, then it's probably a file perms issue, incorrect credentials, dodgy server name etc + return null; + } + } + } + } + } + } +} diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - MSMQManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - MSMQManager.cs index 0d5dd43..2dd416d 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Manager - MSMQManager.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - MSMQManager.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Messaging; using System.Text; using System.Threading.Tasks; +using System.Net; using Vrh.Log4Pro.MaintenanceConsole.MenuNS; using Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS; @@ -527,9 +528,55 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS addressprefix = string.IsNullOrWhiteSpace(addressprefix) ? "" : addressprefix; return $"{addressprefix}{msmqservernamepart}{msmqname}"; } + public static bool ParseFullQueuePath(string qn, out string servername, out string formatname, out string queuename, out bool privatequeue, out string addresstype, out string successpattern) + { + servername = ""; + successpattern = ""; + formatname = ""; + queuename = ""; + privatequeue = false; + addresstype = null; + var patterns = new List(); + patterns.Add(@"^FormatName:(?'FORMATNAME'DIRECT=(?'ADDRESSTYPE'TCP|OS)):(?'SERVERNAME'.*?)\\(?'QUEUENAME'(?'PRIVATE'private\$\\).*)$"); + patterns.Add(@"^FormatName:(?'FORMATNAME'DIRECT=(?'ADDRESSTYPE'TCP|OS)):(?'SERVERNAME'.*?)\\(?'QUEUENAME'.*)$"); + patterns.Add(@"^(?'SERVERNAME'.*?)\\(?'QUEUENAME'(?'PRIVATE'private\$\\).*)$"); + patterns.Add(@"^(?'QUEUENAME'(?'PRIVATE'private\$\\).*)$"); + patterns.Add(@"^(?'SERVERNAME'.*?)\\(?'QUEUENAME'.*)$"); + patterns.Add(@"^(?'QUEUENAME'.*)$"); + + var pattern = string.Join("|", patterns); + foreach (var p in patterns) + { + var rm = Regex.Match(qn, p); + if (rm.Success) + { + Group rg; + rg = rm.Groups["SERVERNAME"]; if (rg.Success) { servername = rg.Value; } + rg = rm.Groups["ADDRESSTYPE"]; if (rg.Success) { addresstype = rg.Value; } + rg = rm.Groups["QUEUENAME"]; if (rg.Success) { queuename = rg.Value; } + rg = rm.Groups["PRIVATE"]; if (rg.Success) { privatequeue = true; } + rg = rm.Groups["FORMATNAME"]; if (rg.Success) { formatname = rg.Value; }; + successpattern = p; + bool isip = IPAddress.TryParse(servername, out IPAddress ip); + if (servername == "" || servername == "." || servername.ToLower() == "localhost") { servername = System.Environment.MachineName; } + if (formatname == "") + { + if (isip) { formatname = @"FormatName:DIRECT=TCP"; addresstype = @"TCP"; } + else { formatname = @"FormatName:DIRECT=OS"; addresstype = @"OS"; } + } + if ((isip && addresstype=="OS") || (!isip && addresstype == "TCP")) { return false; } + return true; + } + } + return false; + } public static bool CheckIfQueueExists(string servername,string queuefullname) { if (string.IsNullOrWhiteSpace(servername) || servername == "." || servername.ToLower() == "localhost") { servername = System.Environment.MachineName; } + if (servername == "*") + { + } + var queuearray = System.Messaging.MessageQueue.GetPrivateQueuesByMachine(servername); foreach (var q in queuearray) { diff --git a/Vrh.Log4Pro.MaintenanceConsole/Program.cs b/Vrh.Log4Pro.MaintenanceConsole/Program.cs index 8ec9bd4..ac35a48 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Program.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Program.cs @@ -37,42 +37,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole { static void Main(string[] args) { + Tests.T3(); + return; + var startassystemstr = CommandLine.GetCommandLineArgument(args, CLP.CMD_STARTASSYSTEM); var startassystem = startassystemstr!=null && startassystemstr.ToLower() == "yes"; OtherTools.StartAsAdmin(); OtherTools.StartAsSystem(silent:startassystem); - //while (true) - //{ - // Console.Clear(); - // Console.Write("Enter string:"); var cp1 = Console.ReadLine(); - // Console.WriteLine(); - // Console.ForegroundColor = ConsoleColor.Red; - // Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } - // Console.ForegroundColor = ConsoleColor.DarkGreen; - // Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } - // Console.ForegroundColor = ConsoleColor.Green; - // Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } - // Console.ForegroundColor = ConsoleColor.DarkYellow; - // Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } - // Console.ForegroundColor = ConsoleColor.Yellow; - // Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } - // Console.ReadKey(); - // Console.Clear(); - // Console.Write("Enter Code page:"); var cp = Console.ReadLine(); - // try - // { - // Console.OutputEncoding = System.Text.Encoding.GetEncoding(int.Parse(cp)); - // for (int i = 0; i < 256; i++) - // { - // Console.Write((i).ToString().PadLeft(3) + "=> [" + (char)(i) + "] "); - // if (i % 6 == 5) { Console.WriteLine(); } - // //Console.Write((char)(i*j)); - // } - // } - // catch { Console.WriteLine("Code page is not supported!"); } - // Console.ReadKey(); - //} var forcedmodulekey = CommandLine.GetCommandLineArgument(args, CLP.CMD_MODULE); var commandmode = !string.IsNullOrEmpty(forcedmodulekey); @@ -109,81 +81,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole .AddMenuItem(new Menu.Item(CLP.Module.InstallManager.KEY, "Install Manager", InstallManager.Execute, new Menu.ExecutorParameter(args: args))) .AddMenuItem(new Menu.ItemSeparator('-')) .AddMenuItem(new Menu.Item(CLP.Module.MaintenanceToolManager.KEY, "Maintenance tools", MaintenanceToolManager.Execute, new Menu.ExecutorParameter(args: args))) - .SetMenuHeaderDisplayer(DisplayComputerInfo) + .SetMenuHeaderDisplayer(ComputerInfo.DisplayThis) .SetSelectionMode(Menu.SelectionMode.Single); mm.ExecuteMenu(forcedmodulekey); ColorConsole.PressAnykeyToContinue(); } - static void DisplayComputerInfo() - { - const string XMLCONNECTIONSTRING = "config=MAINTENANCECONSOLE;"; - //const string XMLCONNECTIONSTRING_DEFAULT = "file=Config.Xml;"; - var config = new MaintenanceConsoleXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); - - ColorConsole.WriteLine(config.Xml_Header,ConsoleColor.Yellow,bracket:"[]"); - - //computername - ColorConsole.WriteLine(""); - ColorConsole.Write("Computer name: "); - ColorConsole.Write(System.Environment.MachineName, ConsoleColor.Yellow, bracket: "[]",prefix: "", suffix: ","); - var hostname = System.Net.Dns.GetHostName(); - ColorConsole.Write(hostname, ConsoleColor.Yellow, bracket: "[]", prefix: "DNS hostname:"); - ColorConsole.WriteLine(""); - - //username - ColorConsole.Write("Username:"); - ColorConsole.Write(Environment.UserName, ConsoleColor.Yellow, bracket: "[]", prefix: "RunAs:", suffix: ","); - ColorConsole.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name, ConsoleColor.Yellow, bracket: "[]", prefix: "LoggedIn:"); - ColorConsole.WriteLine(""); - - //ip address - ColorConsole.Write("IP addresses: "); - var host = System.Net.Dns.GetHostEntry(hostname); - foreach (var ip in host.AddressList) - { - if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) - { - ColorConsole.Write(ip.ToString(), ConsoleColor.Yellow, bracket: "[]", prefix: $"{ip.AddressFamily}:",suffix: ","); - } - } - ColorConsole.WriteLine(""); - - // processor architecture - ColorConsole.Write("Processors: "); - ColorConsole.Write(System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"), ConsoleColor.Yellow, bracket: "[]", prefix: "Architecture: "); - ColorConsole.Write(Tools.GetOSType() ?? "N/A", ConsoleColor.Yellow, bracket: "[]", suffix: ", "); - foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get()) - { - ColorConsole.Write(item["NumberOfProcessors"].ToString(), ConsoleColor.Yellow, bracket: "[]", prefix: "Physical:",suffix:", "); - ColorConsole.Write(item["NumberOfLogicalProcessors"].ToString(), ConsoleColor.Yellow, bracket: "[]", prefix: "Logical:", suffix: ", "); - } - - int coreCount = 0; - foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get()) - { - coreCount += int.Parse(item["NumberOfCores"].ToString()); - } - ColorConsole.Write(coreCount.ToString(), ConsoleColor.Yellow, bracket: "[]", prefix: "Cores:"); - ColorConsole.WriteLine(""); - - // os version - ColorConsole.Write("Operating system: "); - ColorConsole.Write(System.Environment.OSVersion.Platform.ToString(), ConsoleColor.Yellow, bracket: "[]", prefix: "Platform:",suffix: ","); - ColorConsole.Write(System.Environment.OSVersion.ServicePack, ConsoleColor.Yellow, bracket: "[]", prefix: "Service pack:", suffix: ","); - ColorConsole.Write(System.Environment.OSVersion.VersionString, ConsoleColor.Yellow, bracket: "[]", prefix: "Version string:"); - ColorConsole.WriteLine(""); - - ColorConsole.Write("", ConsoleColor.Yellow, prefix: "OS Friendly name versions:"); - string fnA = Tools.GetOSFriendlyNameA(); if (!string.IsNullOrWhiteSpace(fnA)) ColorConsole.Write(fnA, ConsoleColor.Yellow, bracket: "[]"); - string fnB = Tools.GetOSFriendlyNameB(); if (!string.IsNullOrWhiteSpace(fnB) && fnB!=fnA) ColorConsole.Write(fnB, ConsoleColor.Yellow, bracket: "[]"); - string fnC = Tools.GetOSFriendlyNameC(); if (!string.IsNullOrWhiteSpace(fnC) && fnC!=fnA && fnC!=fnB) ColorConsole.Write(fnC, ConsoleColor.Yellow, bracket: "[]"); - if (string.IsNullOrWhiteSpace(fnA) && string.IsNullOrWhiteSpace(fnB) && string.IsNullOrWhiteSpace(fnC)) ColorConsole.Write("N/A", ConsoleColor.Yellow, bracket: "[]"); - ColorConsole.WriteLine(""); - ColorConsole.WriteLine(""); - ColorConsole.WriteLine(""); - } } #region MaintenanceConsoleXmlProcessor class diff --git a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs index 67125cc..04cf058 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.2.0")] -[assembly: AssemblyFileVersion("1.9.2.0")] +[assembly: AssemblyVersion("1.9.3.0")] +[assembly: AssemblyFileVersion("1.9.3.0")] diff --git a/Vrh.Log4Pro.MaintenanceConsole/Tests.cs b/Vrh.Log4Pro.MaintenanceConsole/Tests.cs new file mode 100644 index 0000000..587eeff --- /dev/null +++ b/Vrh.Log4Pro.MaintenanceConsole/Tests.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Threading; + +using Microsoft.Web.Administration; +using System.Management; +using System.Diagnostics; + +using Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS; +using Vrh.Log4Pro.MaintenanceConsole.MenuNS; +using Vrh.Log4Pro.MaintenanceConsole.ToolsNS; + +using Vrh.Log4Pro.MaintenanceConsole.WebApplicationManagerNS; +using Vrh.Log4Pro.MaintenanceConsole.WindowsServiceManagerNS; +using Vrh.Log4Pro.MaintenanceConsole.BackupPackageManagerNS; +using Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS; +using Vrh.Log4Pro.MaintenanceConsole.ScheduledTaskManagerNS; +using Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS; +using Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS; +using Vrh.Log4Pro.MaintenanceConsole.MaintenanceToolManagerNS; +using Vrh.Log4Pro.MaintenanceConsole.UserManagerNS; +using Vrh.Log4Pro.MaintenanceConsole.InstallManagerNS; + +using Vrh.Log4Pro.MaintenanceConsole.CommandLineParserNS; + +using Vrh.XmlProcessing; +using VRH.Common; +using System.Xml.Linq; +using System.Reflection; + +namespace Vrh.Log4Pro.MaintenanceConsole +{ + static class Tests + { + public static void T3() + { + FTPManagerCore.FTPFileList dl; + dl = new FTPManagerCore.FTPFileList("web.vonalkod.hu", "web.vonalkod.hu", "r9e2fejxHhVh"); + dl.SetRootDirectories("LEAR", "c:\\temp"); + + dl.BuildForDownload("", recurse: true, filterregex: @"ETALON150\\.*\.pdf", filterregexappliedtopath: true, filterregextoexclude: false); + dl.DisplayFTP(); + dl.Download("TEST"); + + + + dl.BuildForUpload("", recurse: true, filterregex: ".pdf", filterregexappliedtopath: false, filterregextoexclude: false); + dl.DisplayLocal(); + dl.Upload("TEST"); + //Console.ReadKey(); + + Console.ReadKey(); + } + public static void T2() + { + var queuenames = new List(); + queuenames.Add(@"FormatName:DIRECT=OS:192.168.77.150\private$\LJSKSKIN"); + queuenames.Add(@"FormatName:DIRECT=TCP:SERVERNAME\private$\LJSKSKIN"); + queuenames.Add(@"FormatName:DIRECT=TCP:192.168.77.150\private$\LJSKSKIN"); + queuenames.Add(@"FormatName:DIRECT=OS:SERVERNAME\private$\LJSKSKIN"); + queuenames.Add(@"FormatName:DIRECT=OS:SERVERNAME\LJSKSKIN"); + queuenames.Add(@"FormatName:DIRECT=TCP:192.168.77.150\LJSKSKIN"); + queuenames.Add(@"localhost\private$\LJSKSKIN"); + queuenames.Add(@".\private$\LJSKSKIN"); + queuenames.Add(@"SERVERNAME\private$\LJSKSKIN"); + queuenames.Add(@"localhost\LJSKSKIN"); + queuenames.Add(@".\LJSKSKIN"); + queuenames.Add(@"SERVERNAME\LJSKSKIN"); + queuenames.Add(@"private$\LJSKSKIN"); + queuenames.Add(@"LJSKSKIN"); + + foreach (var qname in queuenames) + { + var success = MSMQManagerCore.ParseFullQueuePath(qname, out string sn, out string fn, out string qn, out bool pq, out string at, out string p); + if (success) + { + Console.WriteLine($"'{qname}' parsing SUCCESS!"); + if (!string.IsNullOrWhiteSpace(sn)) Console.WriteLine($"SERVERNAME:{sn}"); + if (!string.IsNullOrWhiteSpace(qn)) Console.WriteLine($"QUEUENAME:{qn}"); + if (pq) Console.WriteLine($"PRIVATE"); + if (!string.IsNullOrWhiteSpace(at)) Console.WriteLine($"ADDRESSTYPE:{at}"); + if (!string.IsNullOrWhiteSpace(fn)) Console.WriteLine($"FORMATNAME:{fn}"); + if (!string.IsNullOrWhiteSpace(p)) Console.WriteLine($"SUCCESSPATTERN:{p}"); + Console.WriteLine(); + } + else { Console.WriteLine($"'{qn}' parsing FAILED!"); } + } + } + public static void T1() + { + while (true) + { + Console.Clear(); + Console.Write("Enter string:"); var cp1 = Console.ReadLine(); + Console.WriteLine(); + Console.ForegroundColor = ConsoleColor.Red; + Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } + Console.ForegroundColor = ConsoleColor.DarkGreen; + Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } + Console.ForegroundColor = ConsoleColor.Green; + Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } + Console.ForegroundColor = ConsoleColor.DarkYellow; + Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(cp1); foreach (char c in cp1) { Console.Write(c); Console.Write(" => "); var i = (int)c; Console.Write(i); Console.Write(" => "); Console.Write((char)i); Console.WriteLine(); } + Console.ReadKey(); + Console.Clear(); + Console.Write("Enter Code page:"); var cp = Console.ReadLine(); + try + { + Console.OutputEncoding = System.Text.Encoding.GetEncoding(int.Parse(cp)); + for (int i = 0; i < 256; i++) + { + Console.Write((i).ToString().PadLeft(3) + "=> [" + (char)(i) + "] "); + if (i % 6 == 5) { Console.WriteLine(); } + //Console.Write((char)(i*j)); + } + } + catch { Console.WriteLine("Code page is not supported!"); } + Console.ReadKey(); + } + } + } +} diff --git a/Vrh.Log4Pro.MaintenanceConsole/Vrh.Log4Pro.MaintenanceConsole.csproj b/Vrh.Log4Pro.MaintenanceConsole/Vrh.Log4Pro.MaintenanceConsole.csproj index e0cd6ec..a09af9f 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Vrh.Log4Pro.MaintenanceConsole.csproj +++ b/Vrh.Log4Pro.MaintenanceConsole/Vrh.Log4Pro.MaintenanceConsole.csproj @@ -357,6 +357,7 @@ + @@ -367,6 +368,7 @@ + -- libgit2 0.21.2