broken
Harald Wolff 2019-08-06 00:26:53 +02:00
parent 8c62f00e00
commit 5ce181a5fa
11 changed files with 117 additions and 61 deletions

View File

@ -143,9 +143,12 @@ namespace ln.skyscanner
webSocketInterface = new WebSocketInterface(rootResource, this); webSocketInterface = new WebSocketInterface(rootResource, this);
RPCContainer.Add("", new SkyScannerRpc(this)); RPCContainer.Add("", new SkyScannerRpc(this));
RPCContainer.Add("ServiceContainer",applicationInterface.ServiceContainer.RPC);
long nextCycle = DateTimeOffset.Now.ToUnixTimeMilliseconds(); long nextCycle = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Ready();
while (!StopRequested) while (!StopRequested)
{ {
while ((nextCycle - DateTimeOffset.Now.ToUnixTimeMilliseconds()) < 0) while ((nextCycle - DateTimeOffset.Now.ToUnixTimeMilliseconds()) < 0)
@ -199,6 +202,7 @@ namespace ln.skyscanner
} }
} }

View File

@ -45,7 +45,7 @@
<HintPath>..\packages\Google.Protobuf.3.8.0\lib\net45\Google.Protobuf.dll</HintPath> <HintPath>..\packages\Google.Protobuf.3.8.0\lib\net45\Google.Protobuf.dll</HintPath>
</Reference> </Reference>
<Reference Include="MySql.Data"> <Reference Include="MySql.Data">
<HintPath>..\packages\MySql.Data.8.0.16\lib\net452\MySql.Data.dll</HintPath> <HintPath>..\packages\MySql.Data.8.0.17\lib\net452\MySql.Data.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="System.ComponentModel" /> <Reference Include="System.ComponentModel" />

View File

@ -2,7 +2,7 @@
<packages> <packages>
<package id="BouncyCastle" version="1.8.5" targetFramework="net47" /> <package id="BouncyCastle" version="1.8.5" targetFramework="net47" />
<package id="Google.Protobuf" version="3.8.0" targetFramework="net47" /> <package id="Google.Protobuf" version="3.8.0" targetFramework="net47" />
<package id="MySql.Data" version="8.0.16" targetFramework="net47" /> <package id="MySql.Data" version="8.0.17" targetFramework="net47" />
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net47" /> <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net47" />
<package id="SSH.NET" version="2016.1.0" targetFramework="net47" /> <package id="SSH.NET" version="2016.1.0" targetFramework="net47" />
</packages> </packages>

View File

