воскресенье, 30 июня 2019 г.

scom html dashboard, win computer summary

<!DOCTYPE HTML>
<html>

<head>
<style>
.healthStyle_healthy {
background-color: lightgreen;
}
.healthStyle_critical {
background-color: Salmon;
}
.healthStyle_warning {
background-color: yellow;
}
.healthStyle_unavailable-healthy {
background-color: grey;
}
#compInfo > p {
margin: 1px;
padding: 1px;
font-size: small;
}
#compInfo {

}

#divAlert > p {
margin: 1px;
padding: 1px;
}
</style>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script type="text/javascript">

//var lastSelectedName = "lastObjSelected_c92650fd-5b51-4fb3-a6fe-d3cd845a7066";
var computerClass = "Microsoft.Windows.Library!Microsoft.Windows.Computer";
var groupId = "1d62280e-f437-1369-316b-1e8659500e9a";
var DurationMin = 1440;

function renderComputerList(){
$.ajax({
url: "/OperationsManager/data/state",
type: "POST",
headers: {
"Content-Type": "application/json"
},
data: JSON.stringify({
"classId": computerClass,
"objectIds": { groupId: -1},
"criteria": "((HealthState = '0') OR (HealthState = '1') OR (HealthState = '2') OR (HealthState = '3') OR HealthState is null)",
"displayColumns": [
"healthstate",
"id",
"displayname",
"path",
"maintenancemode"
]
}).replace("groupId", groupId),
success: function (result) {
debugger;
let objSel = $('#computers');
for (var i = 0; i < result.rows.length; i++) {
objSel.append('<option value="' + result.rows[i].id +'" class="healthStyle_' + result.rows[i].healthstate + '">'+result.rows[i].displayname+'</option>');
}
let lastObjSelected = localStorage.getItem("lastObjSelected_c92650fd-5b51-4fb3-a6fe-d3cd845a7066");
if (lastObjSelected) {
objSel.val(lastObjSelected);
}
else {
objSel[0].selectedIndex = 0;
}
objChanged();
}
});
}

        window.onload = function () {
renderComputerList();
        }

function GetProp(dict, nameRus, nameEng){
return dict.filter(function( item ) {
return (item.name == nameRus || item.name == nameEng);
});
}

function ProcessObjProperties(properties){
var ipAddr = GetProp(properties, "IP-адрес", "IP Address")[0].value;
var domainName = GetProp(properties, "DNS-имя домена", "DNS Domain Name")[0].value;
var siteName = GetProp(properties, "Сайт Active Directory", "Active Directory Site")[0].value;
//var ou = GetProp(properties, "Подразделение", "")[0].value;
var pCPU = GetProp(properties, "Physical Processors", "Физические процессоры")[0].value;
var lCPU = GetProp(properties, "Logical Processors", "Логические процессоры")[0].value;
var isVM = GetProp(properties, "Виртуальная машина", "Virtual Machine")[0].value;
var innerHTML = "<p>IP: " + ipAddr + "</p>" +
"<p>Domain: " + domainName + "</p>" +
"<p>Site: " + siteName + "</p>" +
"<p>CPU: " + pCPU +" <block title='Logical Processors'>(" + lCPU + ") </block></p>";
if (isVM == 'True'){
var vmName = GetProp(properties, "Имя виртуальной машины", "Virtual Machine Name")[0].value;
var vmHost = GetProp(properties, "Имя сервера узла", "Host Server Name")[0].value;
innerHTML += "<p>VMName: " + vmName + "</p><p>Host: " + vmHost + "</p>";
with($('#compIcon')[0]){
src = "https://img.icons8.com/color/96/000000/windows-client.png";
alt="Virtual Server";
title="Virtual Server";
}
//innerHTML = '<img src="https://img.icons8.com/color/96/000000/windows-client.png" alt="Virtual Server" title="Virtual Server">' + innerHTML;
}
else {
with($('#compIcon')[0]){
src = "https://img.icons8.com/color/96/000000/server.png";
alt="Physical Server";
title="Physical Server";
}
//innerHTML = '<img src="https://img.icons8.com/color/96/000000/server.png" alt="Physical Server" title="Physical Server">' + innerHTML;
}
var divInfo = $('#compInfo');
divInfo.html(innerHTML);
}

