sidetrak

Process Discovery Log Filters

May 1st, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Name: Process Discovery Log Filters
  3. Table: Queue [ecc_queue]
  4. When: after
  5. Insert: true
  6. Condition: current.queue == 'input' && current.agent.startsWith('mid.server.') && current.topic != 'HeartbeatProbe' && current.topic != 'queue.processing' && current.topic != 'SystemCommand'
  7. */
  8.  
  9. processFilters();
  10.  
  11. function processFilters() {
  12.    var filters = new GlideRecord("u_discovery_log_filters");
  13.    filters.addQuery('u_active', true);
  14.    filters.query();
  15.    while(filters.next()) {
  16.       //check for a match in ECC payload, ECC name, and ECC topic
  17.       if(current.payload.indexOf(filters.u_message_match_string) > -1 &&
  18.          current.name.indexOf(filters.u_ecc_name) > -1 &&
  19.          current.topic == filters.u_ecc_topic) {
  20.          
  21.          //Check discovery errors for duplicates that have been set to ignore
  22.          var ignoreCheck = new GlideRecord("u_discovery_errors");
  23.          ignoreCheck.addQuery('name', filters.name);
  24.          ignoreCheck.addQuery('u_ecc_name', filters.u_ecc_name);
  25.          ignoreCheck.addQuery('u_ecc_topic', filters.u_ecc_topic);
  26.          ignoreCheck.addQuery('u_device', current.source);
  27.          ignoreCheck.addQuery('u_state', '!=',6);
  28.          ignoreCheck.query();
  29.          if(!ignoreCheck.next()){
  30.             //gs.log('Filter Log:' + filters.u_message_match_string, 'eric');
  31.             var ci = findCMDBItem();//Try to match IP to a CI
  32.             if(!ci.nil() && !filters.u_conditions.nil()){
  33.                //gs.log('CI:' + ci, 'eric');
  34.                //Query for CI and match conditions
  35.                var gr = new GlideRecord('cmdb_ci_server');
  36.                gr.addQuery('sys_id', ci);
  37.                gr.addQuery(filters.u_conditions);
  38.                gr.query();
  39.                if(gr.next()) {
  40.                   //gs.log('CI Match:' + gr.name, 'eric');
  41.                   addDiscoveryError(current, filters, ci);
  42.                }
  43.             }else{
  44.                addDiscoveryError(current, filters, ci);
  45.             }
  46.          }
  47.       }
  48.    }
  49. }
  50.  
  51. function addDiscoveryError(queue_item, filter, ci) {
  52.    var errorLog = new GlideRecord("u_discovery_errors");
  53.    errorLog.initialize();
  54.    errorLog.status = queue_item.agent_correlator;
  55.    errorLog.level = filter.u_level;
  56.    errorLog.source = queue_item.name;
  57.    errorLog.sensor = queue_item.sys_id;
  58.    errorLog.cmdb_ci = ci;
  59.    errorLog.device = queue_item.source;
  60.    errorLog.message = filter.u_error_message;
  61.    errorLog.device_history.setDisplayName(queue_item.source);
  62.    errorLog.u_device = queue_item.source;
  63.    errorLog.u_name = filter.u_name;
  64.    errorLog.insert();
  65. }
  66.  
  67. function findCMDBItem() {
  68.    var ip = Packages.com.snc.commons.networks.IPAddressV4.getIPAddressV4Instance(current.source);
  69.    var ci = Packages.com.snc.discovery.DiscoveryUtils.getCIFromIP(ip);
  70.    var url = current;
  71.    if (ci)
  72.       return ci;
  73.    ci = findByHostname(current.source);
  74.    if (ci)
  75.       return ci;
  76. }
  77.  
  78. /*
  79.  * In Help the helpdesk, the source name is always the name of the computer.
  80.  */
  81. function findByHostname(source) {
  82.    var gr = new GlideRecord("cmdb_ci_computer");
  83.    gr.addQuery("name", source);
  84.    gr.query();
  85.    if (gr.next())
  86.       return gr.sys_id + '';
  87.    
  88.    return false;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment