WIP
parent
8c62f00e00
commit
5ce181a5fa
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
|
@ -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>
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,6 +80,8 @@ namespace ln.skyscanner.services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Ready();
|
||||||
|
|
||||||
lock (Thread.CurrentThread)
|
lock (Thread.CurrentThread)
|
||||||
{
|
{
|
||||||
Monitor.Wait(Thread.CurrentThread);
|
Monitor.Wait(Thread.CurrentThread);
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
<%frame "frame.html"%>
|
<%frame "frame.html"%>
|
||||||
|
|
||||||
<!--
|
|
||||||
<div id="workspace">
|
|
||||||
<div id="wstabs"></div>
|
|
||||||
<div id="wsview"></div>
|
|
||||||
</div>
|
|
||||||
-->
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue