You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
321 lines
11 KiB
321 lines
11 KiB
require.config({
|
|
paths: {
|
|
'app': '../app'
|
|
}
|
|
});
|
|
|
|
require([
|
|
"underscore",
|
|
"jquery",
|
|
"splunkjs/mvc/utils",
|
|
"splunkjs/mvc",
|
|
"splunkjs/mvc/tokenutils",
|
|
"splunkjs/mvc/simplexml",
|
|
"splunkjs/mvc/layoutview",
|
|
"splunkjs/mvc/simplexml/dashboardview",
|
|
"splunkjs/mvc/simplexml/dashboard/panelref",
|
|
"splunkjs/mvc/simplexml/element/chart",
|
|
"splunkjs/mvc/simplexml/element/event",
|
|
"splunkjs/mvc/simplexml/element/html",
|
|
"splunkjs/mvc/simplexml/element/list",
|
|
"splunkjs/mvc/simplexml/element/map",
|
|
"splunkjs/mvc/simplexml/element/single",
|
|
"splunkjs/mvc/simplexml/element/table",
|
|
"splunkjs/mvc/simplexml/element/visualization",
|
|
"splunkjs/mvc/simpleform/formutils",
|
|
"splunkjs/mvc/simplexml/eventhandler",
|
|
"splunkjs/mvc/simplexml/searcheventhandler",
|
|
"splunkjs/mvc/simpleform/input/dropdown",
|
|
"splunkjs/mvc/simpleform/input/radiogroup",
|
|
"splunkjs/mvc/simpleform/input/linklist",
|
|
"splunkjs/mvc/simpleform/input/multiselect",
|
|
"splunkjs/mvc/simpleform/input/checkboxgroup",
|
|
"splunkjs/mvc/simpleform/input/text",
|
|
"splunkjs/mvc/simpleform/input/timerange",
|
|
"splunkjs/mvc/simpleform/input/submit",
|
|
"splunkjs/mvc/searchmanager",
|
|
"splunkjs/mvc/savedsearchmanager",
|
|
"splunkjs/mvc/postprocessmanager",
|
|
"splunkjs/mvc/simplexml/urltokenmodel",
|
|
"splunkjs/mvc/tableview",
|
|
"splunkjs/mvc/simplexml/ready!"
|
|
], function(
|
|
_,
|
|
$,
|
|
utils,
|
|
mvc,
|
|
TokenUtils,
|
|
DashboardController,
|
|
LayoutView,
|
|
Dashboard,
|
|
PanelRef,
|
|
ChartElement,
|
|
EventElement,
|
|
HtmlElement,
|
|
ListElement,
|
|
MapElement,
|
|
SingleElement,
|
|
TableElement,
|
|
VisualizationElement,
|
|
FormUtils,
|
|
EventHandler,
|
|
SearchEventHandler,
|
|
DropdownInput,
|
|
RadioGroupInput,
|
|
LinkListInput,
|
|
MultiSelectInput,
|
|
CheckboxGroupInput,
|
|
TextInput,
|
|
TimeRangeInput,
|
|
SubmitButton,
|
|
SearchManager,
|
|
SavedSearchManager,
|
|
PostProcessManager,
|
|
UrlTokenModel,
|
|
TableView
|
|
) {
|
|
require(["splunkjs/mvc/simplexml/ready!"], function () {
|
|
|
|
console.log("loading javascript ...");
|
|
|
|
var org_ids = null;
|
|
var sfx_token_configured = false;
|
|
var test_completed = false;
|
|
|
|
function dataLoaded() {
|
|
if ( (sfx_token_configured == true) && (test_completed == true) ) {
|
|
console.log("test_completed..." + test_completed);
|
|
$("#configuration_complete").show();
|
|
$("#configuration_complete_message").show();
|
|
}
|
|
}
|
|
|
|
// Create a service object using the Splunk SDK for JavaScript
|
|
// to send REST requests
|
|
let service = mvc.createService({ owner: "nobody" , app: "splunk_incident_intelligence_app"});
|
|
|
|
var isAdmin = false;
|
|
var roleSearchManager = new SearchManager({
|
|
"id": "roleSearch",
|
|
"status_buckets": 300,
|
|
"search": '| rest splunk_server=local /services/authentication/current-context | table roles | mvexpand roles'
|
|
});
|
|
|
|
var roleResults = roleSearchManager.data("results", {count:0});
|
|
|
|
roleResults.on("data", function() {
|
|
console.log("Got Role Results");
|
|
var d = roleResults.data();
|
|
if (d && d.rows) {
|
|
for (var i = 0; i < d.rows.length; i++) {
|
|
if ( (d.rows[i][0] === 'admin') || (d.rows[i][0] === 'incident_intelligence_admin') || (d.rows[i][0] === 'sc_admin') ) {
|
|
$("#configPanel").show();
|
|
isAdmin = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
$("#mainPanel").show();
|
|
});
|
|
|
|
roleSearchManager.startSearch();
|
|
|
|
function getAppVersion() {
|
|
console.log("getAppVersion() entry ...");
|
|
const query = '| rest /services/apps/local | where title="splunk_incident_intelligence_app" | table version';
|
|
const search = service.oneshotSearch(
|
|
query,
|
|
null,
|
|
function(err, results) {
|
|
|
|
if (err) {
|
|
console.error('getAppVersion error - ', err);
|
|
return;
|
|
}
|
|
|
|
if (results && results.rows && results.rows.length > 0) {
|
|
version = "Release " + results.rows[0];
|
|
$("#appVersion").html(version);
|
|
}
|
|
});
|
|
}
|
|
getAppVersion();
|
|
|
|
function checkOrgIdOrgLevelAccessKey() {
|
|
console.log("checkOrgIdOrgLevelIdSetup() entry ...");
|
|
const query = '| inputlookup incident_intelligence_kvstore_lookup | table _key, realm, org_id, is_default, test_result';
|
|
|
|
const search = service.oneshotSearch(
|
|
query,
|
|
null,
|
|
function(err, results) {
|
|
//console.log("results..." + results);
|
|
|
|
if (err) {
|
|
console.error('lookupKey error - ', err);
|
|
dataLoaded();
|
|
return;
|
|
}
|
|
|
|
if (results.rows.length == 0) {
|
|
console.log("results.rows.length..." + results.rows.length);
|
|
dataLoaded();
|
|
return;
|
|
}
|
|
|
|
// Loop through results and get default record and check its status
|
|
for (var i = 0; i < results.rows.length; i++) {
|
|
var record = results.rows[i];
|
|
//console.log("results.record..." + record);
|
|
if (record[3] === "true") {
|
|
if (record[4] != null) {
|
|
if (record[4] === "SUCCESS") {
|
|
test_completed = true;
|
|
console.log("test_completed..." + test_completed);
|
|
$("#setup_test_alert_fail").hide();
|
|
$("#setup_test_alert_success").show();
|
|
$("#setup_test_alert_success").parent().prev().addClass("selected");
|
|
}
|
|
else {
|
|
$("#setup_test_alert_fail").show();
|
|
$("#setup_test_alert_success").hide();
|
|
}
|
|
}
|
|
var orgId = record[2];
|
|
$("#org_id").html(orgId);
|
|
}
|
|
}
|
|
|
|
org_ids = results.rows;
|
|
sfx_token_configured = true;
|
|
dataLoaded();
|
|
|
|
//console.log("org_ids..." + org_ids);
|
|
|
|
//$("#setup_account").parent().prev().addClass("selected");
|
|
//$("#setup_account").show();
|
|
$("#setup_api").parent().prev().addClass("selected");
|
|
$("#setup_api").show();
|
|
});
|
|
}
|
|
|
|
function testKey(keyVal, realm, orgId) {
|
|
const query = '| rest /servicesNS/admin/splunk_incident_intelligence_app/configs/conf-alert_actions/incident_intelligence'
|
|
const search = service.oneshotSearch(
|
|
query,
|
|
null,
|
|
function(err,results) {
|
|
var hostname = window.location.hostname;
|
|
if (results) {
|
|
var hostnameIndex = -1;
|
|
// Is there a field for hostname?
|
|
for (var i = 0; i < results.fields.length; i++) {
|
|
if (results.fields[i] == 'hostname') {
|
|
hostnameIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
if (hostnameIndex != -1) {
|
|
if (results.rows[0][hostnameIndex] != "") {
|
|
hostname = results.rows[0][hostnameIndex];
|
|
}
|
|
}
|
|
}
|
|
sendAlert(keyVal, realm, orgId, hostname)
|
|
})
|
|
}
|
|
|
|
|
|
function sendAlert(keyVal, realm, orgId, hostname) {
|
|
|
|
// Use the sendalert command to generate a test alert. This will invoke incident_intelligence.py in the app'
|
|
// bin directory. The command will lookup the api key to test from storage password using the value passed
|
|
// the org_id parameter.
|
|
console.log('realm: ' + realm);
|
|
const query = '| sendalert incident_intelligence param.severity="" param.title="Test Alert" param.description="Test Alert from ' + hostname + '" param.service_id="Test Service" param.realm="' + encodeURIComponent(realm) + '" param.org_id="' + encodeURIComponent(orgId) + '"';
|
|
console.log('Sending test alert');
|
|
const search = service.oneshotSearch(
|
|
query,
|
|
null,
|
|
function(err,results) {
|
|
|
|
let isSuccess = true;
|
|
//console.log("results..." + results)
|
|
console.log("err..." + err)
|
|
if (results && results.messages) {
|
|
for (let i = 0; i < results.messages.length; i++) {
|
|
//console.log("results.messages[i]: " + results.messages[i])
|
|
const obj = results.messages[i];
|
|
if (obj.type === 'FATAL' || obj.type === 'ERROR') {
|
|
isSuccess = false;
|
|
// NOTE: Errors should already be logged in the console.
|
|
}
|
|
}
|
|
const status = isSuccess ? "Connection successful!" : "Connection refused!";
|
|
console.log("status="+status);
|
|
if (isSuccess) {
|
|
$("#setup_test_alert_success").show();
|
|
$("#setup_test_alert_fail").hide();
|
|
$("#setup_test_alert_success").parent().prev().addClass("selected");
|
|
}
|
|
else {
|
|
$("#setup_test_alert_success").hide();
|
|
$("#setup_test_alert_fail").show();
|
|
}
|
|
|
|
require(["bootstrap.modal"],function() {
|
|
$(".modal-body").html(status);
|
|
$("#cancelDialogButton").html("Dismiss");
|
|
$("#cancelDialogButton").show();
|
|
$("#confirmDialogButton").hide();
|
|
$('#homeModal').css('z-index', '9999');
|
|
$('#homeModal').modal('show');
|
|
});
|
|
|
|
setTestResult(orgId, isSuccess);
|
|
}
|
|
});
|
|
}
|
|
|
|
function setTestResult(orgId, isSuccess) {
|
|
var status = (isSuccess == true)?'SUCCESS':'FAIL';
|
|
const query = '| setTestResult org_id=' + orgId + ' test_result=' + status;
|
|
//console.log("query=" + query)
|
|
const search = service.oneshotSearch(
|
|
query,
|
|
null,
|
|
function(err,results) {
|
|
// don't care
|
|
if (results && results.rows && results.rows.length > 0) {
|
|
//console.log("results.rows[0]..." + results.rows[0])
|
|
if (results.rows[0] == "SUCCESS") {
|
|
console.log("Successfully updated test result");
|
|
test_completed = true;
|
|
dataLoaded();
|
|
}
|
|
else {
|
|
console.log("Failure updating test result");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
$("#send_test_alert").on("click", function(e) {
|
|
console.log("Sent Test Alert Click");
|
|
if (org_ids && org_ids.length ) {
|
|
// get the default key
|
|
for (var i = 0; i < org_ids.length; i++) {
|
|
if (org_ids[i][3] == "true") {
|
|
console.log("Found Default OrgId entry");
|
|
testKey(org_ids[i][0], org_ids[i][1], org_ids[i][2]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
console.log("javascript load done ...");
|
|
checkOrgIdOrgLevelAccessKey();
|
|
});
|
|
});
|