Skip to content

Commit 7ef90e9

Browse files
committed
Replace moment date formatting with local version.
1 parent 934d161 commit 7ef90e9

File tree

5 files changed

+71
-5
lines changed

5 files changed

+71
-5
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ Usage:
88
argo()
99
.use(clf)
1010
.target("SOME URL")
11-
.list(3000)
11+
.listen(3000)
1212
```

format_date.js

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
var MONTH_NAMES = [
2+
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
3+
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
4+
];
5+
6+
// Pad a value with the `0` character until it's length is equal to
7+
// `len` or if no length is given pad to len=2.
8+
function pad(val, len) {
9+
val = String(val);
10+
len = len || 2;
11+
while (val.length < len) {
12+
val = '0' + val;
13+
}
14+
return val;
15+
}
16+
17+
// Formats dates to a common log formats time in strftime format
18+
// `%d/%b/%Y:%H:%M:%S %z.` Eg. 8/Dec/2018:14:47:51 -0500
19+
// See: https://en.wikipedia.org/wiki/Common_Log_Format
20+
function formatDate(date) {
21+
var offset = date.getTimezoneOffset();
22+
var tzOffset = (offset > 0 ? '-' : '+')
23+
+ pad(Math.floor(Math.abs(offset) / 60)
24+
* 100 + Math.abs(offset) % 60, 4);
25+
26+
return date.getDate() + '/'
27+
+ MONTH_NAMES[date.getMonth()]
28+
+ '/' + date.getFullYear()
29+
+ ':' + pad(date.getHours())
30+
+ ':' + pad(date.getMinutes())
31+
+ ':' + pad(date.getSeconds())
32+
+ ' ' + tzOffset;
33+
}
34+
35+
module.exports = formatDate;

index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
var Stream = require('stream');
2-
var moment = require('moment');
2+
var formatDate = require('./format_date');
33

44
module.exports = function(handle) {
55
handle('response', { affinity: 'sink' }, function(env, next) {
@@ -8,7 +8,7 @@ module.exports = function(handle) {
88
var res = env.response || env.target.response;
99
var UNKNOWN = '-';
1010
var ip = req.connection.remoteAddress;
11-
var date = '[' + moment(Date.now()).format('D/MMM/YYYY:HH:mm:ss ZZ') + ']';
11+
var date = '[' + formatDate(new Date()) + ']';
1212
var method = req.method;
1313
var url = req.url;
1414
var requestSummary = '"' + method + ' ' + url + '"';

package.json

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "Argo logging using CLF",
55
"main": "index.js",
66
"scripts": {
7-
"test": "echo \"Error: no test specified\" && exit 1"
7+
"test": "./node_modules/.bin/mocha test/"
88
},
99
"repository": {
1010
"type": "git",
@@ -24,6 +24,9 @@
2424
"url": "https://github.com/mdobson/argo-clf/issues"
2525
},
2626
"dependencies": {
27-
"moment": "~2.3.1"
27+
},
28+
"devDependencies": {
29+
"mocha": "^5.2.0",
30+
"moment": "^2.3.1"
2831
}
2932
}

test/format_date_test.js

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const assert = require('assert');
2+
const formatDate = require('../format_date');
3+
const moment = require('moment');
4+
5+
describe('Test formatDate', () => {
6+
7+
// Takes a `date` and asserts that moments and formatDate are equal.
8+
function assertDateEquals(date) {
9+
let dateString = moment(date).format('D/MMM/YYYY:HH:mm:ss ZZ');
10+
let dateStringNew = formatDate(date)
11+
assert.equal(dateString, dateStringNew);
12+
}
13+
14+
it('moment and formatDate should be equal for known date', () => {
15+
assertDateEquals(new Date('January 12, 1989 12:32:17 EST'));
16+
});
17+
18+
it('moment and formatDate should be equal for known date 0 date', () => {
19+
assertDateEquals(new Date(0));
20+
});
21+
22+
it('moment and formatDate should be equal for 100K random dates', () => {
23+
let interactions = 100000;
24+
for (let i=0; i<interactions; i++) {
25+
assertDateEquals(new Date(Math.random()* new Date().getTime()));
26+
}
27+
});
28+
});

0 commit comments

Comments
 (0)