npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

meteor_server_info

v1.2.7

Published

A NPM version of the Atmosphere percolate:meteor_server_info package.

Downloads

46

Readme

Meteor server info

  • A NPM version (derivative work) of percolate:server-info
  • Rewritten in TypeScript 3 for Meteor 1.6-1.8.1
  • Without the AWS-specific and extra sections, not relevant for most usages.
  • With 3 original Node.JS EventLoop metrics collectors (see "Configuration")

Build Status codecov Known Vulnerabilities FOSSA Status

Usage

Once installed and configured, the package provides

  • a public metrics documentation route, available by default on /serverInfo/doc where all exposed metrics are documented
  • a metrics values route available with HTTP Basic authentication, by default on /serverInfo, like the following one:

Example Meteor Server Info result

Installation

  • Like the original version, this project needs the MDG Facts package, but not the facts-uipackage. So from the project directory, add both dependencies:
meteor add facts
meteor yarn add meteor_server_info
  • Then, in the main JS file of the server part of the application, add code to initialize the package:
import { ServerInfo } from "meteor_server_info";

Meteor.startup(function () {
  const serverInfo = new ServerInfo(Meteor, WebApp, MongoInternals, Facts);
  serverInfo.register();
});
  • Edit the Meteor settings, at least to change the user and password.
  • Run your application normally.

Development installation

To work on the package, you will probably not want to use it via NPM/Yarn. In that case:

  • do NOT add it to your package.json
  • clone it in the import/server/ directory of your project,
  • import its dependencies with meteor yarn
  • build documentation with yarn && yarn doc. The documentation will be built in the out/ directory.
  • compile with meteor yarn ts-compile, lint with meteor yarn ts-lint and run tests with meteor yarn test-ci

To use your development version of the module, import it locally in your application code. You will have access to serverInfo from meteor shell.

// Heed the "./" import.
import { ServerInfo } from "./meteor_server_info";

Meteor.startup(function () {
  const serverInfo = new ServerInfo(Meteor, WebApp, MongoInternals, Facts);
  serverInfo.register();
  global.serverInfo = serverInfo;
});

That way, any time you recompile the module, you application will notice the JS changes and rebuild/restart itself.

Configuration

The packages takes configuration from Meteor.settings, in which it uses the following server keys:

  • path: the path on which the information is made available. Defaults to /serverInfo, unlike the original version which defaulted to /info.
  • user: the user account for the HTTP Basic authentication securing access. Defaults to insecure.
  • pass: the password for the user account. Defaults to secureme.
  • verbose: enable console logging. Defaults to false.
  • eventLoopStrategy: the strategy to use to instrument the event loop and/or statistical CPU usage
    • "els": a set of event-loop metrics provided by the event-loop-stats package. Cheap and accurate, this is the recommended collector.
    • "nr": inspired by NewRelic "CPU time per tick", an intuitive metric collecting instantaneous CPU usage across ticks, based on a Dynatrace article, tracing each tick of the event loop in JavaScript code, which makes it rather costly since it disables the event loop "poll phase wait" optimization to achieve accuracy: expect 8% CPU load.
    • false, the event loop metrics collection is disabled, to keep costs at an absolute minimum like the legacy MeteorServerInfo.

The package previously included a "cheap" collector based on the PM2 / pebble/event-loop-lag logic, but this has been superseded by the ELS collector.

Usage note

Metrics exposed by the module can easily be imported to Grafana using the http plugin and a Telegraf import. Be sure to import data from all your Meteor server instances, since metrics are reported per-server, not per-database.

Note that since the nr collector disables the event loop poll phase wait optimization, the idle ticks/second rate will be around 900 and go lower with increased load. There is a tradeoff to be done: CPU cost vs accuracy.

The high cost of this strategy is a consequence of the limitations of the Node.JS event loop JavaScript API, requiring workarounds. For accurate metrics with lower metric acquisition cost, a binary agent is required, like the ELS collector, or commercial offerings: AppDynamics, Dynatrace, NewRelic and others offer this type of solution, the tradeoff in that case being CPU cost vs monthly SaaS cost.

License

As the original percolate:server-info package was licensed under the permissive MIT license, this derivative work has been relicensed under the General Public License version 3 or later (SPDX: GPL-3.0+).

FOSSA Status

Changelog

  • 1.2.7
    • Use base version of event-loop-stats now that fork has been merged.
  • 1.2.6
    • ElsCounter now includes a LoopCountPerSecondSinceLastFetch building an average between fetches, and reset on each fetch.
    • BC break: Removed CheapCounter and CostlyCounter, entirely superseded by ElsCounter
    • Garbage collection now uses gc-stats 1.4.0 stable version.
    • tickLagMax renamed to loopLagMaxMsecSinceLastFetch
    • New doc/NodeCounters.md detailing the rationale for the changes since 1.2.5.
    • TypeScript 3.5, Node 12 types, other minor dependency updates.
  • 1.2.5
    • Native event loop metrics from package event-loop-stats as a more efficient alternative to CostlyCounter and NrCounter.
    • As a consequence, those are now deprecated and will be removed no later than version 1.3.
    • CheapCounter metrics now return a high-resolution duration instead of a struct.
    • Dev API: interface ICounter removed,
  • 1.2.4
    • Same as 1.2.3, but also working on Meteor 1.8.1
    • Session info are no longer null on Meteor 1.8.1
    • Socket metrics also work in meteor run mode on Meteor 1.8.1
  • 1.2.3
    • New garbage collector metrics from package gc-stats.
    • TypeScript 3.4.
  • 1.2.2
    • New tickLagMax in NrCounter. Other metrics renamed and reworded for intelligibility.
    • TypeScript 3.3.
    • Over 70% new test coverage for NrCounter and CounterBase.
  • 1.2.1
    • Node.JS EventLoop and CPU metrics, 3 strategies at different accuracy and cost levels
    • TypeScript 3.2.
    • Documentation converted from Jsdoc to Typedoc.
    • 100% test coverage of NodeInfo and SessionInfo.
  • 1.2.0
    • Converted to TypeScript 3, with increased coverage
    • Compatibility with Meteor 1.7 and 1.8.
  • 1.1.2
    • updated documentation.
    • Travis CI tests.
    • CodeCov coverage analysis.
  • 1.1.1
    • include RAM / CPU metrics.
  • 1.0.1
    • added an explicit dev dependency on marked 0.3.9 to work around https://github.com/jsdoc3/jsdoc/issues/1489 - can be removed once jsdoc updates its dependency to that level.
    • updated JsDoc to 3.5.5.
    • fixed JsDoc configuration so that npm run doc actually works
  • 1.0.0: initial version
    • For Meteor 1.6.x