Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/feathersjs-ecosystem/feathers-profiler
Log feathers service calls and gather profile information on them.
https://github.com/feathersjs-ecosystem/feathers-profiler
Last synced: about 2 months ago
JSON representation
Log feathers service calls and gather profile information on them.
- Host: GitHub
- URL: https://github.com/feathersjs-ecosystem/feathers-profiler
- Owner: feathersjs-ecosystem
- License: mit
- Created: 2016-12-01T13:47:39.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2017-09-27T20:14:20.000Z (over 7 years ago)
- Last Synced: 2024-10-01T08:55:01.384Z (3 months ago)
- Language: JavaScript
- Size: 115 KB
- Stars: 27
- Watchers: 5
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-feathersjs - feathers-profiler
README
# feathers-profiler
[![Greenkeeper badge](https://badges.greenkeeper.io/feathersjs/feathers-profiler.svg)](https://greenkeeper.io/)
[![Build Status](https://travis-ci.org/feathersjs/feathers-profiler.png?branch=master)](https://travis-ci.org/feathersjs/feathers-profiler)
[![Code Climate](https://codeclimate.com/github/feathersjs/feathers-profiler/badges/gpa.svg)](https://codeclimate.com/github/feathersjs/feathers-profiler)
[![Test Coverage](https://codeclimate.com/github/feathersjs/feathers-profiler/badges/coverage.svg)](https://codeclimate.com/github/feathersjs/feathers-profiler/coverage)
[![Dependency Status](https://img.shields.io/david/feathersjs/feathers-profiler.svg?style=flat-square)](https://david-dm.org/feathersjs/feathers-profiler)
[![Download Status](https://img.shields.io/npm/dm/feathers-profiler.svg?style=flat-square)](https://www.npmjs.com/package/feathers-profiler)> Log service method calls and gather profile information on them.
## Installation
```
npm install feathers-profiler --save
```## Example
```
npm start
```## Documentation
Service calls transported by websockets are not passed through Express middleware.
`feathers-profiler` logs service calls from all transports
and gathers performance information on them.##### `import { profiler, getProfile, clearProfile, getPending, timestamp } from 'feathers-profiler';`
### `app.configure(profiler(options))`
Start logging and/or profiling service calls.
__Options:__
- logger
- defaults to logging on `console.log`.
- `null` disables logging.
- `require('winston')` routes logs to the popular winston logger.
- `{ log: payload => {} }` routes logs to your customized logger.
- logMsg
- default message is shown [below](#logs-service-calls).
- `hook => {}` returns a custom string or object payload for the logger.
`hook._log` contains log information;
`hook.original` and `hook.error` contain error information.
- stats
- `null` or `'none'` profile information will not be gathered.
- `total` gathers profile information by service and method only. The default.
- `detail` gathers profile information by characteristics of the call.
- statsDetail
- default is shown [below](#gathers-profile-information-on-service-calls).
- `hook => {}` returns a custom category for the call.### `getProfile()`
Returns profile information as an object.
### `clearProfile()`
Re-initializes the profile information.
The profile internal counts may not add up perfectly unless `getPending() === 0`.
### `getPending()`Returns the number of currently pending service calls.
### `timestamp()`
Returns a timestamp suitable for logging to the console.
## Example
```js
const feathers = require('feathers');
const rest = require('feathers-rest');
const sockets = require('feathers-socketio');
const hooks = require('feathers-hooks');
const bodyParser = require('body-parser');
const errorHandler = require('feathers-errors/handler');const { profiler, getProfile, getPending } = require('feathers-profiler');
// Initialize the application
const app = feathers()
.configure(rest())
.configure(sockets())
.configure(hooks())
.use(bodyParser.json()) // Needed for parsing bodies (login)
.use(bodyParser.urlencoded({ extended: true }))
.use('users', { ...}) // services
.use('messages', { ... })
.configure(profiler({ stats: 'detail' }) // must be configured after all services
.use(errorHandler());
// ... once multiple service calls have been made
console.log('pending', getPending());
console.log(require('util').inspect(getProfile(), {
depth: 5,
colors: true
}));
```## Usage
### Logs service calls
The log message may be customized. The default log message includes:
- Service name, method and transport provider.
- Elapsed time between the method being called and its completion.
- Number of service calls pending when call was made.
- Where service call failed and why.![logs](./docs/profiler-log.jpg)
### Gathers profile information on service calls
Profile information is:
- Grouped by service and method.
- Grouped by characteristics of the call. These may be customized.
- Average pending count provides information on how busy the server was during these calls.
- Average, min and max elapsed time provide information on how responsive the server is.
- The number of returned items provides information on how large the `find` results were.![stats](./docs/profiler-stats.jpg)
## License
Copyright (c) 2016
Licensed under the [MIT license](LICENSE).