function GetObjectProperties(id,processFunc){
$.ajax({
                url: "/OperationsManager/data/monitoringObjectProperties/{" + id + "}",
async: true,
                type: "GET",
                headers: {
                    "Content-Type": "application/json",
"Accept-Language": "en"
                },               
                success: function (result) {
processFunc(result);
                }
            });
}

function ProcessALerts(alerts){
var criticalCounter = 0;
var warningCounter = 0;
var warningAlerts = "Warning Alerts:\n";
var criticalAlerts = "Critical Alerts:\n";

for (var i = 0; i < alerts.rows.length; i++) {
switch(alerts.rows[i].severity){
case "Error":
if (criticalCounter < 5){
criticalAlerts += alerts.rows[i].name + " (" + alerts.rows[i].age + ")\n";
}
criticalCounter++;
break;
case "Warning":
if (warningCounter < 5){
warningAlerts += alerts.rows[i].name + " (" + alerts.rows[i].age + ")\n";
}
warningCounter++;
break;
}
}

var warningColor = "green";
var errorColor = "green";
if (warningCounter > 0) { warningColor = "orange";}
if (criticalCounter >0) { errorColor = "red";}

var htmlStr = '<font style="color:' + warningColor + '" title="${warningAlerts}">'+warningCounter+'</font>/<font style="color:'+errorColor+'" title="'+criticalAlerts+'">'+criticalCounter+'</font>';
$('#alertInfo').html(htmlStr);

}

function getAlerts(id){
$.ajax({
                url: "/OperationsManager/data/alert",
                type: "POST",
                headers: {
                    "Content-Type": "application/json"
                },
                data: JSON.stringify({
"classId":null,
"objectIds":{objId:0},
"criteria":"((Severity = '1') OR (Severity = '2')) AND ((Priority = '0') OR (Priority = '2') OR (Priority = '1')) AND ((ResolutionState = '0') OR (ResolutionState = '247') OR (ResolutionState = '248') OR (ResolutionState = '249') OR (ResolutionState = '250') OR (ResolutionState = '254'))",
"displayColumns":["severity","monitoringobjectdisplayname","name","age","repeatcount","lastmodified"]
}
).replace("objId", id),
                success: function (result) {
ProcessALerts(result);
                }
            });
}

function LoadPerfData(id, counters, duration, processFunc){
$.ajax({
                url: "/OperationsManager/data/performance",
                type: "POST",
                headers: {
                    "Content-Type": "application/json",
"Accept-Language": "en"
                },
                data: JSON.stringify({
                        "id":id,
                        "performanceCounters": counters,
                        "legends":[
                            "target",
                            "path",
                            "lastvalue"
                        ],
                        "duration":duration
                    }),
                success: function (result) {
processFunc(result);
                }
            });
}

function ProcessUpTime(perfData){
var upTime = "NaN";
if (perfData){
var numSec = parseFloat(perfData.legends.rows[0].lastvalue);
upTime = Math.floor(( numSec / (24*60*60))) + "d" + new Date(numSec*1000).getHours() + "h" + new Date(numSec*1000).getMinutes() +"m";
}
$('#uptimeInfo').text(upTime);
}

function getUptime(id){
counters = [{"objectname":"System", "countername":"System Up Time","instancename":""}];
LoadPerfData(id, counters, DurationMin, ProcessUpTime);
}

