From 4cac9fbf56b5452c127c8c70fb11a7d0e8d96733 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Mon, 1 Apr 2019 15:17:41 +0200 Subject: [PATCH] WIP --- Program.cs | 38 ++++++++++++++++++++++++++-- SkyEntities.cs | 1 + crawl/Crawl.cs | 7 ++--- entities/GlobalNetwork.cs | 18 ++++++++++++- entities/NetworkInterface.cs | 4 +++ entities/Node.cs | 8 +++++- templates/static/crawlerhosts.html | 2 +- templates/static/crawlersubnets.html | 2 +- 8 files changed, 71 insertions(+), 9 deletions(-) diff --git a/Program.cs b/Program.cs index 715ceef..2d1291c 100644 --- a/Program.cs +++ b/Program.cs @@ -28,7 +28,6 @@ using ln.snmp.rfc1213; using ln.types.sync; using ln.skyscanner.crawl; using System.Threading; -using System.Net.NetworkInformation; using ln.skyscanner.crawl.tests; using Castle.DynamicProxy; using ln.types.odb; @@ -36,6 +35,8 @@ using System.Net.Sockets; using ln.skyscanner.entities; using ln.types.btree; using ln.types.test; +using ln.types.threads; +using ln.types.net; namespace ln.skyscanner { @@ -45,17 +46,50 @@ namespace ln.skyscanner public static void Main(string[] args) { + new IPv4(0); + FileLogger fileLogger = new FileLogger("skyscanner.log"); fileLogger.MaxLogLevel = LogLevel.INFO; Logger.Default.Backends.Add(fileLogger); - Logger.ConsoleLogger.MaxLogLevel = LogLevel.INFO; + Logger.ConsoleLogger.MaxLogLevel = LogLevel.DEBUGDETAIL; Initialize(); SkyScanner skyScanner = new SkyScanner(args); skyScanner.Start(); + return; + IEnumerable nodes = skyScanner.Entities.nodeCollection; + foreach (Node node in nodes) + { + Console.WriteLine("Node: {0}", node); + skyScanner.Entities.nodeCollection.Update(node); + + foreach (Node checkNode in SkyScanner.Instance.Entities.nodeCollection.Select("PrimaryIP", node.PrimaryIP)) + { + Console.WriteLine("Node (lookup primary ip): {0}", checkNode); + if (!checkNode.ID.Equals(node)) + { + if ((checkNode.Interfaces.Count() == 0)) + { + SkyScanner.Instance.Entities.nodeCollection.Delete(checkNode); + } + } + } + + + //IEnumerable interfaces = Timing.Meassure("node.Interfaces",() => node.Interfaces); + //foreach (NetworkInterface intf in interfaces) + //{ + // Console.WriteLine(" Interface: {0}", intf); + //} + + Console.WriteLine(""); + Console.WriteLine(""); + } + + throw new Exception(); } private static void Initialize() diff --git a/SkyEntities.cs b/SkyEntities.cs index e0bfb2f..e3168a7 100644 --- a/SkyEntities.cs +++ b/SkyEntities.cs @@ -37,6 +37,7 @@ namespace ln.skyscanner intfIPCollection = odDatabase.GetCollection(); subnetCollection = odDatabase.GetCollection(); + nodeCollection.EnsureIndex("PrimaryIP"); interfaceCollection.EnsureIndex("NodeID"); intfIPCollection.EnsureIndex("interfaceID"); diff --git a/crawl/Crawl.cs b/crawl/Crawl.cs index 78c6f2d..e794cb1 100644 --- a/crawl/Crawl.cs +++ b/crawl/Crawl.cs @@ -104,15 +104,16 @@ namespace ln.skyscanner.crawl while (servicesToCheck.Count > 0) RunServiceCheck(servicesToCheck[0]); - Host.LastCheckTime = DateTime.Now - dateTime; - Host.LastCheck = dateTime; - Host.NextCheck = dateTime + TimeSpan.FromHours(1); } catch (Exception e) { Logging.Log(LogLevel.ERROR, "Crawl.RunJob(): Caught exception: {0}",e); Logging.Log(e); } + Host.LastCheckTime = DateTime.Now - dateTime; + Host.LastCheck = dateTime; + Host.NextCheck = dateTime + TimeSpan.FromHours(1); + bool updated = Crawler.CrawledHosts.Upsert( Host ); setState("Updating global network"); diff --git a/entities/GlobalNetwork.cs b/entities/GlobalNetwork.cs index b413128..033f428 100644 --- a/entities/GlobalNetwork.cs +++ b/entities/GlobalNetwork.cs @@ -13,6 +13,7 @@ using ln.logging; using System.Globalization; using ln.types.threads; using ln.types.odb.values; +using ln.types.net; namespace ln.skyscanner.entities { @@ -96,11 +97,26 @@ namespace ln.skyscanner.entities public Node FindNodeByIP(CIDR ip) { ip = ip.Host; - + /* + * ToDo: Alternative Implementation + * a) higher performance (use indexing) + * b) fix bug: Node not found if no interface ips exist... + */ IntfIP _iip = SkyEntities.intfIPCollection.Where((iip) => iip.IP.Host.Equals(ip)).FirstOrDefault(); return _iip?.NetworkInterface?.Node; } + public Node FindNodeByIP(IPv4 ip) + { + Node node = SkyEntities.nodeCollection.SelectOne("PrimaryIP", ip); + if (node == null) + { + + } + return node; + } + + [Unsynced] private Queue updateQueue = new Queue(); diff --git a/entities/NetworkInterface.cs b/entities/NetworkInterface.cs index 6b9c5c5..be32853 100644 --- a/entities/NetworkInterface.cs +++ b/entities/NetworkInterface.cs @@ -78,6 +78,10 @@ namespace ln.skyscanner.entities return false; } + public override string ToString() + { + return string.Format("[NetworkInterface ID={0} NodeID={1} Name={2}]",ID,NodeID,Name); + } } diff --git a/entities/Node.cs b/entities/Node.cs index 25ba073..6f46ee4 100644 --- a/entities/Node.cs +++ b/entities/Node.cs @@ -15,6 +15,7 @@ using ln.types.odb; using Newtonsoft.Json; using LiteDB; using ln.types.threads; +using ln.types.net; namespace ln.skyscanner.entities { public class Node @@ -22,7 +23,7 @@ namespace ln.skyscanner.entities [DocumentID] public Guid ID { get; set; } = Guid.NewGuid(); - public CIDR PrimaryIP { get; set; } + public IPv4 PrimaryIP { get; set; } public String PrimaryMac { get; set; } public String Name { get; set; } @@ -102,5 +103,10 @@ namespace ln.skyscanner.entities return (obj is Node) && (ID.Equals((obj as Node).ID)); } + public override string ToString() + { + return String.Format("[Node ID={0} PrimaryIP={1} Name={2}]",ID,PrimaryIP,Name); + } + } } diff --git a/templates/static/crawlerhosts.html b/templates/static/crawlerhosts.html index 306070f..7b22005 100644 --- a/templates/static/crawlerhosts.html +++ b/templates/static/crawlerhosts.html @@ -145,7 +145,7 @@ $("#hostTable tbody").on( "click", "button#scan", function(){ scan( $("#hostTable").DataTable().row( $(this).parents('tr') ).data().ID ); } ); refreshHostTable(); - skyapi().addRefresh( refreshHostTable ); + //skyapi().addRefresh( refreshHostTable ); $("#chHints").DataTable({ diff --git a/templates/static/crawlersubnets.html b/templates/static/crawlersubnets.html index 18a4ee6..f416385 100644 --- a/templates/static/crawlersubnets.html +++ b/templates/static/crawlersubnets.html @@ -41,6 +41,6 @@ }); refreshSubnetTable(); - skyapi().addRefresh( refreshSubnetTable ); + //skyapi().addRefresh( refreshSubnetTable );