/* 
   The connector maintains "statistics" -- internal counters recording certain
   important method calls and database operations.
   
   Statistics are stored hierarchically under a global object.
   
   API-level counter names begin with "api", while adapter-level (SPI) counters
   begin with "spi" followed by the name of the adapter.
   
   It is possible to access the statistics through an HTTP server; first, 
   start the server from within application code, then send it a request. 
   The URL pathname components of the request correspond to nodes in the
   hierarchy; "/" corresponds to all statistics; "/spi/ndb" only to NDB 
   adapter-level statistics, and so forth.
   
   The application code itself can also make use of the statistics API to
   record app-level information.

   HOW TO ACCESS THE STATS API:
   var stats_module = require(path.join(api_dir, "stats.js"));
*/
  

/** Write complete global statistics to the console.
 *  IMMEDIATE
 *  
 *  No return value
 */
 stats_module.peek();
 

/** Return an object containing a statistics tree.
 *  IMMEDIATE
 *
 *  The domain is specified as an array literal
 *  query([]);               // return global statistics
 *  query(["spi"]);          // return all SPI-level statistics
 *  query(["spi","ndb"]);    // return only statistics under spi.ndb
 *
 */
 stats_module.query(domain);
 
 
 /** Start a web server to service statistics queries over HTTP.
  *  ASYNCHRONOUS
  *  
  *  Arguments (port, host, callback) are passed onward to http.server.listen().
  *  
  *  The request pathname is interpreted as a hierarchical stats domain name.
  *  The response will be returned as a JSON serialized object.
  *
  *  RETURNS an http.server referring to the running server.
  */
  stats_module.startStatsServer(port, host, callback); 
  

 /** Stop all running statistics web servers.
  *  ASYNCHRONOUS 
  *
  *  Each server will emit a "close" event when finished.
  *
  */
  stats_module.stopStatsServers();
  

/********* WRITING APPLICATION-LEVEL STATISTICS **********/

/**
 * To maintain statistics, a module keeps its own statistics object,
 * and registers that object with the stats module.
 
/** Register statistics for a domain.
 *  IMMEDIATE
 *
 *  EXAMPLES:
 *    stats_module.register(my_stats, "app");
 *    stats_module.register(module_stats, "app","sub_module_1");
 *
 */
  register(stats_container, domain_part, ... );