function RenderTwoLineChart(divId, data1, data2, data1Title, data2Title, chartTitle){
var chart = new CanvasJS.Chart(divId, {
zoomEnabled: true,
title:{
text: chartTitle
},
axisY:{
title: data1Title,
lineColor: "#C24642",
tickColor: "#C24642",
labelFontColor: "#C24642",
titleFontColor: "#C24642"
},
axisY2: {
title: data2Title,
lineColor: "#7F6084",
tickColor: "#7F6084",
labelFontColor: "#7F6084",
titleFontColor: "#7F6084"
},
toolTip: {
shared: true
},
legend: {
cursor: "pointer",
itemclick: toggleDataSeries
},
data: [
{
type: "line",
name: data1Title,
color: "#C24642",
axisYIndex: 0,
showInLegend: true,
dataPoints: data1
},
{
type: "line",
name: data2Title,
color: "#7F6084",
axisYType: "secondary",
showInLegend: true,
dataPoints: data2
}
]
});
chart.render();

function toggleDataSeries(e) {
if (typeof (e.dataSeries.visible) === "undefined" || e.dataSeries.visible) {
e.dataSeries.visible = false;
} else {
e.dataSeries.visible = true;
}
e.chart.render();
}
}

function GetChartDataArray(datasetData){
var perfData = [];
            let dataDictionary = datasetData;
            for (var key in dataDictionary) {
                if(dataDictionary.hasOwnProperty(key)) {
var datetime = new Date(key);
datetime = convertUTCDateToLocalDate(datetime);
                    perfData.push({
y: dataDictionary[key],
x: datetime
});
}
            }
return perfData;
}

function convertUTCDateToLocalDate(date) {
            var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000);
            var offset = date.getTimezoneOffset() / 60;
            newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset())
            return newDate; 
        }

function ProcessCPUUsage(perfData){
var data1 = GetChartDataArray(perfData.datasets[0].data);
var data2 = GetChartDataArray(perfData.datasets[1].data);
RenderTwoLineChart("cpuChart", data1, data2, "CPU Usage %", "Queue Length", "CPU Statistics");
}

function getCPUUsage(id){
counters = [
{"objectname":"Processor Information", "countername":"% Processor Time","instancename":"_Total"},
{"objectname":"System", "countername":"Processor Queue Length","instancename":""}
];
LoadPerfData(id, counters, DurationMin, ProcessCPUUsage);
}

function ProcessRAMUsage(perfData){
var data1 = GetChartDataArray(perfData.datasets[0].data);
var data2 = GetChartDataArray(perfData.datasets[1].data);
RenderTwoLineChart("ramChart", data1, data2, "RAM Usage %", "Pages/sec", "RAM Statistics");
}

function getRAMUsage(id){
counters = [
{"objectname":"Memory", "countername":"PercentMemoryUsed","instancename":""},
{"objectname":"Memory", "countername":"Pages/sec","instancename":""}
];
LoadPerfData(id, counters, DurationMin, ProcessRAMUsage);
}

function GetPerfRules(id){
var ruleDict = [];
$.ajax({
                url: "/OperationsManager/data/performanceCounters/{" + id + "}",
async: false,
                type: "GET",
                headers: {
                    "Content-Type": "application/json"
                },               
                success: function (result) {
ruleDict = result.rows;
                }
            });
return ruleDict;
}

function FindInstances(dict, objectname, countername){
return dict.filter(function( item ) {
return (item.objectname == objectname && item.countername == countername);
});
}

function RenderDiskUsagePerc(instance, divId, freeValue, usedValue){
var chart = new CanvasJS.Chart(divId, {
title:{
text: "Disk " + instance + " Usage"
},
legend:{
cursor: "pointer"
},
data: [{
type: "pie",
showInLegend: true,
toolTipContent: "{name}: <strong>{y}%</strong>",
dataPoints: [
{ y: freeValue, name: "Free", color: "#00cc66", exploded: true },
{ y: usedValue, name: "Used", color: "#ff6666" }
]
}]
});
chart.render();
}

function ProcessDiskUsagePerc(perfData){
if (perfData){
var freeSpace = parseFloat(perfData.legends.rows[0].lastvalue);
var usedSpace = 100 - freeSpace;
var divName = "disk" + perfData.legends.rows[0].performanceinstance + "Chart";
RenderDiskUsagePerc(perfData.legends.rows[0].performanceinstance, divName, freeSpace, usedSpace);
}
}

function GetDiskUsagePerc(id, instance){
counters = [{"objectname":"LogicalDisk", "countername":"% Free Space","instancename": instance}];
LoadPerfData(id, counters, DurationMin, ProcessDiskUsagePerc);
}

