Name
sn_agent.AgentPolicyDBView
Description
No description available
Script
var AgentPolicyDBView = Class.create();
AgentPolicyDBView.prototype = {
AGENT_POLICY_DB_VIEW_PREFIX: "sn_agent_agents_connected_to_",
RUNS_ON_RELATIONSHIP_SYS_ID: "60bc4e22c0a8010e01f074cbe6bd73c3",
MANAGED_BY_RELATIONSHIP_SYS_ID: "bf83653c0ab30150761028c73a4de0f4",
initialize: function() {
},
generateDBView: function(policyGR) {
var utils;
try {
utils = new global.AgentGlobalUtils();
if (!utils)
throw "AgentGlobalUtil class undefined.";
} catch (e) {
gs.warn("AgentPolicyDBView: " + e + " Cannot create DB View. ");
return;
}
// If proxy policy, no DB view needed as user defines a known relationship
// Existing DB views for this policy will remain
if (policyGR.single_proxy_agent || policyGR.proxy_advanced || policyGR.proxy_script_advanced || policyGR.proxy_cluster)
return;
var supportedCIBaseTypes = ['cmdb_ci_computer', 'cmdb_ci_appl', 'cmdb_ci_docker_container'];
var table;
// If filter policy, take table directly from policy record, and validate result
if (policyGR.monitored_ci_type_filter) {
table = policyGR.getValue('table');
} else if (policyGR.monitored_ci_type_script) {
var ciTypeGR = (new GlideScopedEvaluator).evaluateScript(policyGR, "monitored_ci_script");
if (!ciTypeGR || !ciTypeGR.isValid()) {
gs.warn("AgentPolicyDBView: monitored CI script for policy " + policyGR.getUniqueValue() +
" failed to return a valid GlideRecord. Cannot generate DB view.");
return;
}
table = ciTypeGR.getTableName();
} else if (policyGR.monitored_ci_type_group) {
var groupName = policyGR.monitored_ci_group;
var groupRecord = new GlideRecord('cmdb_group');
groupRecord.addQuery("group_name", groupName);
groupRecord.query();
if (!groupRecord.next()) {
gs.warn("AgentPolicyDBView: could not find monitored CI group named " + groupName +". Cannot generate DB view.");
return;
}
var groupID = groupRecord.getValue("sys_id");
var cis = JSON.parse(sn_cmdbgroup.CMDBGroupAPI.getAllCI(groupID));
if (!cis || !cis.idList || cis.idList.length < 1) {
gs.warn("AgentPolicyDBView: Unable to find CIs of group " + groupName + ". Cannot extract class name to generate DB view.");
return;
}
var ciRecord = new GlideRecord('cmdb_ci');
if (!ciRecord.get('sys_id', cis.idList[0])) {
gs.warn("AgentPolicyDBView: Cannot find CI with sys_id: " + cis.idList[0] +". Cannot extract class name to generate DB view.");
return;
}
table = utils.getBaseTable(ciRecord.getValue('sys_class_name'), supportedCIBaseTypes);
} else {
gs.warn("AgentPolicyDBView: No policy type was selected. Cannot generate DB view.");
return;
}
var ciGr = new GlideRecord(table);
if (!ciGr.isValid()) {
gs.warn("AgentPolicyDBView: The table: " + table + " is not a valid table. Cannot Generate DB View.");
return;
}
// If CI type is agent we can return
if (table == 'sn_agent_cmdb_ci_agent')
return;
var baseTable = utils.getBaseTable(table, supportedCIBaseTypes);
if (!baseTable) {
gs.warn("AgentPolicyDBView: CI base type is not supported. Cannot create DB View.");
return;
}
var dbViewObj = {};
dbViewObj.name = this.AGENT_POLICY_DB_VIEW_PREFIX + table;
dbViewObj.description = 'Automatically generated by ACC-F policy calculation.';
dbViewObj.label = "Database view relating " + table + " and sn_agent_ci_extended_info";
dbViewObj.view_tables = [];
// Populate related table info
// db view CI table variable prefix will be ci type with underscores removed, e.g. cmdbcicomputer
var tableWithoutUnderscore = table.split("_").join("");
var dbViewCITable = {};
dbViewCITable.table = table;
dbViewCITable.order = 100;
dbViewCITable.var_prefix = tableWithoutUnderscore;
dbViewCITable.where_clause = "";
dbViewObj.view_tables.push(dbViewCITable);
// cmdb_ci_computer extensions don't require rel table for view
if (baseTable != "cmdb_ci_computer") {
// add rel table info
var dbViewRelTable = {};
dbViewRelTable.table = 'cmdb_rel_ci';
dbViewRelTable.order = 200;
dbViewRelTable.var_prefix = 'rel';
dbViewRelTable.where_clause = "rel_parent=" + tableWithoutUnderscore + "_sys_id && rel_type='" + this.RUNS_ON_RELATIONSHIP_SYS_ID + "'";
// docker container can have managed by relationship
if (baseTable == "cmdb_ci_docker_container") {
dbViewRelTable.where_clause = "rel_parent=" + tableWithoutUnderscore + "_sys_id && " +
"(rel_type='" + this.RUNS_ON_RELATIONSHIP_SYS_ID + "' || rel_type='" + this.MANAGED_BY_RELATIONSHIP_SYS_ID + "')";
}
dbViewObj.view_tables.push(dbViewRelTable);
}
// Agent table is created for every view
var dbViewAgentTable = {};
dbViewAgentTable.table = 'sn_agent_ci_extended_info';
dbViewAgentTable.order = 300;
dbViewAgentTable.var_prefix = 'agent';
if (baseTable == "cmdb_ci_computer") {
dbViewAgentTable.where_clause = "agent_cmdb_ci=" + table.split("_").join("") + "_sys_id";
} else if (baseTable == "cmdb_ci_docker_container") {
dbViewAgentTable.where_clause = "agent_cmdb_ci=rel_child && " +
"(rel_type='" + this.RUNS_ON_RELATIONSHIP_SYS_ID + "' || rel_type='" + this.MANAGED_BY_RELATIONSHIP_SYS_ID + "')";
} else {
dbViewAgentTable.where_clause = "agent_cmdb_ci=rel_child && rel_type='" + this.RUNS_ON_RELATIONSHIP_SYS_ID + "'";
}
dbViewObj.view_tables.push(dbViewAgentTable);
// Create/validate DB Views
if (!utils.ensureDBView) {
gs.warn("AgentPolicyDBView: cannot find function AgentGlobalUtil.ensureDBView(). Cannot create DB View.");
return;
}
var viewID = utils.ensureDBView(dbViewObj);
if (!viewID) {
gs.warn("AgentPolicyDBView: failed to create/validate DB view.");
}
},
type: 'AgentPolicyDBView'
};
Sys ID
77e76a13ff3251102abec787d53bf16a