@gasket/plugin-metrics

Collect metrics for gasket commands

Usage no npm install needed!

<script type="module">
  import gasketPluginMetrics from 'https://cdn.skypack.dev/@gasket/plugin-metrics';
</script>

README

@gasket/plugin-metrics

Enables plugins to collect metrics about an project when Gasket commands are invoked.

NOTE: Metrics are not collected by gasket. The metrics lifecycle exists so that you can track metrics and usage of gasket within your own organization.

Installation

New apps

gasket create <app-name> --plugins @gasket/plugin-metrics

Existing apps

npm i @gasket/plugin-metrics

Modify plugins section of your gasket.config.js:

module.exports = {
  plugins: {
    add: [
+      '@gasket/plugin-metrics'
    ]
  }
}

Command Flags

--no-record

Metrics are available for all Gasket project commands. However, if you wish to not invoke the metrics lifecycle for certain commands or situations, such as a during a CICD process, you can run the command with the --no-record flag.

Lifecycles

metrics

The usage of gasket commands can be tracked by a plugin using the metrics lifecycle hook. It is important to note that this does not block the execution of the command.

const fetch = require('@gasket/fetch');

module.exports = {
  name: 'example',
  hooks: {
    /**
     * Hook the metrics lifecycle and pushed data to a collection endpoint
     *
     * @param {Gasket} gasket - The Gasket API
     * @param {Object} data - Collected metrics
     * @returns {Object}
     */
    async metrics(gasket, data) {
      const url = 'https://some.example.api/endpoint';

      await fetch(url, {
        method: 'POST',
        body: JSON.stringify(data),
        headers: {
          'Content-Type': 'application/json'
        }
      });
    }
  }
}

The collected metrics data consists of the following information:

{
  "name": "name in package.json",
  "version": "version in package.json",
  "gasket": {
    "@gasket/literally-any-repo": "that is installed"
  },
  "repository": "git repository",
  "branch": "git branch",
  "config": {
    "additional keys": "used in gasket.config.js"
  },
  "system": {
    "platform": "os.platform()",
    "release": "os.release()",
    "arch": "os.arch()"
  },
  "env": "NODE_ENV",
  "argv": "Literally the args that you passed to gasket",
  "time": "Date.now()",
  "cmd": "The Gasket command that was run"
}

License

MIT