function ProcessDiskUsageStats(perfData){
if (perfData){
instanceName = perfData.legends.rows[0].performanceinstance;
var divName = "disk" + instanceName + "StatChart";
var data1 = GetChartDataArray(perfData.datasets[0].data);
var data2 = GetChartDataArray(perfData.datasets[1].data);
RenderTwoLineChart(divName, data1, data2, "Queue Length", "Avg sec/transfer", "Disk " + instanceName +" Statistics");
}
}

function GetDiskUsageStats(id, instance){
counters = [
{"objectname":"LogicalDisk", "countername":"Current Disk Queue Length","instancename":instance},
{"objectname":"LogicalDisk", "countername":"Avg. Disk sec/Transfer","instancename":instance}
];
LoadPerfData(id, counters, DurationMin, ProcessDiskUsageStats);
}

function ProcessLANUsageStats(perfData){
if (perfData){
instanceName = perfData.legends.rows[0].performanceinstance;
instanceID = perfData.legends.rows[0].id;
let divName = "lan" + instanceID + "Chart";
$('#trLAN').append('<div id="' + divName + '" style="height: 250px; width: 250px;"></div>');
var data1 = GetChartDataArray(perfData.datasets[0].data);
var data2 = GetChartDataArray(perfData.datasets[1].data);
RenderTwoLineChart(divName, data1, data2, "Bytes Total/sec", "Usage %", instanceName +" Statistics");
}
}

function GetLANUsageStats(id, instance){
counters = [
{"objectname":"Network Adapter", "countername":"Bytes Total/sec","instancename":instance},
{"objectname":"Network Adapter", "countername":"PercentBandwidthUsedTotal","instancename":instance}
];
LoadPerfData(id, counters, DurationMin, ProcessLANUsageStats);
}

function objChanged(){
var objSel = $('#computers');
//debugger;
GetObjectProperties(objSel[0].value, ProcessObjProperties);
getAlerts(objSel[0].value);
getUptime(objSel[0].value);
getCPUUsage(objSel[0].value);
getRAMUsage(objSel[0].value);
var perfRules = GetPerfRules(objSel[0].value);
$('#trDisk').empty();
var diskInstances = FindInstances(perfRules, "LogicalDisk", "% Free Space");
for (var i = 0; i < diskInstances.length; i++) {
let divName = "disk" + diskInstances[i].instancename + "Chart";
let divstatName = "disk" + diskInstances[i].instancename + "StatChart";
$('#trDisk').append('<div id="' + divName + '" style="height: 250px; width: 250px;"></div>');
$('#trDisk').append('<div id="' + divstatName + '" style="height: 250px; width: 250px;"></div>');
GetDiskUsagePerc(objSel[0].value, diskInstances[i].instancename);
GetDiskUsageStats(objSel[0].value, diskInstances[i].instancename);
}
$('#trLAN').empty();
var lanInstances = FindInstances(perfRules, "Network Adapter", "PercentBandwidthUsedTotal");
for(var i = 0; i < lanInstances.length; i++) {
GetLANUsageStats(objSel[0].value, lanInstances[i].instancename);
}

localStorage.setItem("lastObjSelected_c92650fd-5b51-4fb3-a6fe-d3cd845a7066", objSel[0].value);
}
    </script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/canvasjs/1.7.0/canvasjs.min.js"></script>
</head>

<body>
<div>Computer: <select id="computers" name="computers" onchange="objChanged()"></select></div>
<div style="display: inline-flex;">
<div style="width:250px; height:250px">
<table id="compInfoTable" >
<tr>
<td style="width:100px">
<img id="compIcon"/>
</td>
<td>
<div id="divAlert" style="font-family: sans-serif; text-align: center;">
<p style="font-size: x-small">Alerts:</p>
<p id="alertInfo" style="font-size: xx-large"></p>
<p style="font-size: x-small">Up Time:</p>
<p id="uptimeInfo" style="font-size: x-large"></p>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<div id="compInfo"></div>
</td>
</tr>
</table>
</div>
<div id="cpuChart" style="width:250px; height:250px"></div>
<div id="ramChart" style="width:250px; height:250px"></div>
</div>
<div id="trDisk" style="display: inline-flex;"></div >
<div id="trLAN" style="display: inline-flex;"></div >
</body>

