Name

global.DiscoveryProcessConnectionsSensor

Description

The abstract sensor for running processes

Script

var DiscoveryProcessConnectionsSensor = Class.create();

DiscoveryProcessConnectionsSensor.prototype = Object.extendsObject(DiscoverySensor, {
  process: function(result) {
      this.deviceGR = this.getCmdbRecord();
      if (gs.nil(this.deviceGR) || gs.nil(result.output))
          return;

      this.listenerHash = {};
      this.connectionHash = {};
      this.cmdb_tcp_connection = [];

      this.parse(result.output);

      if (this.isDebugging())
          this.logConnections();

      this.addToRelatedList('cmdb_tcp_connection', this.cmdb_tcp_connection, 'computer', 'pid');
  },

  parse: function(output) {
      // this does nothing, the extended guys should do any parsing stuff
  },

  after: function(){
      if (gs.nil(this.getCmdbRecord()))
          return;

      // After the connections have gone through the reconciler, finish other tasks...
      new SncLayer7Connections(this.getCmdbRecord()).process();

      // Enumerate cluster IPs for cluster services listening on *
      new DiscoveryClusteredProcessHelper().layer7Connections(this.getCmdbRecord());

      // Start application mapping
      if (gs.getProperty('glide.discovery.application_mapping') == 'true')
          new SncSessionMate(this.getCmdbRecord()).process();

      var psh = new SncPrintServerHelper(this.getSensorName());
      psh.checkForPrintServer(this.getCmdbRecord());
  },

  addListener: function(dtcp) {
      var conStr = dtcp.getFromHost() + ":" + dtcp.getFromPort();
      var key = dtcp.getCommand() + "::" + conStr;

      if (this.listenerHash[key] || dtcp.getFromPort() == "0")
          return;

      // tracking one of them is enough
      this.listenerHash[key] = conStr;

      var connection = {};
      connection.command = dtcp.getCommand();
      connection.pid = dtcp.getPID();
      connection.from_ip = dtcp.getFromHost();
      connection.from_port = dtcp.getFromPort();
      connection.state = "LISTENING";

      this.cmdb_tcp_connection.push(connection);
  },

  addListeners: function(listeners) {
      for (var i = 0; i < listeners.length; i++)
          this.addListener(listeners[i]);
  },

  addConnection: function(dtcp) {
      var conStrFrom = dtcp.getFromHost() + ":" + dtcp.getFromPort();
      var conStrTo = dtcp.getToHost() + ":" + dtcp.getToPort();
      var key = dtcp.getCommand() + "::" + conStrFrom + "::" + conStrTo;

      if (this.connectionHash[key])
          return;

      // tracking one of them is enough
      this.connectionHash[key] = key;

      var connection = {};
      connection.command = dtcp.getCommand();
      connection.pid = dtcp.getPID();
      connection.from_ip = dtcp.getFromHost();
      connection.from_port = dtcp.getFromPort();
      connection.to_ip = dtcp.getToHost();
      connection.to_port = dtcp.getToPort();
      connection.state = "ESTABLISHED";

      this.cmdb_tcp_connection.push(connection);
  },

  addConnections: function(connections) {
      for (var i = 0; i < connections.length; i++)
          this.addConnection(connections[i]);
  },

  logConnections: function() {
      // This will only be printed if DEBUG is turned on!
      for (var i = 0; i < this.cmdb_tcp_connection.length; i++) {
          var connection = this.cmdb_tcp_connection[i];

          gs.log(connection.pid + " " + connection.command);
          if (connection.state == "LISTENING")
              gs.log("    " + connection.state + "   " + connection.from_ip + ":" + connection.from_port);
          else
              gs.log("    " + connection.state + "   " + connection.from_ip + ":" + connection.from_port 
                      + "->" + connection.to_ip + ":" + connection.to_port);
      }
  },

  type: "DiscoveryProcessConnectionsSensor"
});

Sys ID

186137090a0a0b2e00edca3e2721d160

Offical Documentation

Official Docs: