WIP
parent
24b956a4a2
commit
e492e6c7e4
|
@ -64,8 +64,8 @@ namespace ln.skyscanner
|
|||
/* Preload all nodes to increase load speed*/
|
||||
foreach (Node node in NodeCollection.ToArray())
|
||||
{
|
||||
if (n192.Contains(node.PrimaryIP))
|
||||
NodeCollection.Delete(node);
|
||||
//if (n192.Contains(node.PrimaryIP))
|
||||
//NodeCollection.Delete(node);
|
||||
}
|
||||
|
||||
SubnetCollection = ODB.GetCollection<Subnet>();
|
||||
|
@ -84,11 +84,11 @@ namespace ln.skyscanner
|
|||
SkyCheckStates.EnableStrongCache(true);
|
||||
SkyCheckStates.EnsureIndeces("Node");
|
||||
|
||||
foreach (SkyCheckState checkState in SkyCheckStates.ToArray())
|
||||
{
|
||||
if (object.ReferenceEquals(checkState.Node, null))
|
||||
SkyCheckStates.Delete(checkState);
|
||||
}
|
||||
//foreach (SkyCheckState checkState in SkyCheckStates.ToArray())
|
||||
//{
|
||||
// if (object.ReferenceEquals(checkState.Node, null))
|
||||
// SkyCheckStates.Delete(checkState);
|
||||
//}
|
||||
|
||||
Logging.Log(LogLevel.INFO, "SkyEntities: initialized");
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ namespace ln.skyscanner
|
|||
public SkyScanner(String[] args)
|
||||
:this()
|
||||
{
|
||||
MemoryLogger = new MemoryLogger(1024);
|
||||
MemoryLogger = new MemoryLogger(4096);
|
||||
Logger.Default.Backends.Add(MemoryLogger);
|
||||
|
||||
Logging.Log(LogLevel.INFO, "SkyScanner: Constructor");
|
||||
|
|
|
@ -28,17 +28,17 @@ namespace ln.skyscanner.checks
|
|||
{
|
||||
Name = String.Format("Interval check: {0} [{1}]",node.UniqueIdentity,node.PrimaryIP.ToString());
|
||||
Node = node;
|
||||
}
|
||||
|
||||
public override void RunJob()
|
||||
{
|
||||
Query stateQuery = Query.Equals<SkyCheckState>("Node", Node.ID);
|
||||
SkyCheckState[] skyCheckStates = SkyScanner.Instance.Entities.SkyCheckStates.Query(stateQuery).ToArray();
|
||||
foreach (SkyCheckState checkState in skyCheckStates)
|
||||
{
|
||||
checkStates.Add(checkState.CheckName, checkState);
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunJob()
|
||||
{
|
||||
SkyCheck[] checks = SkyCheck.SkyChecks;
|
||||
|
||||
for (int n=0;n<checks.Length;n++)
|
||||
|
|
|
@ -46,9 +46,9 @@ namespace ln.skyscanner.checks
|
|||
SkyCheckState[] checkStates = null;
|
||||
lock (SkyScanner.Instance.Entities.SkyCheckStates)
|
||||
{
|
||||
checkStates = SkyScanner.Instance.Entities.SkyCheckStates.ToArray();
|
||||
checkStates = Timing.Meassure("scheduler: checkStates", () => SkyScanner.Instance.Entities.SkyCheckStates.ToArray());
|
||||
}
|
||||
return checkStates.Where((cs) => cs.CheckState != CheckState.OK).ToArray();
|
||||
return checkStates.Where((cs) => (!String.Empty.Equals(cs.Node?.Vendor) && (cs.CheckState != CheckState.OK))).ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -202,6 +202,9 @@
|
|||
<None Include="templates\static\crawler\status.html">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="templates\static\checks\checks.html">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="identify\" />
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
<%frame "frame.html"%>
|
||||
|
||||
<h1>Check Parameters</h1>
|
||||
|
||||
<div class="flex row">
|
||||
<table id="checkTable"></table>
|
||||
</div>
|
||||
|
||||
<div class="flex">
|
||||
<div>
|
||||
Warnschwelle: <input id="WarnLower"> < LastValue < <input id="WarnUpper"><br>
|
||||
Kritische Schwelle: <input id="CritLower"> < LastValue < <input id="CritUpper"><br>
|
||||
<button onclick="apply();">Übernehmen</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
var selected = {}
|
||||
|
||||
$("#checkTable").DataTable({
|
||||
columns: [
|
||||
{ title: "", data: null },
|
||||
{ title: "PerfName", data: "PerfName" },
|
||||
{ title: "CheckState", data: "CheckState" },
|
||||
{ title: "LastValue", data: "LastValue" },
|
||||
{ title: "WarnLower", data: "WarnLower" },
|
||||
{ title: "WarnUpper", data: "WarnUpper" },
|
||||
{ title: "CritLower", data: "CritLower" },
|
||||
{ title: "CritUpper", data: "CritUpper" },
|
||||
|
||||
],
|
||||
columnDefs: [
|
||||
{ targets: 0, data: null, defaultContent: "" }
|
||||
],
|
||||
select: "os",
|
||||
fixedHeader: true,
|
||||
ajax: {
|
||||
url: "/collections/SkyCheckState",
|
||||
dataSrc: function(d){
|
||||
var pvl = []
|
||||
$.each( d, function(){
|
||||
$.each( this.PerformanceValues, function(){
|
||||
pvl.push( this );
|
||||
});
|
||||
});
|
||||
return pvl;
|
||||
}
|
||||
}
|
||||
})
|
||||
.on( "select", function(e,dt,type,indexes){
|
||||
var items = dt.rows( indexes ).data();
|
||||
|
||||
$.each( items, function(){
|
||||
selected[this.PerfName] = this;
|
||||
});
|
||||
|
||||
loadEditor(Object.values(selected));
|
||||
})
|
||||
.on( "deselect", function(e,dt,type,indexes){
|
||||
var items = dt.rows( indexes ).data();
|
||||
|
||||
$.each( items, function(){
|
||||
delete selected[this.PerfName];
|
||||
});
|
||||
|
||||
loadEditor(Object.values(selected));
|
||||
});
|
||||
|
||||
var currentLoadedSelection = [];
|
||||
|
||||
function getInput(fieldName, o, parse = null)
|
||||
{
|
||||
if (!$("#" + fieldName).prop("disabled"))
|
||||
if (parse)
|
||||
o[fieldName] = parse($("#" + fieldName).val());
|
||||
else
|
||||
o[fieldName] = $("#" + fieldName).val();
|
||||
}
|
||||
|
||||
function setInput(fieldName,o)
|
||||
{
|
||||
if (!o.hasOwnProperty(fieldName))
|
||||
$("#" + fieldName).val("").prop("disabled",true);
|
||||
else
|
||||
$("#" + fieldName).val(o[fieldName]).prop("disabled",false);
|
||||
}
|
||||
function collectCommonField(c, o, fieldName)
|
||||
{
|
||||
if (c[fieldName] != o[fieldName])
|
||||
delete c[fieldName];
|
||||
}
|
||||
function getCommonObject( oList )
|
||||
{
|
||||
if (oList.length == 0)
|
||||
return {}
|
||||
|
||||
var first = oList.shift();
|
||||
var common = {};
|
||||
|
||||
for (var k in first)
|
||||
common[k] = first[k];
|
||||
|
||||
for (var o in oList)
|
||||
{
|
||||
for (var k in oList[o])
|
||||
collectCommonField(common, oList[o], k);
|
||||
}
|
||||
|
||||
return common;
|
||||
}
|
||||
|
||||
function loadEditor(selection)
|
||||
{
|
||||
var common = getCommonObject( selection );
|
||||
|
||||
setInput("WarnLower", common);
|
||||
setInput("WarnUpper", common);
|
||||
setInput("CritLower", common);
|
||||
setInput("CritUpper", common);
|
||||
|
||||
currentLoadedSelection = selection;
|
||||
}
|
||||
function apply()
|
||||
{
|
||||
var change = {};
|
||||
|
||||
getInput("WarnLower", change, parseFloat);
|
||||
getInput("WarnUpper", change, parseFloat);
|
||||
getInput("CritLower", change, parseFloat);
|
||||
getInput("CritUpper", change, parseFloat);
|
||||
|
||||
$.each( currentLoadedSelection, function(){
|
||||
Object.assign( this, change );
|
||||
|
||||
skyapi().put( "/collections/SkyCheckState/" + this.ID, this);
|
||||
});
|
||||
|
||||
$("#checkTable").DataTable().ajax.reload( null, false );
|
||||
}
|
||||
|
||||
</script>
|
|
@ -44,88 +44,107 @@
|
|||
moment.defaultFormat = "DD.MM.YYYY HH:mm";
|
||||
|
||||
var issues = {}
|
||||
var charts = []
|
||||
|
||||
function graphLoaded(pv, performanceValue, perfData)
|
||||
{
|
||||
var chartColor = performanceValue.CheckState == "CRITICAL" ? '#FF0000' : (performanceValue.CheckState == "WARN") ? '#FFFF00' : '#000000';
|
||||
var chart = new Chart( $("#chart", pv), {
|
||||
type: 'bar',
|
||||
data: {
|
||||
datasets: [
|
||||
{
|
||||
label: "-",
|
||||
data: [],
|
||||
backgroundColor: chartColor,
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
yAxes: [
|
||||
{
|
||||
ticks: {
|
||||
callback: ScaleSI,
|
||||
beginAtZero: true,
|
||||
}
|
||||
}
|
||||
],
|
||||
xAxes: [{
|
||||
type: 'time',
|
||||
time: {
|
||||
unit: "minute",
|
||||
tooltipFormat: "DD.MM.YYYY HH:mm",
|
||||
displayFormats: {
|
||||
minute: "DD.MM.YYYY HH:mm"
|
||||
},
|
||||
parser: moment.unix
|
||||
}
|
||||
}]
|
||||
},
|
||||
responsive: true,
|
||||
maintainAspectRatio: false
|
||||
}
|
||||
} );
|
||||
|
||||
chart.data.labels.length = 0;
|
||||
chart.data.datasets[0].data.length = 0;
|
||||
chart.data.datasets[0].label = perfName;
|
||||
|
||||
$.each( perfValues, function(){
|
||||
if (this.TimeStamp != 0)
|
||||
chart.data.datasets[0].data.push( { x: this.TimeStamp, y: this.Value } );
|
||||
});
|
||||
chart.update();
|
||||
}
|
||||
|
||||
function updateIssue(issue)
|
||||
{
|
||||
var ne = $("#" + issue.ID );
|
||||
if (!ne.length)
|
||||
ne = $("#nodetemplate").clone().attr("id",issue.ID);
|
||||
|
||||
ne.appendTo($("#" + issue.CheckState));
|
||||
ne.addClass("issue-" + issue.CheckState );
|
||||
|
||||
$("h2", ne).text(issue.CheckName + ": " + issue.Node.Name + " ( " + issue.Node.UniqueIdentity + " )");
|
||||
$("#LastCheckTime", ne).text(issue.LastCheckTime);
|
||||
$("#UnchangedTime", ne).text(issue.UnchangedTime);
|
||||
|
||||
$.each( issue.PerformanceValues, function(){
|
||||
var pv = $("#" + this.PerfName.replace(/\//g,"-"));
|
||||
if (!pv.length)
|
||||
pv = $("#pvtemplate").clone().attr("id", this.PerfName.replace(/\//g,"-"));
|
||||
|
||||
$("#PerfName", pv).text(this.PerfName);
|
||||
$("#CheckState", pv).text(this.CheckState).addClass(this.CheckState);
|
||||
|
||||
pv.appendTo($("#PerfValues", ne));
|
||||
|
||||
var chartColor = this.CheckState == "CRITICAL" ? '#FF0000' : (this.CheckState == "WARN") ? '#FFFF00' : '#000000';
|
||||
var chart = new Chart( $("#chart", pv), {
|
||||
type: 'bar',
|
||||
data: {
|
||||
datasets: [
|
||||
{
|
||||
label: "-",
|
||||
data: [],
|
||||
backgroundColor: chartColor,
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
yAxes: [
|
||||
{
|
||||
ticks: {
|
||||
callback: ScaleSI,
|
||||
beginAtZero: true,
|
||||
}
|
||||
}
|
||||
],
|
||||
xAxes: [{
|
||||
type: 'time',
|
||||
time: {
|
||||
unit: "minute",
|
||||
tooltipFormat: "DD.MM.YYYY HH:mm",
|
||||
displayFormats: {
|
||||
minute: "DD.MM.YYYY HH:mm"
|
||||
},
|
||||
parser: moment.unix
|
||||
}
|
||||
}]
|
||||
},
|
||||
responsive: true,
|
||||
maintainAspectRatio: false
|
||||
}
|
||||
} );
|
||||
var ne = $("#" + issue.ID );
|
||||
if (!ne.length)
|
||||
ne = $("#nodetemplate").clone().attr("id",issue.ID);
|
||||
|
||||
var perfName = this.PerfName;
|
||||
|
||||
skyapi().getJson("api/checker/checks/" + encodeURIComponent(perfName) + "?interval=" + $("#interval").children("option:selected").val(), function(perfValues){
|
||||
chart.data.labels.length = 0;
|
||||
chart.data.datasets[0].data.length = 0;
|
||||
chart.data.datasets[0].label = perfName;
|
||||
|
||||
$.each( perfValues, function(){
|
||||
if (this.TimeStamp != 0)
|
||||
chart.data.datasets[0].data.push( { x: this.TimeStamp, y: this.Value } );
|
||||
});
|
||||
|
||||
chart.update();
|
||||
ne.appendTo($("#" + issue.CheckState));
|
||||
ne.addClass("issue-" + issue.CheckState );
|
||||
|
||||
$("h2", ne).text(issue.CheckName + ": " + issue.Node.Name + " ( " + issue.Node.UniqueIdentity + " )");
|
||||
$("#LastCheckTime", ne).text(issue.LastCheckTime);
|
||||
$("#UnchangedTime", ne).text(issue.UnchangedTime);
|
||||
|
||||
$.each( issue.PerformanceValues, function(){
|
||||
var pv = $("#" + this.PerfName.replace(/\//g,"-"));
|
||||
if (!pv.length)
|
||||
pv = $("#pvtemplate").clone().attr("id", this.PerfName.replace(/\//g,"-"));
|
||||
|
||||
$("#PerfName", pv).text(this.PerfName);
|
||||
$("#CheckState", pv).text(this.CheckState).addClass(this.CheckState);
|
||||
|
||||
})
|
||||
});
|
||||
pv.appendTo($("#PerfValues", ne));
|
||||
|
||||
var _perfValue = this;
|
||||
var _pv = pv;
|
||||
var perfName = this.PerfName;
|
||||
|
||||
charts.push( { pv: _pv, performanceValue: this } );
|
||||
});
|
||||
|
||||
//loadNextChart();
|
||||
}
|
||||
|
||||
function loadNextChart()
|
||||
{
|
||||
if (charts.length == 0)
|
||||
return;
|
||||
|
||||
next = charts.shift();
|
||||
|
||||
skyapi().getJson("api/checker/checks/" + encodeURIComponent(next.performanceValue.PerfName) + "?interval=" + $("#interval").children("option:selected").val(), function(perfData){
|
||||
graphLoaded(next.pv, next.performanceValue, perfData);
|
||||
loadNextChart();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function updateIssueList(issueList)
|
||||
{
|
||||
$.each( issueList , function(){
|
||||
|
|
|
@ -132,6 +132,8 @@
|
|||
{
|
||||
$("#nodeTable").DataTable().ajax.reload(null, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
showNode(null);
|
||||
//refreshNodeTable();
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
|
||||
Object.values = function(o) {
|
||||
var values = [];
|
||||
for(var property in o) {
|
||||
values.push(o[property]);
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
function SKYAPI(baseurl){
|
||||
|
||||
this.baseurl = baseurl;
|
||||
|
@ -189,3 +196,5 @@ function ScaleSI(value)
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -56,7 +56,10 @@
|
|||
<a href="/static/checks/status.html"><div>Status</div></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="/static/checks/index.html"><div>Checks</div></a>
|
||||
<a href="/static/checks/checks.html"><div>Check Parameter</div></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="/static/checks/index.html"><div>Graphen</div></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="/static/checks/checkstates.html"><div>Check States</div></a>
|
||||
|
|
Loading…
Reference in New Issue