diff --git a/SkyScanner.cs b/SkyScanner.cs index c585e75..877b0f8 100644 --- a/SkyScanner.cs +++ b/SkyScanner.cs @@ -6,24 +6,20 @@ using ln.skyscanner.http; using System.IO; using ln.skyscanner.crawl; using ln.types.threads; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; using ln.skyscanner.checks; using ln.skyscanner.import.skytron; using System.Linq; using ln.skyscanner.entities; -using Newtonsoft.Json.Linq; using ln.types.net; using ln.application; using ln.application.service; using ln.skyscanner.services; -using Renci.SshNet.Messages; using System.Threading; using ln.http.resources; using ln.types.rpc; +using ln.json; namespace ln.skyscanner { - [JsonConverter(typeof(StringEnumConverter))] public enum ComponentState { STOPPED, INITIALIZED, STARTED, FAILED, STOPPING } public class SkyScanner : Application @@ -168,9 +164,9 @@ namespace ln.skyscanner /* Send Application State to WebSockets */ - JObject msg = new JObject(); - JObject stateObject = new JObject(); - stateObject["currentTime"] = DateTimeOffset.Now.ToUnixTimeMilliseconds(); + JSONObject msg = new JSONObject(); + JSONObject stateObject = new JSONObject(); + stateObject.Add("currentTime", DateTimeOffset.Now.ToUnixTimeMilliseconds()); msg["state"] = stateObject; @@ -242,7 +238,7 @@ namespace ln.skyscanner crawl.Prepare(); crawl.RunJob(); - Logging.Log(LogLevel.INFO, "CrawledHost: {0}", JObject.FromObject(crawledHost).ToString()); + Logging.Log(LogLevel.INFO, "CrawledHost: {0}", JSONObject.From(crawledHost).ToString()); } @@ -257,7 +253,7 @@ namespace ln.skyscanner } else { - Logging.Log(LogLevel.INFO, "DebugCheck(): Node: {0}",JObject.FromObject(node).ToString()); + Logging.Log(LogLevel.INFO, "DebugCheck(): Node: {0}",JSONObject.From(node).ToString()); CheckJob checkJob = new CheckJob(node); Logging.Log(LogLevel.INFO, "Prepare..."); diff --git a/checks/CheckJob.cs b/checks/CheckJob.cs index 5c17b68..6066513 100644 --- a/checks/CheckJob.cs +++ b/checks/CheckJob.cs @@ -11,7 +11,6 @@ using System; using ln.types.threads; using ln.skyscanner.entities; using ln.logging; -using Newtonsoft.Json; using ln.types.odb; using System.Linq; using System.Collections.Generic; @@ -19,9 +18,25 @@ namespace ln.skyscanner.checks { public class CheckJob : PoolJob { - [JsonIgnore] public Node Node { get; } + public SkyCheckState[] CheckStates + { + get + { + return checkStates.Values.ToArray(); + } + set + { + checkStates.Clear(); + foreach (SkyCheckState checkState in value) + { + checkStates.Add(checkState.CheckName, checkState); + } + } + + } + Dictionary checkStates = new Dictionary(); public CheckJob(Node node) @@ -32,6 +47,7 @@ namespace ln.skyscanner.checks public override void Prepare() { + /* Query stateQuery = Query.Equals("Node", Node.ID); SkyCheckState[] skyCheckStates = SkyScanner.Instance.Entities.SkyCheckStates.Query(stateQuery).ToArray(); foreach (SkyCheckState checkState in skyCheckStates) @@ -44,6 +60,7 @@ namespace ln.skyscanner.checks checkStates.Add(check.Name, check.PrepareCheckState(SkyScanner.Instance.Checker, Node)); SkyScanner.Instance.Entities.SkyCheckStates.Insert(checkStates[check.Name]); } + */ } public override void RunJob() diff --git a/checks/Mimosa.cs b/checks/Mimosa.cs index 825ad1e..e034df2 100644 --- a/checks/Mimosa.cs +++ b/checks/Mimosa.cs @@ -5,6 +5,7 @@ using ln.snmp; using ln.logging; using ln.snmp.types; using System.Drawing; +using ln.skyscanner.services; namespace ln.skyscanner.checks { @@ -57,7 +58,7 @@ namespace ln.skyscanner.checks return (node.Vendor != null) && node.Vendor.Equals("mimosa"); } - public override SkyCheckState PrepareCheckState(SkyChecker skyChecker, Node node) + public override SkyCheckState PrepareCheckState(CheckService skyChecker, Node node) { return new MimosaCheckState(this, node); } diff --git a/checks/PerformanceValue.cs b/checks/PerformanceValue.cs index 38499ea..fa30102 100644 --- a/checks/PerformanceValue.cs +++ b/checks/PerformanceValue.cs @@ -9,7 +9,6 @@ // **/ using System; using ln.perfdb.storage; -using Newtonsoft.Json; namespace ln.skyscanner.checks { public class PerformanceValue diff --git a/checks/SkyCheck.cs b/checks/SkyCheck.cs index ba1960a..8d00919 100644 --- a/checks/SkyCheck.cs +++ b/checks/SkyCheck.cs @@ -11,6 +11,7 @@ using System; using ln.skyscanner.entities; using System.IO; using System.Collections.Generic; +using ln.skyscanner.services; namespace ln.skyscanner.checks { public abstract class SkyCheck @@ -33,7 +34,7 @@ namespace ln.skyscanner.checks public abstract bool IsValid(Node node); public abstract void Check(SkyChecker skyChecker,ref SkyCheckState checkState,Node node); - public virtual SkyCheckState PrepareCheckState(SkyChecker skyChecker,Node node) + public virtual SkyCheckState PrepareCheckState(CheckService skyChecker,Node node) { return new SkyCheckState(this, node); } diff --git a/checks/SkyCheckState.cs b/checks/SkyCheckState.cs index daa85fe..3fd3cc7 100644 --- a/checks/SkyCheckState.cs +++ b/checks/SkyCheckState.cs @@ -9,15 +9,10 @@ // **/ using System; using ln.skyscanner.entities; -using ln.types.odb; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.Linq; using ln.types.odb.attributes; using System.Collections.Generic; namespace ln.skyscanner.checks { - [JsonConverter(typeof(StringEnumConverter))] public enum CheckState { OK, WARN, CRITICAL, FAIL, ERROR } public struct CheckStateChange diff --git a/checks/Ubiquiti.cs b/checks/Ubiquiti.cs index 388d161..b7ebfd3 100644 --- a/checks/Ubiquiti.cs +++ b/checks/Ubiquiti.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using ln.snmp.types; using ln.logging; using System.Linq; +using ln.skyscanner.services; namespace ln.skyscanner.checks { @@ -78,7 +79,7 @@ namespace ln.skyscanner.checks return (node.Vendor != null) && node.Vendor.Equals("Ubiquiti"); } - public override SkyCheckState PrepareCheckState(SkyChecker skyChecker, Node node) + public override SkyCheckState PrepareCheckState(CheckService skyChecker, Node node) { return new UbiquityCheckState(this, node); } diff --git a/crawl/Crawl.cs b/crawl/Crawl.cs index 3e425d5..c2574c6 100644 --- a/crawl/Crawl.cs +++ b/crawl/Crawl.cs @@ -18,7 +18,6 @@ using ln.snmp.types; using System.Collections.Generic; using ln.snmp.rfc1213; using ln.types; -using Newtonsoft.Json; using ln.skyscanner.crawl.tests; using System.Runtime.Remoting.Messaging; using ln.skyscanner.crawl.service; @@ -27,9 +26,7 @@ namespace ln.skyscanner.crawl { public class Crawl : PoolJob { - [JsonIgnore] public Crawler Crawler { get; } - [JsonIgnore] public CrawledHost Host { get; } List servicesToCheck = new List(); diff --git a/crawl/CrawlNetwork.cs b/crawl/CrawlNetwork.cs index 922d507..e5f3d7a 100644 --- a/crawl/CrawlNetwork.cs +++ b/crawl/CrawlNetwork.cs @@ -13,7 +13,6 @@ using ln.types; using ln.skyscanner.entities; using System.Net.NetworkInformation; using ln.logging; -using Newtonsoft.Json; using System.Linq; using ln.types.odb; using ln.types.net; @@ -21,7 +20,6 @@ namespace ln.skyscanner.crawl { public class CrawlNetwork : PoolJob { - [JsonIgnoreAttribute] public Crawler Crawler { get; } public CrawledSubnet Subnet { get; } diff --git a/crawl/Crawler.cs b/crawl/Crawler.cs index d29332b..8f781fa 100644 --- a/crawl/Crawler.cs +++ b/crawl/Crawler.cs @@ -13,8 +13,6 @@ using System.IO; using ln.logging; using System.Linq; using System.Threading; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; using ln.types.odb; using ln.skyscanner.crawl.service; using ln.skyscanner.crawl.tests; @@ -53,7 +51,6 @@ namespace ln.skyscanner.crawl public bool CrawlSubnets { get; set; } public bool CrawlHosts { get; set; } - [JsonConverter(typeof(StringEnumConverter))] public ComponentState CrawlerState { get; private set; } public CredentialsGenerator Credentials { get; } = new CredentialsGenerator(); diff --git a/entities/CheckSeverity.cs b/entities/CheckSeverity.cs index 7b9af31..fa71e3d 100644 --- a/entities/CheckSeverity.cs +++ b/entities/CheckSeverity.cs @@ -8,11 +8,8 @@ // * // **/ using System; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; namespace ln.skyscanner.entities { - [JsonConverter(typeof(StringEnumConverter))] public enum CheckSeverity { OLD = 0, diff --git a/entities/ConfiguredIP.cs b/entities/ConfiguredIP.cs index e811110..94c08b2 100644 --- a/entities/ConfiguredIP.cs +++ b/entities/ConfiguredIP.cs @@ -10,7 +10,6 @@ using System; using ln.types.odb; using ln.types; -using Newtonsoft.Json; using ln.types.net; using ln.types.odb.attributes; namespace ln.skyscanner.entities diff --git a/entities/DeviceType.cs b/entities/DeviceType.cs index f7e3f7a..88460b1 100644 --- a/entities/DeviceType.cs +++ b/entities/DeviceType.cs @@ -1,9 +1,6 @@ using System; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; namespace ln.skyscanner.entities { - [JsonConverter(typeof(StringEnumConverter))] public enum DeviceType { UNKNOWN, diff --git a/entities/HopMap.cs b/entities/HopMap.cs index 0bfcfb6..49df802 100644 --- a/entities/HopMap.cs +++ b/entities/HopMap.cs @@ -12,7 +12,6 @@ using System.Collections.Generic; using ln.types.odb; using System.Linq; using ln.types.btree; -using Newtonsoft.Json; using ln.types.net; namespace ln.skyscanner.entities { @@ -62,14 +61,11 @@ namespace ln.skyscanner.entities public class HopNode : IComparable { - [JsonIgnore] public HopMap HopMap { get; } - [JsonIgnore] public HopNode Parent { get; private set; } public Node Node; - [JsonIgnore] public HopNode[] Peers => peers.ToArray(); private HashSet peers = new HashSet(); diff --git a/entities/NetworkInterface.cs b/entities/NetworkInterface.cs index 7378c62..4e35445 100644 --- a/entities/NetworkInterface.cs +++ b/entities/NetworkInterface.cs @@ -12,7 +12,6 @@ using System.Collections.Generic; using ln.types; using ln.skyscanner.crawl; using ln.types.odb; -using Newtonsoft.Json; using ln.logging; using ln.types.net; using ln.types.odb.attributes; diff --git a/entities/Node.cs b/entities/Node.cs index f64adce..6a6a6d8 100644 --- a/entities/Node.cs +++ b/entities/Node.cs @@ -12,7 +12,6 @@ using ln.types; using System.Collections.Generic; using System.Linq; using ln.types.odb; -using Newtonsoft.Json; using ln.types.threads; using ln.types.net; using ln.types.odb.attributes; @@ -45,11 +44,8 @@ namespace ln.skyscanner.entities public List Interfaces { get; private set; } = new List(); - [JsonIgnore] public IEnumerable IPAdresses => Interfaces.SelectMany(intf => intf.ConfiguredIPs.Select(nip => nip.IP)); - [JsonIgnore] public IEnumerable Networks => Interfaces.SelectMany(intf => intf.ConfiguredIPs.Select(nip => nip.Network)).Distinct(); - [JsonIgnore] public IEnumerable Subnets => SkyScanner.Instance.Entities.SubnetCollection.Query(Query.Equals("Network", Networks.Select(net => net.Network))); private string uniqueIdentity; diff --git a/entities/PointOfPresence.cs b/entities/PointOfPresence.cs index a7e33dc..8747883 100644 --- a/entities/PointOfPresence.cs +++ b/entities/PointOfPresence.cs @@ -13,7 +13,6 @@ using System.Collections.Generic; using System.Linq; using ln.types; using ln.types.odb.attributes; -using Newtonsoft.Json; using ln.types.odb.collections; namespace ln.skyscanner.entities { @@ -30,7 +29,6 @@ namespace ln.skyscanner.entities public GeoLocation GeoLocation { get; set; } public DateTime Created { get; private set; } = DateTime.Now; - [JsonIgnore] public IEnumerable L2Segments { get diff --git a/entities/Subnet.cs b/entities/Subnet.cs index a5ac6a5..5c57f88 100644 --- a/entities/Subnet.cs +++ b/entities/Subnet.cs @@ -13,7 +13,6 @@ using ln.types.odb; using System.Collections.Generic; using System.Linq; using ln.types.net; -using Newtonsoft.Json; using ln.types.odb.attributes; namespace ln.skyscanner.entities { @@ -32,9 +31,7 @@ namespace ln.skyscanner.entities public bool AutoScan { get; set; } - [JsonIgnore] public IEnumerable AttachedInterfaces => throw new NotImplementedException(); - [JsonIgnore] public IEnumerable AttachedNodes => throw new NotImplementedException(); private Subnet() diff --git a/http/CheckerApi.cs b/http/CheckerApi.cs index 80839d8..dfebf7c 100644 --- a/http/CheckerApi.cs +++ b/http/CheckerApi.cs @@ -13,11 +13,11 @@ using ln.http; using ln.http.resources; using ln.types.threads; using ln.perfdb.storage; -using Newtonsoft.Json; using System.Net; using ln.skyscanner.checks; using ln.types.odb; using System.Linq; +using ln.json.mapping; namespace ln.skyscanner.http { public class CheckerApi : JsonCallResource @@ -85,7 +85,7 @@ namespace ln.skyscanner.http { HttpResponse response = new HttpResponse(httpRequest); response.SetHeader("content-type", "application/json"); - response.ContentWriter.Write(JsonConvert.SerializeObject(SkyScanner.Instance.Checker.PerfNames)); + response.ContentWriter.Write(JSONMapper.DefaultMapper.ToJson(SkyScanner.Instance.Checker.PerfNames)); return response; } @@ -119,7 +119,7 @@ namespace ln.skyscanner.http HttpResponse response = new HttpResponse(httpRequest); response.SetHeader("content-type", "application/json"); - response.ContentWriter.Write(JsonConvert.SerializeObject(perfValues)); + response.ContentWriter.Write(JSONMapper.DefaultMapper.ToJson(perfValues).ToString()); return response; } diff --git a/http/WebSocketInterface.cs b/http/WebSocketInterface.cs index 9509e4c..c3d9b9e 100644 --- a/http/WebSocketInterface.cs +++ b/http/WebSocketInterface.cs @@ -1,13 +1,13 @@ using System; using ln.http.resources.websocket; using ln.http.resources; -using Newtonsoft.Json.Linq; using ln.logging; using System.Collections.Generic; using ln.http.websocket; using System.Linq; using ln.types.rpc; -using Newtonsoft.Json; +using ln.json; +using ln.json.mapping; namespace ln.skyscanner.http { @@ -49,7 +49,7 @@ namespace ln.skyscanner.http } } - public void Broadcast(JObject json) + public void Broadcast(JSONObject json) { Broadcast(json.ToString()); } @@ -66,13 +66,13 @@ namespace ln.skyscanner.http { try { - JObject json = JObject.Parse(textMessage); - RPCCall rpcCall = new RPCCall(json); + JSONObject json = (JSONObject)JSONParser.Parse(textMessage); + RPCCall rpcCall = json.ToObject(); RPCResult rpcResult = SkyScannerService.RPCContainer.Invoke(rpcCall); requestContext.WebSocket.Send( - rpcResult.ToJSON().ToString() + JSONObject.From(rpcResult).ToString() ); } diff --git a/ln.skyscanner.csproj b/ln.skyscanner.csproj index a8fc04e..cc286a7 100644 --- a/ln.skyscanner.csproj +++ b/ln.skyscanner.csproj @@ -33,16 +33,13 @@ ..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll - - ..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll - ..\packages\BouncyCastle.1.8.5\lib\BouncyCastle.Crypto.dll - ..\packages\Google.Protobuf.3.8.0\lib\net45\Google.Protobuf.dll + ..\packages\Google.Protobuf.3.9.1\lib\net45\Google.Protobuf.dll ..\packages\MySql.Data.8.0.17\lib\net452\MySql.Data.dll @@ -299,6 +296,10 @@ {44AA3A50-7214-47F2-9D60-6FF34C0FE6D3} ln.application + + {D9342117-3249-4D8B-87C9-51A50676B158} + ln.json + \ No newline at end of file diff --git a/packages.config b/packages.config index 51a0f32..1f19f06 100644 --- a/packages.config +++ b/packages.config @@ -1,8 +1,7 @@  - + - \ No newline at end of file diff --git a/services/CheckService.cs b/services/CheckService.cs index b3d09a6..b286f29 100644 --- a/services/CheckService.cs +++ b/services/CheckService.cs @@ -8,12 +8,14 @@ using ln.skyscanner.checks; using System.Collections.Generic; using ln.types.threads; using System.Linq; +using ln.types.odb; namespace ln.skyscanner.services { public class CheckService : ApplicationServiceBase { Pool checkPool; + EntityService entityService; public CheckService() :base("Check Service") @@ -23,7 +25,7 @@ namespace ln.skyscanner.services public override void ServiceMain(IApplicationInterface applicationInterface) { - EntityService entityService = Dependency(); + entityService = Dependency(); Dictionary checkJobs = new Dictionary(); HashSet currentNodes = new HashSet(); @@ -72,6 +74,10 @@ namespace ln.skyscanner.services } currentNodes.Clear(); + foreach (CheckJob checkJob in checkJobs.Values) + { + + } Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): prepared {0} checks", checkJobs.Count); Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduled {0} checks", checkPool.Enqueue(checkJobs.Values)); @@ -93,6 +99,43 @@ namespace ln.skyscanner.services } } } + + entityService = null; } + + public SkyCheckState[] GetCheckStates(Node node) + { + Query stateQuery = Query.Equals("Node", node.ID); + SkyCheckState[] skyCheckStates = entityService.SkyCheckStates.Query(stateQuery).ToArray(); + Dictionary checkStates = new Dictionary(); + + foreach (SkyCheckState checkState in skyCheckStates) + { + checkStates.Add(checkState.CheckName, checkState); + } + foreach (SkyCheck check in SkyCheck.SkyChecks) + { + if (!checkStates.ContainsKey(check.Name) && check.IsValid(node)) + { + checkStates.Add(check.Name, check.PrepareCheckState(this, node)); + entityService.SkyCheckStates.Insert(checkStates[check.Name]); + } + } + + return checkStates.Values.ToArray(); + } + + + class CheckServiceRPC + { + CheckService checkService; + + public CheckServiceRPC(CheckService checkService) + { + this.checkService = checkService; + } + + } + } } diff --git a/templates/static/skyapi.js b/templates/static/skyapi.js index 42f9c10..c25f741 100644 --- a/templates/static/skyapi.js +++ b/templates/static/skyapi.js @@ -23,7 +23,12 @@ function updateState(state) $("#ServerTime").text("ServerTime: " + moment(state.currentTime).format()); lagDetector = setTimeout(function(){ - $("#ServerTime").text("Server lag detected"); + $("#ServerTime") + .empty() + .append( + $("") + .text("Server lag detected") + ); }, 2000); } catch (e)