summaryrefslogtreecommitdiffstats
path: root/tasks/metrics.js
diff options
context:
space:
mode:
authorkpdecker <kpdecker@gmail.com>2013-08-25 14:14:33 -0500
committerkpdecker <kpdecker@gmail.com>2013-08-25 14:14:33 -0500
commit672aeda17f9309ad7e4d31ef1c3b9a302fbb5baf (patch)
tree7459fe83e58ae9d12d2e699eaa46528587015bc8 /tasks/metrics.js
parent74369f724c1cf5d658736bd581348677f464f76c (diff)
downloadhandlebars.js-672aeda17f9309ad7e4d31ef1c3b9a302fbb5baf.zip
handlebars.js-672aeda17f9309ad7e4d31ef1c3b9a302fbb5baf.tar.gz
handlebars.js-672aeda17f9309ad7e4d31ef1c3b9a302fbb5baf.tar.bz2
Metrics collection framework
Diffstat (limited to 'tasks/metrics.js')
-rw-r--r--tasks/metrics.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/tasks/metrics.js b/tasks/metrics.js
new file mode 100644
index 0000000..c4a202b
--- /dev/null
+++ b/tasks/metrics.js
@@ -0,0 +1,63 @@
+var _ = require('underscore'),
+ async = require('async'),
+ git = require('./util/git'),
+ Keen = require('keen.io'),
+ metrics = require('../bench');
+
+module.exports = function(grunt) {
+ grunt.registerTask('metrics', function() {
+ var done = this.async(),
+ execName = grunt.option('name'),
+ events = {},
+
+ projectId = process.env.KEEN_PROJECTID,
+ writeKey = process.env.KEEN_WRITEKEY,
+ keen;
+
+ if (!execName && projectId && writeKey) {
+ keen = Keen.configure({
+ projectId: projectId,
+ writeKey: writeKey
+ });
+ }
+
+ async.each(_.keys(metrics), function(name, complete) {
+ if (/^_/.test(name) || (execName && name !== execName)) {
+ return complete();
+ }
+
+ metrics[name](grunt, function(data) {
+ events[name] = data;
+ complete();
+ });
+ },
+ function() {
+ if (!keen) {
+ return done();
+ }
+
+ emit(keen, events, function(err, res) {
+ if (err) {
+ throw err;
+ }
+
+ grunt.log.writeln('Metrics recorded.');
+ done();
+ });
+ });
+ });
+};
+function emit(keen, collections, callback) {
+ git.commitInfo(function(err, info) {
+ _.each(collections, function(collection) {
+ _.each(collection, function(event) {
+ if (info.tagName) {
+ event.tag = info.tagName;
+ }
+ event.sha = info.head;
+ });
+ });
+
+ keen.addEvents(collections, callback);
+ });
+}