# Metrics

[![pipeline status](https://it-devops-01.br-edv.brnet.int/general/metrics/badges/master/pipeline.svg)](https://it-devops-01.br-edv.brnet.int/general/metrics/commits/master)
[![coverage report](https://it-devops-01.br-edv.brnet.int/general/metrics/badges/master/coverage.svg)](https://it-devops-01.br-edv.brnet.int/general/metrics/commits/master)
[![Quality Gate Status](https://it-devops-01.br-edv.brnet.int:8999/api/project_badges/measure?project=metrics&metric=alert_status)](https://it-devops-01.br-edv.brnet.int:8999/dashboard?id=metrics)

A small express middleware to get base metrics for any node.js app.


## Installation

- `npm config set @br:registry https://npm.br-edv.brnet.int`
- `npm install --save @br/metrics`

## Usage

`import { Metrics } from '@br/metrics'`  
`let metrics = new Metrics(options)`

Note: The options Part may be omitted, as all parts are optional.  

Before your Routes:  
`router.use(metrics.collect)`  

And to enable the *_metrics*-Endpoint:  
`router.get('/_metrics', metrics.endpoint)`  

### Options

The Following Options may be used to configure the behaviour.

- ignore: A String Array with routes to ignore, e.g. ['/foo'] . Default: []. Important: */_metrics* and */favicon.ico* are always ignored
- disableErrorCounter: Disable the Error Counter. Default: false
- disableRouteCounter: Disable the Route Counter. Default: false
- disableDurationCounter: Disable the Duration Counter. Default: false
- disableDefaultMetrics: Disable the Collection of default metrics. Default: false

#### Default Metrics

- process_cpu_user_seconds_total Total user CPU time spent in seconds.
- process_cpu_system_seconds_total Total system CPU time spent in seconds.
- process_cpu_seconds_total Total user and system CPU time spent in seconds.
- process_start_time_seconds Start time of the process since unix epoch in seconds.
- process_resident_memory_bytes Resident memory size in bytes.
- nodejs_eventloop_lag_seconds Lag of event loop in seconds.
- nodejs_eventloop_lag_min_seconds The minimum recorded event loop delay.
- nodejs_eventloop_lag_max_seconds The maximum recorded event loop delay.
- nodejs_eventloop_lag_mean_seconds The mean of the recorded event loop delays.
- nodejs_eventloop_lag_stddev_seconds The standard deviation of the recorded event loop delays.
- nodejs_eventloop_lag_p50_seconds The 50th percentile of the recorded event loop delays.
- nodejs_eventloop_lag_p90_seconds The 90th percentile of the recorded event loop delays.
- nodejs_eventloop_lag_p99_seconds The 99th percentile of the recorded event loop delays.
- nodejs_active_handles Number of active libuv handles grouped by handle type. Every handle type is C++ class name.
- nodejs_active_handles_total Total number of active handles.
- nodejs_active_requests Number of active libuv requests grouped by request type. Every request type is C++ class name.
- nodejs_active_requests_total Total number of active requests.
- nodejs_heap_size_total_bytes Process heap size from Node.js in bytes.
- nodejs_heap_size_used_bytes Process heap size used from Node.js in bytes.
- nodejs_external_memory_bytes Node.js external memory size in bytes.
- nodejs_heap_space_size_total_bytes Process heap space size total from Node.js in bytes.
- nodejs_heap_space_size_used_bytes Process heap space size used from Node.js in bytes.
- nodejs_heap_space_size_available_bytes Process heap space size available from Node.js in bytes.
- nodejs_version_info Node.js version info.

## Examples

You can find prebuilt examples in the fitting folder.

Just call `node examples/dist/server.js 3000` to start a Test-Server on Port 3000.

Then use your Browser to call the Endpoints:  

- /foo
- /bar
- /404
- /401

And check the results on the Endpoint */_metrics*