Name
sn_agent.ACCResultsFormatter
Description
Convert JSON to Html in order to show it formatted in worknotes in incidents
Script
var ACCResultsFormatter = Class.create();
ACCResultsFormatter.prototype = {
initialize: function() {
},
/**
* JSON Formatter for OSQuery Results for worknotes
*
* @param json {string}
* example {"computer_name":"winserver2019","local_hostname":"winserver2019"}]
* @param input_transpose {string} true/false to render results in row vs column structure
* @param input_query {string} of OSQuery request for restructuring order
* example "select local_hostname, computer_name from system_info"
* Returns an [code] html blob to render onto worknotes for seeing OSQuery results better
*/
formatOSQuery: function(json, input_transpose, input_query) {
var t_transpose = input_transpose;
var resultsTable = JSON.parse(json);
if (!(resultsTable instanceof Array))
return "[code] Input string is not a JSON array [/code]. input: " + json;
var fieldArrangement = new sn_agent.ACCResultsSorter().sortOSQuery(resultsTable, input_query);
return this.createWorknotes(resultsTable, fieldArrangement, t_transpose);
},
createDefaultTableRows: function(resultsTable, fieldArrangement) {
var html = "";
for (var rowIdx in resultsTable) {
var row = resultsTable[rowIdx];
// In the first row we create thr table headers
if (rowIdx == 0) {
html += "<tr>\n";
for (var fieldIdx in fieldArrangement) {
html += "<th>" + fieldArrangement[fieldIdx] + "</th>\n";
}
html += "</tr>\n";
}
// Now add the field values
html += "<tr>\n";
for (fieldIdx in fieldArrangement) {
var field = fieldArrangement[fieldIdx];
html += "<td>" + row[field] + "</td>\n";
}
html += "</tr>\n";
}
return html;
},
createTransposedTableRows: function(resultsTable, fieldArrangement) {
var html = "";
for (var fieldIdx in fieldArrangement) {
field = fieldArrangement[fieldIdx];
html += "<tr>\n";
html += "<th>" + field + "</th>\n";
for(var colIdx in resultsTable){
var col = resultsTable[colIdx];
html += "<td>" + col[field] + "</td>\n";
}
html += "</tr>\n";
}
return html;
},
createWorknotes: function(resultsTable, fieldArrangement, transpose) {
var html = "[code]";
var htmlHeader = "<head>" +
" <style>" +
" td { white-space: nowrap;}\n" +
" .withscroll {\n" +
" overflow-x: scroll;\n" +
" white-space: nowrap;\n" +
"}\n" +
" table, th, td {\n" +
" border: 1px solid #d4d6db;\n" +
" border-collapse: collapse;\n" +
"}\n" +
" td, th { padding:4px;}\n" +
" td { font-weight:normal;}\n" +
" table { border-radius:6px;}\n" +
" th{ background-color:#e8eaed;}\n"+
"</style>\n" +
"</head>\n";
html += htmlHeader;
html += '<body><div class="withscroll">\n';
html += "<table>";
if(transpose === "false"){
html += this.createDefaultTableRows(resultsTable, fieldArrangement);
} else {
html += this.createTransposedTableRows(resultsTable, fieldArrangement);
}
html += "</table>\n";
html += "</div></body>\n";
html += "[/code]\n";
return html;
},
type: 'ACCResultsFormatter'
};
Sys ID
b002878f0f750110ce4d142386767eef