@ -3,10 +3,18 @@ using ln.application;
using System.Threading; using System.Threading;
using ln.logging; using ln.logging;
using ln.application.service; using ln.application.service;
using ln.skyscanner.entities;
using ln.skyscanner.checks;
using System.Collections.Generic;
using ln.types.threads;
using System.Linq;
namespace ln.skyscanner.services namespace ln.skyscanner.services
{ {
public class CheckService : ApplicationServiceBase public class CheckService : ApplicationServiceBase
{ {
Pool checkPool;
public CheckService() public CheckService()
:base("Check Service") :base("Check Service")
{ {
@ -15,13 +23,20 @@ namespace ln.skyscanner.services
public override void ServiceMain(IApplicationInterface applicationInterface) public override void ServiceMain(IApplicationInterface applicationInterface)
{ {
EntityService entityService = Dependency<EntityService>();
Dictionary<Node, CheckJob> checkJobs = new Dictionary<Node, CheckJob>();
HashSet<Node> currentNodes = new HashSet<Node>();
checkPool = new Pool(64);
long nextMinute = DateTimeOffset.Now.ToUnixTimeMilliseconds(); long nextMinute = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Ready();
while (!StopRequested) while (!StopRequested)
{ {
/* /*
List<CheckJob> checkJobs = new List<CheckJob>();
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduler save CheckStates"); Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduler save CheckStates");
lock (saveQueue) lock (saveQueue)
@ -32,17 +47,35 @@ namespace ln.skyscanner.services
} }
saveQueue.Clear(); saveQueue.Clear();
} }
*/
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduler starts"); Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduler starts");
foreach (Node node in SkyScanner.Instance.Entities.NodeCollection) currentNodes.Clear();
foreach (Node node in entityService.NodeCollection)
{ {
CheckJob checkJob = new CheckJob(node); currentNodes.Add(node);
checkJobs.Add(checkJob); if (!checkJobs.ContainsKey(node))
{
CheckJob checkJob = new CheckJob(node);
checkJobs.Add(node, checkJob);
}
} }
foreach (Node node in checkJobs.Keys.ToArray())
{
currentNodes.Remove(node);
}
if (currentNodes.Count > 0)
{
foreach (Node node in currentNodes)
checkJobs.Remove(node);
}
currentNodes.Clear();
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): prepared {0} checks", checkJobs.Count); Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): prepared {0} checks", checkJobs.Count);
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduled {0} checks", checkPool.Enqueue(checkJobs)); Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduled {0} checks", checkPool.Enqueue(checkJobs.Values));
*/
while (true) while (true)
{ {

View File

@ -13,6 +13,10 @@ namespace ln.skyscanner.services
public override void ServiceMain(IApplicationInterface applicationInterface) public override void ServiceMain(IApplicationInterface applicationInterface)
{ {
EntityService entityService = Dependency<EntityService>();
Ready();
} }
} }
} }

View File

@ -80,6 +80,8 @@ namespace ln.skyscanner.services
Ready();
lock (Thread.CurrentThread) lock (Thread.CurrentThread)
{ {
Monitor.Wait(Thread.CurrentThread); Monitor.Wait(Thread.CurrentThread);

View File

@ -487,3 +487,12 @@ span#nWARN, span#nCRITICAL, span#nOK {
.issue-box:hover .performance-value { .issue-box:hover .performance-value {
height: 250px; height: 250px;
} }
[bool=true] {
border: 1px solid white;
background-color: green;
}
[bool=false] {
border: 1px solid white;
background-color: red;
}

View File

@ -23,8 +23,9 @@
<body> <body>
<script type="text/javascript"> <script type="text/javascript">
$( document ).tooltip(); $( document ).tooltip();
LN().rpc(null,"GetServerString",[],function(r){ LN().rpc(null,"GetServerString",[],function(r){
alert(JSON.stringify(r)); $("#ServerString").text( r.result );
}); });
</script> </script>
@ -46,12 +47,13 @@
<div id="indCrawler" class="indicator" state=""><div></div>Crawler</div> <div id="indCrawler" class="indicator" state=""><div></div>Crawler</div>
<div id="indChecks" class="indicator" state=""><div></div>Checks</div> <div id="indChecks" class="indicator" state=""><div></div>Checks</div>
<div id="indDispatcher" class="indicator" state=""><div></div>Message Dispatcher</div> <div id="indDispatcher" class="indicator" state=""><div></div>Message Dispatcher</div>
<div id="ServerTime" class="right"></div> <div id="ServerString" class="right" style="margin-right: 12px;"></div>
<div id="ServerTime" class="right" style="margin-right: 12px;"></div>
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
$("#header a").on( "click", function(e){ e.preventDefault(); skyapi().loadPage( $(this).attr('href') ); }); //$("#header a").on( "click", function(e){ e.preventDefault(); skyapi().loadPage( $(this).attr('href') ); });
</script> </script>
</body> </body>
</html> </html>

View File

@ -1,8 +1,5 @@
<%frame "frame.html"%> <%frame "frame.html"%>
<!--
<div id="workspace">
<div id="wstabs"></div>
<div id="wsview"></div>
</div>
-->

View File

@ -32,22 +32,12 @@ function updateState(state)
} }
} }
/*
function SKYAPI(baseurl){ function SKYAPI(baseurl){
this.baseurl = baseurl; this.baseurl = baseurl;
this.refresh = [] this.refresh = []
/* this.websocket = new WebSocket("ws://localhost:8080/socket");
this.websocket.onerror = function(e){
alert("WebSocket Error: " + e);
}
this.websocket.onmessage = function(e){
var j = JSON.parse(e.data);
if (j.state){
updateState(j.state);
}
}
*/
this.setBaseURL = function(url){ this.baseurl = url; } this.setBaseURL = function(url){ this.baseurl = url; }
this.addRefresh = function( rh, seconds = null ){ this.refresh.push( { interval: seconds ? seconds : 5, refresh: rh } ); } this.addRefresh = function( rh, seconds = null ){ this.refresh.push( { interval: seconds ? seconds : 5, refresh: rh } ); }
@ -199,6 +189,7 @@ function showStatistics(stats)
$("#indDispatcher").attr("title","UNKNOWN"); $("#indDispatcher").attr("title","UNKNOWN");
} }
} }
*/
function updateStatistics() function updateStatistics()
{ {
@ -211,16 +202,6 @@ function updateStatistics()
} }
} }
var __skyapi = new SKYAPI("/");
function skyapi()
{
return __skyapi;
}
function ScaleSI(value) function ScaleSI(value)
{ {
if (value > 1000000000) if (value > 1000000000)

View File

@ -25,28 +25,52 @@
</tr> </tr>
</table> </table>
</div> </div>
<div>
<h2>Services</h2>
<table id="ServiceTable">
<thead>
<tr>
<td>ServiceClass</td>
<td>Loaded</td>
<td>Alive</td>
<td>Ready</td>
<td></td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script type="text/javascript"> <script type="text/javascript">
$("#cbCrawlHosts").on("click", function(){ skyapi().call("api/crawler","ToggleCrawlHosts"); } ); // $("#cbCrawlHosts").on("click", function(){ skyapi().call("api/crawler","ToggleCrawlHosts"); } );
$("#cbCrawlSubnets").on("click", function(){ skyapi().call("api/crawler","ToggleCrawlSubnets"); } ); // $("#cbCrawlSubnets").on("click", function(){ skyapi().call("api/crawler","ToggleCrawlSubnets"); } );
skyapi().addRefresh( function showServices(json){
function(){ if (json.result)
skyapi().call( {
"api/crawler", $("#ServiceTable > tbody").empty();
"GetCrawlSubnets", json.result.forEach(element => {
[], var row = $("<tr></tr>")
function(r){ .attr("id",$.escapeSelector(element))
$("#cbCrawlSubnets").prop("checked", r); .append($("<td></td>").text(element));
} );
skyapi().call( $("#ServiceTable > tbody").append(row);
"api/crawler",
"GetCrawlHosts", LN().rpc("ServiceContainer","GetServiceDefinition",[element,],function(json){
[], console.log(JSON.stringify(json));
function(r){ row.append(
$("#cbCrawlHosts").prop("checked", r); $("<td></td>").attr("bool",json.result.IsLoaded),
} ); $("<td></td>").attr("bool",json.result.IsAlive),
}, $("<td></td>").attr("bool",json.result.IsReady)
1 );
); });
});
}
};
LN().rpc("ServiceContainer","GetServiceNames",[],showServices);
</script> </script>