Skip to content

Commit fa4f3f5

Browse files
committed
Merge pull request #3 from goenning/master
unit tests, linter, api change, pg & redis providers (draft), updated ui and more
2 parents 8f9ffff + 33fc10d commit fa4f3f5

33 files changed

+817
-254
lines changed

.DS_Store

6 KB
Binary file not shown.

.eslintignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ui
2+
coverage

.eslintrc.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"extends": "eslint:recommended",
3+
"env": {
4+
"node": true,
5+
"es6": true,
6+
"mocha": true
7+
},
8+
"rules": {
9+
"semi": [2, "always"],
10+
"no-unused-vars": ["error", { "vars": "all", "args": "none" }],
11+
"quotes": ["error", "single", { "avoidEscape": true } ],
12+
"space-before-function-paren": ["error", "never"]
13+
}
14+
}

.gitignore

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
logs
2+
*.log
3+
npm-debug.log*
4+
pids
5+
*.pid
6+
*.seed
7+
*.rdb
8+
*.DS_STORE
9+
lib-cov
10+
coverage
11+
.nyc_output
12+
.grunt
13+
.lock-wscript
14+
build/Release
15+
node_modules
16+
jspm_packages
17+
.npm
18+
.node_repl_history

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
[submodule "ui"]
22
path = ui
3-
url = git@github.com:MiniProfiler/ui.git
3+
url = https://github.com/MiniProfiler/ui.git

.travis.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
language: node_js
2+
node_js:
3+
- "4"
4+
- "5"
5+
- "stable"
6+
7+
before_script:
8+
- npm run lint
9+
10+
after_script:
11+
- npm run coverage
12+
- npm run update-coveralls
13+
- npm run check-coverage
14+
15+
notifications:
16+
email:
17+
on_success: never
18+
on_failure: change

README.md

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,72 @@
1+
##### `The project is still under development, the API will change! Use with caution. NPM package is currently outdated.`
2+
13
# node-miniprofiler
24

35
Node.js implementation of Stack Exchange's MiniProfiler
46

5-
### This is working but not yet considered production ready. Use with caution.
7+
[![Build](https://travis-ci.org/goenning/miniprofiler-node.svg)](https://travis-ci.org/goenning/miniprofiler-node)
8+
[![Coverage](https://coveralls.io/repos/github/goenning/miniprofiler-node/badge.svg?branch=master)](https://coveralls.io/github/goenning/miniprofiler-node?branch=master)
9+
![Dependencies](https://david-dm.org/goenning/miniprofiler-node.svg)
10+
![devDependencies](https://david-dm.org/goenning/miniprofiler-node/dev-status.svg#info=devDependencies)
11+
12+
## Installation (via [npm](https://npmjs.org/package/miniprofiler))
13+
14+
```bash
15+
$ npm install miniprofiler
16+
```
17+
18+
## Usage
19+
20+
### Simple usage using express.js
21+
22+
`server.js`
23+
24+
```javascript
25+
var express = require('express')
26+
, miniprofiler = require('miniprofiler')
27+
, app = express();
28+
29+
app.set('view engine', 'pug');
30+
app.use(miniprofiler.profile());
31+
32+
app.get('/', function(req, res) {
33+
req.miniprofiler.step('Step 1', function() {
34+
req.miniprofiler.step('Step 2', function() {
35+
res.render('home');
36+
});
37+
});
38+
});
39+
40+
app.listen(8080);
41+
```
42+
43+
`home.pug`
644

7-
# requirements
45+
```javascript
46+
doctype html
47+
html
48+
head
49+
title MiniProfiler Node.js Example
50+
body
51+
h1 Home Page
52+
| !{miniprofiler.include()}
53+
```
854

9-
Currently requires express and connect to run, because it uses `res.on('header', f)` to trigger storing of data, which is a connect thing.
55+
When visiting `localhost:8080`, you should see this.
1056

11-
# usage
57+
![](/examples/images/example0.png)
1258

13-
Clone this repo into your project's node_modules directory. You can also install from npm, but the package may be outdated: https://www.npmjs.org/package/miniprofiler.
59+
See [examples/express.js](/examples/express.js) for more examples.
1460

15-
Then see [connect_test.js](https://github.com/MiniProfiler/node/blob/master/connect_test.js) for example use.
61+
![](/examples/images/example1.png)
62+
![](/examples/images/example2.png)
1663

1764
# Want to help?
1865

19-
Things that need doing:
66+
Things to do:
2067

21-
- remove dependency from express and connect
68+
- support major web frameworks like: Express, Hapi, koa.js, Sails.js
69+
- add examples for every web frameworks
2270
- storing of client timings on first result postback (there's a todo in the `results` function about where to do this)
2371
- document more things
72+
- add providers for pg, mongodb, mysql, redis and more

connect_test.js

Lines changed: 0 additions & 26 deletions
This file was deleted.

examples/express.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
var miniprofiler = require('../lib/miniprofiler.js');
2+
var pg = require('pg');
3+
var redis = require('redis');
4+
5+
var express = require('express');
6+
var connString = 'postgres://postgres:postgres@localhost/miniprofiler';
7+
8+
var app = express();
9+
app.use(miniprofiler.express());
10+
app.use(miniprofiler.for.pg(pg));
11+
app.use(miniprofiler.for.redis(redis));
12+
13+
app.set('view engine', 'pug');
14+
app.set('views', './examples/views');
15+
16+
app.get('/', function(req, res) {
17+
req.miniprofiler.step('Step 1', function() {
18+
req.miniprofiler.step('Step 2', function() {
19+
res.render('home');
20+
});
21+
});
22+
});
23+
24+
app.get('/js-sleep', function(req, res) {
25+
req.miniprofiler.timeQuery('custom', 'Sleeping...', setTimeout, function() {
26+
res.send();
27+
}, 300);
28+
});
29+
30+
app.get('/redis-set-get', function(req, res) {
31+
var redisClient = redis.createClient();
32+
redisClient.set('customer', '[email protected]', function() {
33+
redisClient.get('customer', function(err, reply) {
34+
res.render('home');
35+
});
36+
});
37+
});
38+
39+
app.get('/pg-sleep', function(req, res) {
40+
pg.connect(connString, function(err, pgClient, done) {
41+
pgClient.query('SELECT pg_sleep(1)', [], function(err, result) {
42+
done();
43+
res.render('home');
44+
});
45+
});
46+
});
47+
48+
app.get('/all', function(req, res) {
49+
var redisClient = redis.createClient();
50+
req.miniprofiler.step('Waiting 1 second', function() {
51+
52+
pg.connect(connString, function(err, pgClient, done) {
53+
pgClient.query('SELECT pg_sleep(1)', [ ], function(err, result) {
54+
55+
req.miniprofiler.step('Get from cache', function() {
56+
57+
redisClient.set('customer', '[email protected]', function() {
58+
redisClient.get('key', function(err, reply) {
59+
res.render('home');
60+
});
61+
});
62+
63+
});
64+
65+
});
66+
});
67+
68+
});
69+
});
70+
71+
app.listen(8080);

examples/http.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
var http = require('http');
2+
var miniprofiler = require('../lib/miniprofiler.js');
3+
4+
var profile = miniprofiler.profile();
5+
6+
http.createServer(function(req, res) {
7+
profile(req, res, function() {
8+
req.miniprofiler.step('Step 1', function(){
9+
res.end('home');
10+
});
11+
});
12+
}).listen(8080);

0 commit comments

Comments
 (0)