Skip to content

Commit

Permalink
further simplify
Browse files Browse the repository at this point in the history
  • Loading branch information
ianshward committed Jul 5, 2012
1 parent ad88fae commit ce16eef
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 44 deletions.
2 changes: 1 addition & 1 deletion checks/memorypct.check
@@ -1,7 +1,7 @@
var exec = require('child_process').exec;

exports.definition = {
"name": "MemoryPercentUsed",
"metricname": "MemoryPercentUsed",
"namespace": "System/Linux",
"unit": "Percent",
"interval": 60000,
Expand Down
2 changes: 1 addition & 1 deletion checks/rootdisk.check
@@ -1,7 +1,7 @@
var exec = require('child_process').exec;

exports.definition = {
"name": "DiskRootPercentUsed",
"metricname": "DiskRootPercentUsed",
"namespace": "System/Linux",
"unit": "Percent",
"interval": 60000,
Expand Down
23 changes: 16 additions & 7 deletions index.js
Expand Up @@ -15,7 +15,7 @@ var optimist = require('optimist')
'See CloudWatch API docs for more detail at:\n' +
' http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/')
.alias('region', 'r')
.alias('metric', 'm')
.alias('metricname', 'm')
.alias('unit', 'u')
.alias('value', 'v')
.alias('instanceid', 'i')
Expand Down Expand Up @@ -49,9 +49,18 @@ if (!options.awskey ||
var Check = require('./lib/Check.js')(options);

var active = options.activeChecks;
_(fs.readdirSync('./checks')).each(function(name) {
if (name.substr(-6) == '.check' && _.indexOf(active, name.split(/\.([^.]*)$/)[0]) > -1) {
var def = require('./checks/' + name);
var check = new Check(def);
}
});
if (options.daemon) {
_(fs.readdirSync('./checks')).each(function(name) {
if (name.substr(-6) == '.check' && _.indexOf(active, name.split(/\.([^.]*)$/)[0]) > -1) {
var check = new Check(require('./checks/' + name).definition);
}
});
} else {
var check = new Check({
metricname: options.m,
namespace: options.n,
unit: options.u,
value: options.v,
instanceid: options.i
});
}
51 changes: 16 additions & 35 deletions lib/Check.js
@@ -1,61 +1,42 @@
var aws = require("aws-lib");
var aws = require('aws-lib');
var _ = require('underscore');

module.exports = function(options) {
var cw = aws.createCWClient(options.awskey, options.awssecret);

var Check = function Check(params) {
var that = this;
this.interval = params.definition.interval;
this.command = params.definition.command;
this.unit = params.definition.unit;
this.name = params.definition.name;
this.namespace = params.definition.namespace;

_(params).each(function(v, k) {
that[k] = v;
});
if (options.daemon) {
setInterval(function() { that.emit('metric'); }, this.interval);

this.on('metric', function() {
this.command(function(res) {
// Submit to CloudWatch
that.instance = res.instance;
that.value = res.value;
that.submit(options, res);
});
});
} else {
Submit(options, Prepare(options));
this.submit(options);
}
};

Check.prototype = new process.EventEmitter();

Check.prototype.submit = function(config, res) {
var data = {};
data.instanceid = res.instance;
data.unit = this.unit;
data.metricname = this.name;
data.namespace = this.namespace;
data.value = res.value;
data = Prepare(data);
Submit(config, data);
};

var Prepare = function(data) {
var params = {};
params['Namespace'] = data.namespace;
params['MetricData.member.1.MetricName'] = data.metricname;
params['Namespace'] = this.namespace;
params['MetricData.member.1.MetricName'] = this.metricname;
params['MetricData.member.1.Dimensions.member.1.Name'] = 'InstanceId';
params['MetricData.member.1.Dimensions.member.1.Value'] = data.instanceid;
params['MetricData.member.1.Unit'] = data.unit;
params['MetricData.member.1.Value'] = data.value;
return params;
}

var Submit = function(config, data) {
this.awskey = config.awskey;
this.awssecret = config.awssecret;
// Submit to CloudWatch
cw.call("PutMetricData", data, function(result) {
params['MetricData.member.1.Dimensions.member.1.Value'] = this.instanceid;
params['MetricData.member.1.Unit'] = this.unit;
params['MetricData.member.1.Value'] = this.value;
cw.call("PutMetricData", params, function(result) {
console.log(JSON.stringify(result));
});
}
};

return Check;
}

0 comments on commit ce16eef

Please sign in to comment.