/node-kstat

A node.js addon for reading Solaris kstats

Primary LanguageC++MIT LicenseMIT

kstat, a node.js addon for reading kstats
-----------------------------------------

This is a simple node.js addon that allows one to read kernel statistics via
the kstat framework on Solaris.  The "kstat" module exports a single class,
"Reader" that has the following methods:

 Reader():  Takes an optional object specifying the kstats to read.  This
            object may have the following members:

            class    =>  optional string denoting class of kstat(s) to read
            module   =>  optional string denoting module of kstat(s) to read
            name     =>  optional string denoting name of kstat(s) to read
            instance =>  optional integer denoting instance of kstat(s) to read

            Together, these members form a specification of kstats to read.

 read():    Returns an array of kstats that match the specification with
            which the reader instance was constructed *and* an optional
            specification passed to this function.  Each element of the
            array is an object that contains the following members:
            
            class    =>  string denoting class of kstat
            module   =>  string denoting module of kstat
            name     =>  string denoting name of kstat
            instance =>  integer denoting instance of kstat
            snaptime =>  nanoseconds since boot of this snapshot
            data     =>  an object containing the named kstat data itself

For example, here is a simple node.js program that dumps the kstats of
class 'mib2':

  var kstat = require('kstat');
  var sys = require('sys');
  var reader = new kstat.Reader({ 'class': 'mib2' } );
  sys.puts(sys.inspect(reader.read()));

Here is a the same program that reads only the 'mib2' class kstats from
the 'icmp' module:

  var kstat = require('kstat');
  var sys = require('sys');
  var reader = new kstat.Reader({ 'class': 'mib2', module: 'icmp' } );
  sys.puts(sys.inspect(reader.read()));

Finally, here is a simple program that prints the number of ICMP datagrams
received per second:

  var kstat = require('kstat');
  var sys = require('sys');
  var reader = new kstat.Reader({ 'class': 'mib2', module: 'icmp' } );

  var data = [];
  var gen = 0;

  setInterval(function() {
        data[gen] = reader.read()[0];
        gen ^= 1;

        if (!(data[0] && data[1]))
                return;

          sys.puts(data[gen ^ 1].data.inDatagrams - data[gen].data.inDatagrams);
  }, 1000);