broken
Harald Wolff 2019-04-15 09:18:41 +02:00
parent 24b956a4a2
commit e492e6c7e4
10 changed files with 267 additions and 89 deletions

View File

@ -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");

View File

@ -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");

View File

@ -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++)

View File

@ -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();
}
}

View File

@ -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\" />

View File

@ -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"> &lt; LastValue &lt; <input id="WarnUpper"><br>
Kritische Schwelle: <input id="CritLower"> &lt; LastValue &lt; <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>

View File

@ -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(){

View File

@ -132,6 +132,8 @@
{
$("#nodeTable").DataTable().ajax.reload(null, false);
}
showNode(null);
//refreshNodeTable();

View File

@ -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)
}

View File

@ -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>