</html>

понедельник, 24 июня 2019 г.

scom, rest api psh examples

# Set header and the body
$scomHeaders = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$scomHeaders.Add('Content-Type','application/json; charset=utf-8')
$bodyraw = "Windows"

$Bytes = [System.Text.Encoding]::UTF8.GetBytes($bodyraw)

$EncodedText =[Convert]::ToBase64String($Bytes)

$jsonbody = $EncodedText | ConvertTo-Json

#Authenticate

$uriBase = 'http://localhost/OperationsManager/authenticate'

$auth = Invoke-RestMethod -Method POST -Uri $uriBase -Headers $scomheaders -body $jsonbody -UseDefaultCredentials -SessionVariable websession

# Add Criteria – Specify the criteria (such as severity, priority, resolution state, etc.)

# Display Columns – Specify the columns which needs to be displayed.

$query = @(@{ "classId"= ""

                  # Criteria output the critical new alerts

                    "criteria" = "((Severity = ‘2’) AND (ResolutionState = ‘0’))"

                    "displayColumns" ="id","severity","monitoringobjectdisplayname","name","age","repeatcount","lastModified"

 })

$jsonquery = $query | ConvertTo-Json

$Response = Invoke-RestMethod -Uri "http://localhost/OperationsManager/data/alert" -Method Post -Body $jsonquery -ContentType "application/json" -UseDefaultCredentials -WebSession $websession

$alerts = $Response.Rows

$alerts

$Response = Invoke-RestMethod -Uri "http://localhost/OperationsManager/data/performanceCounters/{8fafc510-3371-90eb-55ba-403d610238aa}" -Method Get -ContentType "application/json" -UseDefaultCredentials -WebSession $websession

$Response = Invoke-RestMethod -Uri "http://localhost/OperationsManager/data/monitoringObjectProperties/{8fafc510-3371-90eb-55ba-403d610238aa}" -Method Get -ContentType "application/json" -UseDefaultCredentials -WebSession $websession

$Response = Invoke-RestMethod -Uri "http://localhost/OperationsManager/data/healthstate/{8fafc510-3371-90eb-55ba-403d610238aa}" -Method Get -ContentType "application/json" -UseDefaultCredentials -WebSession $websession

воскресенье, 23 июня 2019 г.

scom html dashboard, computer perf summary

<!DOCTYPE HTML>
<html>

<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script type="text/javascript">
        var performanceData = [];
var perData1 = [];
var ramData = [];

function LoadPerfData(id, objectName, counterName, instanceName, chartName,chartTitle){
$.ajax({
                url: "/OperationsManager/data/performance",
                type: "POST",
                headers: {
                    "Content-Type": "application/json"
                },
                data: JSON.stringify({
                        "id":id,
                        "performanceCounters":[
                            {
                                "objectname":objectName,
                                "countername":counterName,
                                "instancename":instanceName
                            }
                        ],
                        "legends":[
                            "target",
                            "path",
                            "lastvalue"
                        ],
                        "duration":1440
                    }),
                success: function (result) {
perData1 = [];
                    let dataDictionary = result.datasets[0].data;
                    for (var key in dataDictionary) {
                        if(dataDictionary.hasOwnProperty(key)) {
                           var datetime = new Date(key);
                            datetime = convertUTCDateToLocalDate(datetime);
                            perData1.push({
y: dataDictionary[key],
x: datetime
});
                        }
                    }
renderChart(chartName, chartTitle);
                }
            });
}

