WIP
parent
8c62f00e00
commit
5ce181a5fa
|
@ -143,9 +143,12 @@ namespace ln.skyscanner
|
|||
webSocketInterface = new WebSocketInterface(rootResource, this);
|
||||
|
||||
RPCContainer.Add("", new SkyScannerRpc(this));
|
||||
RPCContainer.Add("ServiceContainer",applicationInterface.ServiceContainer.RPC);
|
||||
|
||||
long nextCycle = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||
|
||||
Ready();
|
||||
|
||||
while (!StopRequested)
|
||||
{
|
||||
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>
|
||||
</Reference>
|
||||
<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 Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.ComponentModel" />
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<packages>
|
||||
<package id="BouncyCastle" version="1.8.5" 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="SSH.NET" version="2016.1.0" targetFramework="net47" />
|
||||
</packages>
|
|
@ -3,10 +3,18 @@ using ln.application;
|
|||
using System.Threading;
|
||||
using ln.logging;
|
||||
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
|
||||
{
|
||||
public class CheckService : ApplicationServiceBase
|
||||
{
|
||||
Pool checkPool;
|
||||
|
||||
|
||||
public CheckService()
|
||||
:base("Check Service")
|
||||
{
|
||||
|
@ -15,13 +23,20 @@ namespace ln.skyscanner.services
|
|||
|
||||
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();
|
||||
|
||||
Ready();
|
||||
|
||||
while (!StopRequested)
|
||||
{
|
||||
/*
|
||||
List<CheckJob> checkJobs = new List<CheckJob>();
|
||||
|
||||
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduler save CheckStates");
|
||||
|
||||
lock (saveQueue)
|
||||
|
@ -32,17 +47,35 @@ namespace ln.skyscanner.services
|
|||
}
|
||||
saveQueue.Clear();
|
||||
}
|
||||
|
||||
*/
|
||||
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);
|
||||
checkJobs.Add(checkJob);
|
||||
currentNodes.Add(node);
|
||||
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(): scheduled {0} checks", checkPool.Enqueue(checkJobs));
|
||||
*/
|
||||
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduled {0} checks", checkPool.Enqueue(checkJobs.Values));
|
||||
|
||||
|
||||
while (true)
|
||||
{
|
||||
|
|
|
@ -13,6 +13,10 @@ namespace ln.skyscanner.services
|
|||
|
||||
public override void ServiceMain(IApplicationInterface applicationInterface)
|
||||
{
|
||||
EntityService entityService = Dependency<EntityService>();
|
||||
|
||||
Ready();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,6 +80,8 @@ namespace ln.skyscanner.services
|
|||
|
||||
|
||||
|
||||
Ready();
|
||||
|
||||
lock (Thread.CurrentThread)
|
||||
{
|
||||
Monitor.Wait(Thread.CurrentThread);
|
||||
|
|
|
@ -487,3 +487,12 @@ span#nWARN, span#nCRITICAL, span#nOK {
|
|||
.issue-box:hover .performance-value {
|
||||
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>
|
||||
<script type="text/javascript">
|
||||
$( document ).tooltip();
|
||||
|
||||
LN().rpc(null,"GetServerString",[],function(r){
|
||||
alert(JSON.stringify(r));
|
||||
$("#ServerString").text( r.result );
|
||||
});
|
||||
</script>
|
||||
|
||||
|
@ -46,12 +47,13 @@
|
|||
<div id="indCrawler" class="indicator" state=""><div></div>Crawler</div>
|
||||
<div id="indChecks" class="indicator" state=""><div></div>Checks</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>
|
||||
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
<%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){
|
||||
|
||||
this.baseurl = baseurl;
|
||||
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.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");
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
function updateStatistics()
|
||||
{
|
||||
|
@ -211,16 +202,6 @@ function updateStatistics()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
var __skyapi = new SKYAPI("/");
|
||||
|
||||
function skyapi()
|
||||
{
|
||||
return __skyapi;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function ScaleSI(value)
|
||||
{
|
||||
if (value > 1000000000)
|
||||
|
|
|
@ -25,28 +25,52 @@
|
|||
</tr>
|
||||
</table>
|
||||
</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">
|
||||
$("#cbCrawlHosts").on("click", function(){ skyapi().call("api/crawler","ToggleCrawlHosts"); } );
|
||||
$("#cbCrawlSubnets").on("click", function(){ skyapi().call("api/crawler","ToggleCrawlSubnets"); } );
|
||||
// $("#cbCrawlHosts").on("click", function(){ skyapi().call("api/crawler","ToggleCrawlHosts"); } );
|
||||
// $("#cbCrawlSubnets").on("click", function(){ skyapi().call("api/crawler","ToggleCrawlSubnets"); } );
|
||||
|
||||
skyapi().addRefresh(
|
||||
function(){
|
||||
skyapi().call(
|
||||
"api/crawler",
|
||||
"GetCrawlSubnets",
|
||||
[],
|
||||
function(r){
|
||||
$("#cbCrawlSubnets").prop("checked", r);
|
||||
} );
|
||||
skyapi().call(
|
||||
"api/crawler",
|
||||
"GetCrawlHosts",
|
||||
[],
|
||||
function(r){
|
||||
$("#cbCrawlHosts").prop("checked", r);
|
||||
} );
|
||||
},
|
||||
1
|
||||
);
|
||||
function showServices(json){
|
||||
if (json.result)
|
||||
{
|
||||
$("#ServiceTable > tbody").empty();
|
||||
json.result.forEach(element => {
|
||||
var row = $("<tr></tr>")
|
||||
.attr("id",$.escapeSelector(element))
|
||||
.append($("<td></td>").text(element));
|
||||
|
||||
$("#ServiceTable > tbody").append(row);
|
||||
|
||||
LN().rpc("ServiceContainer","GetServiceDefinition",[element,],function(json){
|
||||
console.log(JSON.stringify(json));
|
||||
row.append(
|
||||
$("<td></td>").attr("bool",json.result.IsLoaded),
|
||||
$("<td></td>").attr("bool",json.result.IsAlive),
|
||||
$("<td></td>").attr("bool",json.result.IsReady)
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
LN().rpc("ServiceContainer","GetServiceNames",[],showServices);
|
||||
</script>
|
||||
|
|
Loading…
Reference in New Issue