Skip to content

Commit 1bbda12

Browse files
committed
Implement statsd metrics
1 parent 9299347 commit 1bbda12

File tree

8 files changed

+65
-27
lines changed

8 files changed

+65
-27
lines changed

README.md

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,29 @@
1-
ng-fs
2-
=====
1+
2+
Filesystem API
3+
==============
34

45
Filesystem API server
56

6-
Test
7-
----
7+
Requires `Authorization: <token>` header for every request.
8+
9+
Supported Methods:
10+
11+
- `GET /my-file.txt` - Get contents of my-file.txt
12+
- `POST /my-file.txt` - Create my-file.txt with request body
13+
- `PUT /my-file.txt` - Update my-file.txt with request body
14+
- `DELETE /my-file.txt` - Delete my-file.txt
15+
16+
Provides metrics for requests to a statsd server. Configurable via environment variables.
17+
18+
See `lib/config.js` for specifics.
19+
20+
Tests
21+
-----
822

923
`npm test`
24+
25+
Todo
26+
----
27+
28+
- Synchronise files across filesystem nodes..
29+
- Provide timing metrics to statsd

bin/fs-api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
require('../lib/fs-api.js');

lib/config.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
exports.credentials = {
2+
port: process.env.PORT || 8000,
3+
files: process.env.FILES_DIR || "../files",
4+
auth: process.env.AUTH || "ng-fs",
5+
statsd_ip: process.env.STATSD_IP || "",
6+
statsd_port: process.env.STATSD_PORT || 8125
7+
}
8+
9+
exports.metrics = new (require('lynx'))(exports.credentials.statsd_ip, exports.credentials.statsd_port);

lib/credentials.json

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

bin/fs-api.js renamed to lib/fs-api.js

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,33 @@ var http = require('http'),
22
fs = require('fs'),
33
formidable = require('formidable'),
44
path = require('path'),
5-
credentials = require('../lib/credentials'),
65
spawn = require('child_process').spawn,
7-
async = require('async');
6+
async = require('async'),
7+
config = require('./config');
88

99
http.createServer(function (req, res) {
10-
if (!req.headers['authorization'] || req.headers['authorization'] != credentials.auth) {
10+
if (!req.headers['authorization'] || req.headers['authorization'] != config.credentials.auth) {
11+
config.metrics.increment('fs_api.requests.failed.'+req.headers['authorization']);
12+
1113
res.writeHead(401);
1214
res.end();
1315

1416
return;
1517
}
1618

17-
var filePath = path.join(credentials.files, path.normalize(req.url));
19+
var filePath = path.join(config.credentials.files, path.normalize(req.url));
1820
var method = req.method.toLowerCase();
1921

22+
// todo config.metrics.timing (would need hooks on response end.)
23+
config.metrics.increment('fs_api.requests.'+method);
24+
25+
if (method == 'head') {
26+
res.writeHead(501);
27+
res.end();
28+
29+
return;
30+
}
31+
2032
if (method == 'post' || method == 'put') {
2133
var mkdirp = spawn('mkdir', ['-p', filePath]);
2234
mkdirp.on('close', function () {
@@ -69,6 +81,6 @@ http.createServer(function (req, res) {
6981
stream.pipe(res);
7082
return;
7183
}
72-
}).listen(credentials.port);
84+
}).listen(config.credentials.port);
7385

74-
console.log('HTTP server listening to', credentials.port);
86+
console.log('HTTP server listening to', config.credentials.port);

test/delete.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
var request = require('supertest');
22
var http = require('http');
33
var should = require('should');
4-
var credentials = require('../lib/credentials');
4+
var config = require('../lib/config');
55

66
require('../bin/fs-api');
77

8-
request = request('http://127.0.0.1:'+credentials.port);
8+
request = request('http://127.0.0.1:'+config.credentials.port);
99

1010
describe('delete', function () {
1111
it('post file', function (done) {
1212
request
1313
.post('/a/b/c')
14-
.set('Authorization', credentials.auth)
14+
.set('Authorization', config.credentials.auth)
1515
.attach('todelete.txt', 'test/fixtures/test.txt')
1616
.expect(201)
1717
.end(function(err, res) {
@@ -23,15 +23,15 @@ describe('delete', function () {
2323
it('deletes the file', function (done) {
2424
request
2525
.delete('/a/b/c/todelete.txt')
26-
.set('Authorization', credentials.auth)
26+
.set('Authorization', config.credentials.auth)
2727
.expect(201)
2828
.end(done);
2929
});
3030

3131
it('gets 404', function (done) {
3232
request
3333
.get('/a/b/c/todelete.txt')
34-
.set('Authorization', credentials.auth)
34+
.set('Authorization', config.credentials.auth)
3535
.expect(404)
3636
.end(done)
3737
})

test/get.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
var request = require('supertest');
22
var http = require('http');
33
var should = require('should');
4-
var credentials = require('../lib/credentials');
4+
var config = require('../lib/config');
55

66
require('../bin/fs-api');
77

8-
request = request('http://127.0.0.1:'+credentials.port);
8+
request = request('http://127.0.0.1:'+config.credentials.port);
99

1010
describe('get', function () {
1111
it('gets 404', function (done) {
1212
request
1313
.get('/nonexisting/file.txt')
14-
.set('Authorization', credentials.auth)
14+
.set('Authorization', config.credentials.auth)
1515
.expect(404)
1616
.end(done);
1717
});

test/save.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
var request = require('supertest');
22
var http = require('http');
33
var should = require('should');
4-
var credentials = require('../lib/credentials');
4+
var config = require('../lib/config');
55

66
require('../bin/fs-api');
77

8-
request = request('http://127.0.0.1:'+credentials.port);
8+
request = request('http://127.0.0.1:'+config.credentials.port);
99

1010
describe('post', function () {
1111
it('post file', function (done) {
1212
request
1313
.post('/a/b/c')
14-
.set('Authorization', credentials.auth)
14+
.set('Authorization', config.credentials.auth)
1515
.attach('test.txt', 'test/fixtures/test.txt')
1616
.expect(201)
1717
.end(function(err, res) {
@@ -23,7 +23,7 @@ describe('post', function () {
2323
it('gets back the file', function (done) {
2424
request
2525
.get('/a/b/c/test.txt')
26-
.set('Authorization', credentials.auth)
26+
.set('Authorization', config.credentials.auth)
2727
.expect(200)
2828
.expect('hello there!')
2929
.end(done);

0 commit comments

Comments
 (0)