function GetPerfRules(id){
var ruleDict = [];
$.ajax({
                url: "/OperationsManager/data/performanceCounters/{" + id + "}",
async: false,
                type: "GET",
                headers: {
                    "Content-Type": "application/json"
                },               
                success: function (result) {
ruleDict = result.rows;
                }
            });
return ruleDict;
}

        window.onload = function () {
    $.ajax({
                url: "/OperationsManager/data/state",
                type: "POST",
                data: {
                    "classId": "Microsoft.Windows.Library!Microsoft.Windows.Computer",
                    "objectIds": {
                        "1d62280e-f437-1369-316b-1e8659500e9a": -1
                    },
                    "criteria": "((HealthState = '0') OR (HealthState = '1') OR (HealthState = '2') OR (HealthState = '3') OR HealthState is null)",
                    "displayColumns": [
                        "healthstate",
"id",
                        "displayname",
                        "path",
                        "maintenancemode"
                    ]
                },
                success: function (result) {
let objSel = document.getElementById("computers");
for (var i = 0; i < result.rows.length; i++) {
objSel.options[i] = new Option(result.rows[i].displayname, result.rows[i].id);
                    }
let lastObjSelected = localStorage.getItem("lastObjSelected");
if (lastObjSelected) {
$('#computers').val(lastObjSelected);
}
else {
$('#computers')[0].selectedIndex = 0;
}
ChangePerfObj();
                }
            });

        }

        function convertUTCDateToLocalDate(date) {
            var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000);
            var offset = date.getTimezoneOffset() / 60;
            newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset())
            return newDate; 
        }

        function renderChart(chartName, chartTitle) {

            var chart = new CanvasJS.Chart(chartName, {
  theme: "light1",
title: {
                    text: chartTitle
                },
                axisX: {
                    labelFormatter: function(e) {
                        return CanvasJS.formatDate(e.value, "hh:mm tt");
                    }
                },
                data: [{
                    type: "line",
                    dataPoints: perData1
                }]
            });
            chart.render();
        }

function GetInstances(dict, objectname, countername){
return dict.filter(function( item ) {
return (item.objectname == objectname && item.countername == countername);
});
}

function ChangePerfObj() {
var objSel = $('#computers');
LoadPerfData(objSel[0].value, "System", "System Up Time", "", "uptimeChart","System Up Time (24h)");
LoadPerfData(objSel[0].value, "Memory", "PercentMemoryUsed", "", "ramChart", "RAM Used % (24h)");
LoadPerfData(objSel[0].value, "Processor Information", "% Processor Time", "_Total", "cpuChart", "CPU Used % (24h)");
//debugger;
var RulesDict = GetPerfRules(objSel[0].value);
var diskInstances = GetInstances(RulesDict, "LogicalDisk", "% Free Space");
$('#trDisk').empty();
for (var i = 0; i < diskInstances.length; i++) {
let divName = "disk" + i + "Chart";
$('#trDisk').append('<td><div id="' + divName + '" style="height: 250px; width: 250px;"></div></td>');
LoadPerfData(objSel[0].value, "LogicalDisk", "% Free Space", diskInstances[i].instancename, divName, diskInstances[i].instancename + " - Disk Free % (24h)");
}
var lanInstances = GetInstances(RulesDict, "Network Adapter", "PercentBandwidthUsedTotal");
for (var i = 0; i < lanInstances.length; i++) {
let divName = "lan" + i + "Chart";
$('#trDisk').append('<td><div id="' + divName + '" style="height: 250px; width: 250px;"></div></td>');
LoadPerfData(objSel[0].value, "Network Adapter", "PercentBandwidthUsedTotal", lanInstances[i].instancename, divName, lanInstances[i].instancename + " - LAN Used % (24h)");
}


localStorage.setItem("lastObjSelected", objSel[0].value);
}
    </script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/canvasjs/1.7.0/canvasjs.min.js"></script>
</head>

<body>
<div>
Computer: <select id="computers" name="computers" onchange="ChangePerfObj()"></select>
<table>
<tr>
<td><div id="uptimeChart" style="height: 250px; width: 250px;"></div></td>
<td><div id="cpuChart" style="height: 250px; width: 250px;"></div></td>
<td><div id="ramChart" style="height: 250px; width: 250px;"></div></td>
</tr>
<tr id="trDisk"></tr>
<!--<tr id="trLan"></tr>-->
</table>
</div>

</body>

</html>